From 87c1e225b9a77553fe620f6e48f4683fa1a26e30 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 24 Oct 2023 16:19:29 +0200 Subject: [PATCH 01/30] Added playwright e2e tests for svelte & react --- tests/playwright/.env.svelte | 1 + tests/playwright/.gitignore | 4 + tests/playwright/e2e/backspace-delete.spec.ts | 16 + tests/playwright/e2e/move-node.spec.ts | 22 + tests/playwright/package.json | 27 ++ tests/playwright/playwright.react.config.ts | 77 +++ tests/playwright/playwright.svelte.config.ts | 79 ++++ .../tests-examples/demo-todo-app.spec.ts | 437 ++++++++++++++++++ 8 files changed, 663 insertions(+) create mode 100644 tests/playwright/.env.svelte create mode 100644 tests/playwright/.gitignore create mode 100644 tests/playwright/e2e/backspace-delete.spec.ts create mode 100644 tests/playwright/e2e/move-node.spec.ts create mode 100644 tests/playwright/package.json create mode 100644 tests/playwright/playwright.react.config.ts create mode 100644 tests/playwright/playwright.svelte.config.ts create mode 100644 tests/playwright/tests-examples/demo-todo-app.spec.ts diff --git a/tests/playwright/.env.svelte b/tests/playwright/.env.svelte new file mode 100644 index 00000000..c157dcbc --- /dev/null +++ b/tests/playwright/.env.svelte @@ -0,0 +1 @@ +FRAMEWROK=svelte \ No newline at end of file diff --git a/tests/playwright/.gitignore b/tests/playwright/.gitignore new file mode 100644 index 00000000..75e854d8 --- /dev/null +++ b/tests/playwright/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/tests/playwright/e2e/backspace-delete.spec.ts b/tests/playwright/e2e/backspace-delete.spec.ts new file mode 100644 index 00000000..9b5cee21 --- /dev/null +++ b/tests/playwright/e2e/backspace-delete.spec.ts @@ -0,0 +1,16 @@ +import { test, expect } from '@playwright/test'; + +const framework = process.env.FRAMEWORK; + +test('Delete Node with backspace', async ({ page }) => { + await page.goto('/'); + await page.locator(`.${framework}-flow__node`).nth(0).click(); + // await page.getByTestId('rf__node-1').click(); + await page.keyboard.press('Backspace'); + + const nodes = await page.locator(`.${framework}-flow__node`).all(); + expect(nodes).toHaveLength(3); + + const edges = await page.locator(`.${framework}-flow__edge`).all(); + expect(edges).toHaveLength(0); +}); diff --git a/tests/playwright/e2e/move-node.spec.ts b/tests/playwright/e2e/move-node.spec.ts new file mode 100644 index 00000000..d9fea594 --- /dev/null +++ b/tests/playwright/e2e/move-node.spec.ts @@ -0,0 +1,22 @@ +import { test, expect } from '@playwright/test'; + +test('Move Node', async ({ page }) => { + await page.goto('/'); + + const locator = page.getByTestId('rf__node-1'); + + const transformBeforeMove = await locator.evaluate((element) => { + return element.style.transform; + }); + + await locator.hover(); + await page.mouse.down(); + await page.mouse.move(500, 500); + await page.mouse.up(); + + const transformAfterMove = await locator.evaluate((element) => { + return element.style.transform; + }); + + expect(transformBeforeMove).not.toMatch(transformAfterMove); +}); diff --git a/tests/playwright/package.json b/tests/playwright/package.json new file mode 100644 index 00000000..af0109da --- /dev/null +++ b/tests/playwright/package.json @@ -0,0 +1,27 @@ +{ + "name": "playwright", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test:svelte": "FRAMEWORK=svelte npx playwright test -c playwright.svelte.config.ts", + "test:react": "FRAMEWORK=react npx playwright test -c playwright.react.config.ts", + "test:react:ui": "pnpm run test:react --ui", + "test:svelte:ui": "pnpm run test:svelte --ui" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@playwright/test": "^1.39.0", + "@types/node": "^18.7.16" + }, + "dependencies": { + "@playwright/experimental-ct-react": "^1.39.0", + "@types/react": "^18.2.31", + "@types/react-dom": "^18.2.14", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^5.2.2" + } +} diff --git a/tests/playwright/playwright.react.config.ts b/tests/playwright/playwright.react.config.ts new file mode 100644 index 00000000..fc8009ed --- /dev/null +++ b/tests/playwright/playwright.react.config.ts @@ -0,0 +1,77 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://127.0.0.1:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'cd ../../examples/react && pnpm run dev', + url: 'http://127.0.0.1:3000', + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/tests/playwright/playwright.svelte.config.ts b/tests/playwright/playwright.svelte.config.ts new file mode 100644 index 00000000..e1845f20 --- /dev/null +++ b/tests/playwright/playwright.svelte.config.ts @@ -0,0 +1,79 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:5173/', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'cd ../../examples/svelte && pnpm run dev', + // for some reason you need to use port otherwise it loads forever + // url: 'http://127.0.0.1:5173', + port: 5173, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/tests/playwright/tests-examples/demo-todo-app.spec.ts b/tests/playwright/tests-examples/demo-todo-app.spec.ts new file mode 100644 index 00000000..2fd6016f --- /dev/null +++ b/tests/playwright/tests-examples/demo-todo-app.spec.ts @@ -0,0 +1,437 @@ +import { test, expect, type Page } from '@playwright/test'; + +test.beforeEach(async ({ page }) => { + await page.goto('https://demo.playwright.dev/todomvc'); +}); + +const TODO_ITEMS = [ + 'buy some cheese', + 'feed the cat', + 'book a doctors appointment' +]; + +test.describe('New Todo', () => { + test('should allow me to add todo items', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create 1st todo. + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + // Make sure the list only has one todo item. + await expect(page.getByTestId('todo-title')).toHaveText([ + TODO_ITEMS[0] + ]); + + // Create 2nd todo. + await newTodo.fill(TODO_ITEMS[1]); + await newTodo.press('Enter'); + + // Make sure the list now has two todo items. + await expect(page.getByTestId('todo-title')).toHaveText([ + TODO_ITEMS[0], + TODO_ITEMS[1] + ]); + + await checkNumberOfTodosInLocalStorage(page, 2); + }); + + test('should clear text input field when an item is added', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create one todo item. + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + // Check that input is empty. + await expect(newTodo).toBeEmpty(); + await checkNumberOfTodosInLocalStorage(page, 1); + }); + + test('should append new items to the bottom of the list', async ({ page }) => { + // Create 3 items. + await createDefaultTodos(page); + + // create a todo count locator + const todoCount = page.getByTestId('todo-count') + + // Check test using different methods. + await expect(page.getByText('3 items left')).toBeVisible(); + await expect(todoCount).toHaveText('3 items left'); + await expect(todoCount).toContainText('3'); + await expect(todoCount).toHaveText(/3/); + + // Check all items in one call. + await expect(page.getByTestId('todo-title')).toHaveText(TODO_ITEMS); + await checkNumberOfTodosInLocalStorage(page, 3); + }); +}); + +test.describe('Mark all as completed', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test.afterEach(async ({ page }) => { + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should allow me to mark all items as completed', async ({ page }) => { + // Complete all todos. + await page.getByLabel('Mark all as complete').check(); + + // Ensure all todos have 'completed' class. + await expect(page.getByTestId('todo-item')).toHaveClass(['completed', 'completed', 'completed']); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + }); + + test('should allow me to clear the complete state of all items', async ({ page }) => { + const toggleAll = page.getByLabel('Mark all as complete'); + // Check and then immediately uncheck. + await toggleAll.check(); + await toggleAll.uncheck(); + + // Should be no completed classes. + await expect(page.getByTestId('todo-item')).toHaveClass(['', '', '']); + }); + + test('complete all checkbox should update state when items are completed / cleared', async ({ page }) => { + const toggleAll = page.getByLabel('Mark all as complete'); + await toggleAll.check(); + await expect(toggleAll).toBeChecked(); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + + // Uncheck first todo. + const firstTodo = page.getByTestId('todo-item').nth(0); + await firstTodo.getByRole('checkbox').uncheck(); + + // Reuse toggleAll locator and make sure its not checked. + await expect(toggleAll).not.toBeChecked(); + + await firstTodo.getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + + // Assert the toggle all is checked again. + await expect(toggleAll).toBeChecked(); + }); +}); + +test.describe('Item', () => { + + test('should allow me to mark items as complete', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create two items. + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + // Check first item. + const firstTodo = page.getByTestId('todo-item').nth(0); + await firstTodo.getByRole('checkbox').check(); + await expect(firstTodo).toHaveClass('completed'); + + // Check second item. + const secondTodo = page.getByTestId('todo-item').nth(1); + await expect(secondTodo).not.toHaveClass('completed'); + await secondTodo.getByRole('checkbox').check(); + + // Assert completed class. + await expect(firstTodo).toHaveClass('completed'); + await expect(secondTodo).toHaveClass('completed'); + }); + + test('should allow me to un-mark items as complete', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create two items. + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + const firstTodo = page.getByTestId('todo-item').nth(0); + const secondTodo = page.getByTestId('todo-item').nth(1); + const firstTodoCheckbox = firstTodo.getByRole('checkbox'); + + await firstTodoCheckbox.check(); + await expect(firstTodo).toHaveClass('completed'); + await expect(secondTodo).not.toHaveClass('completed'); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + await firstTodoCheckbox.uncheck(); + await expect(firstTodo).not.toHaveClass('completed'); + await expect(secondTodo).not.toHaveClass('completed'); + await checkNumberOfCompletedTodosInLocalStorage(page, 0); + }); + + test('should allow me to edit an item', async ({ page }) => { + await createDefaultTodos(page); + + const todoItems = page.getByTestId('todo-item'); + const secondTodo = todoItems.nth(1); + await secondTodo.dblclick(); + await expect(secondTodo.getByRole('textbox', { name: 'Edit' })).toHaveValue(TODO_ITEMS[1]); + await secondTodo.getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await secondTodo.getByRole('textbox', { name: 'Edit' }).press('Enter'); + + // Explicitly assert the new text value. + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2] + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); +}); + +test.describe('Editing', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should hide other controls when editing', async ({ page }) => { + const todoItem = page.getByTestId('todo-item').nth(1); + await todoItem.dblclick(); + await expect(todoItem.getByRole('checkbox')).not.toBeVisible(); + await expect(todoItem.locator('label', { + hasText: TODO_ITEMS[1], + })).not.toBeVisible(); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should save edits on blur', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).dispatchEvent('blur'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2], + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); + + test('should trim entered text', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(' buy some sausages '); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2], + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); + + test('should remove the item if an empty text string was entered', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(''); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + TODO_ITEMS[2], + ]); + }); + + test('should cancel edits on escape', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Escape'); + await expect(todoItems).toHaveText(TODO_ITEMS); + }); +}); + +test.describe('Counter', () => { + test('should display the current number of todo items', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // create a todo count locator + const todoCount = page.getByTestId('todo-count') + + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + await expect(todoCount).toContainText('1'); + + await newTodo.fill(TODO_ITEMS[1]); + await newTodo.press('Enter'); + await expect(todoCount).toContainText('2'); + + await checkNumberOfTodosInLocalStorage(page, 2); + }); +}); + +test.describe('Clear completed button', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + }); + + test('should display the correct text', async ({ page }) => { + await page.locator('.todo-list li .toggle').first().check(); + await expect(page.getByRole('button', { name: 'Clear completed' })).toBeVisible(); + }); + + test('should remove completed items when clicked', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).getByRole('checkbox').check(); + await page.getByRole('button', { name: 'Clear completed' }).click(); + await expect(todoItems).toHaveCount(2); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); + }); + + test('should be hidden when there are no items that are completed', async ({ page }) => { + await page.locator('.todo-list li .toggle').first().check(); + await page.getByRole('button', { name: 'Clear completed' }).click(); + await expect(page.getByRole('button', { name: 'Clear completed' })).toBeHidden(); + }); +}); + +test.describe('Persistence', () => { + test('should persist its data', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + const todoItems = page.getByTestId('todo-item'); + const firstTodoCheck = todoItems.nth(0).getByRole('checkbox'); + await firstTodoCheck.check(); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); + await expect(firstTodoCheck).toBeChecked(); + await expect(todoItems).toHaveClass(['completed', '']); + + // Ensure there is 1 completed item. + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + // Now reload. + await page.reload(); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); + await expect(firstTodoCheck).toBeChecked(); + await expect(todoItems).toHaveClass(['completed', '']); + }); +}); + +test.describe('Routing', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + // make sure the app had a chance to save updated todos in storage + // before navigating to a new view, otherwise the items can get lost :( + // in some frameworks like Durandal + await checkTodosInLocalStorage(page, TODO_ITEMS[0]); + }); + + test('should allow me to display active items', async ({ page }) => { + const todoItem = page.getByTestId('todo-item'); + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Active' }).click(); + await expect(todoItem).toHaveCount(2); + await expect(todoItem).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); + }); + + test('should respect the back button', async ({ page }) => { + const todoItem = page.getByTestId('todo-item'); + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + await test.step('Showing all items', async () => { + await page.getByRole('link', { name: 'All' }).click(); + await expect(todoItem).toHaveCount(3); + }); + + await test.step('Showing active items', async () => { + await page.getByRole('link', { name: 'Active' }).click(); + }); + + await test.step('Showing completed items', async () => { + await page.getByRole('link', { name: 'Completed' }).click(); + }); + + await expect(todoItem).toHaveCount(1); + await page.goBack(); + await expect(todoItem).toHaveCount(2); + await page.goBack(); + await expect(todoItem).toHaveCount(3); + }); + + test('should allow me to display completed items', async ({ page }) => { + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Completed' }).click(); + await expect(page.getByTestId('todo-item')).toHaveCount(1); + }); + + test('should allow me to display all items', async ({ page }) => { + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Active' }).click(); + await page.getByRole('link', { name: 'Completed' }).click(); + await page.getByRole('link', { name: 'All' }).click(); + await expect(page.getByTestId('todo-item')).toHaveCount(3); + }); + + test('should highlight the currently applied filter', async ({ page }) => { + await expect(page.getByRole('link', { name: 'All' })).toHaveClass('selected'); + + //create locators for active and completed links + const activeLink = page.getByRole('link', { name: 'Active' }); + const completedLink = page.getByRole('link', { name: 'Completed' }); + await activeLink.click(); + + // Page change - active items. + await expect(activeLink).toHaveClass('selected'); + await completedLink.click(); + + // Page change - completed items. + await expect(completedLink).toHaveClass('selected'); + }); +}); + +async function createDefaultTodos(page: Page) { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + for (const item of TODO_ITEMS) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } +} + +async function checkNumberOfTodosInLocalStorage(page: Page, expected: number) { + return await page.waitForFunction(e => { + return JSON.parse(localStorage['react-todos']).length === e; + }, expected); +} + +async function checkNumberOfCompletedTodosInLocalStorage(page: Page, expected: number) { + return await page.waitForFunction(e => { + return JSON.parse(localStorage['react-todos']).filter((todo: any) => todo.completed).length === e; + }, expected); +} + +async function checkTodosInLocalStorage(page: Page, title: string) { + return await page.waitForFunction(t => { + return JSON.parse(localStorage['react-todos']).map((todo: any) => todo.title).includes(t); + }, title); +} From 81ae72f497e5c4508ffb1f7c56795a1eff977d5e Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 24 Oct 2023 16:49:55 +0200 Subject: [PATCH 02/30] Added shared playwright config --- tests/playwright/playwright.react.config.ts | 74 ++------------------ tests/playwright/playwright.shared.config.ts | 63 +++++++++++++++++ tests/playwright/playwright.svelte.config.ts | 74 ++------------------ 3 files changed, 72 insertions(+), 139 deletions(-) create mode 100644 tests/playwright/playwright.shared.config.ts diff --git a/tests/playwright/playwright.react.config.ts b/tests/playwright/playwright.react.config.ts index fc8009ed..c8fa98ef 100644 --- a/tests/playwright/playwright.react.config.ts +++ b/tests/playwright/playwright.react.config.ts @@ -1,77 +1,13 @@ -import { defineConfig, devices } from '@playwright/test'; +import { defineConfig } from '@playwright/test'; +import { sharedConfigWithPort } from './playwright.shared.config'; -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); +const port = 3000; -/** - * See https://playwright.dev/docs/test-configuration. - */ export default defineConfig({ - testDir: './e2e', - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: 'http://127.0.0.1:3000', - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', - }, - - /* Configure projects for major browsers */ - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, - - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, - }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, - ], - - /* Run your local dev server before starting the tests */ + ...sharedConfigWithPort(port), webServer: { command: 'cd ../../examples/react && pnpm run dev', - url: 'http://127.0.0.1:3000', + port, reuseExistingServer: !process.env.CI, }, }); diff --git a/tests/playwright/playwright.shared.config.ts b/tests/playwright/playwright.shared.config.ts new file mode 100644 index 00000000..828317a7 --- /dev/null +++ b/tests/playwright/playwright.shared.config.ts @@ -0,0 +1,63 @@ +import { PlaywrightTestConfig, devices } from '@playwright/test'; + +export function sharedConfigWithPort(port: number): PlaywrightTestConfig { + return { + testDir: './e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: `http://localhost:${port}/`, + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + }; +} diff --git a/tests/playwright/playwright.svelte.config.ts b/tests/playwright/playwright.svelte.config.ts index e1845f20..f92bd3dc 100644 --- a/tests/playwright/playwright.svelte.config.ts +++ b/tests/playwright/playwright.svelte.config.ts @@ -1,79 +1,13 @@ import { defineConfig, devices } from '@playwright/test'; +import { sharedConfigWithPort } from './playwright.shared.config'; -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); +const port = 5173; -/** - * See https://playwright.dev/docs/test-configuration. - */ export default defineConfig({ - testDir: './e2e', - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: 'http://localhost:5173/', - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', - }, - - /* Configure projects for major browsers */ - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, - - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, - }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, - ], - - /* Run your local dev server before starting the tests */ + ...sharedConfigWithPort(port), webServer: { command: 'cd ../../examples/svelte && pnpm run dev', - // for some reason you need to use port otherwise it loads forever - // url: 'http://127.0.0.1:5173', - port: 5173, + port: port, reuseExistingServer: !process.env.CI, }, }); From 117b4a4cb6eb4ed0abfe089d483a00429bc67e98 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 25 Oct 2023 13:23:14 +0200 Subject: [PATCH 03/30] restrucutred svelte examples --- tests/playwright/.gitignore | 3 + tests/playwright/e2e/backspace-delete.spec.ts | 8 +- tests/playwright/e2e/constants.ts | 1 + tests/playwright/e2e/nodes.spec.ts | 14 + tests/playwright/package-lock.json | 1377 +++++++++++++++++ .../tests-examples/demo-todo-app.spec.ts | 437 ------ 6 files changed, 1399 insertions(+), 441 deletions(-) create mode 100644 tests/playwright/e2e/constants.ts create mode 100644 tests/playwright/e2e/nodes.spec.ts create mode 100644 tests/playwright/package-lock.json delete mode 100644 tests/playwright/tests-examples/demo-todo-app.spec.ts diff --git a/tests/playwright/.gitignore b/tests/playwright/.gitignore index 75e854d8..6d284fa6 100644 --- a/tests/playwright/.gitignore +++ b/tests/playwright/.gitignore @@ -2,3 +2,6 @@ node_modules/ /test-results/ /playwright-report/ /playwright/.cache/ +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/tests/playwright/e2e/backspace-delete.spec.ts b/tests/playwright/e2e/backspace-delete.spec.ts index 9b5cee21..0f6d3648 100644 --- a/tests/playwright/e2e/backspace-delete.spec.ts +++ b/tests/playwright/e2e/backspace-delete.spec.ts @@ -1,16 +1,16 @@ import { test, expect } from '@playwright/test'; -const framework = process.env.FRAMEWORK; +import { FRAMEWORK } from './constants'; test('Delete Node with backspace', async ({ page }) => { await page.goto('/'); - await page.locator(`.${framework}-flow__node`).nth(0).click(); + await page.locator(`.${FRAMEWORK}-flow__node`).nth(0).click(); // await page.getByTestId('rf__node-1').click(); await page.keyboard.press('Backspace'); - const nodes = await page.locator(`.${framework}-flow__node`).all(); + const nodes = await page.locator(`.${FRAMEWORK}-flow__node`).all(); expect(nodes).toHaveLength(3); - const edges = await page.locator(`.${framework}-flow__edge`).all(); + const edges = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); expect(edges).toHaveLength(0); }); diff --git a/tests/playwright/e2e/constants.ts b/tests/playwright/e2e/constants.ts new file mode 100644 index 00000000..b1ce66b1 --- /dev/null +++ b/tests/playwright/e2e/constants.ts @@ -0,0 +1 @@ +export const FRAMEWORK = process.env.FRAMEWORK; diff --git a/tests/playwright/e2e/nodes.spec.ts b/tests/playwright/e2e/nodes.spec.ts new file mode 100644 index 00000000..b06de961 --- /dev/null +++ b/tests/playwright/e2e/nodes.spec.ts @@ -0,0 +1,14 @@ +import { test, expect } from '@playwright/test'; + +import { FRAMEWORK } from './constants'; + +test.describe('NODES', () => { + test.beforeEach(async ({ page }) => { + // Go to the starting url before each test. + await page.goto('/tests/nodes'); + }); + + test.describe('selection', () => { + test('selecting a node', async ({ page }) => {}); + }); +}); diff --git a/tests/playwright/package-lock.json b/tests/playwright/package-lock.json new file mode 100644 index 00000000..98e0fdff --- /dev/null +++ b/tests/playwright/package-lock.json @@ -0,0 +1,1377 @@ +{ + "name": "playwright", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "playwright", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@playwright/experimental-ct-react": "^1.39.0", + "@types/react": "^18.2.31", + "@types/react-dom": "^18.2.14", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^5.2.2" + }, + "devDependencies": { + "@playwright/test": "^1.39.0", + "@types/node": "^18.7.16" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "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.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "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==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@playwright/experimental-ct-core": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-core/-/experimental-ct-core-1.39.0.tgz", + "integrity": "sha512-1b/qrlB5A/CdEZns8f2RDkWFmSnGkNyec8n72iinmw07+GHsdMP8fIpazeFB0umxWfo+gPLhkjhTGdB3WXJTBw==", + "dependencies": { + "playwright": "1.39.0", + "playwright-core": "1.39.0", + "vite": "^4.4.10" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@playwright/experimental-ct-react": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-react/-/experimental-ct-react-1.39.0.tgz", + "integrity": "sha512-6GaDVVo6x8P9Jdw3yPbVaEP59nesRsETn3kznHAy+2493VsP3IaVATat2G28z0Sivf/K9Tkh5xRYjiawN0ebgw==", + "dependencies": { + "@playwright/experimental-ct-core": "1.39.0", + "@vitejs/plugin-react": "^4.0.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@playwright/test": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz", + "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==", + "dev": true, + "dependencies": { + "playwright": "1.39.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", + "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", + "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.6", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", + "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", + "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", + "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/node": { + "version": "18.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz", + "integrity": "sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==", + "devOptional": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==" + }, + "node_modules/@types/react": { + "version": "18.2.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.31.tgz", + "integrity": "sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.0.tgz", + "integrity": "sha512-rM0SqazU9iqPUraQ2JlIvReeaxOoRj6n+PzB1C0cBzIbd8qP336nC39/R9yPi3wVcah7E7j/kdU1uCUqMEU4OQ==", + "dependencies": { + "@babel/core": "^7.22.20", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "@types/babel__core": "^7.20.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "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.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001554", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz", + "integrity": "sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==", + "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/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "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==" + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.566", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.566.tgz", + "integrity": "sha512-mv+fAy27uOmTVlUULy15U3DVJ+jg+8iyKH1bpwboCRhtDC69GKf1PPTZvEIhCyDr81RFqfxZJYrbgp933a1vtg==" + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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==", + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "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==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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==" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/playwright": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", + "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", + "dependencies": { + "playwright-core": "1.39.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} diff --git a/tests/playwright/tests-examples/demo-todo-app.spec.ts b/tests/playwright/tests-examples/demo-todo-app.spec.ts deleted file mode 100644 index 2fd6016f..00000000 --- a/tests/playwright/tests-examples/demo-todo-app.spec.ts +++ /dev/null @@ -1,437 +0,0 @@ -import { test, expect, type Page } from '@playwright/test'; - -test.beforeEach(async ({ page }) => { - await page.goto('https://demo.playwright.dev/todomvc'); -}); - -const TODO_ITEMS = [ - 'buy some cheese', - 'feed the cat', - 'book a doctors appointment' -]; - -test.describe('New Todo', () => { - test('should allow me to add todo items', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create 1st todo. - await newTodo.fill(TODO_ITEMS[0]); - await newTodo.press('Enter'); - - // Make sure the list only has one todo item. - await expect(page.getByTestId('todo-title')).toHaveText([ - TODO_ITEMS[0] - ]); - - // Create 2nd todo. - await newTodo.fill(TODO_ITEMS[1]); - await newTodo.press('Enter'); - - // Make sure the list now has two todo items. - await expect(page.getByTestId('todo-title')).toHaveText([ - TODO_ITEMS[0], - TODO_ITEMS[1] - ]); - - await checkNumberOfTodosInLocalStorage(page, 2); - }); - - test('should clear text input field when an item is added', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create one todo item. - await newTodo.fill(TODO_ITEMS[0]); - await newTodo.press('Enter'); - - // Check that input is empty. - await expect(newTodo).toBeEmpty(); - await checkNumberOfTodosInLocalStorage(page, 1); - }); - - test('should append new items to the bottom of the list', async ({ page }) => { - // Create 3 items. - await createDefaultTodos(page); - - // create a todo count locator - const todoCount = page.getByTestId('todo-count') - - // Check test using different methods. - await expect(page.getByText('3 items left')).toBeVisible(); - await expect(todoCount).toHaveText('3 items left'); - await expect(todoCount).toContainText('3'); - await expect(todoCount).toHaveText(/3/); - - // Check all items in one call. - await expect(page.getByTestId('todo-title')).toHaveText(TODO_ITEMS); - await checkNumberOfTodosInLocalStorage(page, 3); - }); -}); - -test.describe('Mark all as completed', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test.afterEach(async ({ page }) => { - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test('should allow me to mark all items as completed', async ({ page }) => { - // Complete all todos. - await page.getByLabel('Mark all as complete').check(); - - // Ensure all todos have 'completed' class. - await expect(page.getByTestId('todo-item')).toHaveClass(['completed', 'completed', 'completed']); - await checkNumberOfCompletedTodosInLocalStorage(page, 3); - }); - - test('should allow me to clear the complete state of all items', async ({ page }) => { - const toggleAll = page.getByLabel('Mark all as complete'); - // Check and then immediately uncheck. - await toggleAll.check(); - await toggleAll.uncheck(); - - // Should be no completed classes. - await expect(page.getByTestId('todo-item')).toHaveClass(['', '', '']); - }); - - test('complete all checkbox should update state when items are completed / cleared', async ({ page }) => { - const toggleAll = page.getByLabel('Mark all as complete'); - await toggleAll.check(); - await expect(toggleAll).toBeChecked(); - await checkNumberOfCompletedTodosInLocalStorage(page, 3); - - // Uncheck first todo. - const firstTodo = page.getByTestId('todo-item').nth(0); - await firstTodo.getByRole('checkbox').uncheck(); - - // Reuse toggleAll locator and make sure its not checked. - await expect(toggleAll).not.toBeChecked(); - - await firstTodo.getByRole('checkbox').check(); - await checkNumberOfCompletedTodosInLocalStorage(page, 3); - - // Assert the toggle all is checked again. - await expect(toggleAll).toBeChecked(); - }); -}); - -test.describe('Item', () => { - - test('should allow me to mark items as complete', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create two items. - for (const item of TODO_ITEMS.slice(0, 2)) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } - - // Check first item. - const firstTodo = page.getByTestId('todo-item').nth(0); - await firstTodo.getByRole('checkbox').check(); - await expect(firstTodo).toHaveClass('completed'); - - // Check second item. - const secondTodo = page.getByTestId('todo-item').nth(1); - await expect(secondTodo).not.toHaveClass('completed'); - await secondTodo.getByRole('checkbox').check(); - - // Assert completed class. - await expect(firstTodo).toHaveClass('completed'); - await expect(secondTodo).toHaveClass('completed'); - }); - - test('should allow me to un-mark items as complete', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create two items. - for (const item of TODO_ITEMS.slice(0, 2)) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } - - const firstTodo = page.getByTestId('todo-item').nth(0); - const secondTodo = page.getByTestId('todo-item').nth(1); - const firstTodoCheckbox = firstTodo.getByRole('checkbox'); - - await firstTodoCheckbox.check(); - await expect(firstTodo).toHaveClass('completed'); - await expect(secondTodo).not.toHaveClass('completed'); - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - - await firstTodoCheckbox.uncheck(); - await expect(firstTodo).not.toHaveClass('completed'); - await expect(secondTodo).not.toHaveClass('completed'); - await checkNumberOfCompletedTodosInLocalStorage(page, 0); - }); - - test('should allow me to edit an item', async ({ page }) => { - await createDefaultTodos(page); - - const todoItems = page.getByTestId('todo-item'); - const secondTodo = todoItems.nth(1); - await secondTodo.dblclick(); - await expect(secondTodo.getByRole('textbox', { name: 'Edit' })).toHaveValue(TODO_ITEMS[1]); - await secondTodo.getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); - await secondTodo.getByRole('textbox', { name: 'Edit' }).press('Enter'); - - // Explicitly assert the new text value. - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - 'buy some sausages', - TODO_ITEMS[2] - ]); - await checkTodosInLocalStorage(page, 'buy some sausages'); - }); -}); - -test.describe('Editing', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test('should hide other controls when editing', async ({ page }) => { - const todoItem = page.getByTestId('todo-item').nth(1); - await todoItem.dblclick(); - await expect(todoItem.getByRole('checkbox')).not.toBeVisible(); - await expect(todoItem.locator('label', { - hasText: TODO_ITEMS[1], - })).not.toBeVisible(); - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test('should save edits on blur', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).dispatchEvent('blur'); - - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - 'buy some sausages', - TODO_ITEMS[2], - ]); - await checkTodosInLocalStorage(page, 'buy some sausages'); - }); - - test('should trim entered text', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(' buy some sausages '); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); - - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - 'buy some sausages', - TODO_ITEMS[2], - ]); - await checkTodosInLocalStorage(page, 'buy some sausages'); - }); - - test('should remove the item if an empty text string was entered', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(''); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); - - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - TODO_ITEMS[2], - ]); - }); - - test('should cancel edits on escape', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Escape'); - await expect(todoItems).toHaveText(TODO_ITEMS); - }); -}); - -test.describe('Counter', () => { - test('should display the current number of todo items', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // create a todo count locator - const todoCount = page.getByTestId('todo-count') - - await newTodo.fill(TODO_ITEMS[0]); - await newTodo.press('Enter'); - - await expect(todoCount).toContainText('1'); - - await newTodo.fill(TODO_ITEMS[1]); - await newTodo.press('Enter'); - await expect(todoCount).toContainText('2'); - - await checkNumberOfTodosInLocalStorage(page, 2); - }); -}); - -test.describe('Clear completed button', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - }); - - test('should display the correct text', async ({ page }) => { - await page.locator('.todo-list li .toggle').first().check(); - await expect(page.getByRole('button', { name: 'Clear completed' })).toBeVisible(); - }); - - test('should remove completed items when clicked', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).getByRole('checkbox').check(); - await page.getByRole('button', { name: 'Clear completed' }).click(); - await expect(todoItems).toHaveCount(2); - await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); - }); - - test('should be hidden when there are no items that are completed', async ({ page }) => { - await page.locator('.todo-list li .toggle').first().check(); - await page.getByRole('button', { name: 'Clear completed' }).click(); - await expect(page.getByRole('button', { name: 'Clear completed' })).toBeHidden(); - }); -}); - -test.describe('Persistence', () => { - test('should persist its data', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - for (const item of TODO_ITEMS.slice(0, 2)) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } - - const todoItems = page.getByTestId('todo-item'); - const firstTodoCheck = todoItems.nth(0).getByRole('checkbox'); - await firstTodoCheck.check(); - await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); - await expect(firstTodoCheck).toBeChecked(); - await expect(todoItems).toHaveClass(['completed', '']); - - // Ensure there is 1 completed item. - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - - // Now reload. - await page.reload(); - await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); - await expect(firstTodoCheck).toBeChecked(); - await expect(todoItems).toHaveClass(['completed', '']); - }); -}); - -test.describe('Routing', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - // make sure the app had a chance to save updated todos in storage - // before navigating to a new view, otherwise the items can get lost :( - // in some frameworks like Durandal - await checkTodosInLocalStorage(page, TODO_ITEMS[0]); - }); - - test('should allow me to display active items', async ({ page }) => { - const todoItem = page.getByTestId('todo-item'); - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - await page.getByRole('link', { name: 'Active' }).click(); - await expect(todoItem).toHaveCount(2); - await expect(todoItem).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); - }); - - test('should respect the back button', async ({ page }) => { - const todoItem = page.getByTestId('todo-item'); - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - - await test.step('Showing all items', async () => { - await page.getByRole('link', { name: 'All' }).click(); - await expect(todoItem).toHaveCount(3); - }); - - await test.step('Showing active items', async () => { - await page.getByRole('link', { name: 'Active' }).click(); - }); - - await test.step('Showing completed items', async () => { - await page.getByRole('link', { name: 'Completed' }).click(); - }); - - await expect(todoItem).toHaveCount(1); - await page.goBack(); - await expect(todoItem).toHaveCount(2); - await page.goBack(); - await expect(todoItem).toHaveCount(3); - }); - - test('should allow me to display completed items', async ({ page }) => { - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - await page.getByRole('link', { name: 'Completed' }).click(); - await expect(page.getByTestId('todo-item')).toHaveCount(1); - }); - - test('should allow me to display all items', async ({ page }) => { - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - await page.getByRole('link', { name: 'Active' }).click(); - await page.getByRole('link', { name: 'Completed' }).click(); - await page.getByRole('link', { name: 'All' }).click(); - await expect(page.getByTestId('todo-item')).toHaveCount(3); - }); - - test('should highlight the currently applied filter', async ({ page }) => { - await expect(page.getByRole('link', { name: 'All' })).toHaveClass('selected'); - - //create locators for active and completed links - const activeLink = page.getByRole('link', { name: 'Active' }); - const completedLink = page.getByRole('link', { name: 'Completed' }); - await activeLink.click(); - - // Page change - active items. - await expect(activeLink).toHaveClass('selected'); - await completedLink.click(); - - // Page change - completed items. - await expect(completedLink).toHaveClass('selected'); - }); -}); - -async function createDefaultTodos(page: Page) { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - for (const item of TODO_ITEMS) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } -} - -async function checkNumberOfTodosInLocalStorage(page: Page, expected: number) { - return await page.waitForFunction(e => { - return JSON.parse(localStorage['react-todos']).length === e; - }, expected); -} - -async function checkNumberOfCompletedTodosInLocalStorage(page: Page, expected: number) { - return await page.waitForFunction(e => { - return JSON.parse(localStorage['react-todos']).filter((todo: any) => todo.completed).length === e; - }, expected); -} - -async function checkTodosInLocalStorage(page: Page, title: string) { - return await page.waitForFunction(t => { - return JSON.parse(localStorage['react-todos']).map((todo: any) => todo.title).includes(t); - }, title); -} From eca85310e165cf7fbc5d08f36d512fc71a5fc8f4 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 25 Oct 2023 13:23:37 +0200 Subject: [PATCH 04/30] restrucutred svelte examples --- .../src/components/Header/Header.svelte | 2 +- examples/svelte/src/routes/+layout.server.ts | 6 +- .../src/routes/{ => examples}/+layout.svelte | 2 +- .../svelte/src/routes/examples/+page.svelte | 1 + .../add-node-on-drop/+page.svelte | 0 .../add-node-on-drop/Flow.svelte | 0 .../custom-connection-line/+page.svelte | 0 .../ConnectionLine.svelte | 0 .../custom-connection-line/CustomNode.svelte | 0 .../{ => examples}/customnode/+page.svelte | 0 .../customnode/CustomNode.svelte | 0 .../routes/{ => examples}/dagre/+page.svelte | 0 .../{ => examples}/dagre/nodes-and-edges.ts | 0 .../{ => examples}/drag-n-drop/+page.svelte | 0 .../{ => examples}/drag-n-drop/Flow.svelte | 0 .../{ => examples}/drag-n-drop/Sidebar.svelte | 0 .../routes/{ => examples}/edges/+page.svelte | 0 .../routes/{ => examples}/figma/+page.svelte | 0 .../{ => examples}/interaction/+page.svelte | 0 .../{ => examples}/intersections/+page.svelte | 0 .../{ => examples}/intersections/+server.ts | 0 .../{ => examples}/intersections/Flow.svelte | 0 .../intersections/nodes-and-edges.ts | 0 .../{ => examples}/overview/+page.svelte | 0 .../{ => examples}/overview/CustomEdge.svelte | 0 .../{ => examples}/overview/CustomNode.svelte | 0 .../overview/CustomNodeDragHandle.svelte | 0 .../routes/{ => examples}/stress/+page.svelte | 0 .../{ => examples}/subflows/+page.svelte | 0 .../{ => examples}/subflows/DebugNode.svelte | 0 .../two-way-viewport/+page.svelte | 0 .../two-way-viewport/Flow.svelte | 0 .../{ => examples}/usesvelteflow/+page.svelte | 0 .../{ => examples}/usesvelteflow/Flow.svelte | 0 .../usesvelteflow/Sidebar.svelte | 0 .../useupdatenodeinternals/+page.svelte | 0 .../useupdatenodeinternals/CustomNode.svelte | 0 .../useupdatenodeinternals/Flow.svelte | 0 .../{ => examples}/validation/+page.svelte | 0 .../{ => examples}/validation/style.css | 0 .../src/routes/tests/nodes/+page.svelte | 9 +++ .../svelte/src/routes/tests/nodes/Flow.svelte | 12 +++ .../src/routes/tests/nodes/nodesAndEdges.ts | 73 +++++++++++++++++++ examples/svelte/svelte.config.js | 5 +- 44 files changed, 104 insertions(+), 6 deletions(-) rename examples/svelte/src/routes/{ => examples}/+layout.svelte (81%) create mode 100644 examples/svelte/src/routes/examples/+page.svelte rename examples/svelte/src/routes/{ => examples}/add-node-on-drop/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/add-node-on-drop/Flow.svelte (100%) rename examples/svelte/src/routes/{ => examples}/custom-connection-line/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/custom-connection-line/ConnectionLine.svelte (100%) rename examples/svelte/src/routes/{ => examples}/custom-connection-line/CustomNode.svelte (100%) rename examples/svelte/src/routes/{ => examples}/customnode/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/customnode/CustomNode.svelte (100%) rename examples/svelte/src/routes/{ => examples}/dagre/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/dagre/nodes-and-edges.ts (100%) rename examples/svelte/src/routes/{ => examples}/drag-n-drop/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/drag-n-drop/Flow.svelte (100%) rename examples/svelte/src/routes/{ => examples}/drag-n-drop/Sidebar.svelte (100%) rename examples/svelte/src/routes/{ => examples}/edges/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/figma/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/interaction/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/intersections/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/intersections/+server.ts (100%) rename examples/svelte/src/routes/{ => examples}/intersections/Flow.svelte (100%) rename examples/svelte/src/routes/{ => examples}/intersections/nodes-and-edges.ts (100%) rename examples/svelte/src/routes/{ => examples}/overview/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/overview/CustomEdge.svelte (100%) rename examples/svelte/src/routes/{ => examples}/overview/CustomNode.svelte (100%) rename examples/svelte/src/routes/{ => examples}/overview/CustomNodeDragHandle.svelte (100%) rename examples/svelte/src/routes/{ => examples}/stress/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/subflows/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/subflows/DebugNode.svelte (100%) rename examples/svelte/src/routes/{ => examples}/two-way-viewport/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/two-way-viewport/Flow.svelte (100%) rename examples/svelte/src/routes/{ => examples}/usesvelteflow/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/usesvelteflow/Flow.svelte (100%) rename examples/svelte/src/routes/{ => examples}/usesvelteflow/Sidebar.svelte (100%) rename examples/svelte/src/routes/{ => examples}/useupdatenodeinternals/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/useupdatenodeinternals/CustomNode.svelte (100%) rename examples/svelte/src/routes/{ => examples}/useupdatenodeinternals/Flow.svelte (100%) rename examples/svelte/src/routes/{ => examples}/validation/+page.svelte (100%) rename examples/svelte/src/routes/{ => examples}/validation/style.css (100%) create mode 100644 examples/svelte/src/routes/tests/nodes/+page.svelte create mode 100644 examples/svelte/src/routes/tests/nodes/Flow.svelte create mode 100644 examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts diff --git a/examples/svelte/src/components/Header/Header.svelte b/examples/svelte/src/components/Header/Header.svelte index 202e513b..0bd941b7 100644 --- a/examples/svelte/src/components/Header/Header.svelte +++ b/examples/svelte/src/components/Header/Header.svelte @@ -31,7 +31,7 @@ diff --git a/examples/svelte/src/routes/+layout.server.ts b/examples/svelte/src/routes/+layout.server.ts index b64f1170..c968a610 100644 --- a/examples/svelte/src/routes/+layout.server.ts +++ b/examples/svelte/src/routes/+layout.server.ts @@ -2,7 +2,7 @@ import { redirect } from '@sveltejs/kit'; /** @type {import('./$types').LayoutServerLoad} */ export function load({ route }) { - if (route.id === '/') { - throw redirect(307, '/overview'); - } + if (route.id === '/') { + throw redirect(307, '/examples/overview'); + } } diff --git a/examples/svelte/src/routes/+layout.svelte b/examples/svelte/src/routes/examples/+layout.svelte similarity index 81% rename from examples/svelte/src/routes/+layout.svelte rename to examples/svelte/src/routes/examples/+layout.svelte index 84598fec..cf9f655f 100644 --- a/examples/svelte/src/routes/+layout.svelte +++ b/examples/svelte/src/routes/examples/+layout.svelte @@ -1,5 +1,5 @@
diff --git a/examples/svelte/src/routes/examples/+page.svelte b/examples/svelte/src/routes/examples/+page.svelte new file mode 100644 index 00000000..45db2228 --- /dev/null +++ b/examples/svelte/src/routes/examples/+page.svelte @@ -0,0 +1 @@ +
this redirects to /overview
diff --git a/examples/svelte/src/routes/add-node-on-drop/+page.svelte b/examples/svelte/src/routes/examples/add-node-on-drop/+page.svelte similarity index 100% rename from examples/svelte/src/routes/add-node-on-drop/+page.svelte rename to examples/svelte/src/routes/examples/add-node-on-drop/+page.svelte diff --git a/examples/svelte/src/routes/add-node-on-drop/Flow.svelte b/examples/svelte/src/routes/examples/add-node-on-drop/Flow.svelte similarity index 100% rename from examples/svelte/src/routes/add-node-on-drop/Flow.svelte rename to examples/svelte/src/routes/examples/add-node-on-drop/Flow.svelte diff --git a/examples/svelte/src/routes/custom-connection-line/+page.svelte b/examples/svelte/src/routes/examples/custom-connection-line/+page.svelte similarity index 100% rename from examples/svelte/src/routes/custom-connection-line/+page.svelte rename to examples/svelte/src/routes/examples/custom-connection-line/+page.svelte diff --git a/examples/svelte/src/routes/custom-connection-line/ConnectionLine.svelte b/examples/svelte/src/routes/examples/custom-connection-line/ConnectionLine.svelte similarity index 100% rename from examples/svelte/src/routes/custom-connection-line/ConnectionLine.svelte rename to examples/svelte/src/routes/examples/custom-connection-line/ConnectionLine.svelte diff --git a/examples/svelte/src/routes/custom-connection-line/CustomNode.svelte b/examples/svelte/src/routes/examples/custom-connection-line/CustomNode.svelte similarity index 100% rename from examples/svelte/src/routes/custom-connection-line/CustomNode.svelte rename to examples/svelte/src/routes/examples/custom-connection-line/CustomNode.svelte diff --git a/examples/svelte/src/routes/customnode/+page.svelte b/examples/svelte/src/routes/examples/customnode/+page.svelte similarity index 100% rename from examples/svelte/src/routes/customnode/+page.svelte rename to examples/svelte/src/routes/examples/customnode/+page.svelte diff --git a/examples/svelte/src/routes/customnode/CustomNode.svelte b/examples/svelte/src/routes/examples/customnode/CustomNode.svelte similarity index 100% rename from examples/svelte/src/routes/customnode/CustomNode.svelte rename to examples/svelte/src/routes/examples/customnode/CustomNode.svelte diff --git a/examples/svelte/src/routes/dagre/+page.svelte b/examples/svelte/src/routes/examples/dagre/+page.svelte similarity index 100% rename from examples/svelte/src/routes/dagre/+page.svelte rename to examples/svelte/src/routes/examples/dagre/+page.svelte diff --git a/examples/svelte/src/routes/dagre/nodes-and-edges.ts b/examples/svelte/src/routes/examples/dagre/nodes-and-edges.ts similarity index 100% rename from examples/svelte/src/routes/dagre/nodes-and-edges.ts rename to examples/svelte/src/routes/examples/dagre/nodes-and-edges.ts diff --git a/examples/svelte/src/routes/drag-n-drop/+page.svelte b/examples/svelte/src/routes/examples/drag-n-drop/+page.svelte similarity index 100% rename from examples/svelte/src/routes/drag-n-drop/+page.svelte rename to examples/svelte/src/routes/examples/drag-n-drop/+page.svelte diff --git a/examples/svelte/src/routes/drag-n-drop/Flow.svelte b/examples/svelte/src/routes/examples/drag-n-drop/Flow.svelte similarity index 100% rename from examples/svelte/src/routes/drag-n-drop/Flow.svelte rename to examples/svelte/src/routes/examples/drag-n-drop/Flow.svelte diff --git a/examples/svelte/src/routes/drag-n-drop/Sidebar.svelte b/examples/svelte/src/routes/examples/drag-n-drop/Sidebar.svelte similarity index 100% rename from examples/svelte/src/routes/drag-n-drop/Sidebar.svelte rename to examples/svelte/src/routes/examples/drag-n-drop/Sidebar.svelte diff --git a/examples/svelte/src/routes/edges/+page.svelte b/examples/svelte/src/routes/examples/edges/+page.svelte similarity index 100% rename from examples/svelte/src/routes/edges/+page.svelte rename to examples/svelte/src/routes/examples/edges/+page.svelte diff --git a/examples/svelte/src/routes/figma/+page.svelte b/examples/svelte/src/routes/examples/figma/+page.svelte similarity index 100% rename from examples/svelte/src/routes/figma/+page.svelte rename to examples/svelte/src/routes/examples/figma/+page.svelte diff --git a/examples/svelte/src/routes/interaction/+page.svelte b/examples/svelte/src/routes/examples/interaction/+page.svelte similarity index 100% rename from examples/svelte/src/routes/interaction/+page.svelte rename to examples/svelte/src/routes/examples/interaction/+page.svelte diff --git a/examples/svelte/src/routes/intersections/+page.svelte b/examples/svelte/src/routes/examples/intersections/+page.svelte similarity index 100% rename from examples/svelte/src/routes/intersections/+page.svelte rename to examples/svelte/src/routes/examples/intersections/+page.svelte diff --git a/examples/svelte/src/routes/intersections/+server.ts b/examples/svelte/src/routes/examples/intersections/+server.ts similarity index 100% rename from examples/svelte/src/routes/intersections/+server.ts rename to examples/svelte/src/routes/examples/intersections/+server.ts diff --git a/examples/svelte/src/routes/intersections/Flow.svelte b/examples/svelte/src/routes/examples/intersections/Flow.svelte similarity index 100% rename from examples/svelte/src/routes/intersections/Flow.svelte rename to examples/svelte/src/routes/examples/intersections/Flow.svelte diff --git a/examples/svelte/src/routes/intersections/nodes-and-edges.ts b/examples/svelte/src/routes/examples/intersections/nodes-and-edges.ts similarity index 100% rename from examples/svelte/src/routes/intersections/nodes-and-edges.ts rename to examples/svelte/src/routes/examples/intersections/nodes-and-edges.ts diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/examples/overview/+page.svelte similarity index 100% rename from examples/svelte/src/routes/overview/+page.svelte rename to examples/svelte/src/routes/examples/overview/+page.svelte diff --git a/examples/svelte/src/routes/overview/CustomEdge.svelte b/examples/svelte/src/routes/examples/overview/CustomEdge.svelte similarity index 100% rename from examples/svelte/src/routes/overview/CustomEdge.svelte rename to examples/svelte/src/routes/examples/overview/CustomEdge.svelte diff --git a/examples/svelte/src/routes/overview/CustomNode.svelte b/examples/svelte/src/routes/examples/overview/CustomNode.svelte similarity index 100% rename from examples/svelte/src/routes/overview/CustomNode.svelte rename to examples/svelte/src/routes/examples/overview/CustomNode.svelte diff --git a/examples/svelte/src/routes/overview/CustomNodeDragHandle.svelte b/examples/svelte/src/routes/examples/overview/CustomNodeDragHandle.svelte similarity index 100% rename from examples/svelte/src/routes/overview/CustomNodeDragHandle.svelte rename to examples/svelte/src/routes/examples/overview/CustomNodeDragHandle.svelte diff --git a/examples/svelte/src/routes/stress/+page.svelte b/examples/svelte/src/routes/examples/stress/+page.svelte similarity index 100% rename from examples/svelte/src/routes/stress/+page.svelte rename to examples/svelte/src/routes/examples/stress/+page.svelte diff --git a/examples/svelte/src/routes/subflows/+page.svelte b/examples/svelte/src/routes/examples/subflows/+page.svelte similarity index 100% rename from examples/svelte/src/routes/subflows/+page.svelte rename to examples/svelte/src/routes/examples/subflows/+page.svelte diff --git a/examples/svelte/src/routes/subflows/DebugNode.svelte b/examples/svelte/src/routes/examples/subflows/DebugNode.svelte similarity index 100% rename from examples/svelte/src/routes/subflows/DebugNode.svelte rename to examples/svelte/src/routes/examples/subflows/DebugNode.svelte diff --git a/examples/svelte/src/routes/two-way-viewport/+page.svelte b/examples/svelte/src/routes/examples/two-way-viewport/+page.svelte similarity index 100% rename from examples/svelte/src/routes/two-way-viewport/+page.svelte rename to examples/svelte/src/routes/examples/two-way-viewport/+page.svelte diff --git a/examples/svelte/src/routes/two-way-viewport/Flow.svelte b/examples/svelte/src/routes/examples/two-way-viewport/Flow.svelte similarity index 100% rename from examples/svelte/src/routes/two-way-viewport/Flow.svelte rename to examples/svelte/src/routes/examples/two-way-viewport/Flow.svelte diff --git a/examples/svelte/src/routes/usesvelteflow/+page.svelte b/examples/svelte/src/routes/examples/usesvelteflow/+page.svelte similarity index 100% rename from examples/svelte/src/routes/usesvelteflow/+page.svelte rename to examples/svelte/src/routes/examples/usesvelteflow/+page.svelte diff --git a/examples/svelte/src/routes/usesvelteflow/Flow.svelte b/examples/svelte/src/routes/examples/usesvelteflow/Flow.svelte similarity index 100% rename from examples/svelte/src/routes/usesvelteflow/Flow.svelte rename to examples/svelte/src/routes/examples/usesvelteflow/Flow.svelte diff --git a/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte b/examples/svelte/src/routes/examples/usesvelteflow/Sidebar.svelte similarity index 100% rename from examples/svelte/src/routes/usesvelteflow/Sidebar.svelte rename to examples/svelte/src/routes/examples/usesvelteflow/Sidebar.svelte diff --git a/examples/svelte/src/routes/useupdatenodeinternals/+page.svelte b/examples/svelte/src/routes/examples/useupdatenodeinternals/+page.svelte similarity index 100% rename from examples/svelte/src/routes/useupdatenodeinternals/+page.svelte rename to examples/svelte/src/routes/examples/useupdatenodeinternals/+page.svelte diff --git a/examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte b/examples/svelte/src/routes/examples/useupdatenodeinternals/CustomNode.svelte similarity index 100% rename from examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte rename to examples/svelte/src/routes/examples/useupdatenodeinternals/CustomNode.svelte diff --git a/examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte b/examples/svelte/src/routes/examples/useupdatenodeinternals/Flow.svelte similarity index 100% rename from examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte rename to examples/svelte/src/routes/examples/useupdatenodeinternals/Flow.svelte diff --git a/examples/svelte/src/routes/validation/+page.svelte b/examples/svelte/src/routes/examples/validation/+page.svelte similarity index 100% rename from examples/svelte/src/routes/validation/+page.svelte rename to examples/svelte/src/routes/examples/validation/+page.svelte diff --git a/examples/svelte/src/routes/validation/style.css b/examples/svelte/src/routes/examples/validation/style.css similarity index 100% rename from examples/svelte/src/routes/validation/style.css rename to examples/svelte/src/routes/examples/validation/style.css diff --git a/examples/svelte/src/routes/tests/nodes/+page.svelte b/examples/svelte/src/routes/tests/nodes/+page.svelte new file mode 100644 index 00000000..12dec33c --- /dev/null +++ b/examples/svelte/src/routes/tests/nodes/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/tests/nodes/Flow.svelte b/examples/svelte/src/routes/tests/nodes/Flow.svelte new file mode 100644 index 00000000..6686c907 --- /dev/null +++ b/examples/svelte/src/routes/tests/nodes/Flow.svelte @@ -0,0 +1,12 @@ + + + diff --git a/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts b/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts new file mode 100644 index 00000000..37e2d999 --- /dev/null +++ b/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts @@ -0,0 +1,73 @@ +import type { Edge, Node } from '@xyflow/svelte'; + +export const initialNodes: Node[] = [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + class: 'test-class', + style: 'background-color: red;' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + }, + { + id: '4', + data: { label: '4' }, + position: { x: 0, y: 200 } + }, + { + id: 'notDraggable', + data: { label: 'notDraggable' }, + position: { x: 0, y: 300 }, + draggable: false + }, + { + id: 'notSelectable', + data: { label: 'notSelectable' }, + position: { x: 0, y: 400 }, + selectable: false + }, + { + id: 'notConnectable', + data: { label: 'notConnectable' }, + position: { x: 0, y: 500 }, + connectable: false + }, + { + id: 'notDeletable', + data: { label: 'notDeletable' }, + position: { x: 0, y: 600 }, + connectable: false + }, + { + id: 'hidden', + data: { label: 'hidden' }, + position: { x: 0, y: 700 }, + hidden: true + } +]; + +export const initialEdges: Edge[] = [ + { + id: '1-2', + type: 'default', + source: '1', + target: '2', + label: 'edge' + }, + { + id: '1-3', + type: 'default', + source: '1', + target: '3', + label: 'edge' + } +]; diff --git a/examples/svelte/svelte.config.js b/examples/svelte/svelte.config.js index 1cf26a00..80719d79 100644 --- a/examples/svelte/svelte.config.js +++ b/examples/svelte/svelte.config.js @@ -11,7 +11,10 @@ const config = { // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. // If your environment is not supported or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. - adapter: adapter() + adapter: adapter(), + alias: { + $components: './src/components' + } } }; From 45ae126d438662cc6e933cf6011702287c607487 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 25 Oct 2023 16:57:22 +0200 Subject: [PATCH 05/30] Created e2e tests for node interactions --- examples/react/src/examples/Basic/index.tsx | 1 + .../routes/tests/nodes/DragHandleNode.svelte | 26 ++ .../svelte/src/routes/tests/nodes/Flow.svelte | 8 +- .../src/routes/tests/nodes/nodesAndEdges.ts | 57 +++-- tests/playwright/e2e/backspace-delete.spec.ts | 16 -- tests/playwright/e2e/move-node.spec.ts | 22 -- tests/playwright/e2e/nodes.spec.ts | 236 +++++++++++++++++- 7 files changed, 303 insertions(+), 63 deletions(-) create mode 100644 examples/svelte/src/routes/tests/nodes/DragHandleNode.svelte delete mode 100644 tests/playwright/e2e/backspace-delete.spec.ts delete mode 100644 tests/playwright/e2e/move-node.spec.ts diff --git a/examples/react/src/examples/Basic/index.tsx b/examples/react/src/examples/Basic/index.tsx index 21f48ec5..4f1a51d2 100644 --- a/examples/react/src/examples/Basic/index.tsx +++ b/examples/react/src/examples/Basic/index.tsx @@ -41,6 +41,7 @@ const initialNodes: Node[] = [ data: { label: 'Node 4' }, position: { x: 400, y: 200 }, className: 'light', + connectable: false, }, ]; diff --git a/examples/svelte/src/routes/tests/nodes/DragHandleNode.svelte b/examples/svelte/src/routes/tests/nodes/DragHandleNode.svelte new file mode 100644 index 00000000..da5fa4c4 --- /dev/null +++ b/examples/svelte/src/routes/tests/nodes/DragHandleNode.svelte @@ -0,0 +1,26 @@ + + +
+
+
+ + diff --git a/examples/svelte/src/routes/tests/nodes/Flow.svelte b/examples/svelte/src/routes/tests/nodes/Flow.svelte index 6686c907..6f684cbf 100644 --- a/examples/svelte/src/routes/tests/nodes/Flow.svelte +++ b/examples/svelte/src/routes/tests/nodes/Flow.svelte @@ -3,10 +3,16 @@ import { initialNodes, initialEdges } from './nodesAndEdges'; import { SvelteFlow } from '@xyflow/svelte'; + import DragHandleNode from './DragHandleNode.svelte'; + import '@xyflow/svelte/dist/style.css'; const nodes = writable(initialNodes); const edges = writable(initialEdges); + + const nodeTypes = { + DragHandleNode + }; - + diff --git a/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts b/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts index 37e2d999..bd382bef 100644 --- a/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts +++ b/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts @@ -2,50 +2,61 @@ import type { Edge, Node } from '@xyflow/svelte'; export const initialNodes: Node[] = [ { - id: '1', - data: { label: '1' }, + id: 'Node-1', + data: { label: 'Node-1' }, position: { x: 0, y: 0 }, - class: 'test-class', + type: 'input', + class: 'playwright-test-class-123', style: 'background-color: red;' }, { - id: '2', - data: { label: '2' }, + id: 'Node-2', + type: 'output', + data: { label: 'Node-2' }, position: { x: -100, y: 100 } }, { - id: '3', - data: { label: '3' }, + id: 'Node-3', + data: { label: 'Node-3' }, position: { x: 100, y: 100 } }, { - id: '4', - data: { label: '4' }, - position: { x: 0, y: 200 } + id: 'Node-4', + data: { label: 'Node-4' }, + position: { x: 0, y: 200 }, + type: 'output' + }, + { + id: 'drag-handle', + data: { label: 'Drag Handle' }, + position: { x: 200, y: 0 }, + type: 'DragHandleNode', + dragHandle: '.custom-drag-handle' + }, + { + id: 'notConnectable', + type: 'output', + data: { label: 'notConnectable' }, + position: { x: 0, y: 300 }, + connectable: false }, { id: 'notDraggable', data: { label: 'notDraggable' }, - position: { x: 0, y: 300 }, + position: { x: 0, y: 400 }, draggable: false }, { id: 'notSelectable', data: { label: 'notSelectable' }, - position: { x: 0, y: 400 }, - selectable: false - }, - { - id: 'notConnectable', - data: { label: 'notConnectable' }, position: { x: 0, y: 500 }, - connectable: false + selectable: false }, { id: 'notDeletable', data: { label: 'notDeletable' }, position: { x: 0, y: 600 }, - connectable: false + deletable: false }, { id: 'hidden', @@ -59,15 +70,15 @@ export const initialEdges: Edge[] = [ { id: '1-2', type: 'default', - source: '1', - target: '2', + source: 'Node-1', + target: 'Node-2', label: 'edge' }, { id: '1-3', type: 'default', - source: '1', - target: '3', + source: 'Node-1', + target: 'Node-3', label: 'edge' } ]; diff --git a/tests/playwright/e2e/backspace-delete.spec.ts b/tests/playwright/e2e/backspace-delete.spec.ts deleted file mode 100644 index 0f6d3648..00000000 --- a/tests/playwright/e2e/backspace-delete.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { test, expect } from '@playwright/test'; - -import { FRAMEWORK } from './constants'; - -test('Delete Node with backspace', async ({ page }) => { - await page.goto('/'); - await page.locator(`.${FRAMEWORK}-flow__node`).nth(0).click(); - // await page.getByTestId('rf__node-1').click(); - await page.keyboard.press('Backspace'); - - const nodes = await page.locator(`.${FRAMEWORK}-flow__node`).all(); - expect(nodes).toHaveLength(3); - - const edges = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); - expect(edges).toHaveLength(0); -}); diff --git a/tests/playwright/e2e/move-node.spec.ts b/tests/playwright/e2e/move-node.spec.ts deleted file mode 100644 index d9fea594..00000000 --- a/tests/playwright/e2e/move-node.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test('Move Node', async ({ page }) => { - await page.goto('/'); - - const locator = page.getByTestId('rf__node-1'); - - const transformBeforeMove = await locator.evaluate((element) => { - return element.style.transform; - }); - - await locator.hover(); - await page.mouse.down(); - await page.mouse.move(500, 500); - await page.mouse.up(); - - const transformAfterMove = await locator.evaluate((element) => { - return element.style.transform; - }); - - expect(transformBeforeMove).not.toMatch(transformAfterMove); -}); diff --git a/tests/playwright/e2e/nodes.spec.ts b/tests/playwright/e2e/nodes.spec.ts index b06de961..03a3bef9 100644 --- a/tests/playwright/e2e/nodes.spec.ts +++ b/tests/playwright/e2e/nodes.spec.ts @@ -9,6 +9,240 @@ test.describe('NODES', () => { }); test.describe('selection', () => { - test('selecting a node', async ({ page }) => {}); + test('selecting a node by click', async ({ page }) => { + const locator = page.locator(`.${FRAMEWORK}-flow__node`).first(); + await locator.click(); + + await expect(locator).toHaveClass(/selected/); + }); + + test('selecting multiple nodes with shift drag', async ({ page }) => { + const nodes = page.locator(`.${FRAMEWORK}-flow__node`); + const firstNode = nodes.first(); + const secondNode = nodes.nth(1); + const thirdNode = nodes.nth(2); + + await expect(firstNode).toBeInViewport(); + await expect(secondNode).toBeInViewport(); + await expect(thirdNode).toBeInViewport(); + + const box = await firstNode.boundingBox(); + + await page.mouse.move(box!.x - 100, box!.y - 10); + await page.keyboard.down('Shift'); + await page.mouse.down(); + await page.mouse.move(box!.x + 200, box!.y + 200); + await page.mouse.up(); + await page.keyboard.up('Shift'); + + await expect(firstNode).toHaveClass(/selected/); + await expect(secondNode).toHaveClass(/selected/); + await expect(thirdNode).toHaveClass(/selected/); + + const selection = page.locator(`.${FRAMEWORK}-flow__selection`); + await expect(selection).toBeInViewport(); + }); + + test('selectable=false prevents selection', async ({ page }) => { + const locator = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="notSelectable"]')); + await locator.click(); + + await expect(locator).not.toHaveClass(/selected/); + }); + }); + + test.describe('dragging', () => { + test('dragging a node', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).first(); + + const transformBeforeMove = await node.evaluate((element) => { + return element.style.transform; + }); + + await node.hover(); + await page.mouse.down(); + await page.mouse.move(500, 500); + await page.mouse.up(); + + const transformAfterMove = await node.evaluate((element) => { + return element.style.transform; + }); + + expect(transformBeforeMove).not.toMatch(transformAfterMove); + }); + + test('draggable=false prevents dragging', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="notDraggable"]')); + + const transformBeforeMove = await node.evaluate((element) => { + return element.style.transform; + }); + + await node.hover(); + await page.mouse.down(); + await page.mouse.move(500, 500); + await page.mouse.up(); + + const transformAfterMove = await node.evaluate((element) => { + return element.style.transform; + }); + + expect(transformBeforeMove).toMatch(transformAfterMove); + }); + + test('custom drag handle works', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="drag-handle"]')); + const dragHandle = page.locator('.custom-drag-handle'); + + const transformBeforeMove = await node.evaluate((element) => { + return element.style.transform; + }); + + const nodeBox = await node.boundingBox(); + + await page.mouse.move(nodeBox!.x + 10, nodeBox!.y + 10); + await page.mouse.down(); + await page.mouse.move(500, 500); + await page.mouse.up(); + + const transformAfterMove = await node.evaluate((element) => { + return element.style.transform; + }); + + expect(transformBeforeMove).toMatch(transformAfterMove); + + await dragHandle.hover(); + await page.mouse.down(); + await page.mouse.move(500, 500); + await page.mouse.up(); + + const transformAfterDragHandleMove = await node.evaluate((element) => { + return element.style.transform; + }); + + expect(transformBeforeMove).not.toMatch(transformAfterDragHandleMove); + }); + }); + + test.describe('deleting', () => { + test('deleting a node and its edges', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="Node-1"]')); + + await node.click(); + await page.keyboard.press('Backspace'); + + await expect(node).not.toBeAttached(); + + const edges = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + expect(edges).toHaveLength(0); + }); + + test('deletable=false prevents deletion', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="notDeletable"]')); + + await node.click(); + await page.keyboard.press('Backspace'); + + await expect(node).toBeAttached(); + }); + }); + + test.describe('connecting', () => { + test('connecting two nodes', async ({ page }) => { + const outputSourceHandle = page.locator(`.${FRAMEWORK}-flow__handle`).and(page.locator('[data-nodeid="Node-1"]')); + const inputSourceHandle = page.locator(`.${FRAMEWORK}-flow__handle`).and(page.locator('[data-nodeid="Node-4"]')); + + await expect(outputSourceHandle).toBeInViewport(); + await expect(inputSourceHandle).toBeInViewport(); + + const edgesBefore = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + + await outputSourceHandle.hover(); + await page.mouse.down(); + await inputSourceHandle.hover(); + await page.mouse.up(); + + const edgesAfter = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + expect(edgesAfter).toHaveLength(edgesBefore.length + 1); + }); + + test('connecting two output handles does not work', async ({ page }) => { + const firstOutputHandle = page.locator(`.${FRAMEWORK}-flow__handle`).and(page.locator('[data-nodeid="Node-2"]')); + const secondOutputHandle = page.locator(`.${FRAMEWORK}-flow__handle`).and(page.locator('[data-nodeid="Node-4"]')); + + await expect(firstOutputHandle).toBeInViewport(); + await expect(secondOutputHandle).toBeInViewport(); + + const edgesBefore = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + + await firstOutputHandle.hover(); + await page.mouse.down(); + await secondOutputHandle.hover(); + await page.mouse.up(); + + const edgesAfter = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + expect(edgesAfter).toHaveLength(edgesBefore.length); + }); + + test('connecting two input handles does not work', async ({ page }) => { + const firstInputHandle = page.locator(`.${FRAMEWORK}-flow__handle`).and(page.locator('[data-nodeid="Node-1"]')); + const secondInputHandle = page + .locator(`.${FRAMEWORK}-flow__handle`) + .and(page.locator('[data-nodeid="Node-3"]')) + .and(page.locator('.source')); + + await expect(firstInputHandle).toBeInViewport(); + await expect(secondInputHandle).toBeInViewport(); + + const edgesBefore = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + + await firstInputHandle.hover(); + await page.mouse.down(); + await secondInputHandle.hover(); + await page.mouse.up(); + + const edgesAfter = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + expect(edgesAfter).toHaveLength(edgesBefore.length); + }); + + test('connectable=false prevents connections', async ({ page }) => { + const outputHandle = page.locator(`.${FRAMEWORK}-flow__handle`).and(page.locator('[data-nodeid="Node-1"]')); + const notConnectableHandle = page + .locator(`.${FRAMEWORK}-flow__handle`) + .and(page.locator('[data-nodeid="notConnectable"]')); + + const notConnectableBox = await notConnectableHandle.boundingBox(); + + await expect(outputHandle).toBeInViewport(); + await expect(notConnectableHandle).toBeInViewport(); + + const edgesBefore = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + + await outputHandle.hover(); + await page.mouse.down(); + await page.mouse.move(notConnectableBox!.x + 2, notConnectableBox!.y + 2); + await page.mouse.up(); + + const edgesAfter = await page.locator(`.${FRAMEWORK}-flow__edge`).all(); + expect(edgesAfter).toHaveLength(edgesBefore.length); + }); + }); + + test('hidden=true hides the node', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="hidden"]')); + + await expect(node).not.toBeInViewport(); + }); + + test('classes get applied', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="Node-1"]')); + + await expect(node).toHaveClass(/playwright-test-class-123/); + }); + + test('styles get applied', async ({ page }) => { + const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="Node-1"]')); + + await expect(node).toHaveCSS('background-color', 'rgb(255, 0, 0)'); }); }); From 7eb9fda0fb44049cc5e7bae181775fefb414182f Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 25 Oct 2023 17:26:23 +0200 Subject: [PATCH 06/30] fixed test case --- tests/playwright/e2e/nodes.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/playwright/e2e/nodes.spec.ts b/tests/playwright/e2e/nodes.spec.ts index 03a3bef9..2136c3f1 100644 --- a/tests/playwright/e2e/nodes.spec.ts +++ b/tests/playwright/e2e/nodes.spec.ts @@ -140,6 +140,8 @@ test.describe('NODES', () => { test('deletable=false prevents deletion', async ({ page }) => { const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="notDeletable"]')); + await expect(node).toBeAttached(); + await node.click(); await page.keyboard.press('Backspace'); From 9d386abb2aa299a94955d33751e258380b26c1c0 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 30 Oct 2023 13:24:25 +0100 Subject: [PATCH 07/30] tests(svelte) WIP added some e2e tests and edges example --- .../src/routes/tests/edges/+page.svelte | 9 + .../svelte/src/routes/tests/edges/Flow.svelte | 12 ++ .../src/routes/tests/edges/nodesAndEdges.ts | 157 ++++++++++++++++++ tests/playwright/e2e/edges.spec.ts | 120 +++++++++++++ tests/playwright/e2e/nodes.spec.ts | 1 + 5 files changed, 299 insertions(+) create mode 100644 examples/svelte/src/routes/tests/edges/+page.svelte create mode 100644 examples/svelte/src/routes/tests/edges/Flow.svelte create mode 100644 examples/svelte/src/routes/tests/edges/nodesAndEdges.ts create mode 100644 tests/playwright/e2e/edges.spec.ts diff --git a/examples/svelte/src/routes/tests/edges/+page.svelte b/examples/svelte/src/routes/tests/edges/+page.svelte new file mode 100644 index 00000000..12dec33c --- /dev/null +++ b/examples/svelte/src/routes/tests/edges/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/tests/edges/Flow.svelte b/examples/svelte/src/routes/tests/edges/Flow.svelte new file mode 100644 index 00000000..6686c907 --- /dev/null +++ b/examples/svelte/src/routes/tests/edges/Flow.svelte @@ -0,0 +1,12 @@ + + + diff --git a/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts b/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts new file mode 100644 index 00000000..6e0d969a --- /dev/null +++ b/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts @@ -0,0 +1,157 @@ +import { MarkerType, type Edge, type Node } from '@xyflow/svelte'; + +export const initialNodes: Node[] = [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + }, + { + id: '4', + data: { label: '4' }, + position: { x: -100, y: 200 } + }, + { + id: '5', + data: { label: '5' }, + position: { x: 100, y: 200 } + }, + { + id: '6', + data: { label: '6' }, + position: { x: -100, y: 300 } + }, + { + id: '7', + data: { label: '7' }, + position: { x: 100, y: 300 } + }, + { + id: '8', + data: { label: '8' }, + position: { x: -100, y: 400 } + }, + { + id: '9', + data: { label: '9' }, + position: { x: 100, y: 400 } + }, + { + id: '10', + data: { label: '10' }, + position: { x: -100, y: 500 } + }, + { + id: '11', + data: { label: '11' }, + position: { x: 100, y: 500 } + }, + { + id: '12', + data: { label: '12' }, + position: { x: -100, y: 600 } + }, + { + id: '13', + data: { label: '13' }, + position: { x: 100, y: 600 } + } +]; + +export const initialEdges: Edge[] = [ + { + id: 'edge-with-class', + source: '1', + target: '2', + class: 'edge-class-test' + }, + { + id: 'edge-with-style', + source: '1', + target: '3', + style: 'stroke: red;' + }, + { + id: 'hidden-edge', + source: '2', + target: '4', + label: 'hidden', + hidden: true + }, + { + id: 'animated-edge', + source: '3', + target: '5', + label: 'animated', + animated: true + }, + { + id: 'not-selectable-edge', + source: '4', + target: '6', + label: 'not-selectable', + selectable: false + }, + { + id: 'not-deletable', + source: '5', + target: '7', + label: 'not-deletable', + deletable: false + }, + { + id: 'z-index', + source: '6', + target: '8', + label: 'z-index', + zIndex: 3141592 + }, + { + id: 'aria-label', + source: '7', + target: '9', + label: 'aria-label', + ariaLabel: 'aria-label-test' + }, + { + id: 'interaction-width', + source: '8', + target: '10', + label: 'interaction-width', + interactionWidth: 42 + }, + { + id: 'markers', + source: '9', + target: '11', + label: 'markers', + markerEnd: { type: MarkerType.Arrow }, + markerStart: { type: MarkerType.ArrowClosed } + } + // { + // id: 'updatable', + // source: '9', + // target: '11', + // label: 'focusable', + // updatable: true + // }, + // { + // id: 'not-focusable', + // + // source: '5', + // target: '7', + // label: 'not-focusable', + // focusable: false + // }, +]; diff --git a/tests/playwright/e2e/edges.spec.ts b/tests/playwright/e2e/edges.spec.ts new file mode 100644 index 00000000..da5a3feb --- /dev/null +++ b/tests/playwright/e2e/edges.spec.ts @@ -0,0 +1,120 @@ +import { test, expect } from '@playwright/test'; + +import { FRAMEWORK } from './constants'; + +test.describe('EDGES', () => { + test.beforeEach(async ({ page }) => { + // Go to the starting url before each test. + await page.goto('/tests/edges'); + + // Timeout get's ignored and tests timeout after 200ms ??? + // page.waitForSelector('[data-id="edge-with-class"]', { timeout: 5000 }); + }); + + test.describe('selection', () => { + test('selecting an edge by click', async ({ page }) => { + const edge = page.locator('.svelte-flow__edge').and(page.locator('[data-id="edge-with-class"]')); + + await expect(edge).toBeAttached(); + await edge.click(); + await expect(edge).toHaveClass(/selected/); + }); + + // test('selecting multiple edges by meta-click', async ({ page }) => { + // const edge1 = page.locator('[data-id="edge-with-class"]'); + // const edge2 = page.locator('[data-id="edge-with-style"]'); + + // await expect(edge1).toBeAttached(); + // await expect(edge2).toBeAttached(); + + // await edge1.click(); + // await page.keyboard.down('Meta'); + // await edge2.click(); + + // await expect(edge1).toHaveClass(/selected/); + // await expect(edge2).toHaveClass(/selected/); + // }); + }); + + test.describe('properties', () => { + test('classes get applied', async ({ page }) => { + const edge = page.locator('[data-id="edge-with-class"]'); + + await expect(edge).toHaveClass(/edge-class-test/); + }); + + test('styles get applied', async ({ page }) => { + const edge = page.locator('#edge-with-style'); + + await expect(edge).toHaveCSS('stroke', 'rgb(255, 0, 0)'); + }); + + test('hidden=true hides edge', async ({ page }) => { + const edge = page.locator('#hidden-edge'); + + await expect(edge).not.toBeVisible(); + }); + + test('animated=true add "animated" class', async ({ page }) => { + const edge = page.locator('[data-id="animated-edge"]'); + + await expect(edge).toHaveClass(/animated/); + }); + + test('selectable=false prevents selecting of edges', async ({ page }) => { + const edge = page.locator('[data-id="not-selectable-edge"]'); + + await expect(edge).toBeAttached(); + await expect(edge).not.toHaveClass(/selected/); + + // For some reason these commands do not work + // await expect(edge).toBeInViewport(); + // await edge.click(); + + const edgeBox = await edge.boundingBox(); + + await page.mouse.move(edgeBox!.x + edgeBox!.width * 0.5, edgeBox!.y + edgeBox!.height * 0.5); + await page.mouse.down(); + await page.mouse.up(); + + await expect(edge).not.toHaveClass(/selected/); + }); + + test('deleting edges is possible', async ({ page }) => { + const edge = page.locator('[data-id="edge-with-class"]'); + + await expect(edge).toBeAttached(); + + const edgeBox = await edge.boundingBox(); + + await edge.click(); + await expect(edge).toHaveClass(/selected/); + + await page.keyboard.press('Backspace'); + + await expect(edge).not.toBeAttached(); + }); + + test('deletable=false prevents deleting of edges', async ({ page }) => { + const edge = page.locator('[data-id="not-deletable"]'); + + await expect(edge).toBeAttached(); + + // For some reason these commands do not work + // await expect(edge).toBeInViewport(); + // await edge.click(); + + const edgeBox = await edge.boundingBox(); + + await page.mouse.move(edgeBox!.x + edgeBox!.width * 0.5, edgeBox!.y + edgeBox!.height * 0.5); + await page.mouse.down(); + await page.mouse.up(); + + // TODO: times out on webkit + await expect(edge).toHaveClass(/selected/); + + await page.keyboard.press('Backspace'); + await expect(edge).toBeAttached(); + }); + }); +}); diff --git a/tests/playwright/e2e/nodes.spec.ts b/tests/playwright/e2e/nodes.spec.ts index 2136c3f1..697cefa6 100644 --- a/tests/playwright/e2e/nodes.spec.ts +++ b/tests/playwright/e2e/nodes.spec.ts @@ -137,6 +137,7 @@ test.describe('NODES', () => { expect(edges).toHaveLength(0); }); + // TODO: pressing backspace creates problems on webkit test('deletable=false prevents deletion', async ({ page }) => { const node = page.locator(`.${FRAMEWORK}-flow__node`).and(page.locator('[data-id="notDeletable"]')); From a9b911eac38fc8f891fedee1a19c7edfbb4661f1 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 2 Nov 2023 12:29:58 +0100 Subject: [PATCH 08/30] some more trying around --- tests/playwright/e2e/edges.spec.ts | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/tests/playwright/e2e/edges.spec.ts b/tests/playwright/e2e/edges.spec.ts index da5a3feb..f91d89e0 100644 --- a/tests/playwright/e2e/edges.spec.ts +++ b/tests/playwright/e2e/edges.spec.ts @@ -20,20 +20,22 @@ test.describe('EDGES', () => { await expect(edge).toHaveClass(/selected/); }); - // test('selecting multiple edges by meta-click', async ({ page }) => { - // const edge1 = page.locator('[data-id="edge-with-class"]'); - // const edge2 = page.locator('[data-id="edge-with-style"]'); + test('selecting multiple edges by meta-click', async ({ page }) => { + const edge1 = page.locator('[data-id="edge-with-class"]'); + const edge2 = page.locator('[data-id="edge-with-style"]'); - // await expect(edge1).toBeAttached(); - // await expect(edge2).toBeAttached(); + await expect(edge1).toBeAttached(); + await expect(edge2).toBeAttached(); + // FIXME: I cannot get this to work + await page.keyboard.down('MetaLeft'); + await edge1.click(); + await expect(edge1).toHaveClass(/selected/); - // await edge1.click(); - // await page.keyboard.down('Meta'); - // await edge2.click(); + await edge2.click(); + await expect(edge2).toHaveClass(/selected/); - // await expect(edge1).toHaveClass(/selected/); - // await expect(edge2).toHaveClass(/selected/); - // }); + await expect(edge1).toHaveClass(/selected/); + }); }); test.describe('properties', () => { From 4cf99ec425470a068fc427fd53497f8839eddf42 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 2 Nov 2023 12:30:27 +0100 Subject: [PATCH 09/30] updated lockfile --- pnpm-lock.yaml | 791 ++++--------------------------------------------- 1 file changed, 63 insertions(+), 728 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 981e66bf..449ca1d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,10 +16,10 @@ importers: version: registry.npmjs.org/@changesets/cli@2.25.0 '@typescript-eslint/eslint-plugin': specifier: latest - version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.43.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.43.0)(typescript@5.1.3) '@typescript-eslint/parser': specifier: latest - version: registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/parser@6.9.0(eslint@8.43.0)(typescript@5.1.3) concurrently: specifier: ^7.6.0 version: registry.npmjs.org/concurrently@7.6.0 @@ -90,40 +90,6 @@ importers: specifier: ^4.2.1 version: registry.npmjs.org/svelte@4.2.1 - examples/next-xyflow: - dependencies: - '@xyflow/react': - specifier: workspace:^ - version: link:../../packages/react - next: - specifier: 13.5.4 - version: registry.npmjs.org/next@13.5.4(react-dom@18.2.0)(react@18.2.0) - react: - specifier: ^18 - version: registry.npmjs.org/react@18.2.0 - react-dom: - specifier: ^18 - version: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) - devDependencies: - '@types/node': - specifier: ^20 - version: registry.npmjs.org/@types/node@20.0.0 - '@types/react': - specifier: ^18 - version: registry.npmjs.org/@types/react@18.2.24 - '@types/react-dom': - specifier: ^18 - version: registry.npmjs.org/@types/react-dom@18.2.8 - eslint: - specifier: ^8 - version: registry.npmjs.org/eslint@8.43.0 - eslint-config-next: - specifier: 13.5.4 - version: registry.npmjs.org/eslint-config-next@13.5.4(eslint@8.43.0)(typescript@5.1.3) - typescript: - specifier: ^5 - version: registry.npmjs.org/typescript@5.1.3 - examples/react: dependencies: '@xyflow/react': @@ -457,7 +423,7 @@ importers: version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.43.0) eslint-config-turbo: specifier: latest - version: registry.npmjs.org/eslint-config-turbo@1.10.15(eslint@8.43.0) + version: registry.npmjs.org/eslint-config-turbo@1.10.16(eslint@8.43.0) eslint-plugin-react: specifier: latest version: registry.npmjs.org/eslint-plugin-react@7.33.2(eslint@8.43.0) @@ -1853,119 +1819,6 @@ packages: read-yaml-file: registry.npmjs.org/read-yaml-file@1.1.0 dev: true - registry.npmjs.org/@next/env@13.5.4: - resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz} - name: '@next/env' - version: 13.5.4 - dev: false - - registry.npmjs.org/@next/eslint-plugin-next@13.5.4: - resolution: {integrity: sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz} - name: '@next/eslint-plugin-next' - version: 13.5.4 - dependencies: - glob: registry.npmjs.org/glob@7.1.7 - dev: true - - registry.npmjs.org/@next/swc-darwin-arm64@13.5.4: - resolution: {integrity: sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz} - name: '@next/swc-darwin-arm64' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-darwin-x64@13.5.4: - resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz} - name: '@next/swc-darwin-x64' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-linux-arm64-gnu@13.5.4: - resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz} - name: '@next/swc-linux-arm64-gnu' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-linux-arm64-musl@13.5.4: - resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz} - name: '@next/swc-linux-arm64-musl' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-linux-x64-gnu@13.5.4: - resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz} - name: '@next/swc-linux-x64-gnu' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-linux-x64-musl@13.5.4: - resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz} - name: '@next/swc-linux-x64-musl' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-win32-arm64-msvc@13.5.4: - resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz} - name: '@next/swc-win32-arm64-msvc' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-win32-ia32-msvc@13.5.4: - resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz} - name: '@next/swc-win32-ia32-msvc' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - registry.npmjs.org/@next/swc-win32-x64-msvc@13.5.4: - resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz} - name: '@next/swc-win32-x64-msvc' - version: 13.5.4 - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - registry.npmjs.org/@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} name: '@nodelib/fs.scandir' @@ -2113,12 +1966,6 @@ packages: rollup: registry.npmjs.org/rollup@3.23.0 dev: true - registry.npmjs.org/@rushstack/eslint-patch@1.5.1: - resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz} - name: '@rushstack/eslint-patch' - version: 1.5.1 - dev: true - registry.npmjs.org/@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz} name: '@sideway/address' @@ -2390,14 +2237,6 @@ packages: version: 0.1.2 dev: true - registry.npmjs.org/@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz} - name: '@swc/helpers' - version: 0.5.2 - dependencies: - tslib: registry.npmjs.org/tslib@2.6.2 - dev: false - registry.npmjs.org/@swc/types@0.1.5: resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz} name: '@swc/types' @@ -2742,12 +2581,6 @@ packages: version: 7.0.14 dev: true - registry.npmjs.org/@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz} - name: '@types/json5' - version: 0.0.29 - dev: true - registry.npmjs.org/@types/json5@0.0.30: resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json5/-/json5-0.0.30.tgz} name: '@types/json5' @@ -2808,12 +2641,6 @@ packages: version: 18.7.16 dev: true - registry.npmjs.org/@types/node@20.0.0: - resolution: {integrity: sha512-cD2uPTDnQQCVpmRefonO98/PPijuOnnEy5oytWJFPY1N9aJCz2wJ5kSGWO+zJoed2cY2JxQh6yBuUq4vIn61hw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-20.0.0.tgz} - name: '@types/node' - version: 20.0.0 - dev: true - registry.npmjs.org/@types/node@20.8.7: resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz} name: '@types/node' @@ -2956,11 +2783,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.8.0 + registry.npmjs.org/@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.9.0 name: '@typescript-eslint/eslint-plugin' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2971,11 +2798,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.9.1 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.8.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.8.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.9.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.9.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.9.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.43.0 graphemer: registry.npmjs.org/graphemer@1.4.0 @@ -3011,34 +2838,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/5.62.0 + registry.npmjs.org/@typescript-eslint/parser@6.9.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/6.9.0 name: '@typescript-eslint/parser' - version: 5.62.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@5.62.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.62.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.3) - debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) - eslint: registry.npmjs.org/eslint@8.43.0 - typescript: registry.npmjs.org/typescript@5.1.3 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/6.8.0 - name: '@typescript-eslint/parser' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3047,10 +2851,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.43.0 typescript: registry.npmjs.org/typescript@5.1.3 @@ -3068,24 +2872,14 @@ packages: '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@5.60.0 dev: true - registry.npmjs.org/@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz} + registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0: + resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz} name: '@typescript-eslint/scope-manager' - version: 5.62.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.62.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@5.62.0 - dev: true - - registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0: - resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz} - name: '@typescript-eslint/scope-manager' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 dev: true registry.npmjs.org/@typescript-eslint/type-utils@5.60.0(eslint@8.43.0)(typescript@5.1.3): @@ -3111,11 +2905,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/type-utils@6.8.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/6.8.0 + registry.npmjs.org/@typescript-eslint/type-utils@6.9.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/6.9.0 name: '@typescript-eslint/type-utils' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3124,8 +2918,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.8.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.9.0(eslint@8.43.0)(typescript@5.1.3) debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.43.0 ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) @@ -3141,17 +2935,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz} + registry.npmjs.org/@typescript-eslint/types@6.9.0: + resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz} name: '@typescript-eslint/types' - version: 5.62.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - registry.npmjs.org/@typescript-eslint/types@6.8.0: - resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz} - name: '@typescript-eslint/types' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -3179,35 +2966,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.62.0 + registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3): + resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.9.0 name: '@typescript-eslint/typescript-estree' - version: 5.62.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.62.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@5.62.0 - debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) - globby: registry.npmjs.org/globby@11.1.0 - is-glob: registry.npmjs.org/is-glob@4.0.3 - semver: registry.npmjs.org/semver@7.5.4 - tsutils: registry.npmjs.org/tsutils@3.21.0(typescript@5.1.3) - typescript: registry.npmjs.org/typescript@5.1.3 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3): - resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.8.0 - name: '@typescript-eslint/typescript-estree' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -3215,8 +2978,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) globby: registry.npmjs.org/globby@11.1.0 is-glob: registry.npmjs.org/is-glob@4.0.3 @@ -3250,11 +3013,11 @@ packages: - typescript dev: true - registry.npmjs.org/@typescript-eslint/utils@6.8.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/6.8.0 + registry.npmjs.org/@typescript-eslint/utils@6.9.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/6.9.0 name: '@typescript-eslint/utils' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3262,9 +3025,9 @@ packages: '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.0) '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.14 '@types/semver': registry.npmjs.org/@types/semver@7.5.4 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3) eslint: registry.npmjs.org/eslint@8.43.0 semver: registry.npmjs.org/semver@7.5.4 transitivePeerDependencies: @@ -3282,23 +3045,13 @@ packages: eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true - registry.npmjs.org/@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz} + registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0: + resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz} name: '@typescript-eslint/visitor-keys' - version: 5.62.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.62.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 - dev: true - - registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0: - resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz} - name: '@typescript-eslint/visitor-keys' - version: 6.8.0 + version: 6.9.0 engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true @@ -3508,19 +3261,6 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz} - name: array.prototype.findlastindex - version: 1.2.3 - engines: {node: '>= 0.4'} - dependencies: - call-bind: registry.npmjs.org/call-bind@1.0.5 - define-properties: registry.npmjs.org/define-properties@1.2.1 - es-abstract: registry.npmjs.org/es-abstract@1.22.3 - es-shim-unscopables: registry.npmjs.org/es-shim-unscopables@1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.2 - dev: true - registry.npmjs.org/array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz} name: array.prototype.flat @@ -3594,12 +3334,6 @@ packages: engines: {node: '>=0.8'} dev: true - registry.npmjs.org/ast-types-flow@0.0.7: - resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz} - name: ast-types-flow - version: 0.0.7 - dev: true - registry.npmjs.org/astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz} name: astral-regex @@ -3748,13 +3482,6 @@ packages: version: 1.12.0 dev: true - registry.npmjs.org/axe-core@4.8.2: - resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz} - name: axe-core - version: 4.8.2 - engines: {node: '>=4'} - dev: true - registry.npmjs.org/axios@0.21.4(debug@4.3.2): resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/axios/-/axios-0.21.4.tgz} id: registry.npmjs.org/axios/0.21.4 @@ -3963,6 +3690,7 @@ packages: engines: {node: '>=10.16.0'} dependencies: streamsearch: registry.npmjs.org/streamsearch@1.1.0 + dev: true registry.npmjs.org/cachedir@2.4.0: resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz} @@ -4194,12 +3922,6 @@ packages: string-width: registry.npmjs.org/string-width@4.2.3 dev: true - registry.npmjs.org/client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz} - name: client-only - version: 0.0.1 - dev: false - registry.npmjs.org/cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz} name: cliui @@ -4745,12 +4467,6 @@ packages: lodash: registry.npmjs.org/lodash@4.17.21 dev: false - registry.npmjs.org/damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz} - name: damerau-levenshtein - version: 1.0.8 - dev: true - registry.npmjs.org/dashdash@1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz} name: dashdash @@ -5111,6 +4827,7 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz} name: emoji-regex version: 9.2.2 + dev: false registry.npmjs.org/end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz} @@ -5119,16 +4836,6 @@ packages: dependencies: once: registry.npmjs.org/once@1.4.0 - registry.npmjs.org/enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz} - name: enhanced-resolve - version: 5.15.0 - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 - tapable: registry.npmjs.org/tapable@2.2.1 - dev: true - registry.npmjs.org/enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz} name: enquirer @@ -5353,34 +5060,6 @@ packages: engines: {node: '>=12'} dev: false - registry.npmjs.org/eslint-config-next@13.5.4(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz} - id: registry.npmjs.org/eslint-config-next/13.5.4 - name: eslint-config-next - version: 13.5.4 - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': registry.npmjs.org/@next/eslint-plugin-next@13.5.4 - '@rushstack/eslint-patch': registry.npmjs.org/@rushstack/eslint-patch@1.5.1 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.1.3) - eslint: registry.npmjs.org/eslint@8.43.0 - eslint-import-resolver-node: registry.npmjs.org/eslint-import-resolver-node@0.3.9 - eslint-import-resolver-typescript: registry.npmjs.org/eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.43.0) - eslint-plugin-import: registry.npmjs.org/eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.8.0)(eslint@8.43.0) - eslint-plugin-jsx-a11y: registry.npmjs.org/eslint-plugin-jsx-a11y@6.7.1(eslint@8.43.0) - eslint-plugin-react: registry.npmjs.org/eslint-plugin-react@7.33.2(eslint@8.43.0) - eslint-plugin-react-hooks: registry.npmjs.org/eslint-plugin-react-hooks@4.6.0(eslint@8.43.0) - typescript: registry.npmjs.org/typescript@5.1.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: true - registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.43.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz} id: registry.npmjs.org/eslint-config-prettier/8.8.0 @@ -5393,185 +5072,16 @@ packages: eslint: registry.npmjs.org/eslint@8.43.0 dev: true - registry.npmjs.org/eslint-config-turbo@1.10.15(eslint@8.43.0): - resolution: {integrity: sha512-76mpx2x818JZE26euen14utYcFDxOahZ9NaWA+6Xa4pY2ezVKVschuOxS96EQz3o3ZRSmcgBOapw/gHbN+EKxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.15.tgz} - id: registry.npmjs.org/eslint-config-turbo/1.10.15 + registry.npmjs.org/eslint-config-turbo@1.10.16(eslint@8.43.0): + resolution: {integrity: sha512-O3NQI72bQHV7FvSC6lWj66EGx8drJJjuT1kuInn6nbMLOHdMBhSUX/8uhTAlHRQdlxZk2j9HtgFCIzSc93w42g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.16.tgz} + id: registry.npmjs.org/eslint-config-turbo/1.10.16 name: eslint-config-turbo - version: 1.10.15 + version: 1.10.16 peerDependencies: eslint: '>6.6.0' dependencies: eslint: registry.npmjs.org/eslint@8.43.0 - eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo@1.10.15(eslint@8.43.0) - dev: true - - registry.npmjs.org/eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz} - name: eslint-import-resolver-node - version: 0.3.9 - dependencies: - debug: registry.npmjs.org/debug@3.2.7(supports-color@8.1.1) - is-core-module: registry.npmjs.org/is-core-module@2.13.1 - resolve: registry.npmjs.org/resolve@1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.43.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz} - id: registry.npmjs.org/eslint-import-resolver-typescript/3.6.1 - name: eslint-import-resolver-typescript - version: 3.6.1 - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) - enhanced-resolve: registry.npmjs.org/enhanced-resolve@5.15.0 - eslint: registry.npmjs.org/eslint@8.43.0 - eslint-module-utils: registry.npmjs.org/eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.43.0) - eslint-plugin-import: registry.npmjs.org/eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.8.0)(eslint@8.43.0) - fast-glob: registry.npmjs.org/fast-glob@3.3.1 - get-tsconfig: registry.npmjs.org/get-tsconfig@4.7.2 - is-core-module: registry.npmjs.org/is-core-module@2.13.1 - is-glob: registry.npmjs.org/is-glob@4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - registry.npmjs.org/eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.43.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz} - id: registry.npmjs.org/eslint-module-utils/2.8.0 - name: eslint-module-utils - version: 2.8.0 - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.1.3) - debug: registry.npmjs.org/debug@3.2.7(supports-color@8.1.1) - eslint: registry.npmjs.org/eslint@8.43.0 - eslint-import-resolver-node: registry.npmjs.org/eslint-import-resolver-node@0.3.9 - eslint-import-resolver-typescript: registry.npmjs.org/eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.43.0) - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.43.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz} - id: registry.npmjs.org/eslint-module-utils/2.8.0 - name: eslint-module-utils - version: 2.8.0 - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3) - debug: registry.npmjs.org/debug@3.2.7(supports-color@8.1.1) - eslint: registry.npmjs.org/eslint@8.43.0 - eslint-import-resolver-node: registry.npmjs.org/eslint-import-resolver-node@0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.8.0)(eslint@8.43.0): - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz} - id: registry.npmjs.org/eslint-plugin-import/2.29.0 - name: eslint-plugin-import - version: 2.29.0 - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3) - array-includes: registry.npmjs.org/array-includes@3.1.7 - array.prototype.findlastindex: registry.npmjs.org/array.prototype.findlastindex@1.2.3 - array.prototype.flat: registry.npmjs.org/array.prototype.flat@1.3.2 - array.prototype.flatmap: registry.npmjs.org/array.prototype.flatmap@1.3.2 - debug: registry.npmjs.org/debug@3.2.7(supports-color@8.1.1) - doctrine: registry.npmjs.org/doctrine@2.1.0 - eslint: registry.npmjs.org/eslint@8.43.0 - eslint-import-resolver-node: registry.npmjs.org/eslint-import-resolver-node@0.3.9 - eslint-module-utils: registry.npmjs.org/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.43.0) - hasown: registry.npmjs.org/hasown@2.0.0 - is-core-module: registry.npmjs.org/is-core-module@2.13.1 - is-glob: registry.npmjs.org/is-glob@4.0.3 - minimatch: registry.npmjs.org/minimatch@3.1.2 - object.fromentries: registry.npmjs.org/object.fromentries@2.0.7 - object.groupby: registry.npmjs.org/object.groupby@1.0.1 - object.values: registry.npmjs.org/object.values@1.1.7 - semver: registry.npmjs.org/semver@6.3.1 - tsconfig-paths: registry.npmjs.org/tsconfig-paths@3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - registry.npmjs.org/eslint-plugin-jsx-a11y@6.7.1(eslint@8.43.0): - resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz} - id: registry.npmjs.org/eslint-plugin-jsx-a11y/6.7.1 - name: eslint-plugin-jsx-a11y - version: 6.7.1 - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime@7.23.2 - aria-query: registry.npmjs.org/aria-query@5.3.0 - array-includes: registry.npmjs.org/array-includes@3.1.7 - array.prototype.flatmap: registry.npmjs.org/array.prototype.flatmap@1.3.2 - ast-types-flow: registry.npmjs.org/ast-types-flow@0.0.7 - axe-core: registry.npmjs.org/axe-core@4.8.2 - axobject-query: registry.npmjs.org/axobject-query@3.2.1 - damerau-levenshtein: registry.npmjs.org/damerau-levenshtein@1.0.8 - emoji-regex: registry.npmjs.org/emoji-regex@9.2.2 - eslint: registry.npmjs.org/eslint@8.43.0 - has: registry.npmjs.org/has@1.0.4 - jsx-ast-utils: registry.npmjs.org/jsx-ast-utils@3.3.5 - language-tags: registry.npmjs.org/language-tags@1.0.5 - minimatch: registry.npmjs.org/minimatch@3.1.2 - object.entries: registry.npmjs.org/object.entries@1.1.7 - object.fromentries: registry.npmjs.org/object.fromentries@2.0.7 - semver: registry.npmjs.org/semver@6.3.1 + eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo@1.10.16(eslint@8.43.0) dev: true registry.npmjs.org/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.43.0)(prettier@2.8.8): @@ -5594,18 +5104,6 @@ packages: prettier-linter-helpers: registry.npmjs.org/prettier-linter-helpers@1.0.0 dev: true - registry.npmjs.org/eslint-plugin-react-hooks@4.6.0(eslint@8.43.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz} - id: registry.npmjs.org/eslint-plugin-react-hooks/4.6.0 - name: eslint-plugin-react-hooks - version: 4.6.0 - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: registry.npmjs.org/eslint@8.43.0 - dev: true - registry.npmjs.org/eslint-plugin-react@7.33.2(eslint@8.43.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz} id: registry.npmjs.org/eslint-plugin-react/7.33.2 @@ -5665,11 +5163,11 @@ packages: - ts-node dev: true - registry.npmjs.org/eslint-plugin-turbo@1.10.15(eslint@8.43.0): - resolution: {integrity: sha512-Tv4QSKV/U56qGcTqS/UgOvb9HcKFmWOQcVh3HEaj7of94lfaENgfrtK48E2CckQf7amhKs1i+imhCsNCKjkQyA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.15.tgz} - id: registry.npmjs.org/eslint-plugin-turbo/1.10.15 + registry.npmjs.org/eslint-plugin-turbo@1.10.16(eslint@8.43.0): + resolution: {integrity: sha512-ZjrR88MTN64PNGufSEcM0tf+V1xFYVbeiMeuIqr0aiABGomxFLo4DBkQ7WI4WzkZtWQSIA2sP+yxqSboEfL9MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.16.tgz} + id: registry.npmjs.org/eslint-plugin-turbo/1.10.16 name: eslint-plugin-turbo - version: 1.10.15 + version: 1.10.16 peerDependencies: eslint: '>6.6.0' dependencies: @@ -6306,14 +5804,6 @@ packages: get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.2 dev: true - registry.npmjs.org/get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz} - name: get-tsconfig - version: 4.7.2 - dependencies: - resolve-pkg-maps: registry.npmjs.org/resolve-pkg-maps@1.0.0 - dev: true - registry.npmjs.org/getos@3.2.1: resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/getos/-/getos-3.2.1.tgz} name: getos @@ -6360,25 +5850,6 @@ packages: is-glob: registry.npmjs.org/is-glob@4.0.3 dev: true - registry.npmjs.org/glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz} - name: glob-to-regexp - version: 0.4.1 - dev: false - - registry.npmjs.org/glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob/-/glob-7.1.7.tgz} - name: glob - version: 7.1.7 - dependencies: - fs.realpath: registry.npmjs.org/fs.realpath@1.0.0 - inflight: registry.npmjs.org/inflight@1.0.6 - inherits: registry.npmjs.org/inherits@2.0.4 - minimatch: registry.npmjs.org/minimatch@3.1.2 - once: registry.npmjs.org/once@1.4.0 - path-is-absolute: registry.npmjs.org/path-is-absolute@1.0.1 - dev: true - registry.npmjs.org/glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob/-/glob-7.2.3.tgz} name: glob @@ -6566,13 +6037,6 @@ packages: has-symbols: registry.npmjs.org/has-symbols@1.0.3 dev: true - registry.npmjs.org/has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has/-/has-1.0.4.tgz} - name: has - version: 1.0.4 - engines: {node: '>= 0.4.0'} - dev: true - registry.npmjs.org/hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz} name: hasown @@ -7334,15 +6798,6 @@ packages: version: 5.0.1 dev: true - registry.npmjs.org/json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json5/-/json5-1.0.2.tgz} - name: json5 - version: 1.0.2 - hasBin: true - dependencies: - minimist: registry.npmjs.org/minimist@1.2.8 - dev: true - registry.npmjs.org/json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json5/-/json5-2.2.3.tgz} name: json5 @@ -7431,20 +6886,6 @@ packages: version: 0.27.0 dev: true - registry.npmjs.org/language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz} - name: language-subtag-registry - version: 0.3.22 - dev: true - - registry.npmjs.org/language-tags@1.0.5: - resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz} - name: language-tags - version: 1.0.5 - dependencies: - language-subtag-registry: registry.npmjs.org/language-subtag-registry@0.3.22 - dev: true - registry.npmjs.org/lazy-ass@1.6.0: resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz} name: lazy-ass @@ -8396,48 +7837,6 @@ packages: - supports-color dev: false - registry.npmjs.org/next@13.5.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/next/-/next-13.5.4.tgz} - id: registry.npmjs.org/next/13.5.4 - name: next - version: 13.5.4 - engines: {node: '>=16.14.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true - dependencies: - '@next/env': registry.npmjs.org/@next/env@13.5.4 - '@swc/helpers': registry.npmjs.org/@swc/helpers@0.5.2 - busboy: registry.npmjs.org/busboy@1.6.0 - caniuse-lite: registry.npmjs.org/caniuse-lite@1.0.30001553 - postcss: registry.npmjs.org/postcss@8.4.31 - react: registry.npmjs.org/react@18.2.0 - react-dom: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) - styled-jsx: registry.npmjs.org/styled-jsx@5.1.1(react@18.2.0) - watchpack: registry.npmjs.org/watchpack@2.4.0 - optionalDependencies: - '@next/swc-darwin-arm64': registry.npmjs.org/@next/swc-darwin-arm64@13.5.4 - '@next/swc-darwin-x64': registry.npmjs.org/@next/swc-darwin-x64@13.5.4 - '@next/swc-linux-arm64-gnu': registry.npmjs.org/@next/swc-linux-arm64-gnu@13.5.4 - '@next/swc-linux-arm64-musl': registry.npmjs.org/@next/swc-linux-arm64-musl@13.5.4 - '@next/swc-linux-x64-gnu': registry.npmjs.org/@next/swc-linux-x64-gnu@13.5.4 - '@next/swc-linux-x64-musl': registry.npmjs.org/@next/swc-linux-x64-musl@13.5.4 - '@next/swc-win32-arm64-msvc': registry.npmjs.org/@next/swc-win32-arm64-msvc@13.5.4 - '@next/swc-win32-ia32-msvc': registry.npmjs.org/@next/swc-win32-ia32-msvc@13.5.4 - '@next/swc-win32-x64-msvc': registry.npmjs.org/@next/swc-win32-x64-msvc@13.5.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - registry.npmjs.org/nlcst-to-string@3.1.1: resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz} name: nlcst-to-string @@ -8594,17 +7993,6 @@ packages: es-abstract: registry.npmjs.org/es-abstract@1.22.3 dev: true - registry.npmjs.org/object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz} - name: object.groupby - version: 1.0.1 - dependencies: - call-bind: registry.npmjs.org/call-bind@1.0.5 - define-properties: registry.npmjs.org/define-properties@1.2.1 - es-abstract: registry.npmjs.org/es-abstract@1.22.3 - get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.2 - dev: true - registry.npmjs.org/object.hasown@1.1.3: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz} name: object.hasown @@ -10006,12 +9394,6 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz} - name: resolve-pkg-maps - version: 1.0.0 - dev: true - registry.npmjs.org/resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz} name: resolve @@ -10685,6 +10067,7 @@ packages: name: streamsearch version: 1.1.0 engines: {node: '>=10.0.0'} + dev: true registry.npmjs.org/streamx@2.15.1: resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz} @@ -10867,26 +10250,6 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/styled-jsx@5.1.1(react@18.2.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz} - id: registry.npmjs.org/styled-jsx/5.1.1 - name: styled-jsx - version: 5.1.1 - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - dependencies: - client-only: registry.npmjs.org/client-only@0.0.1 - react: registry.npmjs.org/react@18.2.0 - dev: false - registry.npmjs.org/stylehacks@6.0.0(postcss@8.4.21): resolution: {integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz} id: registry.npmjs.org/stylehacks/6.0.0 @@ -11194,13 +10557,6 @@ packages: picocolors: registry.npmjs.org/picocolors@1.0.0 dev: true - registry.npmjs.org/tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz} - name: tapable - version: 2.2.1 - engines: {node: '>=6'} - dev: true - registry.npmjs.org/tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz} name: tar-fs @@ -11388,17 +10744,6 @@ packages: typescript: registry.npmjs.org/typescript@5.1.3 dev: true - registry.npmjs.org/tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz} - name: tsconfig-paths - version: 3.14.2 - dependencies: - '@types/json5': registry.npmjs.org/@types/json5@0.0.29 - json5: registry.npmjs.org/json5@1.0.2 - minimist: registry.npmjs.org/minimist@1.2.8 - strip-bom: registry.npmjs.org/strip-bom@3.0.0 - dev: true - registry.npmjs.org/tsconfig-resolver@3.0.1: resolution: {integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tsconfig-resolver/-/tsconfig-resolver-3.0.1.tgz} name: tsconfig-resolver @@ -12033,16 +11378,6 @@ packages: - debug dev: true - registry.npmjs.org/watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz} - name: watchpack - version: 2.4.0 - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: registry.npmjs.org/glob-to-regexp@0.4.1 - graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 - dev: false - registry.npmjs.org/wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz} name: wcwidth From 92272080e36c232c87f4bc260e21f507558897b1 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 2 Nov 2023 14:04:41 +0100 Subject: [PATCH 10/30] Added more tests for edges, pane --- .../src/routes/tests/edges/nodesAndEdges.ts | 20 +++++----- .../svelte/src/routes/tests/pane/+page.svelte | 9 +++++ .../svelte/src/routes/tests/pane/Flow.svelte | 12 ++++++ .../src/routes/tests/pane/nodesAndEdges.ts | 35 +++++++++++++++++ tests/playwright/e2e/edges.spec.ts | 38 +++++++++++++++++++ tests/playwright/e2e/pane.spec.ts | 36 ++++++++++++++++++ 6 files changed, 140 insertions(+), 10 deletions(-) create mode 100644 examples/svelte/src/routes/tests/pane/+page.svelte create mode 100644 examples/svelte/src/routes/tests/pane/Flow.svelte create mode 100644 examples/svelte/src/routes/tests/pane/nodesAndEdges.ts create mode 100644 tests/playwright/e2e/pane.spec.ts diff --git a/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts b/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts index 6e0d969a..b5452b8c 100644 --- a/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts +++ b/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts @@ -56,17 +56,17 @@ export const initialNodes: Node[] = [ id: '11', data: { label: '11' }, position: { x: 100, y: 500 } - }, - { - id: '12', - data: { label: '12' }, - position: { x: -100, y: 600 } - }, - { - id: '13', - data: { label: '13' }, - position: { x: 100, y: 600 } } + // { + // id: '12', + // data: { label: '12' }, + // position: { x: -100, y: 600 } + // }, + // { + // id: '13', + // data: { label: '13' }, + // position: { x: 100, y: 600 } + // } ]; export const initialEdges: Edge[] = [ diff --git a/examples/svelte/src/routes/tests/pane/+page.svelte b/examples/svelte/src/routes/tests/pane/+page.svelte new file mode 100644 index 00000000..12dec33c --- /dev/null +++ b/examples/svelte/src/routes/tests/pane/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/tests/pane/Flow.svelte b/examples/svelte/src/routes/tests/pane/Flow.svelte new file mode 100644 index 00000000..6686c907 --- /dev/null +++ b/examples/svelte/src/routes/tests/pane/Flow.svelte @@ -0,0 +1,12 @@ + + + diff --git a/examples/svelte/src/routes/tests/pane/nodesAndEdges.ts b/examples/svelte/src/routes/tests/pane/nodesAndEdges.ts new file mode 100644 index 00000000..81e88cc4 --- /dev/null +++ b/examples/svelte/src/routes/tests/pane/nodesAndEdges.ts @@ -0,0 +1,35 @@ +import type { Edge, Node } from '@xyflow/svelte'; + +export const initialNodes: Node[] = [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + } +]; + +export const initialEdges: Edge[] = [ + { + id: 'edge-with-class', + source: '1', + target: '2', + class: 'edge-class-test' + }, + { + id: 'edge-with-style', + source: '1', + target: '3', + style: 'stroke: red;' + } +]; diff --git a/tests/playwright/e2e/edges.spec.ts b/tests/playwright/e2e/edges.spec.ts index f91d89e0..033bc107 100644 --- a/tests/playwright/e2e/edges.spec.ts +++ b/tests/playwright/e2e/edges.spec.ts @@ -118,5 +118,43 @@ test.describe('EDGES', () => { await page.keyboard.press('Backspace'); await expect(edge).toBeAttached(); }); + + test('zIndex sets z-index of edge svgs', async ({ page }) => { + const svg = page.locator('svg', { has: page.locator('#z-index') }); + + await expect(svg).toBeAttached(); + await expect(svg).toHaveCSS('z-index', '3141592'); + }); + + test('aria-lable is working', async ({ page }) => { + const edge = page.locator('[data-id="aria-label"]'); + + await expect(edge).toHaveAttribute('aria-label', 'aria-label-test'); + }); + + test('interactionWidth is working', async ({ page }) => { + const edge = page.locator('[data-id="interaction-width"]'); + + await expect(edge).toBeAttached(); + + const edgeBox = await edge.boundingBox(); + + //FIXME: Negative values are not working. Investigate further + await page.mouse.move(edgeBox!.x + edgeBox!.width * 0.5 + 21, edgeBox!.y + edgeBox!.height * 0.5); + await page.mouse.down(); + await page.mouse.up(); + + // TODO: times out on webkit + await expect(edge).toHaveClass(/selected/); + }); + + test('markerEnd is setting marker-end', async ({ page }) => { + const edge = page.locator('#markers'); + + await expect(edge).toBeAttached(); + + await expect(edge).toHaveAttribute('marker-start', 'url(#1__type=arrowclosed)'); + await expect(edge).toHaveAttribute('marker-end', 'url(#1__type=arrow)'); + }); }); }); diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts new file mode 100644 index 00000000..c3899f12 --- /dev/null +++ b/tests/playwright/e2e/pane.spec.ts @@ -0,0 +1,36 @@ +import { test, expect } from '@playwright/test'; + +import { FRAMEWORK } from './constants'; + +test.describe('PANE', () => { + test.beforeEach(async ({ page }) => { + // Go to the starting url before each test. + await page.goto('/tests/pane'); + }); + + test.describe('pan', () => { + test('panning the pane', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + const paneBox = await pane.boundingBox(); + + const viewportTransformBeforePan = await viewport.evaluate((element) => { + return element.style.transform; + }); + + await pane.hover(); + await page.mouse.down(); + await page.mouse.move(paneBox!.x + 150, paneBox!.y + 100); + await page.mouse.up(); + + const viewportTransformAfterPan = await viewport.evaluate((element) => { + return element.style.transform; + }); + + expect(viewportTransformBeforePan).toBe(viewportTransformAfterPan); + }); + }); +}); From 0b7613c64eb1bff80491f1db686f9a5c0fd0d80f Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 2 Nov 2023 16:29:22 +0100 Subject: [PATCH 11/30] Added tests for pane --- .../tests/pane/{ => default}/+page.svelte | 0 .../tests/pane/{ => default}/Flow.svelte | 2 +- .../tests/pane/{ => default}/nodesAndEdges.ts | 10 +- .../tests/pane/non-default/+page.svelte | 9 + .../routes/tests/pane/non-default/Flow.svelte | 19 ++ .../tests/pane/non-default/nodesAndEdges.ts | 33 ++++ tests/playwright/e2e/pane.spec.ts | 182 ++++++++++++++++-- 7 files changed, 233 insertions(+), 22 deletions(-) rename examples/svelte/src/routes/tests/pane/{ => default}/+page.svelte (100%) rename examples/svelte/src/routes/tests/pane/{ => default}/Flow.svelte (82%) rename examples/svelte/src/routes/tests/pane/{ => default}/nodesAndEdges.ts (75%) create mode 100644 examples/svelte/src/routes/tests/pane/non-default/+page.svelte create mode 100644 examples/svelte/src/routes/tests/pane/non-default/Flow.svelte create mode 100644 examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts diff --git a/examples/svelte/src/routes/tests/pane/+page.svelte b/examples/svelte/src/routes/tests/pane/default/+page.svelte similarity index 100% rename from examples/svelte/src/routes/tests/pane/+page.svelte rename to examples/svelte/src/routes/tests/pane/default/+page.svelte diff --git a/examples/svelte/src/routes/tests/pane/Flow.svelte b/examples/svelte/src/routes/tests/pane/default/Flow.svelte similarity index 82% rename from examples/svelte/src/routes/tests/pane/Flow.svelte rename to examples/svelte/src/routes/tests/pane/default/Flow.svelte index 6686c907..ae2093ed 100644 --- a/examples/svelte/src/routes/tests/pane/Flow.svelte +++ b/examples/svelte/src/routes/tests/pane/default/Flow.svelte @@ -9,4 +9,4 @@ const edges = writable(initialEdges); - + diff --git a/examples/svelte/src/routes/tests/pane/nodesAndEdges.ts b/examples/svelte/src/routes/tests/pane/default/nodesAndEdges.ts similarity index 75% rename from examples/svelte/src/routes/tests/pane/nodesAndEdges.ts rename to examples/svelte/src/routes/tests/pane/default/nodesAndEdges.ts index 81e88cc4..7d2e0522 100644 --- a/examples/svelte/src/routes/tests/pane/nodesAndEdges.ts +++ b/examples/svelte/src/routes/tests/pane/default/nodesAndEdges.ts @@ -21,15 +21,13 @@ export const initialNodes: Node[] = [ export const initialEdges: Edge[] = [ { - id: 'edge-with-class', + id: 'first-edge', source: '1', - target: '2', - class: 'edge-class-test' + target: '2' }, { - id: 'edge-with-style', + id: 'second-edge', source: '1', - target: '3', - style: 'stroke: red;' + target: '3' } ]; diff --git a/examples/svelte/src/routes/tests/pane/non-default/+page.svelte b/examples/svelte/src/routes/tests/pane/non-default/+page.svelte new file mode 100644 index 00000000..12dec33c --- /dev/null +++ b/examples/svelte/src/routes/tests/pane/non-default/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/tests/pane/non-default/Flow.svelte b/examples/svelte/src/routes/tests/pane/non-default/Flow.svelte new file mode 100644 index 00000000..d06a8de3 --- /dev/null +++ b/examples/svelte/src/routes/tests/pane/non-default/Flow.svelte @@ -0,0 +1,19 @@ + + + diff --git a/examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts b/examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts new file mode 100644 index 00000000..7d2e0522 --- /dev/null +++ b/examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts @@ -0,0 +1,33 @@ +import type { Edge, Node } from '@xyflow/svelte'; + +export const initialNodes: Node[] = [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + } +]; + +export const initialEdges: Edge[] = [ + { + id: 'first-edge', + source: '1', + target: '2' + }, + { + id: 'second-edge', + source: '1', + target: '3' + } +]; diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts index c3899f12..fab03bdb 100644 --- a/tests/playwright/e2e/pane.spec.ts +++ b/tests/playwright/e2e/pane.spec.ts @@ -1,15 +1,36 @@ import { test, expect } from '@playwright/test'; import { FRAMEWORK } from './constants'; +import { transform } from 'typescript'; -test.describe('PANE', () => { - test.beforeEach(async ({ page }) => { - // Go to the starting url before each test. - await page.goto('/tests/pane'); +const MATCH_ALL_NUMBERS = /[\d\.]+/g; + +// Type "Locator" not exported... +async function getTransform(element) { + const transformString = await element.evaluate((el) => { + return el.style.transform; }); - test.describe('pan', () => { - test('panning the pane', async ({ page }) => { + // Parses all numbers in f.ex "translate(590px, 324px) scale(2)"" + const transforms = transformString.match(MATCH_ALL_NUMBERS); + return { + translateX: parseFloat(transforms![0]), + translateY: parseFloat(transforms![1]), + scale: parseFloat(transforms![2]), + }; +} + +test.describe('PANE DEFAULT', () => { + test.beforeEach(async ({ page }) => { + // Go to the starting url before each test. + await page.goto('/tests/pane/default'); + + // Wait till the edges are rendered + await page.waitForSelector('#first-edge', { timeout: 5000 }); + }); + + test.describe('pan & zoom', () => { + test('panning the pane moves it', async ({ page }) => { const pane = page.locator(`.${FRAMEWORK}-flow__pane`); const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); @@ -17,20 +38,151 @@ test.describe('PANE', () => { const paneBox = await pane.boundingBox(); - const viewportTransformBeforePan = await viewport.evaluate((element) => { - return element.style.transform; - }); + const transformsBefore = await getTransform(viewport); await pane.hover(); await page.mouse.down(); - await page.mouse.move(paneBox!.x + 150, paneBox!.y + 100); - await page.mouse.up(); + // Move pane by 100, 100 + await page.mouse.move(paneBox!.x + paneBox!.width * 0.5 + 100, paneBox!.y + paneBox!.height * 0.5 + 100); - const viewportTransformAfterPan = await viewport.evaluate((element) => { - return element.style.transform; - }); + const transformsAfter = await getTransform(viewport); - expect(viewportTransformBeforePan).toBe(viewportTransformAfterPan); + expect(transformsAfter.translateX - transformsBefore.translateX).toBe(100); + expect(transformsAfter.translateY - transformsBefore.translateY).toBe(100); + }); + + test('scrolling the default pane zooms it', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + const transformsBefore = await getTransform(viewport); + + await pane.hover(); + await page.mouse.wheel(0, 100); + + const transformsAfter = await getTransform(viewport); + + expect(transformsAfter.scale).not.toBe(transformsBefore.scale); + }); + }); + + test.describe('minZoom & maxZoom', () => { + test('minZoom works as intended', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + await pane.hover(); + + // Zoom out + await page.mouse.wheel(5000, 5000); + + const transformsMinZoom = await getTransform(viewport); + expect(transformsMinZoom.scale).toBe(0.25); + }); + + test('maxZoom works as intended', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + await pane.hover(); + + // Zoom in + await page.mouse.wheel(-5000, -5000); + + const transformsMaxZoom = await getTransform(viewport); + expect(transformsMaxZoom.scale).toBe(4); + }); + }); + + test.describe('autoPan', () => { + test('autoPanOnNodeDrag works as intended', async ({ page }) => { + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + const node = page.locator('[data-id="1"]'); + + await expect(node).toBeAttached(); + + const transformBefore = await getTransform(viewport); + + await node.hover(); + await page.mouse.down(); + await page.mouse.move(0, 0); + await page.waitForTimeout(500); + await page.mouse.move(100, 100); + + const transformAfter = await getTransform(viewport); + + await expect(transformAfter.translateX).toBeGreaterThan(transformBefore.translateX); + await expect(transformAfter.translateY).toBeGreaterThan(transformBefore.translateY); + }); + + test('autoPanOnConnect works as intended', async ({ page }) => { + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + const handle = page.locator('[data-id="1"] .svelte-flow__handle'); + + await expect(handle).toBeAttached(); + + const transformBefore = await getTransform(viewport); + + await handle.hover(); + await page.mouse.down(); + await page.mouse.move(0, 0); + await page.waitForTimeout(500); + await page.mouse.move(100, 100); + + const transformAfter = await getTransform(viewport); + + await expect(transformAfter.translateX).toBeGreaterThan(transformBefore.translateX); + await expect(transformAfter.translateY).toBeGreaterThan(transformBefore.translateY); }); }); }); + +test.describe('PANE NON-DEFAULT', () => { + test.beforeEach(async ({ page }) => { + // Go to the starting url before each test. + await page.goto('/tests/pane/non-default'); + + // Wait till the edges are rendered + await page.waitForSelector('#first-edge', { timeout: 5000 }); + }); + + test.describe('pan & zoom', () => { + test('panOnScroll pans the pane on scrolling', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + const transformsBefore = await getTransform(viewport); + + await pane.hover(); + await page.mouse.wheel(100, 100); + + const transformsAfter = await getTransform(viewport); + + expect(transformsAfter.translateX).not.toBe(transformsBefore.translateX); + expect(transformsAfter.translateY).not.toBe(transformsBefore.translateY); + }); + + test('intialViewport', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + const viewportTransform = await getTransform(viewport); + + expect(viewportTransform.translateX).toBe(1.23); + expect(viewportTransform.translateY).toBe(9.87); + expect(viewportTransform.scale).toBe(1.234); + }); + }); +}); + +//TODO: Inverse: Not zooming/panning when disabled From 57e6e389c9c05f34fcffbe3aa621502b1e373533 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 13:04:13 +0100 Subject: [PATCH 12/30] implemented generic tests for config based test flow creation --- tests/playwright/e2e/edges.spec.ts | 2 +- tests/playwright/e2e/nodes.spec.ts | 2 +- tests/playwright/e2e/pane.spec.ts | 5 ++--- tests/playwright/playwright.svelte.config.ts | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/playwright/e2e/edges.spec.ts b/tests/playwright/e2e/edges.spec.ts index 033bc107..1318ee4b 100644 --- a/tests/playwright/e2e/edges.spec.ts +++ b/tests/playwright/e2e/edges.spec.ts @@ -5,7 +5,7 @@ import { FRAMEWORK } from './constants'; test.describe('EDGES', () => { test.beforeEach(async ({ page }) => { // Go to the starting url before each test. - await page.goto('/tests/edges'); + await page.goto('/tests/generic/edges/general'); // Timeout get's ignored and tests timeout after 200ms ??? // page.waitForSelector('[data-id="edge-with-class"]', { timeout: 5000 }); diff --git a/tests/playwright/e2e/nodes.spec.ts b/tests/playwright/e2e/nodes.spec.ts index 697cefa6..f0e97b0c 100644 --- a/tests/playwright/e2e/nodes.spec.ts +++ b/tests/playwright/e2e/nodes.spec.ts @@ -5,7 +5,7 @@ import { FRAMEWORK } from './constants'; test.describe('NODES', () => { test.beforeEach(async ({ page }) => { // Go to the starting url before each test. - await page.goto('/tests/nodes'); + await page.goto('/tests/generic/nodes/general'); }); test.describe('selection', () => { diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts index fab03bdb..9c3d83a0 100644 --- a/tests/playwright/e2e/pane.spec.ts +++ b/tests/playwright/e2e/pane.spec.ts @@ -1,7 +1,6 @@ import { test, expect } from '@playwright/test'; import { FRAMEWORK } from './constants'; -import { transform } from 'typescript'; const MATCH_ALL_NUMBERS = /[\d\.]+/g; @@ -23,7 +22,7 @@ async function getTransform(element) { test.describe('PANE DEFAULT', () => { test.beforeEach(async ({ page }) => { // Go to the starting url before each test. - await page.goto('/tests/pane/default'); + await page.goto('/tests/generic/pane/general'); // Wait till the edges are rendered await page.waitForSelector('#first-edge', { timeout: 5000 }); @@ -146,7 +145,7 @@ test.describe('PANE DEFAULT', () => { test.describe('PANE NON-DEFAULT', () => { test.beforeEach(async ({ page }) => { // Go to the starting url before each test. - await page.goto('/tests/pane/non-default'); + await page.goto('/tests/generic/pane/non-defaults'); // Wait till the edges are rendered await page.waitForSelector('#first-edge', { timeout: 5000 }); diff --git a/tests/playwright/playwright.svelte.config.ts b/tests/playwright/playwright.svelte.config.ts index f92bd3dc..b08b566c 100644 --- a/tests/playwright/playwright.svelte.config.ts +++ b/tests/playwright/playwright.svelte.config.ts @@ -1,4 +1,4 @@ -import { defineConfig, devices } from '@playwright/test'; +import { defineConfig } from '@playwright/test'; import { sharedConfigWithPort } from './playwright.shared.config'; const port = 5173; @@ -6,7 +6,7 @@ const port = 5173; export default defineConfig({ ...sharedConfigWithPort(port), webServer: { - command: 'cd ../../examples/svelte && pnpm run dev', + command: 'cd ../../examples/svelte && pnpm run dev --port 5173', port: port, reuseExistingServer: !process.env.CI, }, From 3676670c4403a63dd4d3d18c2c66e591ff61655b Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 13:04:44 +0100 Subject: [PATCH 13/30] implemented generic tests for config based test flow creation --- examples/svelte/src/app.d.ts | 7 + .../svelte/src/generic-tests/edges/general.ts | 161 ++++++++++++++++++ .../nodes/components}/DragHandleNode.svelte | 0 .../svelte/src/generic-tests/nodes/general.ts | 91 ++++++++++ .../svelte/src/generic-tests/pane/general.ts | 37 ++++ .../src/generic-tests/pane/non-defaults.ts | 38 +++++ .../svelte/src/routes/tests/edges/Flow.svelte | 12 -- .../src/routes/tests/edges/nodesAndEdges.ts | 157 ----------------- .../[topic]/[example]}/+page.svelte | 4 +- .../tests/generic/[topic]/[example]/+page.ts | 22 +++ .../generic/[topic]/[example]/Flow.svelte | 16 ++ .../src/routes/tests/nodes/+page.svelte | 9 - .../svelte/src/routes/tests/nodes/Flow.svelte | 18 -- .../src/routes/tests/nodes/nodesAndEdges.ts | 84 --------- .../routes/tests/pane/default/+page.svelte | 9 - .../src/routes/tests/pane/default/Flow.svelte | 12 -- .../tests/pane/default/nodesAndEdges.ts | 33 ---- .../tests/pane/non-default/+page.svelte | 9 - .../routes/tests/pane/non-default/Flow.svelte | 19 --- .../tests/pane/non-default/nodesAndEdges.ts | 33 ---- 20 files changed, 375 insertions(+), 396 deletions(-) create mode 100644 examples/svelte/src/generic-tests/edges/general.ts rename examples/svelte/src/{routes/tests/nodes => generic-tests/nodes/components}/DragHandleNode.svelte (100%) create mode 100644 examples/svelte/src/generic-tests/nodes/general.ts create mode 100644 examples/svelte/src/generic-tests/pane/general.ts create mode 100644 examples/svelte/src/generic-tests/pane/non-defaults.ts delete mode 100644 examples/svelte/src/routes/tests/edges/Flow.svelte delete mode 100644 examples/svelte/src/routes/tests/edges/nodesAndEdges.ts rename examples/svelte/src/routes/tests/{edges => generic/[topic]/[example]}/+page.svelte (75%) create mode 100644 examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts create mode 100644 examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte delete mode 100644 examples/svelte/src/routes/tests/nodes/+page.svelte delete mode 100644 examples/svelte/src/routes/tests/nodes/Flow.svelte delete mode 100644 examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts delete mode 100644 examples/svelte/src/routes/tests/pane/default/+page.svelte delete mode 100644 examples/svelte/src/routes/tests/pane/default/Flow.svelte delete mode 100644 examples/svelte/src/routes/tests/pane/default/nodesAndEdges.ts delete mode 100644 examples/svelte/src/routes/tests/pane/non-default/+page.svelte delete mode 100644 examples/svelte/src/routes/tests/pane/non-default/Flow.svelte delete mode 100644 examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts diff --git a/examples/svelte/src/app.d.ts b/examples/svelte/src/app.d.ts index f59b884c..343f3fd6 100644 --- a/examples/svelte/src/app.d.ts +++ b/examples/svelte/src/app.d.ts @@ -1,4 +1,7 @@ // See https://kit.svelte.dev/docs/types#app + +import type { Edge, Node, SvelteFlowProps } from '@xyflow/svelte'; + // for information about these interfaces declare global { namespace App { @@ -7,6 +10,10 @@ declare global { // interface PageData {} // interface Platform {} } + + interface GenericTestCase { + svelteFlowProps: Omit & { nodes: Node[]; edges: Edge[] }; + } } export {}; diff --git a/examples/svelte/src/generic-tests/edges/general.ts b/examples/svelte/src/generic-tests/edges/general.ts new file mode 100644 index 00000000..cc05aada --- /dev/null +++ b/examples/svelte/src/generic-tests/edges/general.ts @@ -0,0 +1,161 @@ +import { MarkerType } from '@xyflow/svelte'; + +export default { + svelteFlowProps: { + fitView: true, + nodes: [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + }, + { + id: '4', + data: { label: '4' }, + position: { x: -100, y: 200 } + }, + { + id: '5', + data: { label: '5' }, + position: { x: 100, y: 200 } + }, + { + id: '6', + data: { label: '6' }, + position: { x: -100, y: 300 } + }, + { + id: '7', + data: { label: '7' }, + position: { x: 100, y: 300 } + }, + { + id: '8', + data: { label: '8' }, + position: { x: -100, y: 400 } + }, + { + id: '9', + data: { label: '9' }, + position: { x: 100, y: 400 } + }, + { + id: '10', + data: { label: '10' }, + position: { x: -100, y: 500 } + }, + { + id: '11', + data: { label: '11' }, + position: { x: 100, y: 500 } + } + // { + // id: '12', + // data: { label: '12' }, + // position: { x: -100, y: 600 } + // }, + // { + // id: '13', + // data: { label: '13' }, + // position: { x: 100, y: 600 } + // } + ], + edges: [ + { + id: 'edge-with-class', + source: '1', + target: '2', + class: 'edge-class-test' + }, + { + id: 'edge-with-style', + source: '1', + target: '3', + style: 'stroke: red;' + }, + { + id: 'hidden-edge', + source: '2', + target: '4', + label: 'hidden', + hidden: true + }, + { + id: 'animated-edge', + source: '3', + target: '5', + label: 'animated', + animated: true + }, + { + id: 'not-selectable-edge', + source: '4', + target: '6', + label: 'not-selectable', + selectable: false + }, + { + id: 'not-deletable', + source: '5', + target: '7', + label: 'not-deletable', + deletable: false + }, + { + id: 'z-index', + source: '6', + target: '8', + label: 'z-index', + zIndex: 3141592 + }, + { + id: 'aria-label', + source: '7', + target: '9', + label: 'aria-label', + ariaLabel: 'aria-label-test' + }, + { + id: 'interaction-width', + source: '8', + target: '10', + label: 'interaction-width', + interactionWidth: 42 + }, + { + id: 'markers', + source: '9', + target: '11', + label: 'markers', + markerEnd: { type: MarkerType.Arrow }, + markerStart: { type: MarkerType.ArrowClosed } + } + // { + // id: 'updatable', + // source: '9', + // target: '11', + // label: 'focusable', + // updatable: true + // }, + // { + // id: 'not-focusable', + // + // source: '5', + // target: '7', + // label: 'not-focusable', + // focusable: false + // }, + ] + } +} satisfies GenericTestCase; diff --git a/examples/svelte/src/routes/tests/nodes/DragHandleNode.svelte b/examples/svelte/src/generic-tests/nodes/components/DragHandleNode.svelte similarity index 100% rename from examples/svelte/src/routes/tests/nodes/DragHandleNode.svelte rename to examples/svelte/src/generic-tests/nodes/components/DragHandleNode.svelte diff --git a/examples/svelte/src/generic-tests/nodes/general.ts b/examples/svelte/src/generic-tests/nodes/general.ts new file mode 100644 index 00000000..b7707a08 --- /dev/null +++ b/examples/svelte/src/generic-tests/nodes/general.ts @@ -0,0 +1,91 @@ +import DragHandleNode from './components/DragHandleNode.svelte'; + +export default { + svelteFlowProps: { + fitView: true, + nodeTypes: { + DragHandleNode + }, + nodes: [ + { + id: 'Node-1', + data: { label: 'Node-1' }, + position: { x: 0, y: 0 }, + type: 'input', + class: 'playwright-test-class-123', + style: 'background-color: red;' + }, + { + id: 'Node-2', + type: 'output', + data: { label: 'Node-2' }, + position: { x: -100, y: 100 } + }, + { + id: 'Node-3', + data: { label: 'Node-3' }, + position: { x: 100, y: 100 } + }, + { + id: 'Node-4', + data: { label: 'Node-4' }, + position: { x: 0, y: 200 }, + type: 'output' + }, + { + id: 'drag-handle', + data: { label: 'Drag Handle' }, + position: { x: 200, y: 0 }, + type: 'DragHandleNode', + dragHandle: '.custom-drag-handle' + }, + { + id: 'notConnectable', + type: 'output', + data: { label: 'notConnectable' }, + position: { x: 0, y: 300 }, + connectable: false + }, + { + id: 'notDraggable', + data: { label: 'notDraggable' }, + position: { x: 0, y: 400 }, + draggable: false + }, + { + id: 'notSelectable', + data: { label: 'notSelectable' }, + position: { x: 0, y: 500 }, + selectable: false + }, + { + id: 'notDeletable', + data: { label: 'notDeletable' }, + position: { x: 0, y: 600 }, + deletable: false + }, + { + id: 'hidden', + data: { label: 'hidden' }, + position: { x: 0, y: 700 }, + hidden: true + } + ], + edges: [ + { + id: '1-2', + type: 'default', + source: 'Node-1', + target: 'Node-2', + label: 'edge' + }, + { + id: '1-3', + type: 'default', + source: 'Node-1', + target: 'Node-3', + label: 'edge' + } + ] + } +} satisfies GenericTestCase; diff --git a/examples/svelte/src/generic-tests/pane/general.ts b/examples/svelte/src/generic-tests/pane/general.ts new file mode 100644 index 00000000..5caac003 --- /dev/null +++ b/examples/svelte/src/generic-tests/pane/general.ts @@ -0,0 +1,37 @@ +export default { + svelteFlowProps: { + minZoom: 0.25, + maxZoom: 4, + fitView: true, + nodes: [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + } + ], + edges: [ + { + id: 'first-edge', + source: '1', + target: '2' + }, + { + id: 'second-edge', + source: '1', + target: '3' + } + ] + } +} satisfies GenericTestCase; diff --git a/examples/svelte/src/generic-tests/pane/non-defaults.ts b/examples/svelte/src/generic-tests/pane/non-defaults.ts new file mode 100644 index 00000000..0d17e954 --- /dev/null +++ b/examples/svelte/src/generic-tests/pane/non-defaults.ts @@ -0,0 +1,38 @@ +export default { + svelteFlowProps: { + panOnScroll: true, + initialViewport: { x: 1.23, y: 9.87, zoom: 1.234 }, + autoPanOnConnect: false, + autoPanOnNodeDrag: false, + nodes: [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + } + ], + edges: [ + { + id: 'first-edge', + source: '1', + target: '2' + }, + { + id: 'second-edge', + source: '1', + target: '3' + } + ] + } +} satisfies GenericTestCase; diff --git a/examples/svelte/src/routes/tests/edges/Flow.svelte b/examples/svelte/src/routes/tests/edges/Flow.svelte deleted file mode 100644 index 6686c907..00000000 --- a/examples/svelte/src/routes/tests/edges/Flow.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts b/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts deleted file mode 100644 index b5452b8c..00000000 --- a/examples/svelte/src/routes/tests/edges/nodesAndEdges.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { MarkerType, type Edge, type Node } from '@xyflow/svelte'; - -export const initialNodes: Node[] = [ - { - id: '1', - data: { label: '1' }, - position: { x: 0, y: 0 }, - type: 'input' - }, - { - id: '2', - data: { label: '2' }, - position: { x: -100, y: 100 } - }, - { - id: '3', - data: { label: '3' }, - position: { x: 100, y: 100 } - }, - { - id: '4', - data: { label: '4' }, - position: { x: -100, y: 200 } - }, - { - id: '5', - data: { label: '5' }, - position: { x: 100, y: 200 } - }, - { - id: '6', - data: { label: '6' }, - position: { x: -100, y: 300 } - }, - { - id: '7', - data: { label: '7' }, - position: { x: 100, y: 300 } - }, - { - id: '8', - data: { label: '8' }, - position: { x: -100, y: 400 } - }, - { - id: '9', - data: { label: '9' }, - position: { x: 100, y: 400 } - }, - { - id: '10', - data: { label: '10' }, - position: { x: -100, y: 500 } - }, - { - id: '11', - data: { label: '11' }, - position: { x: 100, y: 500 } - } - // { - // id: '12', - // data: { label: '12' }, - // position: { x: -100, y: 600 } - // }, - // { - // id: '13', - // data: { label: '13' }, - // position: { x: 100, y: 600 } - // } -]; - -export const initialEdges: Edge[] = [ - { - id: 'edge-with-class', - source: '1', - target: '2', - class: 'edge-class-test' - }, - { - id: 'edge-with-style', - source: '1', - target: '3', - style: 'stroke: red;' - }, - { - id: 'hidden-edge', - source: '2', - target: '4', - label: 'hidden', - hidden: true - }, - { - id: 'animated-edge', - source: '3', - target: '5', - label: 'animated', - animated: true - }, - { - id: 'not-selectable-edge', - source: '4', - target: '6', - label: 'not-selectable', - selectable: false - }, - { - id: 'not-deletable', - source: '5', - target: '7', - label: 'not-deletable', - deletable: false - }, - { - id: 'z-index', - source: '6', - target: '8', - label: 'z-index', - zIndex: 3141592 - }, - { - id: 'aria-label', - source: '7', - target: '9', - label: 'aria-label', - ariaLabel: 'aria-label-test' - }, - { - id: 'interaction-width', - source: '8', - target: '10', - label: 'interaction-width', - interactionWidth: 42 - }, - { - id: 'markers', - source: '9', - target: '11', - label: 'markers', - markerEnd: { type: MarkerType.Arrow }, - markerStart: { type: MarkerType.ArrowClosed } - } - // { - // id: 'updatable', - // source: '9', - // target: '11', - // label: 'focusable', - // updatable: true - // }, - // { - // id: 'not-focusable', - // - // source: '5', - // target: '7', - // label: 'not-focusable', - // focusable: false - // }, -]; diff --git a/examples/svelte/src/routes/tests/edges/+page.svelte b/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.svelte similarity index 75% rename from examples/svelte/src/routes/tests/edges/+page.svelte rename to examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.svelte index 12dec33c..2487d85a 100644 --- a/examples/svelte/src/routes/tests/edges/+page.svelte +++ b/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.svelte @@ -2,8 +2,10 @@ import { SvelteFlowProvider } from '@xyflow/svelte'; import Flow from './Flow.svelte'; + + export let data; - + diff --git a/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts b/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts new file mode 100644 index 00000000..65f62996 --- /dev/null +++ b/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts @@ -0,0 +1,22 @@ +import { error } from '@sveltejs/kit'; + +/** @type {import('./$types').PageLoad} */ +export function load({ params }) { + try { + const genericTestCases = import.meta.glob('/src/generic-tests/**/*.ts', { + eager: true, + import: 'default' + }); + + const generic = genericTestCases[`/src/generic-tests/${params.topic}/${params.example}.ts`]; + if (generic) { + return { + generic + }; + } + } catch (e) { + console.error(e); + } + + throw error(404, 'Not found'); +} diff --git a/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte b/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte new file mode 100644 index 00000000..40babf50 --- /dev/null +++ b/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte @@ -0,0 +1,16 @@ + + + diff --git a/examples/svelte/src/routes/tests/nodes/+page.svelte b/examples/svelte/src/routes/tests/nodes/+page.svelte deleted file mode 100644 index 12dec33c..00000000 --- a/examples/svelte/src/routes/tests/nodes/+page.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/examples/svelte/src/routes/tests/nodes/Flow.svelte b/examples/svelte/src/routes/tests/nodes/Flow.svelte deleted file mode 100644 index 6f684cbf..00000000 --- a/examples/svelte/src/routes/tests/nodes/Flow.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts b/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts deleted file mode 100644 index bd382bef..00000000 --- a/examples/svelte/src/routes/tests/nodes/nodesAndEdges.ts +++ /dev/null @@ -1,84 +0,0 @@ -import type { Edge, Node } from '@xyflow/svelte'; - -export const initialNodes: Node[] = [ - { - id: 'Node-1', - data: { label: 'Node-1' }, - position: { x: 0, y: 0 }, - type: 'input', - class: 'playwright-test-class-123', - style: 'background-color: red;' - }, - { - id: 'Node-2', - type: 'output', - data: { label: 'Node-2' }, - position: { x: -100, y: 100 } - }, - { - id: 'Node-3', - data: { label: 'Node-3' }, - position: { x: 100, y: 100 } - }, - { - id: 'Node-4', - data: { label: 'Node-4' }, - position: { x: 0, y: 200 }, - type: 'output' - }, - { - id: 'drag-handle', - data: { label: 'Drag Handle' }, - position: { x: 200, y: 0 }, - type: 'DragHandleNode', - dragHandle: '.custom-drag-handle' - }, - { - id: 'notConnectable', - type: 'output', - data: { label: 'notConnectable' }, - position: { x: 0, y: 300 }, - connectable: false - }, - { - id: 'notDraggable', - data: { label: 'notDraggable' }, - position: { x: 0, y: 400 }, - draggable: false - }, - { - id: 'notSelectable', - data: { label: 'notSelectable' }, - position: { x: 0, y: 500 }, - selectable: false - }, - { - id: 'notDeletable', - data: { label: 'notDeletable' }, - position: { x: 0, y: 600 }, - deletable: false - }, - { - id: 'hidden', - data: { label: 'hidden' }, - position: { x: 0, y: 700 }, - hidden: true - } -]; - -export const initialEdges: Edge[] = [ - { - id: '1-2', - type: 'default', - source: 'Node-1', - target: 'Node-2', - label: 'edge' - }, - { - id: '1-3', - type: 'default', - source: 'Node-1', - target: 'Node-3', - label: 'edge' - } -]; diff --git a/examples/svelte/src/routes/tests/pane/default/+page.svelte b/examples/svelte/src/routes/tests/pane/default/+page.svelte deleted file mode 100644 index 12dec33c..00000000 --- a/examples/svelte/src/routes/tests/pane/default/+page.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/examples/svelte/src/routes/tests/pane/default/Flow.svelte b/examples/svelte/src/routes/tests/pane/default/Flow.svelte deleted file mode 100644 index ae2093ed..00000000 --- a/examples/svelte/src/routes/tests/pane/default/Flow.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/examples/svelte/src/routes/tests/pane/default/nodesAndEdges.ts b/examples/svelte/src/routes/tests/pane/default/nodesAndEdges.ts deleted file mode 100644 index 7d2e0522..00000000 --- a/examples/svelte/src/routes/tests/pane/default/nodesAndEdges.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { Edge, Node } from '@xyflow/svelte'; - -export const initialNodes: Node[] = [ - { - id: '1', - data: { label: '1' }, - position: { x: 0, y: 0 }, - type: 'input' - }, - { - id: '2', - data: { label: '2' }, - position: { x: -100, y: 100 } - }, - { - id: '3', - data: { label: '3' }, - position: { x: 100, y: 100 } - } -]; - -export const initialEdges: Edge[] = [ - { - id: 'first-edge', - source: '1', - target: '2' - }, - { - id: 'second-edge', - source: '1', - target: '3' - } -]; diff --git a/examples/svelte/src/routes/tests/pane/non-default/+page.svelte b/examples/svelte/src/routes/tests/pane/non-default/+page.svelte deleted file mode 100644 index 12dec33c..00000000 --- a/examples/svelte/src/routes/tests/pane/non-default/+page.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/examples/svelte/src/routes/tests/pane/non-default/Flow.svelte b/examples/svelte/src/routes/tests/pane/non-default/Flow.svelte deleted file mode 100644 index d06a8de3..00000000 --- a/examples/svelte/src/routes/tests/pane/non-default/Flow.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts b/examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts deleted file mode 100644 index 7d2e0522..00000000 --- a/examples/svelte/src/routes/tests/pane/non-default/nodesAndEdges.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { Edge, Node } from '@xyflow/svelte'; - -export const initialNodes: Node[] = [ - { - id: '1', - data: { label: '1' }, - position: { x: 0, y: 0 }, - type: 'input' - }, - { - id: '2', - data: { label: '2' }, - position: { x: -100, y: 100 } - }, - { - id: '3', - data: { label: '3' }, - position: { x: 100, y: 100 } - } -]; - -export const initialEdges: Edge[] = [ - { - id: 'first-edge', - source: '1', - target: '2' - }, - { - id: 'second-edge', - source: '1', - target: '3' - } -]; From b92df2ded28f1eaba62cf15365b8dae4c06e1b75 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 14:44:18 +0100 Subject: [PATCH 14/30] created new test case --- .../src/generic-tests/pane/activation-keys.ts | 40 +++++++++++++++++ tests/playwright/e2e/pane.spec.ts | 43 ++++++++++++++++++- 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 examples/svelte/src/generic-tests/pane/activation-keys.ts diff --git a/examples/svelte/src/generic-tests/pane/activation-keys.ts b/examples/svelte/src/generic-tests/pane/activation-keys.ts new file mode 100644 index 00000000..e4dbe4e1 --- /dev/null +++ b/examples/svelte/src/generic-tests/pane/activation-keys.ts @@ -0,0 +1,40 @@ +export default { + svelteFlowProps: { + zoomOnScroll: false, + // zoomActivationKey: 'Space', + // panOnDrag: false, + // panOnScroll: false, + panActivationKey: 'Space', + fitView: true, + nodes: [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input' + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 } + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 } + } + ], + edges: [ + { + id: 'first-edge', + source: '1', + target: '2' + }, + { + id: 'second-edge', + source: '1', + target: '3' + } + ] + } +} satisfies GenericTestCase; diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts index 9c3d83a0..6090beac 100644 --- a/tests/playwright/e2e/pane.spec.ts +++ b/tests/playwright/e2e/pane.spec.ts @@ -182,6 +182,45 @@ test.describe('PANE NON-DEFAULT', () => { expect(viewportTransform.scale).toBe(1.234); }); }); -}); -//TODO: Inverse: Not zooming/panning when disabled + test.describe('PANE ACTIVATION KEYS', () => { + test.beforeEach(async ({ page }) => { + // Go to the starting url before each test. + await page.goto('/tests/generic/pane/activation-keys'); + + // Wait till the edges are rendered + await page.waitForSelector('#first-edge', { timeout: 5000 }); + }); + + test.describe('pan & zoom', () => { + test('panOnScroll pans the pane on scrolling', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + const transformsBefore = await getTransform(viewport); + + await pane.hover(); + await page.mouse.wheel(100, 100); + + const transformsAfter = await getTransform(viewport); + + expect(transformsAfter.translateX).not.toBe(transformsBefore.translateX); + expect(transformsAfter.translateY).not.toBe(transformsBefore.translateY); + }); + + test('intialViewport', async ({ page }) => { + const pane = page.locator(`.${FRAMEWORK}-flow__pane`); + const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); + + await expect(pane).toBeAttached(); + + const viewportTransform = await getTransform(viewport); + + expect(viewportTransform.translateX).toBe(1.23); + expect(viewportTransform.translateY).toBe(9.87); + expect(viewportTransform.scale).toBe(1.234); + }); + }); +}); From 76f482a105739fca6124912e2ff9803b1cf43bde Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 14:49:02 +0100 Subject: [PATCH 15/30] chore(svelte-examples) updated dependencies --- examples/svelte/package.json | 28 +- pnpm-lock.yaml | 838 ++++++++++++++++++++++++++++++----- 2 files changed, 734 insertions(+), 132 deletions(-) diff --git a/examples/svelte/package.json b/examples/svelte/package.json index 8cd6a14e..03f324bf 100644 --- a/examples/svelte/package.json +++ b/examples/svelte/package.json @@ -12,20 +12,20 @@ "format": "prettier --plugin-search-dir . --write ." }, "devDependencies": { - "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/kit": "^1.20.4", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-svelte": "^2.30.0", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.10.1", - "svelte": "^4.0.5", - "svelte-check": "^3.4.3", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^4.4.2" + "@sveltejs/adapter-auto": "^2.1.1", + "@sveltejs/kit": "^1.27.3", + "@typescript-eslint/eslint-plugin": "^6.10.0", + "@typescript-eslint/parser": "^6.10.0", + "eslint": "^8.53.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-svelte": "^2.35.0", + "prettier": "^3.0.3", + "prettier-plugin-svelte": "^3.0.3", + "svelte": "^4.2.2", + "svelte-check": "^3.5.2", + "tslib": "^2.6.2", + "typescript": "^5.2.2", + "vite": "^4.5.0" }, "type": "module", "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 449ca1d3..9a622802 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,10 +16,10 @@ importers: version: registry.npmjs.org/@changesets/cli@2.25.0 '@typescript-eslint/eslint-plugin': specifier: latest - version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.43.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.43.0)(typescript@5.1.3) '@typescript-eslint/parser': specifier: latest - version: registry.npmjs.org/@typescript-eslint/parser@6.9.0(eslint@8.43.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.43.0)(typescript@5.1.3) concurrently: specifier: ^7.6.0 version: registry.npmjs.org/concurrently@7.6.0 @@ -61,10 +61,10 @@ importers: dependencies: '@astrojs/react': specifier: ^3.0.2 - version: registry.npmjs.org/@astrojs/react@3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.4.9) + version: registry.npmjs.org/@astrojs/react@3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.5.0) '@astrojs/svelte': specifier: ^4.0.2 - version: registry.npmjs.org/@astrojs/svelte@4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.1.3)(vite@4.4.9) + version: registry.npmjs.org/@astrojs/svelte@4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.2.2)(vite@4.5.0) '@types/react': specifier: ^18.2.24 version: registry.npmjs.org/@types/react@18.2.24 @@ -161,47 +161,47 @@ importers: version: link:../../packages/svelte devDependencies: '@sveltejs/adapter-auto': - specifier: ^2.0.0 - version: registry.npmjs.org/@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.22.6) + specifier: ^2.1.1 + version: registry.npmjs.org/@sveltejs/adapter-auto@2.1.1(@sveltejs/kit@1.27.3) '@sveltejs/kit': - specifier: ^1.20.4 - version: registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.1)(vite@4.4.9) + specifier: ^1.27.3 + version: registry.npmjs.org/@sveltejs/kit@1.27.3(svelte@4.2.2)(vite@4.5.0) '@typescript-eslint/eslint-plugin': - specifier: ^5.45.0 - version: registry.npmjs.org/@typescript-eslint/eslint-plugin@5.60.0(@typescript-eslint/parser@5.60.0)(eslint@8.43.0)(typescript@5.1.3) + specifier: ^6.10.0 + version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^5.45.0 - version: registry.npmjs.org/@typescript-eslint/parser@5.60.0(eslint@8.43.0)(typescript@5.1.3) + specifier: ^6.10.0 + version: registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2) eslint: - specifier: ^8.28.0 - version: registry.npmjs.org/eslint@8.43.0 + specifier: ^8.53.0 + version: registry.npmjs.org/eslint@8.53.0 eslint-config-prettier: - specifier: ^8.5.0 - version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.43.0) + specifier: ^9.0.0 + version: registry.npmjs.org/eslint-config-prettier@9.0.0(eslint@8.53.0) eslint-plugin-svelte: - specifier: ^2.30.0 - version: registry.npmjs.org/eslint-plugin-svelte@2.31.1(eslint@8.43.0)(svelte@4.2.1) + specifier: ^2.35.0 + version: registry.npmjs.org/eslint-plugin-svelte@2.35.0(eslint@8.53.0)(svelte@4.2.2) prettier: - specifier: ^2.8.0 - version: registry.npmjs.org/prettier@2.8.8 + specifier: ^3.0.3 + version: registry.npmjs.org/prettier@3.0.3 prettier-plugin-svelte: - specifier: ^2.10.1 - version: registry.npmjs.org/prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.1) + specifier: ^3.0.3 + version: registry.npmjs.org/prettier-plugin-svelte@3.0.3(prettier@3.0.3)(svelte@4.2.2) svelte: - specifier: ^4.0.5 - version: registry.npmjs.org/svelte@4.2.1 + specifier: ^4.2.2 + version: registry.npmjs.org/svelte@4.2.2 svelte-check: - specifier: ^3.4.3 - version: registry.npmjs.org/svelte-check@3.5.0(postcss@8.4.31)(svelte@4.2.1) + specifier: ^3.5.2 + version: registry.npmjs.org/svelte-check@3.5.2(postcss@8.4.31)(svelte@4.2.2) tslib: - specifier: ^2.4.1 - version: registry.npmjs.org/tslib@2.5.3 + specifier: ^2.6.2 + version: registry.npmjs.org/tslib@2.6.2 typescript: - specifier: ^5.0.0 - version: registry.npmjs.org/typescript@5.1.3 + specifier: ^5.2.2 + version: registry.npmjs.org/typescript@5.2.2 vite: - specifier: ^4.4.2 - version: registry.npmjs.org/vite@4.4.9 + specifier: ^4.5.0 + version: registry.npmjs.org/vite@4.5.0 packages/react: dependencies: @@ -305,7 +305,7 @@ importers: version: registry.npmjs.org/@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.22.6) '@sveltejs/kit': specifier: ^1.22.6 - version: registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.1)(vite@4.4.9) + version: registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.1)(vite@4.5.0) '@sveltejs/package': specifier: ^2.2.1 version: registry.npmjs.org/@sveltejs/package@2.2.1(svelte@4.2.1)(typescript@5.1.3) @@ -498,7 +498,7 @@ packages: '@astrojs/prism': registry.npmjs.org/@astrojs/prism@3.0.0 astro: registry.npmjs.org/astro@3.2.2 github-slugger: registry.npmjs.org/github-slugger@2.0.0 - import-meta-resolve: registry.npmjs.org/import-meta-resolve@3.0.0 + import-meta-resolve: registry.npmjs.org/import-meta-resolve@3.1.1 mdast-util-definitions: registry.npmjs.org/mdast-util-definitions@6.0.0 rehype-raw: registry.npmjs.org/rehype-raw@6.1.1 rehype-stringify: registry.npmjs.org/rehype-stringify@9.0.4 @@ -523,7 +523,7 @@ packages: prismjs: registry.npmjs.org/prismjs@1.29.0 dev: false - registry.npmjs.org/@astrojs/react@3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.4.9): + registry.npmjs.org/@astrojs/react@3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.5.0): resolution: {integrity: sha512-aooNIuQxTg+IWGMZPuIEwBeBi4/TCPCMsr3714zuLjAjukVd5ZrX/bCNxJqDWU4HNwUm4XFU1OhcEvYOHa5uMQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@astrojs/react/-/react-3.0.2.tgz} id: registry.npmjs.org/@astrojs/react/3.0.2 name: '@astrojs/react' @@ -537,7 +537,7 @@ packages: dependencies: '@types/react': registry.npmjs.org/@types/react@18.2.24 '@types/react-dom': registry.npmjs.org/@types/react-dom@18.2.8 - '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.4.9) + '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.5.0) react: registry.npmjs.org/react@18.2.0 react-dom: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) ultrahtml: registry.npmjs.org/ultrahtml@1.5.2 @@ -546,7 +546,7 @@ packages: - vite dev: false - registry.npmjs.org/@astrojs/svelte@4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.1.3)(vite@4.4.9): + registry.npmjs.org/@astrojs/svelte@4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.2.2)(vite@4.5.0): resolution: {integrity: sha512-XB9Sexq+iW5aUpctDk6zuKHbWIAuPlAnZKbfgaS9VOaOUtx1t12crP9YoKEVcTifXYgoRuWWfeEAm2I8pYlLIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@astrojs/svelte/-/svelte-4.0.2.tgz} id: registry.npmjs.org/@astrojs/svelte/4.0.2 name: '@astrojs/svelte' @@ -556,10 +556,10 @@ packages: astro: ^3.0.11 svelte: ^3.55.0 || ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.5.0) astro: registry.npmjs.org/astro@3.2.2 svelte: registry.npmjs.org/svelte@4.2.1 - svelte2tsx: registry.npmjs.org/svelte2tsx@0.6.23(svelte@4.2.1)(typescript@5.1.3) + svelte2tsx: registry.npmjs.org/svelte2tsx@0.6.23(svelte@4.2.1)(typescript@5.2.2) transitivePeerDependencies: - supports-color - typescript @@ -1671,6 +1671,26 @@ packages: eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true + registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz} + id: registry.npmjs.org/@eslint-community/eslint-utils/4.4.0 + name: '@eslint-community/eslint-utils' + version: 4.4.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: registry.npmjs.org/eslint@8.53.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 + dev: true + + registry.npmjs.org/@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz} + name: '@eslint-community/regexpp' + version: 4.10.0 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + registry.npmjs.org/@eslint-community/regexpp@4.9.1: resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz} name: '@eslint-community/regexpp' @@ -1697,6 +1717,25 @@ packages: - supports-color dev: true + registry.npmjs.org/@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz} + name: '@eslint/eslintrc' + version: 2.1.3 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: registry.npmjs.org/ajv@6.12.6 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + espree: registry.npmjs.org/espree@9.6.1 + globals: registry.npmjs.org/globals@13.23.0 + ignore: registry.npmjs.org/ignore@5.2.4 + import-fresh: registry.npmjs.org/import-fresh@3.3.0 + js-yaml: registry.npmjs.org/js-yaml@4.1.0 + minimatch: registry.npmjs.org/minimatch@3.1.2 + strip-json-comments: registry.npmjs.org/strip-json-comments@3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@eslint/js@8.43.0: resolution: {integrity: sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz} name: '@eslint/js' @@ -1704,12 +1743,18 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + registry.npmjs.org/@eslint/js@8.53.0: + resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz} + name: '@eslint/js' + version: 8.53.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + registry.npmjs.org/@fastify/busboy@2.0.0: resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz} name: '@fastify/busboy' version: 2.0.0 engines: {node: '>=14'} - dev: false registry.npmjs.org/@hapi/hoek@9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz} @@ -2000,11 +2045,23 @@ packages: peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.1)(vite@4.4.9) + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.1)(vite@4.5.0) import-meta-resolve: registry.npmjs.org/import-meta-resolve@3.0.0 dev: true - registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.1)(vite@4.4.9): + registry.npmjs.org/@sveltejs/adapter-auto@2.1.1(@sveltejs/kit@1.27.3): + resolution: {integrity: sha512-nzi6x/7/3Axh5VKQ8Eed3pYxastxoa06Y/bFhWb7h3Nu+nGRVxKAy3+hBJgmPCwWScy8n0TsstZjSVKfyrIHkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.1.tgz} + id: registry.npmjs.org/@sveltejs/adapter-auto/2.1.1 + name: '@sveltejs/adapter-auto' + version: 2.1.1 + peerDependencies: + '@sveltejs/kit': ^1.0.0 + dependencies: + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit@1.27.3(svelte@4.2.2)(vite@4.5.0) + import-meta-resolve: registry.npmjs.org/import-meta-resolve@4.0.0 + dev: true + + registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.1)(vite@4.5.0): resolution: {integrity: sha512-SDKxI/QpsReCwIn5czjT53fKlPBybbmMk67d317gUqfeORroBAFN1Z6s/x0E1JYi+04i7kKllS+Sz9wVfmUkAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.22.6.tgz} id: registry.npmjs.org/@sveltejs/kit/1.22.6 name: '@sveltejs/kit' @@ -2016,7 +2073,7 @@ packages: svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.5.0) '@types/cookie': registry.npmjs.org/@types/cookie@0.5.3 cookie: registry.npmjs.org/cookie@0.5.0 devalue: registry.npmjs.org/devalue@4.3.2 @@ -2029,7 +2086,38 @@ packages: sirv: registry.npmjs.org/sirv@2.0.3 svelte: registry.npmjs.org/svelte@4.2.1 undici: registry.npmjs.org/undici@5.23.0 - vite: registry.npmjs.org/vite@4.4.9 + vite: registry.npmjs.org/vite@4.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@sveltejs/kit@1.27.3(svelte@4.2.2)(vite@4.5.0): + resolution: {integrity: sha512-pd7qwX6ww5noA0/FLk45B0aKUeOXWR+pfZsGTrv3dRmj3lTmnki9UTmTdWzHJGrje+BBkGUZHfgGrsSOQQBQpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.27.3.tgz} + id: registry.npmjs.org/@sveltejs/kit/1.27.3 + name: '@sveltejs/kit' + version: 1.27.3 + engines: {node: ^16.14 || >=18} + hasBin: true + requiresBuild: true + peerDependencies: + svelte: ^3.54.0 || ^4.0.0-next.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.2)(vite@4.5.0) + '@types/cookie': registry.npmjs.org/@types/cookie@0.5.4 + cookie: registry.npmjs.org/cookie@0.5.0 + devalue: registry.npmjs.org/devalue@4.3.2 + esm-env: registry.npmjs.org/esm-env@1.0.0 + kleur: registry.npmjs.org/kleur@4.1.5 + magic-string: registry.npmjs.org/magic-string@0.30.5 + mrmime: registry.npmjs.org/mrmime@1.0.1 + sade: registry.npmjs.org/sade@1.8.1 + set-cookie-parser: registry.npmjs.org/set-cookie-parser@2.6.0 + sirv: registry.npmjs.org/sirv@2.0.3 + svelte: registry.npmjs.org/svelte@4.2.2 + tiny-glob: registry.npmjs.org/tiny-glob@0.2.9 + undici: registry.npmjs.org/undici@5.26.5 + vite: registry.npmjs.org/vite@4.5.0 transitivePeerDependencies: - supports-color dev: true @@ -2054,7 +2142,7 @@ packages: - typescript dev: true - registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.4.9): + registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.5.0): resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz} id: registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.4 name: '@sveltejs/vite-plugin-svelte-inspector' @@ -2065,14 +2153,33 @@ packages: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.5.0) debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) svelte: registry.npmjs.org/svelte@4.2.1 - vite: registry.npmjs.org/vite@4.4.9 + vite: registry.npmjs.org/vite@4.5.0 transitivePeerDependencies: - supports-color - registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.4.9): + registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.2)(vite@4.5.0): + resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz} + id: registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.4 + name: '@sveltejs/vite-plugin-svelte-inspector' + version: 1.0.4 + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^2.2.0 + svelte: ^3.54.0 || ^4.0.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.2)(vite@4.5.0) + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + svelte: registry.npmjs.org/svelte@4.2.2 + vite: registry.npmjs.org/vite@4.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.5.0): resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz} id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.6 name: '@sveltejs/vite-plugin-svelte' @@ -2082,18 +2189,41 @@ packages: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte-inspector': registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.5.0) debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) deepmerge: registry.npmjs.org/deepmerge@4.3.1 kleur: registry.npmjs.org/kleur@4.1.5 magic-string: registry.npmjs.org/magic-string@0.30.5 svelte: registry.npmjs.org/svelte@4.2.1 svelte-hmr: registry.npmjs.org/svelte-hmr@0.15.3(svelte@4.2.1) - vite: registry.npmjs.org/vite@4.4.9 - vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.4.9) + vite: registry.npmjs.org/vite@4.5.0 + vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color + registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.2)(vite@4.5.0): + resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz} + id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.6 + name: '@sveltejs/vite-plugin-svelte' + version: 2.4.6 + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.2)(vite@4.5.0) + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + deepmerge: registry.npmjs.org/deepmerge@4.3.1 + kleur: registry.npmjs.org/kleur@4.1.5 + magic-string: registry.npmjs.org/magic-string@0.30.5 + svelte: registry.npmjs.org/svelte@4.2.2 + svelte-hmr: registry.npmjs.org/svelte-hmr@0.15.3(svelte@4.2.2) + vite: registry.npmjs.org/vite@4.5.0 + vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.5.0) + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@swc/core-darwin-arm64@1.3.94: resolution: {integrity: sha512-KNuE6opIy/wAXiGUWLhGWhCG3wA/AdjG6eYkv6dstrAURLaQMAoD8vDfVm8pxS8FA8Kx+0Z4QiDNPqk5aKIsqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.94.tgz} name: '@swc/core-darwin-arm64' @@ -2293,6 +2423,12 @@ packages: version: 0.5.3 dev: true + registry.npmjs.org/@types/cookie@0.5.4: + resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz} + name: '@types/cookie' + version: 0.5.4 + dev: true + registry.npmjs.org/@types/d3-array@3.0.9: resolution: {integrity: sha512-mZowFN3p64ajCJJ4riVYlOjNlBJv3hctgAY01pjw3qTnJePD8s9DZmYDzhHKvzfCYvdjwylkU38+Vdt7Cu2FDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.9.tgz} name: '@types/d3-array' @@ -2581,6 +2717,12 @@ packages: version: 7.0.14 dev: true + registry.npmjs.org/@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz} + name: '@types/json-schema' + version: 7.0.15 + dev: true + registry.npmjs.org/@types/json5@0.0.30: resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json5/-/json5-0.0.30.tgz} name: '@types/json5' @@ -2673,6 +2815,12 @@ packages: version: 2.0.8 dev: true + registry.npmjs.org/@types/pug@2.0.9: + resolution: {integrity: sha512-Yg4LkgFYvn1faISbDNWmcAC1XoDT8IoMUFspp5mnagKk+UvD2N0IWt5A7GRdMubsNWqgCLmrkf8rXkzNqb4szA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/pug/-/pug-2.0.9.tgz} + name: '@types/pug' + version: 2.0.9 + dev: true + registry.npmjs.org/@types/react-dom@18.2.8: resolution: {integrity: sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.8.tgz} name: '@types/react-dom' @@ -2783,11 +2931,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.9.0 + registry.npmjs.org/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.10.0 name: '@typescript-eslint/eslint-plugin' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2797,12 +2945,12 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.9.1 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.9.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.9.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.9.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.10.0 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.10.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.43.0 graphemer: registry.npmjs.org/graphemer@1.4.0 @@ -2815,6 +2963,38 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.10.0 + name: '@typescript-eslint/eslint-plugin' + version: 6.10.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.10.0 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.53.0 + graphemer: registry.npmjs.org/graphemer@1.4.0 + ignore: registry.npmjs.org/ignore@5.2.4 + natural-compare: registry.npmjs.org/natural-compare@1.4.0 + semver: registry.npmjs.org/semver@7.5.4 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.2.2) + typescript: registry.npmjs.org/typescript@5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/parser@5.60.0(eslint@8.43.0)(typescript@5.1.3): resolution: {integrity: sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz} id: registry.npmjs.org/@typescript-eslint/parser/5.60.0 @@ -2838,11 +3018,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/parser@6.9.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/6.9.0 + registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/6.10.0 name: '@typescript-eslint/parser' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2851,10 +3031,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.43.0 typescript: registry.npmjs.org/typescript@5.1.3 @@ -2862,6 +3042,30 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/6.10.0 + name: '@typescript-eslint/parser' + version: 6.10.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.53.0 + typescript: registry.npmjs.org/typescript@5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/scope-manager@5.60.0: resolution: {integrity: sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz} name: '@typescript-eslint/scope-manager' @@ -2872,14 +3076,14 @@ packages: '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@5.60.0 dev: true - registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0: - resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz} + registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0: + resolution: {integrity: sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz} name: '@typescript-eslint/scope-manager' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 dev: true registry.npmjs.org/@typescript-eslint/type-utils@5.60.0(eslint@8.43.0)(typescript@5.1.3): @@ -2905,11 +3109,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/type-utils@6.9.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/6.9.0 + registry.npmjs.org/@typescript-eslint/type-utils@6.10.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/6.10.0 name: '@typescript-eslint/type-utils' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2918,8 +3122,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.9.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.43.0)(typescript@5.1.3) debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.43.0 ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) @@ -2928,6 +3132,29 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/6.10.0 + name: '@typescript-eslint/type-utils' + version: 6.10.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2) + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.53.0 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.2.2) + typescript: registry.npmjs.org/typescript@5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/types@5.60.0: resolution: {integrity: sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz} name: '@typescript-eslint/types' @@ -2935,10 +3162,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@typescript-eslint/types@6.9.0: - resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz} + registry.npmjs.org/@typescript-eslint/types@6.10.0: + resolution: {integrity: sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz} name: '@typescript-eslint/types' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -2966,11 +3193,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3): - resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.9.0 + registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3): + resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.10.0 name: '@typescript-eslint/typescript-estree' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2978,8 +3205,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) globby: registry.npmjs.org/globby@11.1.0 is-glob: registry.npmjs.org/is-glob@4.0.3 @@ -2990,6 +3217,30 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2): + resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.10.0 + name: '@typescript-eslint/typescript-estree' + version: 6.10.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + globby: registry.npmjs.org/globby@11.1.0 + is-glob: registry.npmjs.org/is-glob@4.0.3 + semver: registry.npmjs.org/semver@7.5.4 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.2.2) + typescript: registry.npmjs.org/typescript@5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/utils@5.60.0(eslint@8.43.0)(typescript@5.1.3): resolution: {integrity: sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz} id: registry.npmjs.org/@typescript-eslint/utils/5.60.0 @@ -3013,21 +3264,21 @@ packages: - typescript dev: true - registry.npmjs.org/@typescript-eslint/utils@6.9.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/6.9.0 + registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/6.10.0 name: '@typescript-eslint/utils' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.0) - '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.14 + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 '@types/semver': registry.npmjs.org/@types/semver@7.5.4 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.9.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.9.0(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3) eslint: registry.npmjs.org/eslint@8.43.0 semver: registry.npmjs.org/semver@7.5.4 transitivePeerDependencies: @@ -3035,6 +3286,28 @@ packages: - typescript dev: true + registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/6.10.0 + name: '@typescript-eslint/utils' + version: 6.10.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.53.0) + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 + '@types/semver': registry.npmjs.org/@types/semver@7.5.4 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2) + eslint: registry.npmjs.org/eslint@8.53.0 + semver: registry.npmjs.org/semver@7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + registry.npmjs.org/@typescript-eslint/visitor-keys@5.60.0: resolution: {integrity: sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz} name: '@typescript-eslint/visitor-keys' @@ -3045,16 +3318,22 @@ packages: eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true - registry.npmjs.org/@typescript-eslint/visitor-keys@6.9.0: - resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz} + registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0: + resolution: {integrity: sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz} name: '@typescript-eslint/visitor-keys' - version: 6.9.0 + version: 6.10.0 engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.9.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true + registry.npmjs.org/@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz} + name: '@ungap/structured-clone' + version: 1.2.0 + dev: true + registry.npmjs.org/@vitejs/plugin-react-swc@3.3.2(vite@4.4.9): resolution: {integrity: sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz} id: registry.npmjs.org/@vitejs/plugin-react-swc/3.3.2 @@ -3085,6 +3364,25 @@ packages: vite: registry.npmjs.org/vite@4.4.9 transitivePeerDependencies: - supports-color + dev: true + + registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.5.0): + resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz} + id: registry.npmjs.org/@vitejs/plugin-react/4.0.4 + name: '@vitejs/plugin-react' + version: 4.0.4 + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 + dependencies: + '@babel/core': registry.npmjs.org/@babel/core@7.23.2 + '@babel/plugin-transform-react-jsx-self': registry.npmjs.org/@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.2) + react-refresh: registry.npmjs.org/react-refresh@0.14.0 + vite: registry.npmjs.org/vite@4.5.0 + transitivePeerDependencies: + - supports-color + dev: false registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} @@ -3104,6 +3402,14 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + registry.npmjs.org/acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz} + name: acorn + version: 8.11.2 + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + registry.npmjs.org/aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz} name: aggregate-error @@ -3399,8 +3705,8 @@ packages: undici: registry.npmjs.org/undici@5.26.5 unist-util-visit: registry.npmjs.org/unist-util-visit@4.1.2 vfile: registry.npmjs.org/vfile@5.3.7 - vite: registry.npmjs.org/vite@4.4.9 - vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.4.9) + vite: registry.npmjs.org/vite@4.5.0 + vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.5.0) which-pm: registry.npmjs.org/which-pm@2.1.1 yargs-parser: registry.npmjs.org/yargs-parser@21.1.1 zod: registry.npmjs.org/zod@3.21.1 @@ -5060,6 +5366,18 @@ packages: engines: {node: '>=12'} dev: false + registry.npmjs.org/eslint-compat-utils@0.1.2(eslint@8.53.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz} + id: registry.npmjs.org/eslint-compat-utils/0.1.2 + name: eslint-compat-utils + version: 0.1.2 + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: registry.npmjs.org/eslint@8.53.0 + dev: true + registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.43.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz} id: registry.npmjs.org/eslint-config-prettier/8.8.0 @@ -5072,6 +5390,18 @@ packages: eslint: registry.npmjs.org/eslint@8.43.0 dev: true + registry.npmjs.org/eslint-config-prettier@9.0.0(eslint@8.53.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz} + id: registry.npmjs.org/eslint-config-prettier/9.0.0 + name: eslint-config-prettier + version: 9.0.0 + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: registry.npmjs.org/eslint@8.53.0 + dev: true + registry.npmjs.org/eslint-config-turbo@1.10.16(eslint@8.43.0): resolution: {integrity: sha512-O3NQI72bQHV7FvSC6lWj66EGx8drJJjuT1kuInn6nbMLOHdMBhSUX/8uhTAlHRQdlxZk2j9HtgFCIzSc93w42g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.16.tgz} id: registry.npmjs.org/eslint-config-turbo/1.10.16 @@ -5163,6 +5493,38 @@ packages: - ts-node dev: true + registry.npmjs.org/eslint-plugin-svelte@2.35.0(eslint@8.53.0)(svelte@4.2.2): + resolution: {integrity: sha512-3WDFxNrkXaMlpqoNo3M1ZOQuoFLMO9+bdnN6oVVXaydXC7nzCJuGy9a0zqoNDHMSRPYt0Rqo6hIdHMEaI5sQnw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.0.tgz} + id: registry.npmjs.org/eslint-plugin-svelte/2.35.0 + name: eslint-plugin-svelte + version: 2.35.0 + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0-0 + svelte: ^3.37.0 || ^4.0.0 + peerDependenciesMeta: + svelte: + optional: true + dependencies: + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.53.0) + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.53.0 + eslint-compat-utils: registry.npmjs.org/eslint-compat-utils@0.1.2(eslint@8.53.0) + esutils: registry.npmjs.org/esutils@2.0.3 + known-css-properties: registry.npmjs.org/known-css-properties@0.29.0 + postcss: registry.npmjs.org/postcss@8.4.31 + postcss-load-config: registry.npmjs.org/postcss-load-config@3.1.4(postcss@8.4.31) + postcss-safe-parser: registry.npmjs.org/postcss-safe-parser@6.0.0(postcss@8.4.31) + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.13 + semver: registry.npmjs.org/semver@7.5.4 + svelte: registry.npmjs.org/svelte@4.2.2 + svelte-eslint-parser: registry.npmjs.org/svelte-eslint-parser@0.33.1(svelte@4.2.2) + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + registry.npmjs.org/eslint-plugin-turbo@1.10.16(eslint@8.43.0): resolution: {integrity: sha512-ZjrR88MTN64PNGufSEcM0tf+V1xFYVbeiMeuIqr0aiABGomxFLo4DBkQ7WI4WzkZtWQSIA2sP+yxqSboEfL9MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.16.tgz} id: registry.npmjs.org/eslint-plugin-turbo/1.10.16 @@ -5252,6 +5614,55 @@ packages: - supports-color dev: true + registry.npmjs.org/eslint@8.53.0: + resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz} + name: eslint + version: 8.53.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.53.0) + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.10.0 + '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc@2.1.3 + '@eslint/js': registry.npmjs.org/@eslint/js@8.53.0 + '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array@0.11.13 + '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer@1.0.1 + '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk@1.2.8 + '@ungap/structured-clone': registry.npmjs.org/@ungap/structured-clone@1.2.0 + ajv: registry.npmjs.org/ajv@6.12.6 + chalk: registry.npmjs.org/chalk@4.1.2 + cross-spawn: registry.npmjs.org/cross-spawn@7.0.3 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + doctrine: registry.npmjs.org/doctrine@3.0.0 + escape-string-regexp: registry.npmjs.org/escape-string-regexp@4.0.0 + eslint-scope: registry.npmjs.org/eslint-scope@7.2.2 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 + espree: registry.npmjs.org/espree@9.6.1 + esquery: registry.npmjs.org/esquery@1.5.0 + esutils: registry.npmjs.org/esutils@2.0.3 + fast-deep-equal: registry.npmjs.org/fast-deep-equal@3.1.3 + file-entry-cache: registry.npmjs.org/file-entry-cache@6.0.1 + find-up: registry.npmjs.org/find-up@5.0.0 + glob-parent: registry.npmjs.org/glob-parent@6.0.2 + globals: registry.npmjs.org/globals@13.23.0 + graphemer: registry.npmjs.org/graphemer@1.4.0 + ignore: registry.npmjs.org/ignore@5.2.4 + imurmurhash: registry.npmjs.org/imurmurhash@0.1.4 + is-glob: registry.npmjs.org/is-glob@4.0.3 + is-path-inside: registry.npmjs.org/is-path-inside@3.0.3 + js-yaml: registry.npmjs.org/js-yaml@4.1.0 + json-stable-stringify-without-jsonify: registry.npmjs.org/json-stable-stringify-without-jsonify@1.0.1 + levn: registry.npmjs.org/levn@0.4.1 + lodash.merge: registry.npmjs.org/lodash.merge@4.6.2 + minimatch: registry.npmjs.org/minimatch@3.1.2 + natural-compare: registry.npmjs.org/natural-compare@1.4.0 + optionator: registry.npmjs.org/optionator@0.9.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + text-table: registry.npmjs.org/text-table@0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz} name: esm-env @@ -5502,6 +5913,19 @@ packages: merge2: registry.npmjs.org/merge2@1.4.1 micromatch: registry.npmjs.org/micromatch@4.0.5 + registry.npmjs.org/fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz} + name: fast-glob + version: 3.3.2 + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': registry.npmjs.org/@nodelib/fs.stat@2.0.5 + '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk@1.2.8 + glob-parent: registry.npmjs.org/glob-parent@5.1.2 + merge2: registry.npmjs.org/merge2@1.4.1 + micromatch: registry.npmjs.org/micromatch@4.0.5 + dev: true + registry.npmjs.org/fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} name: fast-json-stable-stringify @@ -5909,6 +6333,12 @@ packages: define-properties: registry.npmjs.org/define-properties@1.2.1 dev: true + registry.npmjs.org/globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz} + name: globalyzer + version: 0.1.0 + dev: true + registry.npmjs.org/globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globby/-/globby-11.1.0.tgz} name: globby @@ -5936,6 +6366,12 @@ packages: slash: registry.npmjs.org/slash@4.0.0 dev: true + registry.npmjs.org/globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz} + name: globrex + version: 0.1.2 + dev: true + registry.npmjs.org/gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz} name: gopd @@ -6244,6 +6680,19 @@ packages: resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz} name: import-meta-resolve version: 3.0.0 + dev: true + + registry.npmjs.org/import-meta-resolve@3.1.1: + resolution: {integrity: sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.1.1.tgz} + name: import-meta-resolve + version: 3.1.1 + dev: false + + registry.npmjs.org/import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz} + name: import-meta-resolve + version: 4.0.0 + dev: true registry.npmjs.org/imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz} @@ -6886,6 +7335,12 @@ packages: version: 0.27.0 dev: true + registry.npmjs.org/known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz} + name: known-css-properties + version: 0.29.0 + dev: true + registry.npmjs.org/lazy-ass@1.6.0: resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz} name: lazy-ass @@ -8930,6 +9385,19 @@ packages: svelte: registry.npmjs.org/svelte@4.2.1 dev: true + registry.npmjs.org/prettier-plugin-svelte@3.0.3(prettier@3.0.3)(svelte@4.2.2): + resolution: {integrity: sha512-dLhieh4obJEK1hnZ6koxF+tMUrZbV5YGvRpf2+OADyanjya5j0z1Llo8iGwiHmFWZVG/hLEw/AJD5chXd9r3XA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.0.3.tgz} + id: registry.npmjs.org/prettier-plugin-svelte/3.0.3 + name: prettier-plugin-svelte + version: 3.0.3 + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 + dependencies: + prettier: registry.npmjs.org/prettier@3.0.3 + svelte: registry.npmjs.org/svelte@4.2.2 + dev: true + registry.npmjs.org/prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz} name: prettier @@ -10325,24 +10793,24 @@ packages: - sugarss dev: true - registry.npmjs.org/svelte-check@3.5.0(postcss@8.4.31)(svelte@4.2.1): - resolution: {integrity: sha512-KHujbn4k17xKYLmtCwv0sKKM7uiHTYcQvXnvrCcNU6a7hcszh99zFTIoiu/Sp/ewAw5aJmillJ1Cs8gKLmcX4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-3.5.0.tgz} - id: registry.npmjs.org/svelte-check/3.5.0 + registry.npmjs.org/svelte-check@3.5.2(postcss@8.4.31)(svelte@4.2.2): + resolution: {integrity: sha512-5a/YWbiH4c+AqAUP+0VneiV5bP8YOk9JL3jwvN+k2PEPLgpu85bjQc5eE67+eIZBBwUEJzmO3I92OqKcqbp3fw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-3.5.2.tgz} + id: registry.npmjs.org/svelte-check/3.5.2 name: svelte-check - version: 3.5.0 + version: 3.5.2 hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 dependencies: '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.20 chokidar: registry.npmjs.org/chokidar@3.5.3 - fast-glob: registry.npmjs.org/fast-glob@3.3.1 + fast-glob: registry.npmjs.org/fast-glob@3.3.2 import-fresh: registry.npmjs.org/import-fresh@3.3.0 picocolors: registry.npmjs.org/picocolors@1.0.0 sade: registry.npmjs.org/sade@1.8.1 - svelte: registry.npmjs.org/svelte@4.2.1 - svelte-preprocess: registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.1)(typescript@5.1.3) - typescript: registry.npmjs.org/typescript@5.1.3 + svelte: registry.npmjs.org/svelte@4.2.2 + svelte-preprocess: registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.2)(typescript@5.2.2) + typescript: registry.npmjs.org/typescript@5.2.2 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -10395,6 +10863,26 @@ packages: svelte: registry.npmjs.org/svelte@4.2.1 dev: true + registry.npmjs.org/svelte-eslint-parser@0.33.1(svelte@4.2.2): + resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz} + id: registry.npmjs.org/svelte-eslint-parser/0.33.1 + name: svelte-eslint-parser + version: 0.33.1 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 + peerDependenciesMeta: + svelte: + optional: true + dependencies: + eslint-scope: registry.npmjs.org/eslint-scope@7.2.2 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 + espree: registry.npmjs.org/espree@9.6.1 + postcss: registry.npmjs.org/postcss@8.4.31 + postcss-scss: registry.npmjs.org/postcss-scss@4.0.9(postcss@8.4.31) + svelte: registry.npmjs.org/svelte@4.2.2 + dev: true + registry.npmjs.org/svelte-hmr@0.15.3(svelte@4.2.1): resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz} id: registry.npmjs.org/svelte-hmr/0.15.3 @@ -10406,6 +10894,18 @@ packages: dependencies: svelte: registry.npmjs.org/svelte@4.2.1 + registry.npmjs.org/svelte-hmr@0.15.3(svelte@4.2.2): + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz} + id: registry.npmjs.org/svelte-hmr/0.15.3 + name: svelte-hmr + version: 0.15.3 + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: ^3.19.0 || ^4.0.0 + dependencies: + svelte: registry.npmjs.org/svelte@4.2.2 + dev: true + registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.21)(svelte@4.2.1)(typescript@5.1.3): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz} id: registry.npmjs.org/svelte-preprocess/5.0.4 @@ -10457,7 +10957,7 @@ packages: typescript: registry.npmjs.org/typescript@5.1.3 dev: true - registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.1)(typescript@5.1.3): + registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.2)(typescript@5.2.2): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz} id: registry.npmjs.org/svelte-preprocess/5.0.4 name: svelte-preprocess @@ -10498,14 +10998,14 @@ packages: typescript: optional: true dependencies: - '@types/pug': registry.npmjs.org/@types/pug@2.0.8 + '@types/pug': registry.npmjs.org/@types/pug@2.0.9 detect-indent: registry.npmjs.org/detect-indent@6.1.0 magic-string: registry.npmjs.org/magic-string@0.27.0 postcss: registry.npmjs.org/postcss@8.4.31 sorcery: registry.npmjs.org/sorcery@0.11.0 strip-indent: registry.npmjs.org/strip-indent@3.0.0 - svelte: registry.npmjs.org/svelte@4.2.1 - typescript: registry.npmjs.org/typescript@5.1.3 + svelte: registry.npmjs.org/svelte@4.2.2 + typescript: registry.npmjs.org/typescript@5.2.2 dev: true registry.npmjs.org/svelte2tsx@0.6.23(svelte@4.2.1)(typescript@5.1.3): @@ -10521,6 +11021,22 @@ packages: pascal-case: registry.npmjs.org/pascal-case@3.1.2 svelte: registry.npmjs.org/svelte@4.2.1 typescript: registry.npmjs.org/typescript@5.1.3 + dev: true + + registry.npmjs.org/svelte2tsx@0.6.23(svelte@4.2.1)(typescript@5.2.2): + resolution: {integrity: sha512-3bwd1PuWUA3oEXy8+85zrLDnmJOsVpShpKVAehGWeYsz/66zMihTpRpUN97VVAKTZbO5tP4wnchHUXYs0zOwdw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.23.tgz} + id: registry.npmjs.org/svelte2tsx/0.6.23 + name: svelte2tsx + version: 0.6.23 + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 + typescript: ^4.9.4 || ^5.0.0 + dependencies: + dedent-js: registry.npmjs.org/dedent-js@1.0.1 + pascal-case: registry.npmjs.org/pascal-case@3.1.2 + svelte: registry.npmjs.org/svelte@4.2.1 + typescript: registry.npmjs.org/typescript@5.2.2 + dev: false registry.npmjs.org/svelte@4.2.1: resolution: {integrity: sha512-LpLqY2Jr7cRxkrTc796/AaaoMLF/1ax7cto8Ot76wrvKQhrPmZ0JgajiWPmg9mTSDqO16SSLiD17r9MsvAPTmw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-4.2.1.tgz} @@ -10542,6 +11058,27 @@ packages: magic-string: registry.npmjs.org/magic-string@0.30.5 periscopic: registry.npmjs.org/periscopic@3.1.0 + registry.npmjs.org/svelte@4.2.2: + resolution: {integrity: sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-4.2.2.tgz} + name: svelte + version: 4.2.2 + engines: {node: '>=16'} + dependencies: + '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping@2.2.1 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.20 + acorn: registry.npmjs.org/acorn@8.11.2 + aria-query: registry.npmjs.org/aria-query@5.3.0 + axobject-query: registry.npmjs.org/axobject-query@3.2.1 + code-red: registry.npmjs.org/code-red@1.0.4 + css-tree: registry.npmjs.org/css-tree@2.3.1 + estree-walker: registry.npmjs.org/estree-walker@3.0.3 + is-reference: registry.npmjs.org/is-reference@3.0.2 + locate-character: registry.npmjs.org/locate-character@3.0.0 + magic-string: registry.npmjs.org/magic-string@0.30.5 + periscopic: registry.npmjs.org/periscopic@3.1.0 + dev: true + registry.npmjs.org/svgo@3.0.2: resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz} name: svgo @@ -10649,6 +11186,15 @@ packages: version: 2.3.8 dev: true + registry.npmjs.org/tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz} + name: tiny-glob + version: 0.2.9 + dependencies: + globalyzer: registry.npmjs.org/globalyzer@0.1.0 + globrex: registry.npmjs.org/globrex@0.1.2 + dev: true + registry.npmjs.org/tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz} name: tmp @@ -10744,6 +11290,18 @@ packages: typescript: registry.npmjs.org/typescript@5.1.3 dev: true + registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz} + id: registry.npmjs.org/ts-api-utils/1.0.3 + name: ts-api-utils + version: 1.0.3 + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: registry.npmjs.org/typescript@5.2.2 + dev: true + registry.npmjs.org/tsconfig-resolver@3.0.1: resolution: {integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tsconfig-resolver/-/tsconfig-resolver-3.0.1.tgz} name: tsconfig-resolver @@ -11001,6 +11559,14 @@ packages: version: 5.1.3 engines: {node: '>=14.17'} hasBin: true + dev: true + + registry.npmjs.org/typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz} + name: typescript + version: 5.2.2 + engines: {node: '>=14.17'} + hasBin: true registry.npmjs.org/ultrahtml@1.5.2: resolution: {integrity: sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.2.tgz} @@ -11042,7 +11608,6 @@ packages: engines: {node: '>=14.0'} dependencies: '@fastify/busboy': registry.npmjs.org/@fastify/busboy@2.0.0 - dev: false registry.npmjs.org/unherit@3.0.1: resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz} @@ -11335,8 +11900,45 @@ packages: rollup: registry.npmjs.org/rollup@3.29.4 optionalDependencies: fsevents: registry.npmjs.org/fsevents@2.3.3 + dev: true - registry.npmjs.org/vitefu@0.2.5(vite@4.4.9): + registry.npmjs.org/vite@4.5.0: + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.5.0.tgz} + name: vite + version: 4.5.0 + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: registry.npmjs.org/esbuild@0.18.20 + postcss: registry.npmjs.org/postcss@8.4.31 + rollup: registry.npmjs.org/rollup@3.29.4 + optionalDependencies: + fsevents: registry.npmjs.org/fsevents@2.3.3 + + registry.npmjs.org/vitefu@0.2.5(vite@4.5.0): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz} id: registry.npmjs.org/vitefu/0.2.5 name: vitefu @@ -11347,7 +11949,7 @@ packages: vite: optional: true dependencies: - vite: registry.npmjs.org/vite@4.4.9 + vite: registry.npmjs.org/vite@4.5.0 registry.npmjs.org/vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz} From c5b22e049802ea9b65470e4964e2e9d67e50f243 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 14:52:56 +0100 Subject: [PATCH 16/30] removed broken test --- tests/playwright/e2e/pane.spec.ts | 52 +++++++------------------------ 1 file changed, 11 insertions(+), 41 deletions(-) diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts index 6090beac..f7f52e3c 100644 --- a/tests/playwright/e2e/pane.spec.ts +++ b/tests/playwright/e2e/pane.spec.ts @@ -182,45 +182,15 @@ test.describe('PANE NON-DEFAULT', () => { expect(viewportTransform.scale).toBe(1.234); }); }); - - test.describe('PANE ACTIVATION KEYS', () => { - test.beforeEach(async ({ page }) => { - // Go to the starting url before each test. - await page.goto('/tests/generic/pane/activation-keys'); - - // Wait till the edges are rendered - await page.waitForSelector('#first-edge', { timeout: 5000 }); - }); - - test.describe('pan & zoom', () => { - test('panOnScroll pans the pane on scrolling', async ({ page }) => { - const pane = page.locator(`.${FRAMEWORK}-flow__pane`); - const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); - - await expect(pane).toBeAttached(); - - const transformsBefore = await getTransform(viewport); - - await pane.hover(); - await page.mouse.wheel(100, 100); - - const transformsAfter = await getTransform(viewport); - - expect(transformsAfter.translateX).not.toBe(transformsBefore.translateX); - expect(transformsAfter.translateY).not.toBe(transformsBefore.translateY); - }); - - test('intialViewport', async ({ page }) => { - const pane = page.locator(`.${FRAMEWORK}-flow__pane`); - const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); - - await expect(pane).toBeAttached(); - - const viewportTransform = await getTransform(viewport); - - expect(viewportTransform.translateX).toBe(1.23); - expect(viewportTransform.translateY).toBe(9.87); - expect(viewportTransform.scale).toBe(1.234); - }); - }); +}); + +test.describe('PANE ACTIVATION KEYS', () => { + test.beforeEach(async ({ page }) => { + // Go to the starting url before each test. + await page.goto('/tests/generic/pane/activation-keys'); + + // Wait till the edges are rendered + await page.waitForSelector('#first-edge', { timeout: 5000 }); + }); + // TODO }); From b8a75ccac61c5e258eaf52fbf389253cd4f51a22 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 15:05:38 +0100 Subject: [PATCH 17/30] chore(react-examples) updated dependencies --- examples/react/package.json | 24 +- pnpm-lock.yaml | 511 ++++++++++++++++++------------------ 2 files changed, 270 insertions(+), 265 deletions(-) diff --git a/examples/react/package.json b/examples/react/package.json index 73d91382..9c303aae 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -15,25 +15,25 @@ }, "dependencies": { "@xyflow/react": "workspace:*", - "classcat": "^5.0.3", + "classcat": "^5.0.4", "dagre": "^0.8.5", "localforage": "^1.10.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.3.0", - "zustand": "^4.4.1" + "react-router-dom": "^6.18.0", + "zustand": "^4.4.6" }, "devDependencies": { "@cypress/skip-test": "^2.6.1", - "@types/dagre": "^0.7.48", - "@types/react": "^18.0.17", - "@types/react-dom": "^18.0.6", - "@vitejs/plugin-react": "4.0.4", - "@vitejs/plugin-react-swc": "^3.3.2", + "@types/dagre": "^0.7.52", + "@types/react": "^18.2.36", + "@types/react-dom": "^18.2.14", + "@vitejs/plugin-react": "4.1.1", + "@vitejs/plugin-react-swc": "^3.4.1", "cypress": "12.17.3", - "cypress-real-events": "1.10.0", - "start-server-and-test": "^1.14.0", - "typescript": "5.1.3", - "vite": "4.4.9" + "cypress-real-events": "1.11.0", + "start-server-and-test": "^2.0.2", + "typescript": "5.2.2", + "vite": "4.5.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a622802..c07f3def 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,7 +96,7 @@ importers: specifier: workspace:* version: link:../../packages/react classcat: - specifier: ^5.0.3 + specifier: ^5.0.4 version: registry.npmjs.org/classcat@5.0.4 dagre: specifier: ^0.8.5 @@ -111,45 +111,45 @@ importers: specifier: ^18.2.0 version: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) react-router-dom: - specifier: ^6.3.0 - version: registry.npmjs.org/react-router-dom@6.3.0(react-dom@18.2.0)(react@18.2.0) + specifier: ^6.18.0 + version: registry.npmjs.org/react-router-dom@6.18.0(react-dom@18.2.0)(react@18.2.0) zustand: - specifier: ^4.4.1 - version: registry.npmjs.org/zustand@4.4.1(@types/react@18.2.24)(react@18.2.0) + specifier: ^4.4.6 + version: registry.npmjs.org/zustand@4.4.6(@types/react@18.2.36)(react@18.2.0) devDependencies: '@cypress/skip-test': specifier: ^2.6.1 version: registry.npmjs.org/@cypress/skip-test@2.6.1 '@types/dagre': - specifier: ^0.7.48 - version: registry.npmjs.org/@types/dagre@0.7.48 + specifier: ^0.7.52 + version: registry.npmjs.org/@types/dagre@0.7.52 '@types/react': - specifier: ^18.0.17 - version: registry.npmjs.org/@types/react@18.2.24 + specifier: ^18.2.36 + version: registry.npmjs.org/@types/react@18.2.36 '@types/react-dom': - specifier: ^18.0.6 - version: registry.npmjs.org/@types/react-dom@18.2.8 + specifier: ^18.2.14 + version: registry.npmjs.org/@types/react-dom@18.2.14 '@vitejs/plugin-react': - specifier: 4.0.4 - version: registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.4.9) + specifier: 4.1.1 + version: registry.npmjs.org/@vitejs/plugin-react@4.1.1(vite@4.5.0) '@vitejs/plugin-react-swc': - specifier: ^3.3.2 - version: registry.npmjs.org/@vitejs/plugin-react-swc@3.3.2(vite@4.4.9) + specifier: ^3.4.1 + version: registry.npmjs.org/@vitejs/plugin-react-swc@3.4.1(vite@4.5.0) cypress: specifier: 12.17.3 version: registry.npmjs.org/cypress@12.17.3 cypress-real-events: - specifier: 1.10.0 - version: registry.npmjs.org/cypress-real-events@1.10.0(cypress@12.17.3) + specifier: 1.11.0 + version: registry.npmjs.org/cypress-real-events@1.11.0(cypress@12.17.3) start-server-and-test: - specifier: ^1.14.0 - version: registry.npmjs.org/start-server-and-test@1.14.0 + specifier: ^2.0.2 + version: registry.npmjs.org/start-server-and-test@2.0.2 typescript: - specifier: 5.1.3 - version: registry.npmjs.org/typescript@5.1.3 + specifier: 5.2.2 + version: registry.npmjs.org/typescript@5.2.2 vite: - specifier: 4.4.9 - version: registry.npmjs.org/vite@4.4.9 + specifier: 4.5.0 + version: registry.npmjs.org/vite@4.5.0 examples/svelte: dependencies: @@ -537,7 +537,7 @@ packages: dependencies: '@types/react': registry.npmjs.org/@types/react@18.2.24 '@types/react-dom': registry.npmjs.org/@types/react-dom@18.2.8 - '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.5.0) + '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react@4.1.1(vite@4.5.0) react: registry.npmjs.org/react@18.2.0 react-dom: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) ultrahtml: registry.npmjs.org/ultrahtml@1.5.2 @@ -834,6 +834,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: registry.npmjs.org/regenerator-runtime@0.14.0 + dev: true registry.npmjs.org/@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz} @@ -1894,6 +1895,13 @@ packages: version: 1.0.0-next.23 dev: true + registry.npmjs.org/@remix-run/router@1.11.0: + resolution: {integrity: sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz} + name: '@remix-run/router' + version: 1.11.0 + engines: {node: '>=14.0.0'} + dev: false + registry.npmjs.org/@rollup/plugin-commonjs@25.0.0(rollup@3.23.0): resolution: {integrity: sha512-hoho2Kay9TZrLu0bnDsTTCaj4Npa+THk9snajP/XDNb9a9mmjTjh52EQM9sKl3HD1LsnihX7js+eA2sd2uKAhw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.0.tgz} id: registry.npmjs.org/@rollup/plugin-commonjs/25.0.0 @@ -2224,10 +2232,10 @@ packages: - supports-color dev: true - registry.npmjs.org/@swc/core-darwin-arm64@1.3.94: - resolution: {integrity: sha512-KNuE6opIy/wAXiGUWLhGWhCG3wA/AdjG6eYkv6dstrAURLaQMAoD8vDfVm8pxS8FA8Kx+0Z4QiDNPqk5aKIsqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.94.tgz} + registry.npmjs.org/@swc/core-darwin-arm64@1.3.96: + resolution: {integrity: sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.96.tgz} name: '@swc/core-darwin-arm64' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -2235,10 +2243,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-darwin-x64@1.3.94: - resolution: {integrity: sha512-HypemhyehQrLqXwfJv5ronD4BMAXdgMCP4Ei7rt3B6Ftmt9axwGvdwGiXxsYR9h1ncyxoVxN+coGxbNIhKhahw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.94.tgz} + registry.npmjs.org/@swc/core-darwin-x64@1.3.96: + resolution: {integrity: sha512-mFp9GFfuPg+43vlAdQZl0WZpZSE8sEzqL7sr/7Reul5McUHP0BaLsEzwjvD035ESfkY8GBZdLpMinblIbFNljQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.96.tgz} name: '@swc/core-darwin-x64' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -2246,10 +2254,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-arm-gnueabihf@1.3.94: - resolution: {integrity: sha512-KzKN54c7Y6X1db+bBVSXG4+bXmAPvXtDWk+TgwNJH4yYliOrnP/RKkHA5QZ9VFSnqJF06/sAO4kYBiL/aVQDBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.94.tgz} + registry.npmjs.org/@swc/core-linux-arm-gnueabihf@1.3.96: + resolution: {integrity: sha512-8UEKkYJP4c8YzYIY/LlbSo8z5Obj4hqcv/fUTHiEePiGsOddgGf7AWjh56u7IoN/0uEmEro59nc1ChFXqXSGyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.96.tgz} name: '@swc/core-linux-arm-gnueabihf' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -2257,10 +2265,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-arm64-gnu@1.3.94: - resolution: {integrity: sha512-iAcR8Ho0Uck/SLSrgYfXkpcGOXuN5waMZO7GlL/52QODr7GJtOfZ0H1MCZLbIFkPJp/iXoJpYgym4d/qSd477Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.94.tgz} + registry.npmjs.org/@swc/core-linux-arm64-gnu@1.3.96: + resolution: {integrity: sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.96.tgz} name: '@swc/core-linux-arm64-gnu' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2268,10 +2276,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-arm64-musl@1.3.94: - resolution: {integrity: sha512-VCHL1Mb9ENHx+sAeubSSg481MUeP9/PYzPPy9tfswunj/w35M+vEWflwK2dzQL9kUTFD3zcFTpAgsKnj6aX24w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.94.tgz} + registry.npmjs.org/@swc/core-linux-arm64-musl@1.3.96: + resolution: {integrity: sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.96.tgz} name: '@swc/core-linux-arm64-musl' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2279,10 +2287,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-x64-gnu@1.3.94: - resolution: {integrity: sha512-gjq7U6clhJi0Oel2a4gwR4MbSu+THQ2hmBNVCOSA3JjPZWZTkJXaJDpnh/r7PJxKBwUDlo0VPlwiwjepAQR2Rw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.94.tgz} + registry.npmjs.org/@swc/core-linux-x64-gnu@1.3.96: + resolution: {integrity: sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.96.tgz} name: '@swc/core-linux-x64-gnu' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2290,10 +2298,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-x64-musl@1.3.94: - resolution: {integrity: sha512-rSylruWyeol2ujZDHmwiovupMR5ukMXivlA7DDxmQ1dFUV9HuiPknQrU5rEbI3V2V3V5RkpbEKjnADen7AeMPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.94.tgz} + registry.npmjs.org/@swc/core-linux-x64-musl@1.3.96: + resolution: {integrity: sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.96.tgz} name: '@swc/core-linux-x64-musl' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2301,10 +2309,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-win32-arm64-msvc@1.3.94: - resolution: {integrity: sha512-OenDUr5MQkz506ebVQq6ezoZ3GZ26nchgf5mPnwab4gx2TEiyR9zn7MdX5LWskTmOK3+FszPbGK0B5oLK6Y5yw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.94.tgz} + registry.npmjs.org/@swc/core-win32-arm64-msvc@1.3.96: + resolution: {integrity: sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.96.tgz} name: '@swc/core-win32-arm64-msvc' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -2312,10 +2320,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-win32-ia32-msvc@1.3.94: - resolution: {integrity: sha512-mi6NcmtJKnaiHAxLtVz+WzunscsEwPdA0j15DuiYVx06Xo+MdRLJj4eVBgVLwGD1AI3IqKs4MVVx2cD7n0h5mg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.94.tgz} + registry.npmjs.org/@swc/core-win32-ia32-msvc@1.3.96: + resolution: {integrity: sha512-Far2hVFiwr+7VPCM2GxSmbh3ikTpM3pDombE+d69hkedvYHYZxtTF+2LTKl/sXtpbUnsoq7yV/32c9R/xaaWfw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.96.tgz} name: '@swc/core-win32-ia32-msvc' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -2323,10 +2331,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-win32-x64-msvc@1.3.94: - resolution: {integrity: sha512-Ba0ZLcGMnqPWWF9Xa+rWhhnkpvE7XoQegMP/VCF2JIHb2ieGBC8jChO6nKRFKZjib/3wghGzxakyDQx3LDhDug==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.94.tgz} + registry.npmjs.org/@swc/core-win32-x64-msvc@1.3.96: + resolution: {integrity: sha512-4VbSAniIu0ikLf5mBX81FsljnfqjoVGleEkCQv4+zRlyZtO3FHoDPkeLVoy6WRlj7tyrRcfUJ4mDdPkbfTO14g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.96.tgz} name: '@swc/core-win32-x64-msvc' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -2334,10 +2342,10 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core@1.3.94: - resolution: {integrity: sha512-jTHn8UJOGgERKZLy8euEixVAzC/w/rUSuMlM3e7hxgap/TC595hSkuQwtkpL238dsuEPveD44GMy2A5UBtSvjg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core/-/core-1.3.94.tgz} + registry.npmjs.org/@swc/core@1.3.96: + resolution: {integrity: sha512-zwE3TLgoZwJfQygdv2SdCK9mRLYluwDOM53I+dT6Z5ZvrgVENmY3txvWDvduzkV+/8IuvrRbVezMpxcojadRdQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core/-/core-1.3.96.tgz} name: '@swc/core' - version: 1.3.94 + version: 1.3.96 engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -2349,16 +2357,16 @@ packages: '@swc/counter': registry.npmjs.org/@swc/counter@0.1.2 '@swc/types': registry.npmjs.org/@swc/types@0.1.5 optionalDependencies: - '@swc/core-darwin-arm64': registry.npmjs.org/@swc/core-darwin-arm64@1.3.94 - '@swc/core-darwin-x64': registry.npmjs.org/@swc/core-darwin-x64@1.3.94 - '@swc/core-linux-arm-gnueabihf': registry.npmjs.org/@swc/core-linux-arm-gnueabihf@1.3.94 - '@swc/core-linux-arm64-gnu': registry.npmjs.org/@swc/core-linux-arm64-gnu@1.3.94 - '@swc/core-linux-arm64-musl': registry.npmjs.org/@swc/core-linux-arm64-musl@1.3.94 - '@swc/core-linux-x64-gnu': registry.npmjs.org/@swc/core-linux-x64-gnu@1.3.94 - '@swc/core-linux-x64-musl': registry.npmjs.org/@swc/core-linux-x64-musl@1.3.94 - '@swc/core-win32-arm64-msvc': registry.npmjs.org/@swc/core-win32-arm64-msvc@1.3.94 - '@swc/core-win32-ia32-msvc': registry.npmjs.org/@swc/core-win32-ia32-msvc@1.3.94 - '@swc/core-win32-x64-msvc': registry.npmjs.org/@swc/core-win32-x64-msvc@1.3.94 + '@swc/core-darwin-arm64': registry.npmjs.org/@swc/core-darwin-arm64@1.3.96 + '@swc/core-darwin-x64': registry.npmjs.org/@swc/core-darwin-x64@1.3.96 + '@swc/core-linux-arm-gnueabihf': registry.npmjs.org/@swc/core-linux-arm-gnueabihf@1.3.96 + '@swc/core-linux-arm64-gnu': registry.npmjs.org/@swc/core-linux-arm64-gnu@1.3.96 + '@swc/core-linux-arm64-musl': registry.npmjs.org/@swc/core-linux-arm64-musl@1.3.96 + '@swc/core-linux-x64-gnu': registry.npmjs.org/@swc/core-linux-x64-gnu@1.3.96 + '@swc/core-linux-x64-musl': registry.npmjs.org/@swc/core-linux-x64-musl@1.3.96 + '@swc/core-win32-arm64-msvc': registry.npmjs.org/@swc/core-win32-arm64-msvc@1.3.96 + '@swc/core-win32-ia32-msvc': registry.npmjs.org/@swc/core-win32-ia32-msvc@1.3.96 + '@swc/core-win32-x64-msvc': registry.npmjs.org/@swc/core-win32-x64-msvc@1.3.96 dev: true registry.npmjs.org/@swc/counter@0.1.2: @@ -2387,35 +2395,43 @@ packages: dependencies: '@babel/parser': registry.npmjs.org/@babel/parser@7.23.0 '@babel/types': registry.npmjs.org/@babel/types@7.23.0 - '@types/babel__generator': registry.npmjs.org/@types/babel__generator@7.6.6 - '@types/babel__template': registry.npmjs.org/@types/babel__template@7.4.3 - '@types/babel__traverse': registry.npmjs.org/@types/babel__traverse@7.20.3 + '@types/babel__generator': registry.npmjs.org/@types/babel__generator@7.6.7 + '@types/babel__template': registry.npmjs.org/@types/babel__template@7.4.4 + '@types/babel__traverse': registry.npmjs.org/@types/babel__traverse@7.20.4 dev: false - registry.npmjs.org/@types/babel__generator@7.6.6: - resolution: {integrity: sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz} - name: '@types/babel__generator' - version: 7.6.6 - dependencies: - '@babel/types': registry.npmjs.org/@babel/types@7.23.0 - dev: false - - registry.npmjs.org/@types/babel__template@7.4.3: - resolution: {integrity: sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz} - name: '@types/babel__template' - version: 7.4.3 + registry.npmjs.org/@types/babel__core@7.20.4: + resolution: {integrity: sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz} + name: '@types/babel__core' + version: 7.20.4 dependencies: '@babel/parser': registry.npmjs.org/@babel/parser@7.23.0 '@babel/types': registry.npmjs.org/@babel/types@7.23.0 - dev: false + '@types/babel__generator': registry.npmjs.org/@types/babel__generator@7.6.7 + '@types/babel__template': registry.npmjs.org/@types/babel__template@7.4.4 + '@types/babel__traverse': registry.npmjs.org/@types/babel__traverse@7.20.4 - registry.npmjs.org/@types/babel__traverse@7.20.3: - resolution: {integrity: sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz} - name: '@types/babel__traverse' - version: 7.20.3 + registry.npmjs.org/@types/babel__generator@7.6.7: + resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz} + name: '@types/babel__generator' + version: 7.6.7 + dependencies: + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 + + registry.npmjs.org/@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz} + name: '@types/babel__template' + version: 7.4.4 + dependencies: + '@babel/parser': registry.npmjs.org/@babel/parser@7.23.0 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 + + registry.npmjs.org/@types/babel__traverse@7.20.4: + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz} + name: '@types/babel__traverse' + version: 7.20.4 dependencies: '@babel/types': registry.npmjs.org/@babel/types@7.23.0 - dev: false registry.npmjs.org/@types/cookie@0.5.3: resolution: {integrity: sha512-SLg07AS9z1Ab2LU+QxzU8RCmzsja80ywjf/t5oqw+4NSH20gIGlhLOrBDm1L3PBWzPa4+wkgFQVZAjE6Ioj2ug==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/cookie/-/cookie-0.5.3.tgz} @@ -2670,10 +2686,10 @@ packages: '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom@3.0.1 dev: false - registry.npmjs.org/@types/dagre@0.7.48: - resolution: {integrity: sha512-rF3yXSwHIrDxEkN6edCE4TXknb5YSEpiXfLaspw1I08grC49ZFuAVGOQCmZGIuLUGoFgcqGlUFBL/XrpgYpQgw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/dagre/-/dagre-0.7.48.tgz} + registry.npmjs.org/@types/dagre@0.7.52: + resolution: {integrity: sha512-XKJdy+OClLk3hketHi9Qg6gTfe1F3y+UFnHxKA2rn9Dw+oXa4Gb378Ztz9HlMgZKSxpPmn4BNVh9wgkpvrK1uw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/dagre/-/dagre-0.7.52.tgz} name: '@types/dagre' - version: 0.7.48 + version: 0.7.52 dev: true registry.npmjs.org/@types/debug@4.1.10: @@ -2711,12 +2727,6 @@ packages: ci-info: registry.npmjs.org/ci-info@3.9.0 dev: true - registry.npmjs.org/@types/json-schema@7.0.14: - resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz} - name: '@types/json-schema' - version: 7.0.14 - dev: true - registry.npmjs.org/@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz} name: '@types/json-schema' @@ -2771,10 +2781,10 @@ packages: version: 12.20.55 dev: true - registry.npmjs.org/@types/node@16.18.59: - resolution: {integrity: sha512-PJ1w2cNeKUEdey4LiPra0ZuxZFOGvetswE8qHRriV/sUkL5Al4tTmPV9D2+Y/TPIxTHHgxTfRjZVKWhPw/ORhQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-16.18.59.tgz} + registry.npmjs.org/@types/node@16.18.60: + resolution: {integrity: sha512-ZUGPWx5vKfN+G2/yN7pcSNLkIkXEvlwNaJEd4e0ppX7W2S8XAkdc/37hM4OUNJB9sa0p12AOvGvxL4JCPiz9DA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-16.18.60.tgz} name: '@types/node' - version: 16.18.59 + version: 16.18.60 dev: true registry.npmjs.org/@types/node@18.7.16: @@ -2783,15 +2793,6 @@ packages: version: 18.7.16 dev: true - registry.npmjs.org/@types/node@20.8.7: - resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz} - name: '@types/node' - version: 20.8.7 - dependencies: - undici-types: registry.npmjs.org/undici-types@5.25.3 - dev: true - optional: true - registry.npmjs.org/@types/normalize-package-data@2.4.3: resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz} name: '@types/normalize-package-data' @@ -2804,6 +2805,11 @@ packages: version: 6.0.3 dev: false + registry.npmjs.org/@types/prop-types@15.7.10: + resolution: {integrity: sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz} + name: '@types/prop-types' + version: 15.7.10 + registry.npmjs.org/@types/prop-types@15.7.9: resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz} name: '@types/prop-types' @@ -2821,6 +2827,14 @@ packages: version: 2.0.9 dev: true + registry.npmjs.org/@types/react-dom@18.2.14: + resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz} + name: '@types/react-dom' + version: 18.2.14 + dependencies: + '@types/react': registry.npmjs.org/@types/react@18.2.36 + dev: true + registry.npmjs.org/@types/react-dom@18.2.8: resolution: {integrity: sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.8.tgz} name: '@types/react-dom' @@ -2837,6 +2851,15 @@ packages: '@types/scheduler': registry.npmjs.org/@types/scheduler@0.16.5 csstype: registry.npmjs.org/csstype@3.1.2 + registry.npmjs.org/@types/react@18.2.36: + resolution: {integrity: sha512-o9XFsHYLLZ4+sb9CWUYwHqFVoG61SesydF353vFMMsQziiyRu8np4n2OYMUSDZ8XuImxDr9c5tR7gidlH29Vnw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react/-/react-18.2.36.tgz} + name: '@types/react' + version: 18.2.36 + dependencies: + '@types/prop-types': registry.npmjs.org/@types/prop-types@15.7.10 + '@types/scheduler': registry.npmjs.org/@types/scheduler@0.16.5 + csstype: registry.npmjs.org/csstype@3.1.2 + registry.npmjs.org/@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz} name: '@types/resolve' @@ -2896,7 +2919,7 @@ packages: version: 2.10.2 requiresBuild: true dependencies: - '@types/node': registry.npmjs.org/@types/node@20.8.7 + '@types/node': registry.npmjs.org/@types/node@16.18.60 dev: true optional: true @@ -3251,7 +3274,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.0) - '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.14 + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 '@types/semver': registry.npmjs.org/@types/semver@7.5.4 '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@5.60.0 '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.60.0 @@ -3334,43 +3357,25 @@ packages: version: 1.2.0 dev: true - registry.npmjs.org/@vitejs/plugin-react-swc@3.3.2(vite@4.4.9): - resolution: {integrity: sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz} - id: registry.npmjs.org/@vitejs/plugin-react-swc/3.3.2 + registry.npmjs.org/@vitejs/plugin-react-swc@3.4.1(vite@4.5.0): + resolution: {integrity: sha512-7YQOQcVV5x1luD8nkbCDdyYygFvn1hjqJk68UvNAzY2QG4o4N5EwAhLLFNOcd1HrdMwDl0VElP8VutoWf9IvJg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.4.1.tgz} + id: registry.npmjs.org/@vitejs/plugin-react-swc/3.4.1 name: '@vitejs/plugin-react-swc' - version: 3.3.2 + version: 3.4.1 peerDependencies: vite: ^4 dependencies: - '@swc/core': registry.npmjs.org/@swc/core@1.3.94 - vite: registry.npmjs.org/vite@4.4.9 + '@swc/core': registry.npmjs.org/@swc/core@1.3.96 + vite: registry.npmjs.org/vite@4.5.0 transitivePeerDependencies: - '@swc/helpers' dev: true - registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.4.9): - resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz} - id: registry.npmjs.org/@vitejs/plugin-react/4.0.4 + registry.npmjs.org/@vitejs/plugin-react@4.1.1(vite@4.5.0): + resolution: {integrity: sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz} + id: registry.npmjs.org/@vitejs/plugin-react/4.1.1 name: '@vitejs/plugin-react' - version: 4.0.4 - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 - dependencies: - '@babel/core': registry.npmjs.org/@babel/core@7.23.2 - '@babel/plugin-transform-react-jsx-self': registry.npmjs.org/@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.2) - react-refresh: registry.npmjs.org/react-refresh@0.14.0 - vite: registry.npmjs.org/vite@4.4.9 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.5.0): - resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz} - id: registry.npmjs.org/@vitejs/plugin-react/4.0.4 - name: '@vitejs/plugin-react' - version: 4.0.4 + version: 4.1.1 engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 @@ -3378,11 +3383,11 @@ packages: '@babel/core': registry.npmjs.org/@babel/core@7.23.2 '@babel/plugin-transform-react-jsx-self': registry.npmjs.org/@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.23.2) '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.2) + '@types/babel__core': registry.npmjs.org/@types/babel__core@7.20.4 react-refresh: registry.npmjs.org/react-refresh@0.14.0 vite: registry.npmjs.org/vite@4.5.0 transitivePeerDependencies: - supports-color - dev: false registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} @@ -3513,6 +3518,12 @@ packages: version: 2.2.0 dev: true + registry.npmjs.org/arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/arg/-/arg-5.0.2.tgz} + name: arg + version: 5.0.2 + dev: true + registry.npmjs.org/argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz} name: argparse @@ -3723,10 +3734,10 @@ packages: - terser dev: false - registry.npmjs.org/async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/async/-/async-3.2.4.tgz} + registry.npmjs.org/async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/async/-/async-3.2.5.tgz} name: async - version: 3.2.4 + version: 3.2.5 dev: true registry.npmjs.org/asynciterator.prototype@1.0.0: @@ -3788,13 +3799,14 @@ packages: version: 1.12.0 dev: true - registry.npmjs.org/axios@0.21.4(debug@4.3.2): - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/axios/-/axios-0.21.4.tgz} - id: registry.npmjs.org/axios/0.21.4 + registry.npmjs.org/axios@0.27.2(debug@4.3.4): + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/axios/-/axios-0.27.2.tgz} + id: registry.npmjs.org/axios/0.27.2 name: axios - version: 0.21.4 + version: 0.27.2 dependencies: - follow-redirects: registry.npmjs.org/follow-redirects@1.15.3(debug@4.3.2) + follow-redirects: registry.npmjs.org/follow-redirects@1.15.3(debug@4.3.4) + form-data: registry.npmjs.org/form-data@4.0.0 transitivePeerDependencies: - debug dev: true @@ -4616,16 +4628,15 @@ packages: stream-transform: registry.npmjs.org/stream-transform@2.1.3 dev: true - registry.npmjs.org/cypress-real-events@1.10.0(cypress@12.17.3): - resolution: {integrity: sha512-ALSdCiG+Rj3Sl6qooqTFeFGBxOIe8QJUcgIuJ6ZVBanTEijXRzqxqstMC2ZKfixqj1TyNjolyZU4zOoN/jtHpg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress-real-events/-/cypress-real-events-1.10.0.tgz} - id: registry.npmjs.org/cypress-real-events/1.10.0 + registry.npmjs.org/cypress-real-events@1.11.0(cypress@12.17.3): + resolution: {integrity: sha512-4LXVRsyq+xBh5TmlEyO1ojtBXtN7xw720Pwb9rEE9rkJuXmeH3VyoR1GGayMGr+Itqf11eEjfDewtDmcx6PWPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress-real-events/-/cypress-real-events-1.11.0.tgz} + id: registry.npmjs.org/cypress-real-events/1.11.0 name: cypress-real-events - version: 1.10.0 + version: 1.11.0 peerDependencies: - cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x || ^11.x || ^12.x + cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x || ^11.x || ^12.x || ^13.x dependencies: cypress: registry.npmjs.org/cypress@12.17.3 - prettier: registry.npmjs.org/prettier@3.0.3 dev: true registry.npmjs.org/cypress@12.17.3: @@ -4638,7 +4649,7 @@ packages: dependencies: '@cypress/request': registry.npmjs.org/@cypress/request@2.88.12 '@cypress/xvfb': registry.npmjs.org/@cypress/xvfb@1.2.4(supports-color@8.1.1) - '@types/node': registry.npmjs.org/@types/node@16.18.59 + '@types/node': registry.npmjs.org/@types/node@16.18.60 '@types/sinonjs__fake-timers': registry.npmjs.org/@types/sinonjs__fake-timers@8.1.1 '@types/sizzle': registry.npmjs.org/@types/sizzle@2.3.5 arch: registry.npmjs.org/arch@2.2.0 @@ -4830,20 +4841,6 @@ packages: ms: registry.npmjs.org/ms@2.1.3 supports-color: registry.npmjs.org/supports-color@8.1.1 - registry.npmjs.org/debug@4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-4.3.2.tgz} - name: debug - version: 4.3.2 - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: registry.npmjs.org/ms@2.1.2 - dev: true - registry.npmjs.org/debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-4.3.4.tgz} id: registry.npmjs.org/debug/4.3.4 @@ -6022,7 +6019,7 @@ packages: version: 3.2.9 dev: true - registry.npmjs.org/follow-redirects@1.15.3(debug@4.3.2): + registry.npmjs.org/follow-redirects@1.15.3(debug@4.3.4): resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz} id: registry.npmjs.org/follow-redirects/1.15.3 name: follow-redirects @@ -6034,7 +6031,7 @@ packages: debug: optional: true dependencies: - debug: registry.npmjs.org/debug@4.3.2 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) dev: true registry.npmjs.org/for-each@0.3.3: @@ -6062,6 +6059,17 @@ packages: mime-types: registry.npmjs.org/mime-types@2.1.35 dev: true + registry.npmjs.org/form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz} + name: form-data + version: 4.0.0 + engines: {node: '>= 6'} + dependencies: + asynckit: registry.npmjs.org/asynckit@0.4.0 + combined-stream: registry.npmjs.org/combined-stream@1.0.8 + mime-types: registry.npmjs.org/mime-types@2.1.35 + dev: true + registry.npmjs.org/fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz} name: fraction.js @@ -6123,7 +6131,7 @@ packages: at-least-node: registry.npmjs.org/at-least-node@1.0.0 graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 jsonfile: registry.npmjs.org/jsonfile@6.1.0 - universalify: registry.npmjs.org/universalify@2.0.0 + universalify: registry.npmjs.org/universalify@2.0.1 dev: true registry.npmjs.org/fs.realpath@1.0.0: @@ -6233,7 +6241,7 @@ packages: name: getos version: 3.2.1 dependencies: - async: registry.npmjs.org/async@3.2.4 + async: registry.npmjs.org/async@3.2.5 dev: true registry.npmjs.org/getpass@0.1.7: @@ -6347,7 +6355,7 @@ packages: dependencies: array-union: registry.npmjs.org/array-union@2.1.0 dir-glob: registry.npmjs.org/dir-glob@3.0.1 - fast-glob: registry.npmjs.org/fast-glob@3.3.1 + fast-glob: registry.npmjs.org/fast-glob@3.3.2 ignore: registry.npmjs.org/ignore@5.2.4 merge2: registry.npmjs.org/merge2@1.4.1 slash: registry.npmjs.org/slash@3.0.0 @@ -6360,7 +6368,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: registry.npmjs.org/dir-glob@3.0.1 - fast-glob: registry.npmjs.org/fast-glob@3.3.1 + fast-glob: registry.npmjs.org/fast-glob@3.3.2 ignore: registry.npmjs.org/ignore@5.2.4 merge2: registry.npmjs.org/merge2@1.4.1 slash: registry.npmjs.org/slash@4.0.0 @@ -6570,14 +6578,6 @@ packages: space-separated-tokens: registry.npmjs.org/space-separated-tokens@2.0.2 dev: false - registry.npmjs.org/history@5.3.0: - resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/history/-/history-5.3.0.tgz} - name: history - version: 5.3.0 - dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime@7.23.2 - dev: false - registry.npmjs.org/hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz} name: hosted-git-info @@ -7273,7 +7273,7 @@ packages: name: jsonfile version: 6.1.0 dependencies: - universalify: registry.npmjs.org/universalify@2.0.0 + universalify: registry.npmjs.org/universalify@2.0.1 optionalDependencies: graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 dev: true @@ -8258,6 +8258,14 @@ packages: version: 3.3.6 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true + + registry.npmjs.org/nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz} + name: nanoid + version: 3.3.7 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true registry.npmjs.org/napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz} @@ -9319,7 +9327,7 @@ packages: version: 8.4.31 engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: registry.npmjs.org/nanoid@3.3.6 + nanoid: registry.npmjs.org/nanoid@3.3.7 picocolors: registry.npmjs.org/picocolors@1.0.0 source-map-js: registry.npmjs.org/source-map-js@1.0.2 @@ -9516,6 +9524,13 @@ packages: engines: {node: '>=6'} dev: true + registry.npmjs.org/punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz} + name: punycode + version: 2.3.1 + engines: {node: '>=6'} + dev: true + registry.npmjs.org/qs@6.10.4: resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/qs/-/qs-6.10.4.tgz} name: qs @@ -9595,30 +9610,32 @@ packages: version: 0.14.0 engines: {node: '>=0.10.0'} - registry.npmjs.org/react-router-dom@6.3.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz} - id: registry.npmjs.org/react-router-dom/6.3.0 + registry.npmjs.org/react-router-dom@6.18.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.18.0.tgz} + id: registry.npmjs.org/react-router-dom/6.18.0 name: react-router-dom - version: 6.3.0 + version: 6.18.0 + engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - history: registry.npmjs.org/history@5.3.0 + '@remix-run/router': registry.npmjs.org/@remix-run/router@1.11.0 react: registry.npmjs.org/react@18.2.0 react-dom: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) - react-router: registry.npmjs.org/react-router@6.3.0(react@18.2.0) + react-router: registry.npmjs.org/react-router@6.18.0(react@18.2.0) dev: false - registry.npmjs.org/react-router@6.3.0(react@18.2.0): - resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz} - id: registry.npmjs.org/react-router/6.3.0 + registry.npmjs.org/react-router@6.18.0(react@18.2.0): + resolution: {integrity: sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz} + id: registry.npmjs.org/react-router/6.18.0 name: react-router - version: 6.3.0 + version: 6.18.0 + engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' dependencies: - history: registry.npmjs.org/history@5.3.0 + '@remix-run/router': registry.npmjs.org/@remix-run/router@1.11.0 react: registry.npmjs.org/react@18.2.0 dev: false @@ -9720,6 +9737,7 @@ packages: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz} name: regenerator-runtime version: 0.14.0 + dev: true registry.npmjs.org/regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz} @@ -10477,20 +10495,21 @@ packages: tweetnacl: registry.npmjs.org/tweetnacl@0.14.5 dev: true - registry.npmjs.org/start-server-and-test@1.14.0: - resolution: {integrity: sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.14.0.tgz} + registry.npmjs.org/start-server-and-test@2.0.2: + resolution: {integrity: sha512-4sGS2QmETUwqeBUqtTLP7OqXp3PdDnevaWlPlrFQgn8+7uCgVg4Do7/H/ZhAAVyvnL3DqKyANhnLgcgxrjhrMA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.2.tgz} name: start-server-and-test - version: 1.14.0 - engines: {node: '>=6'} + version: 2.0.2 + engines: {node: '>=16'} hasBin: true dependencies: + arg: registry.npmjs.org/arg@5.0.2 bluebird: registry.npmjs.org/bluebird@3.7.2 check-more-types: registry.npmjs.org/check-more-types@2.24.0 - debug: registry.npmjs.org/debug@4.3.2 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) execa: registry.npmjs.org/execa@5.1.1 lazy-ass: registry.npmjs.org/lazy-ass@1.6.0 ps-tree: registry.npmjs.org/ps-tree@1.2.0 - wait-on: registry.npmjs.org/wait-on@6.0.0(debug@4.3.2) + wait-on: registry.npmjs.org/wait-on@7.1.0(debug@4.3.4) transitivePeerDependencies: - supports-color dev: true @@ -11241,7 +11260,7 @@ packages: engines: {node: '>=6'} dependencies: psl: registry.npmjs.org/psl@1.9.0 - punycode: registry.npmjs.org/punycode@2.3.0 + punycode: registry.npmjs.org/punycode@2.3.1 universalify: registry.npmjs.org/universalify@0.2.0 url-parse: registry.npmjs.org/url-parse@1.5.10 dev: true @@ -11585,13 +11604,6 @@ packages: which-boxed-primitive: registry.npmjs.org/which-boxed-primitive@1.0.2 dev: true - registry.npmjs.org/undici-types@5.25.3: - resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz} - name: undici-types - version: 5.25.3 - dev: true - optional: true - registry.npmjs.org/undici@5.23.0: resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici/-/undici-5.23.0.tgz} name: undici @@ -11743,6 +11755,13 @@ packages: engines: {node: '>= 10.0.0'} dev: true + registry.npmjs.org/universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz} + name: universalify + version: 2.0.1 + engines: {node: '>= 10.0.0'} + dev: true + registry.npmjs.org/untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz} name: untildify @@ -11865,43 +11884,6 @@ packages: vfile-message: registry.npmjs.org/vfile-message@3.1.4 dev: false - registry.npmjs.org/vite@4.4.9: - resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.4.9.tgz} - name: vite - version: 4.4.9 - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: registry.npmjs.org/esbuild@0.18.20 - postcss: registry.npmjs.org/postcss@8.4.31 - rollup: registry.npmjs.org/rollup@3.29.4 - optionalDependencies: - fsevents: registry.npmjs.org/fsevents@2.3.3 - dev: true - registry.npmjs.org/vite@4.5.0: resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.5.0.tgz} name: vite @@ -11963,15 +11945,15 @@ packages: version: 8.0.0 dev: false - registry.npmjs.org/wait-on@6.0.0(debug@4.3.2): - resolution: {integrity: sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz} - id: registry.npmjs.org/wait-on/6.0.0 + registry.npmjs.org/wait-on@7.1.0(debug@4.3.4): + resolution: {integrity: sha512-U7TF/OYYzAg+OoiT/B8opvN48UHt0QYMi4aD3PjRFpybQ+o6czQF8Ig3SKCCMJdxpBrCalIJ4O00FBof27Fu9Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wait-on/-/wait-on-7.1.0.tgz} + id: registry.npmjs.org/wait-on/7.1.0 name: wait-on - version: 6.0.0 - engines: {node: '>=10.0.0'} + version: 7.1.0 + engines: {node: '>=12.0.0'} hasBin: true dependencies: - axios: registry.npmjs.org/axios@0.21.4(debug@4.3.2) + axios: registry.npmjs.org/axios@0.27.2(debug@4.3.4) joi: registry.npmjs.org/joi@17.11.0 lodash: registry.npmjs.org/lodash@4.17.21 minimist: registry.npmjs.org/minimist@1.2.8 @@ -12306,6 +12288,29 @@ packages: use-sync-external-store: registry.npmjs.org/use-sync-external-store@1.2.0(react@18.2.0) dev: false + registry.npmjs.org/zustand@4.4.6(@types/react@18.2.36)(react@18.2.0): + resolution: {integrity: sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.4.6.tgz} + id: registry.npmjs.org/zustand/4.4.6 + name: zustand + version: 4.4.6 + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + '@types/react': registry.npmjs.org/@types/react@18.2.36 + react: registry.npmjs.org/react@18.2.0 + use-sync-external-store: registry.npmjs.org/use-sync-external-store@1.2.0(react@18.2.0) + dev: false + registry.npmjs.org/zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz} name: zwitch From 8be0337e00fc2bb95ed0d00e6101c03dce0559b3 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 16:19:09 +0100 Subject: [PATCH 18/30] refactored react-examples app and created generic test case component --- examples/react/cypress.config.ts | 2 +- examples/react/src/App/index.tsx | 150 ++++++++-------- examples/react/src/app.d.ts | 7 + examples/react/src/generic-tests/Flow.tsx | 29 ++++ .../react/src/generic-tests/edges/general.ts | 163 ++++++++++++++++++ examples/react/src/generic-tests/index.tsx | 17 ++ .../react/src/generic-tests/nodes/general.ts | 1 + 7 files changed, 299 insertions(+), 70 deletions(-) create mode 100644 examples/react/src/app.d.ts create mode 100644 examples/react/src/generic-tests/Flow.tsx create mode 100644 examples/react/src/generic-tests/edges/general.ts create mode 100644 examples/react/src/generic-tests/index.tsx create mode 100644 examples/react/src/generic-tests/nodes/general.ts diff --git a/examples/react/cypress.config.ts b/examples/react/cypress.config.ts index b46eaa76..027bd690 100644 --- a/examples/react/cypress.config.ts +++ b/examples/react/cypress.config.ts @@ -2,7 +2,7 @@ import { defineConfig } from 'cypress'; export default defineConfig({ e2e: { - baseUrl: 'http://localhost:3000', + baseUrl: 'http://localhost:3000/examples', viewportWidth: 1280, viewportHeight: 720, video: false, diff --git a/examples/react/src/App/index.tsx b/examples/react/src/App/index.tsx index b6bc5be7..77344ba2 100644 --- a/examples/react/src/App/index.tsx +++ b/examples/react/src/App/index.tsx @@ -1,5 +1,7 @@ import { useEffect, useState } from 'react'; -import { BrowserRouter, Route, Routes, useLocation, useNavigate } from 'react-router-dom'; +import { BrowserRouter, Outlet, Route, Routes, useLocation, useNavigate } from 'react-router-dom'; + +import GenericTests from '../generic-tests'; import Basic from '../examples/Basic'; import Backgrounds from '../examples/Backgrounds'; @@ -57,232 +59,232 @@ interface IRoute { const routes: IRoute[] = [ { name: 'Basic', - path: '/', + path: 'basic', component: Basic, }, { name: 'Backgrounds', - path: '/backgrounds', + path: 'backgrounds', component: Backgrounds, }, { name: 'Cancel Connection', - path: '/cancel-connection', + path: 'cancel-connection', component: CancelConnection, }, { name: 'Controlled/Uncontrolled', - path: '/controlled-uncontrolled', + path: 'controlled-uncontrolled', component: ControlledUncontrolled, }, { name: 'Controlled Viewport', - path: '/controlled-viewport', + path: 'controlled-viewport', component: ControlledViewport, }, { name: 'Custom Connection Line', - path: '/custom-connectionline', + path: 'custom-connectionline', component: CustomConnectionLine, }, { name: 'Custom Minimap Node', - path: '/custom-minimap-node', + path: 'custom-minimap-node', component: CustomMiniMapNode, }, { name: 'Custom Node', - path: '/custom-node', + path: 'custom-node', component: CustomNode, }, { name: 'Default Nodes', - path: '/default-nodes', + path: 'default-nodes', component: DefaultNodes, }, { name: 'Drag Handle', - path: '/draghandle', + path: 'draghandle', component: DragHandle, }, { name: 'Drag and Drop', - path: '/dragndrop', + path: 'dragndrop', component: DragNDrop, }, { name: 'EasyConnect', - path: '/easy-connect', + path: 'easy-connect', component: EasyConnect, }, { name: 'Edges', - path: '/edges', + path: 'edges', component: Edges, }, { name: 'Edge Renderer', - path: '/edge-renderer', + path: 'edge-renderer', component: EdgeRenderer, }, { name: 'Edge Types', - path: '/edge-types', + path: 'edge-types', component: EdgeTypes, }, { name: 'Edge Routing', - path: '/edge-routing', + path: 'edge-routing', component: EdgeRouting, }, { name: 'Empty', - path: '/empty', + path: 'empty', component: Empty, }, { name: 'Figma', - path: '/figma', + path: 'figma', component: Figma, }, { name: 'Floating Edges', - path: '/floating-edges', + path: 'floating-edges', component: FloatingEdges, }, { name: 'Hidden', - path: '/hidden', + path: 'hidden', component: Hidden, }, { name: 'Interaction', - path: '/interaction', + path: 'interaction', component: Interaction, }, { name: 'Intersection', - path: '/intersection', + path: 'intersection', component: Intersection, }, { name: 'Interactive Minimap', - path: '/interactive-minimap', + path: 'interactive-minimap', component: InteractiveMinimap, }, { name: 'Layouting', - path: '/layouting', + path: 'layouting', component: Layouting, }, { name: 'Multi Flows', - path: '/multiflows', + path: 'multiflows', component: MultiFlows, }, { name: 'Nested Nodes', - path: '/nested-nodes', + path: 'nested-nodes', component: NestedNodes, }, { name: 'Node Type Change', - path: '/nodetype-change', + path: 'nodetype-change', component: NodeTypeChange, }, { name: 'nodeTypes Object Change', - path: '/nodetypesobject-change', + path: 'nodetypesobject-change', component: NodeTypesObjectChange, }, { name: 'NodeToolbar', - path: '/node-toolbar', + path: 'node-toolbar', component: NodeToolbar, }, { name: 'NodeResizer', - path: '/node-resizer', + path: 'node-resizer', component: NodeResizer, }, { name: 'Overview', - path: '/overview', + path: 'overview', component: Overview, }, { name: 'Provider', - path: '/provider', + path: 'provider', component: Provider, }, { name: 'Save/Restore', - path: '/save-restore', + path: 'save-restore', component: SaveRestore, }, { name: 'Stress', - path: '/stress', + path: 'stress', component: Stress, }, { name: 'Subflow', - path: '/subflow', + path: 'subflow', component: Subflow, }, { name: 'Switch Flow', - path: '/switch', + path: 'switch', component: SwitchFlow, }, { name: 'Touch Device', - path: '/touch-device', + path: 'touch-device', component: TouchDevice, }, { name: 'Undirectional', - path: '/undirectional', + path: 'undirectional', component: Undirectional, }, { name: 'Updatable Edge', - path: '/updatable-edge', + path: 'updatable-edge', component: UpdatableEdge, }, { name: 'Update Node', - path: '/update-node', + path: 'update-node', component: UpdateNode, }, { name: 'useNodesInitialized', - path: '/use-nodes-initialized', + path: 'use-nodes-initialized', component: useNodesInitialized, }, { name: 'useOnSelectionChange', - path: '/use-on-selection-change', + path: 'use-on-selection-change', component: UseOnSelectionChange, }, { name: 'useReactFlow', - path: '/usereactflow', + path: 'usereactflow', component: UseReactFlow, }, { name: 'useUpdateNodeInternals', - path: '/useupdatenodeinternals', + path: 'useupdatenodeinternals', component: UseUpdateNodeInternals, }, { name: 'Validation', - path: '/validation', + path: 'validation', component: Validation, }, { name: 'useKeyPress', - path: '/use-key-press', + path: 'use-key-press', component: UseKeyPress, }, ]; @@ -299,28 +301,38 @@ const Header = () => { }, [currentPath]); return ( -
- - React Flow Dev - - -
+ <> +
+ + React Flow Dev + + +
+ + ); }; -export default () => ( - -
- - {routes.map((route) => ( - } /> - ))} - - -); +export default () => { + return ( + <> + + + }> + } /> + {routes.map((route) => ( + } /> + ))} + + } /> + + + + ); +}; diff --git a/examples/react/src/app.d.ts b/examples/react/src/app.d.ts new file mode 100644 index 00000000..1118fb9d --- /dev/null +++ b/examples/react/src/app.d.ts @@ -0,0 +1,7 @@ +import { Edge, Node, ReactFlowProps } from '@xyflow/react'; + +declare global { + interface GenericTestCase { + reactFlowProps: Omit & { nodes: Node[]; edges: Edge[] }; + } +} diff --git a/examples/react/src/generic-tests/Flow.tsx b/examples/react/src/generic-tests/Flow.tsx new file mode 100644 index 00000000..28b38001 --- /dev/null +++ b/examples/react/src/generic-tests/Flow.tsx @@ -0,0 +1,29 @@ +import { useState, useCallback } from 'react'; +import { ReactFlow, Controls, Background, applyNodeChanges, applyEdgeChanges } from '@xyflow/react'; + +type FlowProps = { + generics: GenericTestCase; +}; + +export default ({ generics }: FlowProps) => { + const [nodes, setNodes] = useState(generics.reactFlowProps.nodes); + const [edges, setEdges] = useState(generics.reactFlowProps.edges); + + const onNodesChange = useCallback((changes) => setNodes((nds) => applyNodeChanges(changes, nds)), []); + const onEdgesChange = useCallback((changes) => setEdges((eds) => applyEdgeChanges(changes, eds)), []); + + return ( +
+ + + + +
+ ); +}; diff --git a/examples/react/src/generic-tests/edges/general.ts b/examples/react/src/generic-tests/edges/general.ts new file mode 100644 index 00000000..596c836d --- /dev/null +++ b/examples/react/src/generic-tests/edges/general.ts @@ -0,0 +1,163 @@ +import { MarkerType } from '@xyflow/react'; + +export default { + reactFlowProps: { + fitView: true, + nodes: [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input', + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 }, + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 }, + }, + { + id: '4', + data: { label: '4' }, + position: { x: -100, y: 200 }, + }, + { + id: '5', + data: { label: '5' }, + position: { x: 100, y: 200 }, + }, + { + id: '6', + data: { label: '6' }, + position: { x: -100, y: 300 }, + }, + { + id: '7', + data: { label: '7' }, + position: { x: 100, y: 300 }, + }, + { + id: '8', + data: { label: '8' }, + position: { x: -100, y: 400 }, + }, + { + id: '9', + data: { label: '9' }, + position: { x: 100, y: 400 }, + }, + { + id: '10', + data: { label: '10' }, + position: { x: -100, y: 500 }, + }, + { + id: '11', + data: { label: '11' }, + position: { x: 100, y: 500 }, + }, + // { + // id: '12', + // data: { label: '12' }, + // position: { x: -100, y: 600 } + // }, + // { + // id: '13', + // data: { label: '13' }, + // position: { x: 100, y: 600 } + // } + ], + edges: [ + { + id: 'edge-with-class', + source: '1', + target: '2', + className: 'edge-class-test', + }, + { + id: 'edge-with-style', + source: '1', + target: '3', + style: { + stroke: 'red', + }, + }, + { + id: 'hidden-edge', + source: '2', + target: '4', + label: 'hidden', + hidden: true, + }, + { + id: 'animated-edge', + source: '3', + target: '5', + label: 'animated', + animated: true, + }, + { + id: 'not-selectable-edge', + source: '4', + target: '6', + label: 'not-selectable', + selectable: false, + }, + { + id: 'not-deletable', + source: '5', + target: '7', + label: 'not-deletable', + deletable: false, + }, + { + id: 'z-index', + source: '6', + target: '8', + label: 'z-index', + zIndex: 3141592, + }, + { + id: 'aria-label', + source: '7', + target: '9', + label: 'aria-label', + ariaLabel: 'aria-label-test', + }, + { + id: 'interaction-width', + source: '8', + target: '10', + label: 'interaction-width', + interactionWidth: 42, + }, + { + id: 'markers', + source: '9', + target: '11', + label: 'markers', + markerEnd: { type: MarkerType.Arrow }, + markerStart: { type: MarkerType.ArrowClosed }, + }, + // { + // id: 'updatable', + // source: '9', + // target: '11', + // label: 'focusable', + // updatable: true + // }, + // { + // id: 'not-focusable', + // + // source: '5', + // target: '7', + // label: 'not-focusable', + // focusable: false + // }, + ], + }, +} satisfies GenericTestCase; diff --git a/examples/react/src/generic-tests/index.tsx b/examples/react/src/generic-tests/index.tsx new file mode 100644 index 00000000..d50e466a --- /dev/null +++ b/examples/react/src/generic-tests/index.tsx @@ -0,0 +1,17 @@ +import { useLocation } from 'react-router-dom'; +import Flow from './Flow'; + +export default () => { + const location = useLocation(); + const files = import.meta.glob('./**/*.ts', { eager: true, import: 'default' }); + + const testCasePath = `.${location.pathname.replace('/tests/generic', '')}.ts`; + + const testCase = files[testCasePath]; + + if (!testCase) { + return
; + } + + return ; +}; diff --git a/examples/react/src/generic-tests/nodes/general.ts b/examples/react/src/generic-tests/nodes/general.ts new file mode 100644 index 00000000..ff8b4c56 --- /dev/null +++ b/examples/react/src/generic-tests/nodes/general.ts @@ -0,0 +1 @@ +export default {}; From 9551ebc0f32ebc46d31f89b2089bf89ccadaa137 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 16:31:49 +0100 Subject: [PATCH 19/30] ported all test cases from svelte to react --- examples/react/src/app.d.ts | 2 +- examples/react/src/generic-tests/Flow.tsx | 6 +- .../react/src/generic-tests/edges/general.ts | 2 +- .../nodes/components/DragHandleNode.tsx | 25 +++++ .../react/src/generic-tests/nodes/general.ts | 92 ++++++++++++++++++- .../react/src/generic-tests/pane/general.ts | 37 ++++++++ .../src/generic-tests/pane/non-defaults.ts | 38 ++++++++ tests/playwright/e2e/edges.spec.ts | 2 +- tests/playwright/e2e/pane.spec.ts | 2 +- 9 files changed, 198 insertions(+), 8 deletions(-) create mode 100644 examples/react/src/generic-tests/nodes/components/DragHandleNode.tsx create mode 100644 examples/react/src/generic-tests/pane/general.ts create mode 100644 examples/react/src/generic-tests/pane/non-defaults.ts diff --git a/examples/react/src/app.d.ts b/examples/react/src/app.d.ts index 1118fb9d..88375944 100644 --- a/examples/react/src/app.d.ts +++ b/examples/react/src/app.d.ts @@ -2,6 +2,6 @@ import { Edge, Node, ReactFlowProps } from '@xyflow/react'; declare global { interface GenericTestCase { - reactFlowProps: Omit & { nodes: Node[]; edges: Edge[] }; + flowProps: Omit & { nodes: Node[]; edges: Edge[] }; } } diff --git a/examples/react/src/generic-tests/Flow.tsx b/examples/react/src/generic-tests/Flow.tsx index 28b38001..a547bcbc 100644 --- a/examples/react/src/generic-tests/Flow.tsx +++ b/examples/react/src/generic-tests/Flow.tsx @@ -6,8 +6,8 @@ type FlowProps = { }; export default ({ generics }: FlowProps) => { - const [nodes, setNodes] = useState(generics.reactFlowProps.nodes); - const [edges, setEdges] = useState(generics.reactFlowProps.edges); + const [nodes, setNodes] = useState(generics.flowProps.nodes); + const [edges, setEdges] = useState(generics.flowProps.edges); const onNodesChange = useCallback((changes) => setNodes((nds) => applyNodeChanges(changes, nds)), []); const onEdgesChange = useCallback((changes) => setEdges((eds) => applyEdgeChanges(changes, eds)), []); @@ -15,7 +15,7 @@ export default ({ generics }: FlowProps) => { return (
{ + return ( +
+
+
+ ); +}; diff --git a/examples/react/src/generic-tests/nodes/general.ts b/examples/react/src/generic-tests/nodes/general.ts index ff8b4c56..60391602 100644 --- a/examples/react/src/generic-tests/nodes/general.ts +++ b/examples/react/src/generic-tests/nodes/general.ts @@ -1 +1,91 @@ -export default {}; +import DragHandleNode from './components/DragHandleNode'; + +export default { + flowProps: { + fitView: true, + nodeTypes: { + DragHandleNode, + }, + nodes: [ + { + id: 'Node-1', + data: { label: 'Node-1' }, + position: { x: 0, y: 0 }, + type: 'input', + className: 'playwright-test-class-123', + style: { backgroundColor: 'red' }, + }, + { + id: 'Node-2', + type: 'output', + data: { label: 'Node-2' }, + position: { x: -100, y: 100 }, + }, + { + id: 'Node-3', + data: { label: 'Node-3' }, + position: { x: 100, y: 100 }, + }, + { + id: 'Node-4', + data: { label: 'Node-4' }, + position: { x: 0, y: 200 }, + type: 'output', + }, + { + id: 'drag-handle', + data: { label: 'Drag Handle' }, + position: { x: 200, y: 0 }, + type: 'DragHandleNode', + dragHandle: '.custom-drag-handle', + }, + { + id: 'notConnectable', + type: 'output', + data: { label: 'notConnectable' }, + position: { x: 0, y: 300 }, + connectable: false, + }, + { + id: 'notDraggable', + data: { label: 'notDraggable' }, + position: { x: 0, y: 400 }, + draggable: false, + }, + { + id: 'notSelectable', + data: { label: 'notSelectable' }, + position: { x: 0, y: 500 }, + selectable: false, + }, + { + id: 'notDeletable', + data: { label: 'notDeletable' }, + position: { x: 0, y: 600 }, + deletable: false, + }, + { + id: 'hidden', + data: { label: 'hidden' }, + position: { x: 0, y: 700 }, + hidden: true, + }, + ], + edges: [ + { + id: '1-2', + type: 'default', + source: 'Node-1', + target: 'Node-2', + label: 'edge', + }, + { + id: '1-3', + type: 'default', + source: 'Node-1', + target: 'Node-3', + label: 'edge', + }, + ], + }, +} satisfies GenericTestCase; diff --git a/examples/react/src/generic-tests/pane/general.ts b/examples/react/src/generic-tests/pane/general.ts new file mode 100644 index 00000000..cb2ea3a9 --- /dev/null +++ b/examples/react/src/generic-tests/pane/general.ts @@ -0,0 +1,37 @@ +export default { + flowProps: { + minZoom: 0.25, + maxZoom: 4, + fitView: true, + nodes: [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input', + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 }, + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 }, + }, + ], + edges: [ + { + id: 'first-edge', + source: '1', + target: '2', + }, + { + id: 'second-edge', + source: '1', + target: '3', + }, + ], + }, +} satisfies GenericTestCase; diff --git a/examples/react/src/generic-tests/pane/non-defaults.ts b/examples/react/src/generic-tests/pane/non-defaults.ts new file mode 100644 index 00000000..1c109b53 --- /dev/null +++ b/examples/react/src/generic-tests/pane/non-defaults.ts @@ -0,0 +1,38 @@ +export default { + flowProps: { + panOnScroll: true, + initialViewport: { x: 1.23, y: 9.87, zoom: 1.234 }, + autoPanOnConnect: false, + autoPanOnNodeDrag: false, + nodes: [ + { + id: '1', + data: { label: '1' }, + position: { x: 0, y: 0 }, + type: 'input', + }, + { + id: '2', + data: { label: '2' }, + position: { x: -100, y: 100 }, + }, + { + id: '3', + data: { label: '3' }, + position: { x: 100, y: 100 }, + }, + ], + edges: [ + { + id: 'first-edge', + source: '1', + target: '2', + }, + { + id: 'second-edge', + source: '1', + target: '3', + }, + ], + }, +} satisfies GenericTestCase; diff --git a/tests/playwright/e2e/edges.spec.ts b/tests/playwright/e2e/edges.spec.ts index 1318ee4b..a7ea991f 100644 --- a/tests/playwright/e2e/edges.spec.ts +++ b/tests/playwright/e2e/edges.spec.ts @@ -13,7 +13,7 @@ test.describe('EDGES', () => { test.describe('selection', () => { test('selecting an edge by click', async ({ page }) => { - const edge = page.locator('.svelte-flow__edge').and(page.locator('[data-id="edge-with-class"]')); + const edge = page.locator(`${FRAMEWORK}.-flow__edge`).and(page.locator('[data-id="edge-with-class"]')); await expect(edge).toBeAttached(); await edge.click(); diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts index f7f52e3c..9f18090f 100644 --- a/tests/playwright/e2e/pane.spec.ts +++ b/tests/playwright/e2e/pane.spec.ts @@ -122,7 +122,7 @@ test.describe('PANE DEFAULT', () => { test('autoPanOnConnect works as intended', async ({ page }) => { const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`); - const handle = page.locator('[data-id="1"] .svelte-flow__handle'); + const handle = page.locator(`[data-id="1"] .${FRAMEWORK}-flow__handle`); await expect(handle).toBeAttached(); From fd2aa9f917315c4091c9cea98b9d9f326fc3fceb Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 16:37:18 +0100 Subject: [PATCH 20/30] changed generic test case to be closer to react --- examples/svelte/src/app.d.ts | 2 +- examples/svelte/src/generic-tests/edges/general.ts | 2 +- examples/svelte/src/generic-tests/nodes/general.ts | 2 +- examples/svelte/src/generic-tests/pane/activation-keys.ts | 2 +- examples/svelte/src/generic-tests/pane/general.ts | 2 +- examples/svelte/src/generic-tests/pane/non-defaults.ts | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/svelte/src/app.d.ts b/examples/svelte/src/app.d.ts index 343f3fd6..475578fb 100644 --- a/examples/svelte/src/app.d.ts +++ b/examples/svelte/src/app.d.ts @@ -12,7 +12,7 @@ declare global { } interface GenericTestCase { - svelteFlowProps: Omit & { nodes: Node[]; edges: Edge[] }; + flowProps: Omit & { nodes: Node[]; edges: Edge[] }; } } diff --git a/examples/svelte/src/generic-tests/edges/general.ts b/examples/svelte/src/generic-tests/edges/general.ts index cc05aada..cfbb4fc9 100644 --- a/examples/svelte/src/generic-tests/edges/general.ts +++ b/examples/svelte/src/generic-tests/edges/general.ts @@ -1,7 +1,7 @@ import { MarkerType } from '@xyflow/svelte'; export default { - svelteFlowProps: { + flowProps: { fitView: true, nodes: [ { diff --git a/examples/svelte/src/generic-tests/nodes/general.ts b/examples/svelte/src/generic-tests/nodes/general.ts index b7707a08..0b677aa8 100644 --- a/examples/svelte/src/generic-tests/nodes/general.ts +++ b/examples/svelte/src/generic-tests/nodes/general.ts @@ -1,7 +1,7 @@ import DragHandleNode from './components/DragHandleNode.svelte'; export default { - svelteFlowProps: { + flowProps: { fitView: true, nodeTypes: { DragHandleNode diff --git a/examples/svelte/src/generic-tests/pane/activation-keys.ts b/examples/svelte/src/generic-tests/pane/activation-keys.ts index e4dbe4e1..9bdc26f7 100644 --- a/examples/svelte/src/generic-tests/pane/activation-keys.ts +++ b/examples/svelte/src/generic-tests/pane/activation-keys.ts @@ -1,5 +1,5 @@ export default { - svelteFlowProps: { + flowProps: { zoomOnScroll: false, // zoomActivationKey: 'Space', // panOnDrag: false, diff --git a/examples/svelte/src/generic-tests/pane/general.ts b/examples/svelte/src/generic-tests/pane/general.ts index 5caac003..5873b63f 100644 --- a/examples/svelte/src/generic-tests/pane/general.ts +++ b/examples/svelte/src/generic-tests/pane/general.ts @@ -1,5 +1,5 @@ export default { - svelteFlowProps: { + flowProps: { minZoom: 0.25, maxZoom: 4, fitView: true, diff --git a/examples/svelte/src/generic-tests/pane/non-defaults.ts b/examples/svelte/src/generic-tests/pane/non-defaults.ts index 0d17e954..51231fbd 100644 --- a/examples/svelte/src/generic-tests/pane/non-defaults.ts +++ b/examples/svelte/src/generic-tests/pane/non-defaults.ts @@ -1,5 +1,5 @@ export default { - svelteFlowProps: { + flowProps: { panOnScroll: true, initialViewport: { x: 1.23, y: 9.87, zoom: 1.234 }, autoPanOnConnect: false, From 00ff8e877d14bf1dd51d2fddab4f7c48b585a32f Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 16:43:02 +0100 Subject: [PATCH 21/30] fixed svelte tests --- .../src/routes/tests/generic/[topic]/[example]/Flow.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte b/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte index 40babf50..0861399a 100644 --- a/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte +++ b/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte @@ -7,10 +7,10 @@ export let generic: GenericTestCase; // Create writables here so it is easier to create test cases - const nodes = writable(generic.svelteFlowProps.nodes); - const edges = writable(generic.svelteFlowProps.edges); + const nodes = writable(generic.flowProps.nodes); + const edges = writable(generic.flowProps.edges); - const svelteFlowPropsWithWritables = { ...generic.svelteFlowProps, nodes, edges }; + const svelteFlowPropsWithWritables = { ...generic.flowProps, nodes, edges }; From e91a9ae387aff8feb0a2af27a97c449536b13996 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 7 Nov 2023 16:50:37 +0100 Subject: [PATCH 22/30] feat(react-flow) added data-id to edges --- packages/react/src/components/Edges/wrapEdge.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react/src/components/Edges/wrapEdge.tsx b/packages/react/src/components/Edges/wrapEdge.tsx index ad1d8f2a..750254ff 100644 --- a/packages/react/src/components/Edges/wrapEdge.tsx +++ b/packages/react/src/components/Edges/wrapEdge.tsx @@ -213,6 +213,7 @@ export default (EdgeComponent: ComponentType) => { onKeyDown={isFocusable ? onKeyDown : undefined} tabIndex={isFocusable ? 0 : undefined} role={isFocusable ? 'button' : 'img'} + data-id={id} data-testid={`rf__edge-${id}`} aria-label={ariaLabel === null ? undefined : ariaLabel ? ariaLabel : `Edge from ${source} to ${target}`} aria-describedby={isFocusable ? `${ARIA_EDGE_DESC_KEY}-${rfId}` : undefined} From 2d43ab78951c4bbf56fd168317efa9617c7f4408 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 8 Nov 2023 10:37:33 +0100 Subject: [PATCH 23/30] fixed some tests --- tests/playwright/e2e/edges.spec.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/playwright/e2e/edges.spec.ts b/tests/playwright/e2e/edges.spec.ts index a7ea991f..c522296d 100644 --- a/tests/playwright/e2e/edges.spec.ts +++ b/tests/playwright/e2e/edges.spec.ts @@ -13,7 +13,7 @@ test.describe('EDGES', () => { test.describe('selection', () => { test('selecting an edge by click', async ({ page }) => { - const edge = page.locator(`${FRAMEWORK}.-flow__edge`).and(page.locator('[data-id="edge-with-class"]')); + const edge = page.locator(`[data-id="edge-with-class"]`); await expect(edge).toBeAttached(); await edge.click(); @@ -26,11 +26,12 @@ test.describe('EDGES', () => { await expect(edge1).toBeAttached(); await expect(edge2).toBeAttached(); - // FIXME: I cannot get this to work - await page.keyboard.down('MetaLeft'); + await edge1.click(); await expect(edge1).toHaveClass(/selected/); + // FIXME: I cannot get this to work + await page.keyboard.down('MetaLeft'); await edge2.click(); await expect(edge2).toHaveClass(/selected/); From 118152bd2e625f14226937054b1ce4abe584594b Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 8 Nov 2023 10:39:33 +0100 Subject: [PATCH 24/30] fix(svelte) id should not get applied to edge path --- packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte index e53bd7c1..4e5b39d1 100644 --- a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte @@ -24,7 +24,6 @@ Date: Wed, 8 Nov 2023 10:39:54 +0100 Subject: [PATCH 25/30] added tests --- examples/react/src/generic-tests/pane/non-defaults.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/react/src/generic-tests/pane/non-defaults.ts b/examples/react/src/generic-tests/pane/non-defaults.ts index 1c109b53..d90be5e9 100644 --- a/examples/react/src/generic-tests/pane/non-defaults.ts +++ b/examples/react/src/generic-tests/pane/non-defaults.ts @@ -1,7 +1,7 @@ export default { flowProps: { panOnScroll: true, - initialViewport: { x: 1.23, y: 9.87, zoom: 1.234 }, + defaultViewport: { x: 1.23, y: 9.87, zoom: 1.234 }, autoPanOnConnect: false, autoPanOnNodeDrag: false, nodes: [ From 5fd7db74a871ed9ab069dcda2dc7fd47f10356e1 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 8 Nov 2023 11:22:20 +0100 Subject: [PATCH 26/30] fixed tests for react & added scripts to package.json --- examples/react/src/generic-tests/Flow.tsx | 10 ++++------ package.json | 4 ++++ pnpm-workspace.yaml | 7 ++++--- tests/playwright/e2e/edges.spec.ts | 8 ++++---- tests/playwright/e2e/nodes.spec.ts | 16 +++++++++++----- tests/playwright/e2e/pane.spec.ts | 6 +++--- 6 files changed, 30 insertions(+), 21 deletions(-) diff --git a/examples/react/src/generic-tests/Flow.tsx b/examples/react/src/generic-tests/Flow.tsx index a547bcbc..5b0846a3 100644 --- a/examples/react/src/generic-tests/Flow.tsx +++ b/examples/react/src/generic-tests/Flow.tsx @@ -1,5 +1,5 @@ import { useState, useCallback } from 'react'; -import { ReactFlow, Controls, Background, applyNodeChanges, applyEdgeChanges } from '@xyflow/react'; +import { ReactFlow, applyNodeChanges, applyEdgeChanges, addEdge } from '@xyflow/react'; type FlowProps = { generics: GenericTestCase; @@ -11,7 +11,7 @@ export default ({ generics }: FlowProps) => { const onNodesChange = useCallback((changes) => setNodes((nds) => applyNodeChanges(changes, nds)), []); const onEdgesChange = useCallback((changes) => setEdges((eds) => applyEdgeChanges(changes, eds)), []); - + const onConnect = useCallback((params) => setEdges((eds) => addEdge(params, eds)), []); return (
{ onNodesChange={onNodesChange} edges={edges} onEdgesChange={onEdgesChange} - > - - - + onConnect={onConnect} + >
); }; diff --git a/package.json b/package.json index f0e22afe..4411e137 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,10 @@ "dev": "turbo run dev --parallel --concurrency 12", "dev:svelte": "turbo run dev --filter=svelte --filter=system", "dev:react": "turbo run dev --filter=react", + "test:svelte": "pnpm --filter=playwright run test:svelte", + "test:svelte:ui": "pnpm --filter=playwright run test:svelte:ui", + "test:react": "pnpm --filter=playwright run test:react", + "test:react:ui": "pnpm --filter=playwright run test:react:ui", "build": "turbo run build", "test": "turbo run test", "lint": "turbo run lint", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e36b3997..a75d7de6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: - - "packages/*" - - "examples/*" - - "tooling/*" \ No newline at end of file + - 'packages/*' + - 'examples/*' + - 'tooling/*' + - 'tests/*' diff --git a/tests/playwright/e2e/edges.spec.ts b/tests/playwright/e2e/edges.spec.ts index c522296d..af2cf980 100644 --- a/tests/playwright/e2e/edges.spec.ts +++ b/tests/playwright/e2e/edges.spec.ts @@ -47,7 +47,7 @@ test.describe('EDGES', () => { }); test('styles get applied', async ({ page }) => { - const edge = page.locator('#edge-with-style'); + const edge = page.locator('[data-id="edge-with-style"]').locator(`.${FRAMEWORK}-flow__edge-path`); await expect(edge).toHaveCSS('stroke', 'rgb(255, 0, 0)'); }); @@ -121,7 +121,7 @@ test.describe('EDGES', () => { }); test('zIndex sets z-index of edge svgs', async ({ page }) => { - const svg = page.locator('svg', { has: page.locator('#z-index') }); + const svg = page.locator('svg', { has: page.locator('[data-id="z-index"]') }); await expect(svg).toBeAttached(); await expect(svg).toHaveCSS('z-index', '3141592'); @@ -149,8 +149,8 @@ test.describe('EDGES', () => { await expect(edge).toHaveClass(/selected/); }); - test('markerEnd is setting marker-end', async ({ page }) => { - const edge = page.locator('#markers'); + test('marker-start, marker-end set markers', async ({ page }) => { + const edge = page.locator('[data-id="markers"]').locator(`.${FRAMEWORK}-flow__edge-path`); await expect(edge).toBeAttached(); diff --git a/tests/playwright/e2e/nodes.spec.ts b/tests/playwright/e2e/nodes.spec.ts index f0e97b0c..5afa41de 100644 --- a/tests/playwright/e2e/nodes.spec.ts +++ b/tests/playwright/e2e/nodes.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from '@playwright/test'; +import { test, expect, Locator } from '@playwright/test'; import { FRAMEWORK } from './constants'; @@ -28,10 +28,10 @@ test.describe('NODES', () => { const box = await firstNode.boundingBox(); - await page.mouse.move(box!.x - 100, box!.y - 10); + await page.mouse.move(box!.x - 150, box!.y - 25); await page.keyboard.down('Shift'); await page.mouse.down(); - await page.mouse.move(box!.x + 200, box!.y + 200); + await page.mouse.move(box!.x + 275, box!.y + 200); await page.mouse.up(); await page.keyboard.up('Shift'); @@ -39,8 +39,14 @@ test.describe('NODES', () => { await expect(secondNode).toHaveClass(/selected/); await expect(thirdNode).toHaveClass(/selected/); - const selection = page.locator(`.${FRAMEWORK}-flow__selection`); - await expect(selection).toBeInViewport(); + let selection: Locator | undefined; + if (FRAMEWORK === 'react') { + selection = page.locator('.react-flow__nodesselection'); + } else if (FRAMEWORK === 'svelte') { + selection = page.locator('.svelte-flow__selection'); + } + + if (selection) await expect(selection).toBeInViewport(); }); test('selectable=false prevents selection', async ({ page }) => { diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts index 9f18090f..31777c97 100644 --- a/tests/playwright/e2e/pane.spec.ts +++ b/tests/playwright/e2e/pane.spec.ts @@ -25,7 +25,7 @@ test.describe('PANE DEFAULT', () => { await page.goto('/tests/generic/pane/general'); // Wait till the edges are rendered - await page.waitForSelector('#first-edge', { timeout: 5000 }); + await page.waitForSelector('[data-id="first-edge"]', { timeout: 5000 }); }); test.describe('pan & zoom', () => { @@ -148,7 +148,7 @@ test.describe('PANE NON-DEFAULT', () => { await page.goto('/tests/generic/pane/non-defaults'); // Wait till the edges are rendered - await page.waitForSelector('#first-edge', { timeout: 5000 }); + await page.waitForSelector('[data-id="first-edge"]', { timeout: 5000 }); }); test.describe('pan & zoom', () => { @@ -190,7 +190,7 @@ test.describe('PANE ACTIVATION KEYS', () => { await page.goto('/tests/generic/pane/activation-keys'); // Wait till the edges are rendered - await page.waitForSelector('#first-edge', { timeout: 5000 }); + await page.waitForSelector('[data-id="first-edge"]', { timeout: 5000 }); }); // TODO }); From e83079c5cd31d8a411e45a321f9a31592f14e20f Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 8 Nov 2023 11:28:17 +0100 Subject: [PATCH 27/30] react examples now automatically redirect / to examples --- examples/react/src/App/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/react/src/App/index.tsx b/examples/react/src/App/index.tsx index 77344ba2..b134daba 100644 --- a/examples/react/src/App/index.tsx +++ b/examples/react/src/App/index.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import { BrowserRouter, Outlet, Route, Routes, useLocation, useNavigate } from 'react-router-dom'; +import { BrowserRouter, Navigate, Outlet, Route, Routes, useLocation, useNavigate } from 'react-router-dom'; import GenericTests from '../generic-tests'; @@ -324,6 +324,7 @@ export default () => { <> + } /> }> } /> {routes.map((route) => ( From 2ebdca0525b4e39a336c8344d3fc8cedf07f844b Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 8 Nov 2023 13:12:34 +0100 Subject: [PATCH 28/30] fix(svelte) hiding elements considers missing html elements --- .../svelte/src/routes/overview/+page.svelte | 13 ++++++++++ .../components/NodeWrapper/NodeWrapper.svelte | 26 +++++++++---------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 32bef5d0..dddbf398 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -83,6 +83,12 @@ type: 'custom', data: { label: 'Custom Node' }, position: { x: 150, y: 300 } + }, + { + id: 'hideunhide', + data: { label: 'HIDE ME' }, + position: { x: 300, y: 75 }, + hidden: true } ]); @@ -179,6 +185,13 @@ +
diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index e02a0f98..e422b444 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -1,13 +1,7 @@ - + diff --git a/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts b/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts index 65f62996..193516c1 100644 --- a/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts +++ b/examples/svelte/src/routes/tests/generic/[topic]/[example]/+page.ts @@ -1,22 +1,19 @@ import { error } from '@sveltejs/kit'; +const flowConfigs = import.meta.glob('/src/generic-tests/**/*.ts', { + eager: true, + import: 'default' +}); + /** @type {import('./$types').PageLoad} */ export function load({ params }) { - try { - const genericTestCases = import.meta.glob('/src/generic-tests/**/*.ts', { - eager: true, - import: 'default' - }); + const flowConfig = flowConfigs[`/src/generic-tests/${params.topic}/${params.example}.ts`]; - const generic = genericTestCases[`/src/generic-tests/${params.topic}/${params.example}.ts`]; - if (generic) { - return { - generic - }; - } - } catch (e) { - console.error(e); + if (!flowConfig) { + throw error(404, 'Not found'); } - throw error(404, 'Not found'); + return { + flowConfig + }; } diff --git a/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte b/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte index 0861399a..44965e2e 100644 --- a/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte +++ b/examples/svelte/src/routes/tests/generic/[topic]/[example]/Flow.svelte @@ -4,13 +4,13 @@ import '@xyflow/svelte/dist/style.css'; - export let generic: GenericTestCase; + export let flowConfig: FlowConfig; // Create writables here so it is easier to create test cases - const nodes = writable(generic.flowProps.nodes); - const edges = writable(generic.flowProps.edges); + const nodes = writable(flowConfig.flowProps.nodes); + const edges = writable(flowConfig.flowProps.edges); - const svelteFlowPropsWithWritables = { ...generic.flowProps, nodes, edges }; + const props = { ...flowConfig.flowProps, nodes, edges }; - + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c07f3def..3ebd1e7e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,10 +16,10 @@ importers: version: registry.npmjs.org/@changesets/cli@2.25.0 '@typescript-eslint/eslint-plugin': specifier: latest - version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.43.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.43.0)(typescript@5.1.3) '@typescript-eslint/parser': specifier: latest - version: registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.43.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3) concurrently: specifier: ^7.6.0 version: registry.npmjs.org/concurrently@7.6.0 @@ -149,7 +149,7 @@ importers: version: registry.npmjs.org/typescript@5.2.2 vite: specifier: 4.5.0 - version: registry.npmjs.org/vite@4.5.0 + version: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) examples/svelte: dependencies: @@ -201,7 +201,7 @@ importers: version: registry.npmjs.org/typescript@5.2.2 vite: specifier: ^4.5.0 - version: registry.npmjs.org/vite@4.5.0 + version: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) packages/react: dependencies: @@ -413,6 +413,34 @@ importers: specifier: 5.1.3 version: registry.npmjs.org/typescript@5.1.3 + tests/playwright: + dependencies: + '@playwright/experimental-ct-react': + specifier: ^1.39.0 + version: registry.npmjs.org/@playwright/experimental-ct-react@1.39.0(@types/node@18.7.16)(vite@4.5.0) + '@types/react': + specifier: ^18.2.31 + version: registry.npmjs.org/@types/react@18.2.31 + '@types/react-dom': + specifier: ^18.2.14 + version: registry.npmjs.org/@types/react-dom@18.2.14 + react: + specifier: ^18.2.0 + version: registry.npmjs.org/react@18.2.0 + react-dom: + specifier: ^18.2.0 + version: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) + typescript: + specifier: ^5.2.2 + version: registry.npmjs.org/typescript@5.2.2 + devDependencies: + '@playwright/test': + specifier: ^1.39.0 + version: registry.npmjs.org/@playwright/test@1.39.0 + '@types/node': + specifier: ^18.7.16 + version: registry.npmjs.org/@types/node@18.7.16 + tooling/eslint-config: devDependencies: eslint: @@ -423,7 +451,7 @@ importers: version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.43.0) eslint-config-turbo: specifier: latest - version: registry.npmjs.org/eslint-config-turbo@1.10.16(eslint@8.43.0) + version: registry.npmjs.org/eslint-config-turbo@1.10.15(eslint@8.43.0) eslint-plugin-react: specifier: latest version: registry.npmjs.org/eslint-plugin-react@7.33.2(eslint@8.43.0) @@ -1889,6 +1917,59 @@ packages: '@nodelib/fs.scandir': registry.npmjs.org/@nodelib/fs.scandir@2.1.5 fastq: registry.npmjs.org/fastq@1.15.0 + registry.npmjs.org/@playwright/experimental-ct-core@1.39.0(@types/node@18.7.16): + resolution: {integrity: sha512-1b/qrlB5A/CdEZns8f2RDkWFmSnGkNyec8n72iinmw07+GHsdMP8fIpazeFB0umxWfo+gPLhkjhTGdB3WXJTBw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@playwright/experimental-ct-core/-/experimental-ct-core-1.39.0.tgz} + id: registry.npmjs.org/@playwright/experimental-ct-core/1.39.0 + name: '@playwright/experimental-ct-core' + version: 1.39.0 + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright: registry.npmjs.org/playwright@1.39.0 + playwright-core: registry.npmjs.org/playwright-core@1.39.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - terser + dev: false + + registry.npmjs.org/@playwright/experimental-ct-react@1.39.0(@types/node@18.7.16)(vite@4.5.0): + resolution: {integrity: sha512-6GaDVVo6x8P9Jdw3yPbVaEP59nesRsETn3kznHAy+2493VsP3IaVATat2G28z0Sivf/K9Tkh5xRYjiawN0ebgw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@playwright/experimental-ct-react/-/experimental-ct-react-1.39.0.tgz} + id: registry.npmjs.org/@playwright/experimental-ct-react/1.39.0 + name: '@playwright/experimental-ct-react' + version: 1.39.0 + engines: {node: '>=16'} + hasBin: true + dependencies: + '@playwright/experimental-ct-core': registry.npmjs.org/@playwright/experimental-ct-core@1.39.0(@types/node@18.7.16) + '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react@4.1.1(vite@4.5.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + - vite + dev: false + + registry.npmjs.org/@playwright/test@1.39.0: + resolution: {integrity: sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz} + name: '@playwright/test' + version: 1.39.0 + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright: registry.npmjs.org/playwright@1.39.0 + dev: true + registry.npmjs.org/@polka/url@1.0.0-next.23: resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz} name: '@polka/url' @@ -2094,7 +2175,7 @@ packages: sirv: registry.npmjs.org/sirv@2.0.3 svelte: registry.npmjs.org/svelte@4.2.1 undici: registry.npmjs.org/undici@5.23.0 - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color dev: true @@ -2125,7 +2206,7 @@ packages: svelte: registry.npmjs.org/svelte@4.2.2 tiny-glob: registry.npmjs.org/tiny-glob@0.2.9 undici: registry.npmjs.org/undici@5.26.5 - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color dev: true @@ -2164,7 +2245,7 @@ packages: '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.5.0) debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) svelte: registry.npmjs.org/svelte@4.2.1 - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color @@ -2182,7 +2263,7 @@ packages: '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.2)(vite@4.5.0) debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) svelte: registry.npmjs.org/svelte@4.2.2 - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color dev: true @@ -2204,7 +2285,7 @@ packages: magic-string: registry.npmjs.org/magic-string@0.30.5 svelte: registry.npmjs.org/svelte@4.2.1 svelte-hmr: registry.npmjs.org/svelte-hmr@0.15.3(svelte@4.2.1) - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color @@ -2226,7 +2307,7 @@ packages: magic-string: registry.npmjs.org/magic-string@0.30.5 svelte: registry.npmjs.org/svelte@4.2.2 svelte-hmr: registry.npmjs.org/svelte-hmr@0.15.3(svelte@4.2.2) - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color @@ -2791,7 +2872,6 @@ packages: resolution: {integrity: sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-18.7.16.tgz} name: '@types/node' version: 18.7.16 - dev: true registry.npmjs.org/@types/normalize-package-data@2.4.3: resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz} @@ -2815,12 +2895,6 @@ packages: name: '@types/prop-types' version: 15.7.9 - registry.npmjs.org/@types/pug@2.0.8: - resolution: {integrity: sha512-QzhsZ1dMGyJbn/D9V80zp4GIA4J4rfAjCCxc3MP+new0E8dyVdSkR735Lx+n3LIaHNFcjHL5+TbziccuT+fdoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/pug/-/pug-2.0.8.tgz} - name: '@types/pug' - version: 2.0.8 - dev: true - registry.npmjs.org/@types/pug@2.0.9: resolution: {integrity: sha512-Yg4LkgFYvn1faISbDNWmcAC1XoDT8IoMUFspp5mnagKk+UvD2N0IWt5A7GRdMubsNWqgCLmrkf8rXkzNqb4szA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/pug/-/pug-2.0.9.tgz} name: '@types/pug' @@ -2833,7 +2907,6 @@ packages: version: 18.2.14 dependencies: '@types/react': registry.npmjs.org/@types/react@18.2.36 - dev: true registry.npmjs.org/@types/react-dom@18.2.8: resolution: {integrity: sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.8.tgz} @@ -2851,6 +2924,16 @@ packages: '@types/scheduler': registry.npmjs.org/@types/scheduler@0.16.5 csstype: registry.npmjs.org/csstype@3.1.2 + registry.npmjs.org/@types/react@18.2.31: + resolution: {integrity: sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react/-/react-18.2.31.tgz} + name: '@types/react' + version: 18.2.31 + dependencies: + '@types/prop-types': registry.npmjs.org/@types/prop-types@15.7.10 + '@types/scheduler': registry.npmjs.org/@types/scheduler@0.16.5 + csstype: registry.npmjs.org/csstype@3.1.2 + dev: false + registry.npmjs.org/@types/react@18.2.36: resolution: {integrity: sha512-o9XFsHYLLZ4+sb9CWUYwHqFVoG61SesydF353vFMMsQziiyRu8np4n2OYMUSDZ8XuImxDr9c5tR7gidlH29Vnw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react/-/react-18.2.36.tgz} name: '@types/react' @@ -2919,7 +3002,7 @@ packages: version: 2.10.2 requiresBuild: true dependencies: - '@types/node': registry.npmjs.org/@types/node@16.18.60 + '@types/node': registry.npmjs.org/@types/node@18.7.16 dev: true optional: true @@ -2954,38 +3037,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.10.0 - name: '@typescript-eslint/eslint-plugin' - version: 6.10.0 - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.10.0 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.10.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.43.0)(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 - debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) - eslint: registry.npmjs.org/eslint@8.43.0 - graphemer: registry.npmjs.org/graphemer@1.4.0 - ignore: registry.npmjs.org/ignore@5.2.4 - natural-compare: registry.npmjs.org/natural-compare@1.4.0 - semver: registry.npmjs.org/semver@7.5.4 - ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) - typescript: registry.npmjs.org/typescript@5.1.3 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz} id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.10.0 @@ -3018,6 +3069,38 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.8.0 + name: '@typescript-eslint/eslint-plugin' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.10.0 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.8.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.8.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.43.0 + graphemer: registry.npmjs.org/graphemer@1.4.0 + ignore: registry.npmjs.org/ignore@5.2.4 + natural-compare: registry.npmjs.org/natural-compare@1.4.0 + semver: registry.npmjs.org/semver@7.5.4 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) + typescript: registry.npmjs.org/typescript@5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/parser@5.60.0(eslint@8.43.0)(typescript@5.1.3): resolution: {integrity: sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz} id: registry.npmjs.org/@typescript-eslint/parser/5.60.0 @@ -3041,30 +3124,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/6.10.0 - name: '@typescript-eslint/parser' - version: 6.10.0 - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 - debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) - eslint: registry.npmjs.org/eslint@8.43.0 - typescript: registry.npmjs.org/typescript@5.1.3 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz} id: registry.npmjs.org/@typescript-eslint/parser/6.10.0 @@ -3089,6 +3148,30 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/parser@6.8.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/6.8.0 + name: '@typescript-eslint/parser' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.43.0 + typescript: registry.npmjs.org/typescript@5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/scope-manager@5.60.0: resolution: {integrity: sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz} name: '@typescript-eslint/scope-manager' @@ -3109,6 +3192,16 @@ packages: '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 dev: true + registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0: + resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz} + name: '@typescript-eslint/scope-manager' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + dev: true + registry.npmjs.org/@typescript-eslint/type-utils@5.60.0(eslint@8.43.0)(typescript@5.1.3): resolution: {integrity: sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz} id: registry.npmjs.org/@typescript-eslint/type-utils/5.60.0 @@ -3132,29 +3225,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/type-utils@6.10.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/6.10.0 - name: '@typescript-eslint/type-utils' - version: 6.10.0 - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.43.0)(typescript@5.1.3) - debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) - eslint: registry.npmjs.org/eslint@8.43.0 - ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) - typescript: registry.npmjs.org/typescript@5.1.3 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz} id: registry.npmjs.org/@typescript-eslint/type-utils/6.10.0 @@ -3178,6 +3248,29 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/type-utils@6.8.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/6.8.0 + name: '@typescript-eslint/type-utils' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.8.0(eslint@8.43.0)(typescript@5.1.3) + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.43.0 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) + typescript: registry.npmjs.org/typescript@5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/types@5.60.0: resolution: {integrity: sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz} name: '@typescript-eslint/types' @@ -3192,6 +3285,13 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true + registry.npmjs.org/@typescript-eslint/types@6.8.0: + resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz} + name: '@typescript-eslint/types' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + registry.npmjs.org/@typescript-eslint/typescript-estree@5.60.0(typescript@5.1.3): resolution: {integrity: sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz} id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0 @@ -3216,30 +3316,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3): - resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.10.0 - name: '@typescript-eslint/typescript-estree' - version: 6.10.0 - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.10.0 - debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) - globby: registry.npmjs.org/globby@11.1.0 - is-glob: registry.npmjs.org/is-glob@4.0.3 - semver: registry.npmjs.org/semver@7.5.4 - ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) - typescript: registry.npmjs.org/typescript@5.1.3 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2): resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz} id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.10.0 @@ -3264,6 +3340,30 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3): + resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.8.0 + name: '@typescript-eslint/typescript-estree' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + globby: registry.npmjs.org/globby@11.1.0 + is-glob: registry.npmjs.org/is-glob@4.0.3 + semver: registry.npmjs.org/semver@7.5.4 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.3(typescript@5.1.3) + typescript: registry.npmjs.org/typescript@5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/utils@5.60.0(eslint@8.43.0)(typescript@5.1.3): resolution: {integrity: sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz} id: registry.npmjs.org/@typescript-eslint/utils/5.60.0 @@ -3287,28 +3387,6 @@ packages: - typescript dev: true - registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.43.0)(typescript@5.1.3): - resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/6.10.0 - name: '@typescript-eslint/utils' - version: 6.10.0 - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.0) - '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 - '@types/semver': registry.npmjs.org/@types/semver@7.5.4 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.10.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.10.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.10.0(typescript@5.1.3) - eslint: registry.npmjs.org/eslint@8.43.0 - semver: registry.npmjs.org/semver@7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - registry.npmjs.org/@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz} id: registry.npmjs.org/@typescript-eslint/utils/6.10.0 @@ -3331,6 +3409,28 @@ packages: - typescript dev: true + registry.npmjs.org/@typescript-eslint/utils@6.8.0(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/6.8.0 + name: '@typescript-eslint/utils' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.0) + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.15 + '@types/semver': registry.npmjs.org/@types/semver@7.5.4 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.8.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.3) + eslint: registry.npmjs.org/eslint@8.43.0 + semver: registry.npmjs.org/semver@7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + registry.npmjs.org/@typescript-eslint/visitor-keys@5.60.0: resolution: {integrity: sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz} name: '@typescript-eslint/visitor-keys' @@ -3351,6 +3451,16 @@ packages: eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true + registry.npmjs.org/@typescript-eslint/visitor-keys@6.8.0: + resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz} + name: '@typescript-eslint/visitor-keys' + version: 6.8.0 + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.8.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 + dev: true + registry.npmjs.org/@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz} name: '@ungap/structured-clone' @@ -3366,7 +3476,7 @@ packages: vite: ^4 dependencies: '@swc/core': registry.npmjs.org/@swc/core@1.3.96 - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) transitivePeerDependencies: - '@swc/helpers' dev: true @@ -3385,7 +3495,7 @@ packages: '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.2) '@types/babel__core': registry.npmjs.org/@types/babel__core@7.20.4 react-refresh: registry.npmjs.org/react-refresh@0.14.0 - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color @@ -3716,7 +3826,7 @@ packages: undici: registry.npmjs.org/undici@5.26.5 unist-util-visit: registry.npmjs.org/unist-util-visit@4.1.2 vfile: registry.npmjs.org/vfile@5.3.7 - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) vitefu: registry.npmjs.org/vitefu@0.2.5(vite@4.5.0) which-pm: registry.npmjs.org/which-pm@2.1.1 yargs-parser: registry.npmjs.org/yargs-parser@21.1.1 @@ -5399,16 +5509,16 @@ packages: eslint: registry.npmjs.org/eslint@8.53.0 dev: true - registry.npmjs.org/eslint-config-turbo@1.10.16(eslint@8.43.0): - resolution: {integrity: sha512-O3NQI72bQHV7FvSC6lWj66EGx8drJJjuT1kuInn6nbMLOHdMBhSUX/8uhTAlHRQdlxZk2j9HtgFCIzSc93w42g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.16.tgz} - id: registry.npmjs.org/eslint-config-turbo/1.10.16 + registry.npmjs.org/eslint-config-turbo@1.10.15(eslint@8.43.0): + resolution: {integrity: sha512-76mpx2x818JZE26euen14utYcFDxOahZ9NaWA+6Xa4pY2ezVKVschuOxS96EQz3o3ZRSmcgBOapw/gHbN+EKxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.15.tgz} + id: registry.npmjs.org/eslint-config-turbo/1.10.15 name: eslint-config-turbo - version: 1.10.16 + version: 1.10.15 peerDependencies: eslint: '>6.6.0' dependencies: eslint: registry.npmjs.org/eslint@8.43.0 - eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo@1.10.16(eslint@8.43.0) + eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo@1.10.15(eslint@8.43.0) dev: true registry.npmjs.org/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.43.0)(prettier@2.8.8): @@ -5522,11 +5632,11 @@ packages: - ts-node dev: true - registry.npmjs.org/eslint-plugin-turbo@1.10.16(eslint@8.43.0): - resolution: {integrity: sha512-ZjrR88MTN64PNGufSEcM0tf+V1xFYVbeiMeuIqr0aiABGomxFLo4DBkQ7WI4WzkZtWQSIA2sP+yxqSboEfL9MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.16.tgz} - id: registry.npmjs.org/eslint-plugin-turbo/1.10.16 + registry.npmjs.org/eslint-plugin-turbo@1.10.15(eslint@8.43.0): + resolution: {integrity: sha512-Tv4QSKV/U56qGcTqS/UgOvb9HcKFmWOQcVh3HEaj7of94lfaENgfrtK48E2CckQf7amhKs1i+imhCsNCKjkQyA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.15.tgz} + id: registry.npmjs.org/eslint-plugin-turbo/1.10.15 name: eslint-plugin-turbo - version: 1.10.16 + version: 1.10.15 peerDependencies: eslint: '>6.6.0' dependencies: @@ -6140,6 +6250,15 @@ packages: version: 1.0.0 dev: true + registry.npmjs.org/fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz} + name: fsevents + version: 2.3.2 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + registry.npmjs.org/fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} name: fsevents @@ -8772,6 +8891,24 @@ packages: dependencies: find-up: registry.npmjs.org/find-up@4.1.0 + registry.npmjs.org/playwright-core@1.39.0: + resolution: {integrity: sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz} + name: playwright-core + version: 1.39.0 + engines: {node: '>=16'} + hasBin: true + + registry.npmjs.org/playwright@1.39.0: + resolution: {integrity: sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz} + name: playwright + version: 1.39.0 + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright-core: registry.npmjs.org/playwright-core@1.39.0 + optionalDependencies: + fsevents: registry.npmjs.org/fsevents@2.3.2 + registry.npmjs.org/postcss-calc@9.0.1(postcss@8.4.21): resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz} id: registry.npmjs.org/postcss-calc/9.0.1 @@ -10798,8 +10935,8 @@ packages: picocolors: registry.npmjs.org/picocolors@1.0.0 sade: registry.npmjs.org/sade@1.8.1 svelte: registry.npmjs.org/svelte@4.2.1 - svelte-preprocess: registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.21)(svelte@4.2.1)(typescript@5.1.3) - typescript: registry.npmjs.org/typescript@5.1.3 + svelte-preprocess: registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.21)(svelte@4.2.1)(typescript@5.2.2) + typescript: registry.npmjs.org/typescript@5.2.2 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -10925,7 +11062,7 @@ packages: svelte: registry.npmjs.org/svelte@4.2.2 dev: true - registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.21)(svelte@4.2.1)(typescript@5.1.3): + registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.21)(svelte@4.2.1)(typescript@5.2.2): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz} id: registry.npmjs.org/svelte-preprocess/5.0.4 name: svelte-preprocess @@ -10966,14 +11103,14 @@ packages: typescript: optional: true dependencies: - '@types/pug': registry.npmjs.org/@types/pug@2.0.8 + '@types/pug': registry.npmjs.org/@types/pug@2.0.9 detect-indent: registry.npmjs.org/detect-indent@6.1.0 magic-string: registry.npmjs.org/magic-string@0.27.0 postcss: registry.npmjs.org/postcss@8.4.21 sorcery: registry.npmjs.org/sorcery@0.11.0 strip-indent: registry.npmjs.org/strip-indent@3.0.0 svelte: registry.npmjs.org/svelte@4.2.1 - typescript: registry.npmjs.org/typescript@5.1.3 + typescript: registry.npmjs.org/typescript@5.2.2 dev: true registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.2)(typescript@5.2.2): @@ -11884,8 +12021,9 @@ packages: vfile-message: registry.npmjs.org/vfile-message@3.1.4 dev: false - registry.npmjs.org/vite@4.5.0: + registry.npmjs.org/vite@4.5.0(@types/node@18.7.16): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.5.0.tgz} + id: registry.npmjs.org/vite/4.5.0 name: vite version: 4.5.0 engines: {node: ^14.18.0 || >=16.0.0} @@ -11914,6 +12052,7 @@ packages: terser: optional: true dependencies: + '@types/node': registry.npmjs.org/@types/node@18.7.16 esbuild: registry.npmjs.org/esbuild@0.18.20 postcss: registry.npmjs.org/postcss@8.4.31 rollup: registry.npmjs.org/rollup@3.29.4 @@ -11931,7 +12070,7 @@ packages: vite: optional: true dependencies: - vite: registry.npmjs.org/vite@4.5.0 + vite: registry.npmjs.org/vite@4.5.0(@types/node@18.7.16) registry.npmjs.org/vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz} From 434590543d8debcc0a8231cebad0bbbb73f92c66 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 8 Nov 2023 18:13:57 +0100 Subject: [PATCH 30/30] chore(tests): cleanup playwright configs --- examples/react/index.html | 2 +- examples/react/package.json | 2 +- examples/react/public/favicon.ico | Bin 0 -> 114104 bytes examples/react/public/vite.svg | 1 - examples/svelte/package.json | 2 +- examples/svelte/src/app.html | 3 ++- examples/svelte/static/favicon.ico | Bin 0 -> 114104 bytes examples/svelte/static/favicon.png | Bin 1571 -> 0 bytes tests/playwright/.env.svelte | 1 - tests/playwright/playwright.react.config.ts | 11 +---------- tests/playwright/playwright.shared.config.ts | 12 +++++++++++- tests/playwright/playwright.svelte.config.ts | 11 +---------- 12 files changed, 18 insertions(+), 27 deletions(-) create mode 100644 examples/react/public/favicon.ico delete mode 100644 examples/react/public/vite.svg create mode 100644 examples/svelte/static/favicon.ico delete mode 100644 examples/svelte/static/favicon.png delete mode 100644 tests/playwright/.env.svelte diff --git a/examples/react/index.html b/examples/react/index.html index f1cba741..828516b9 100644 --- a/examples/react/index.html +++ b/examples/react/index.html @@ -2,7 +2,7 @@ - + React Flow Examples diff --git a/examples/react/package.json b/examples/react/package.json index 9c303aae..36dd09a6 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -1,5 +1,5 @@ { - "name": "@xyflow/react-examples", + "name": "react-examples", "private": true, "version": "0.0.0", "type": "module", diff --git a/examples/react/public/favicon.ico b/examples/react/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9ef0fbfd6596f80415822b585a80df66888ec689 GIT binary patch literal 114104 zcmeD^2RxVC`(InKk|fCpp%SHJW$#23Nf{vtnPu-)*=g939T|}ovXaP5Dr9G6&t$#- zbGkpb?(N&X^sigL`}2G{z3=z+p7B1<8P7V;L7^~ExF`r1C_0o3HwvW-?wy=|`^|!n zfl33x`Dj@*_MGCI4JUwg_>S!(o>grKB zNg@I&0`NAGw3L`4{3}fOu@f&mbCGFx%Tsn?_=_=k8C8lx~=8@ww86i zdv()_3Av&%oQ0fr`;(H9g~-Gz-hHBW33*Lc?41|W97~qj)_1qu;c=TmYC+OVmX$F0Rp_~c!9b53#{{B;B`Fqxf>3ANOj($gi> z>pi&_tx#yjLjD}3DugGCx`oQdoOIe=v|m?Vl~pObx&oF-=-q100?QcqpUsO>0G zW1DRgTk|PZF!-bXi1xSU&MqZi1UFB*<55sr;xmL1HREdVpJiv0PaHtY5eVbP zT{cV$UC)nqPmIvcSu@5EZ;2!gtN*3menrNuenBY0E$_*kc6Q7csXi{+jK5u&eImVs z>1{Z+e2gyEh7C?fSz_?goemT^;>3AZo0H)i=~FpHV9;W0-cNNz^8t~s49cTzPC}D+ z46DO|?)<%o03nl&oL3B47I;jKN7v6vHoU%qqp3F*kMg<}zp(4cTm?S1>ErSuL5BH_ zIT8;UDX*ajiI(dul%&Pm4|sIi_aa<` zNXrSmifo1aB%;@On475p?9663mpjvL$1M~hU4Ib^S#O2a#GRmmO}@UU?tviI?2a-1 zlGn_nkI7u0c26kjIAVxD!$=Nr-E(qM@XA8(W>*cmD{KM&<-M*#&2>Qq^q$x#4lEM- zmkXG}yRSR*ON`Rb3hEV|w*)w1K#Ig}`kgHn;B zB%y<|X8uw9g##S+dW0I+4G4d;_nrwl6*- z!)x-wwyCLRQ*P=UTwGJ`Fsp*LdJRo#O%6&a=}gUxxB&el^nAOn=P#T#%sM`0v)Ip0 zdIVFrpUNr2qMsU-w{`B&#JQq_FAKbgZP;QMg>1-PlhLM3 zUS7NMhV*e|x!9;E@8=avH*Sz?bCu^vKiTLMN0V@f9Rp5QH|Cd2e$4wSJ_3nO_{E*Z-J6$ki(>cOtXJD!YAyum2Y#w_=klso`$NC*7>HT zfj(+}E4N1ik`HK}w4mr29?Zr7Dj6MPGN6$UwoMGNZ3f04nNs`>^y_r8&r$D zs4b%MekYgo;Q(>X>Ejjj>>#o1>0- zvBje{+%_o5DKLK6E`}u>k)0;cqXQopol=Ewfu#k&*@vqOpl2YoH+4G7nPq4k#cUzu&u{_R#gP@}g z!tm~$T*su(PVxMGb{N)jZBmlP9OIRkS53SHy8!iZtvxLR-w5W8DM- z5fRS|@gKDpiCC4-HLF=T;v=up9|U1#nyqt=Jl^F|(GoeCj} zu8)+%i>2E?UE;B^Ga~7g$ippWyC+_r;HSg6Q%kftjDxaw$guY0>(<@2>s4j-r;PT9 zV*2~ZxF52yvAHYguy3~{ZGpP{`Sa_%HrK|dr(=dzds-M`u|`SI(RB`4DxNx3{xUgF z@BDcs!#9KP-gSDh>j(2>kVPxpYz!M3Gw%pna8>q{TQ9DhW4~`V%dPC3squ09?e3aI zSmnGr_4f<{<7Z|1x7{GRXL%!u2_-J{h=%3Z;8II-^WCKNqZjV$)$`L>>#&*kRd46y z?C$mQJXW-TlYLY{;R#r(Mb*>_v^H>?O>w6b3*Y0qiCxs`JnYjMek>TPT@63`h=FFL~ui@;LwOW$C)ofU72w!Dd^f zM(IvdqEhwq&bg~b3i;exbP!Cz2<)PbuGT$kHXvrmm85!*Z{%rpb)3EgPS*aUsBSE0 zR6&9LI|8TY14(7rXHOoDd~T-0A7JDW{2~2_*gEIPFv;TR5R~k5Ol$oI)P%U}+{Q&^ z<>eU~cRK72)Xr#HzO8_QtV<_P9;^%2GqJ?VY?|8!ZOQSmwOy3f zC%iqdofKb-T9n$Tk^tM~j2jAY1>U46XFA^vm~^C%_llsfUAQIioxp;Rk3ovxMM;ms z6sBgdGcL!7!``@QQ;%%W(Who2zm#cx^6#7<m{=lu@5HuxeN730p}E`Cjkk3COI0tae%MG@=`h&l6t<*a zho`$~j{XXZ2udr=#pU#VDmK+&pZ0`YYaYG*3D-px;%`oV=uy$xo3o+VpIVsZ%6T`` zWA08u-2(NVem*8FWLLT8S)qFj-cIlXv4!ZaXg?;?3^Q4>!@ErK%5>qiw5qD=xYgUl zz2f2@ZrqgDt&g&P`&Q?!hNv)sa41$5*VB^*weO$d3Kmch+%pTG=Mg`u2d3d2N1aHW zDEq2{Gx8T_cmqu;;`#3)(<@Bzi7jA_ua6U^-L~vFmLAWiKd$_^m zdvCA#!Yr+$gu$S-!P(cnHUxqxfJEN!4(04OF)YcgA@2l&@>5q;S~H zv6YFW-z0n5l|J{z?4U-GqaE%D%W-xJH+O(d?fIG7rnJtD5A$p#dn6g8$qF4l5D_~l zc(n_<MuNkv}|+vg)ok}qgdyrgUw7v&u0 z8XV)>>jhnEaylhL83F?y&hY0u%HH09uZ2sG+WXjdIFHAUWuL2KQ0ZmAbldk13y(PB z+8v}*Fc(Zkb&S)ph%6-NHKilLu-FThrmn{oxT>l(;`zfDB1TFM^zR_`C%0#ezg(C4 zUVLeXyhX{mBW7v-bUR4%!0YCdJRu>fWA2l2%1>`qN9?mz&g{A%9NkdcWgmZE>>)!N z>cLdSCNt(($przNP6l0&<=nZ=1&1t@nnwl)Ns=@ZUeZ2(&g3lp@$ z<<($m-{jqw4jLMTQ6bJDnpfP^r{|m-*4rCRH*fxkKH;Rs$ojHWToyxWuwc2ePBvBxxaNONu=V4e}ACL{7^+=o*}P=Zg% z@cQ1}n7FvedcE!HZFy-Nv|dbGGESaUvx(LzI;BV7IfTD}mvUJGtBK;NypLg?%LXvg zC7xDQYKoX{&^3SF|Hd*^p)>mzb?Hg`yAafzIyAV0~_lA`(e3KMA0 zeyZSuj$FqoWf+=`L_{!21gth+y}GVae&4{Ev(|4JW-IrdQFhR2A@?SLmwZ z_&hHZS5;knG#PHZ@BDMOYnjmvB{yVw?nutC*kMkqvQ#@=PP(J(@~&2%lm=kU_06SM zGIQG&^CxQ}^z`+M2d8%moQQ7-2n{Vg1~|lSdH$H!6OKw%5>{OlO_qqDz~xC|9(E^1 zGD406>mMCB;V{2mix_HH0RdWVR^4j)27a9;-1yijhh_oY&YxG_ar4&L zbgH9|Qj!rfD=X#}D@EC{zytmfn5i^QqR9t|2M+Yp?b>3*>K5NylDMxajpYi@<7~2M zN*@X3Hq))*WjKay4}9$BiR;@;F(fqv)l=U`r3z_jVd|Qbf%$Z|`u>P{S`|?_xtWAp zBqubvN<*2&ee1ouPPTDZ*$OEoK?gggE)YC1 zQE~Cobe&1!weD%6sf+JV6OL3=R76>c&^Ig%P?_8bQo)#MO+?I%d-qKs$APai*7$?@z=!HxpM&117YI#Cwc zVdLf7{D-kQ-A5gF!)1-f>@7F@qp?$Oj1Dqw^s1zDS1ap1=BNcafAp;#w})-c&#-9bt`W=?A{@@-=&nncwN?1@yWb=rdf?!pvRiJ zp}eu|1ZXc@7=DnM>38Xbj(pKEwTV6(S#oK?a;y^EzgV?DE^1#a@g*CNnoK@_j@P<} zhl`%v1^dw3n5XKV`Zoo(o_p+#0!SO|&G$Ni=^$9Fd31by$Mp>tc9XZ?aOq?s^&wxR zdHo7=zNX}=ob}jyTRQxpi~iRLuX9H3+pK&`c#b6?&eu)oC~=6Qr^4pkX2KJ~2Qcae zE>f1_OAWkx7nhW=UOHfVz(z#(PJI04z{A#eIn2|yBvaMON3UbQe=b6jm|#MB!jGHE zt{H!n)^(B1Bp(acZXy&hleOWAJU_{5^?+)G#ZL}FQIBk8Rw}r`$Uxa>E1&c-y;zfu zr^y>|LZgMIgx1E!w0I=j?&x-&_Vik>l-D`_xG5t!jJw{c;jS!7b_c_jE$92EcM@`k z<0@|KDUN2WX&-PFy2_w@0|dI?eV z4AytLm0qYj5IJNOO}sB)yGGP7*>O%x{Y+KGWY(DYUC*{LOOr)7W<}Hrw)j2UY_g)^qMCPi$-`~(hBq_bym7d#%=4E3A59W)KtxhKj zog(ZBA`Y<1tL&>={UC#zH54?)Qa=8rcwup z=AM4W1_phWg|>n1g$2GdGwby&*y7F`8g{*6FD%X*br3ptF0gBI=gv5>IEtdov>;9O zYZKjhYGZP23oUy-Tu8!gkuN=L8+qrjx`v-y4TjYv!Td`q;R0Da9XA)pMk7Q;vnM8H z8hYjkc19&`;9wUFtgO5{^d|RI{dfSQ!U;>4wl)FcZM-En(iOqiO+5^{uaxN7J{n)J zh*>@;Z+b7~_Q*(E8ljWdW_CKJv*c&&5DQbHX z%(CQ-4zp&HC*D?9YrJ+gBUVvCK|)zMuIpehqx6FZ51!Z8SJZ^tO3TU~Wq)PwO)o7R zCdZ70m6C=lAav%80B2(S8`gBADz(irU78|#j)m=r zF{{(Wy~v2Mm-oGfp-Z2C=OhxlK_}LRZF> zrdF0>`j&tHv`2Ql1B1vN!Bg+pnd?yv=B38wj4`1-$raB6x9^O6hzgS3p-)kBwlVw} z2UTNB&6RVH#(gA#lEb@ZveDqqKD^tf=uRL?q10Z6cKKnV$#qF@1V#2@NVjdtp^n~T zbBTB~l-Tmtvkc;!S1Y@C+1W4Kj;NQt$<2r|&CSs&^JKcGUJ&-;_$D96!0RC_h}39k z%2MX;9Zl}<&GvAYp7PrzP9@{$z+;olKd%rPvTn>IGk@wTroskPxSV98_j&&D$D+rT zl*D?TbUBxKZ614L`KZDzAgZ5ACXolqD@kj#g%#zAbv^Y4g@S=aexP`k2xlp0>Y}>y}`Yc4~LU zZjDFSu5CrTQu8Z{T_wqL*R5ajuF&bqYN42z;*{qwP~NoT*p$QW6aJb`?i)KCcVE_F zFyv)Af$zz9yQuN~Ea&x7uOml2<*;H;?0tm8m_u5;?eZCK-VZ)Vfw+m}mY9SbAKOh) zBWJYlGn%&yd$9n*my%?UEzQ%GNfdjT3MnXH_z8|5P)<>i8FwqWZ#}6Y=Yl~&F8Wem zuhUzyvzHDf*76B`qwqVLRu)FG(D(UZk|^@#}n0@*1279EX6dp464 zW1U8q+UB$JB|>9K9{2C*G|_f~iN2jS*p{OoXcB`iHj&Yh-k3K{yYP0nS4BtAr3oiJ z)=}a%^+3E4*Ya#l@ z`bU^pSvQy~l1cZ*yxunZN-O6^PAQgL>JVAWaDeEU(oHV8;uD0WCQY1r=0)9wu4+f3 zBXIQm@doCMpWVj`+>X{$Lpkv z)&s8%lJO098ufvMdH+C}ANC#pg&joLXHD_(T;+(b7TED|PzEr}E|p78Y_-`>d1Zc;Af_Rb1^#e#0L39dCz^ ztCht8E&U;J^Q#Qkn5)G~4k@K2QXB2M**PS0{XC)_+ z0ZqrjL-Yzb{UMKgdt-q3Pw*Ap#~-+;;v@1bwc2_AX{Tr=1$|#&~Dw@ z+r?^@?Zr{<=J%Tw>j%1Cv8muYb;N0!)Kv#_Rxdm&%rA;>5h(2*e=`;q%$YPBQHva` ztdwbFOQI(6c9|C&xKPD8 zx}eCx)WXvBg*KPO&iA+$lR_~X1%&!hvFs;Wgrpgmqy+B%j8}z(2oBemb5i->7O4BF zr;0}B=5Bv2a)-27(_ctPB%oy1{j(hX^@GzV_^%5IX-)RZe;7_O_DhU&W0cOH2t6n* zeSfTA^pH=nNlzL+Hlv+@hRSedd;CbEz27D+2^6DrNe|UyfU!gUxD1N>uUr2tHN_nyNh9F&iTXX@HVbxi6GO||mgf6v=*>2X5K z;E6ZE4*Ao&Q1}p9Ok*6-C~PN)NkJO-mFuEna^TqUD6R( zb-%`2BD%V~6}p_#y^K85wu)L+lr-h1QFa1?1qBv0;Rf2slIT#=Bo5F!vJ$wy?d34n zWje6FZ{Gz~9v+^PuMJ-YwLc`lW~3&@OHLl9zI*6NikfXgs&QmN0aoh4{DUk`#hM+o zjth=^&ns4(SfU}s{m@M-5R)<@Cid>Ihe%yZOZhW)#5V$2piQNW1e)W8#rDOGM%jEr zS<^O$f`hj}8w=oF6O-bvM?`p4>oV=#`!Exg+TWt0rV_wtV>|SsF}$Oc=+x`1OYtm3 zTyC!h0fF3mdnsNfw?JOTi=wu#&2}^?iKkZ=dx9eD`gP{5AFQ5Pa2dWX$u(!V z7h}E-2Pc<&(W7rQL^~ElVFF9E%?< zUbfmnQR#}Mo*Kv?={xx@$vESDw{pI^u~tjO3Im5X$mryA0sSj=yc=&2-ox#U@psObNq;7jO3M^=+dHOhcuXR1X)JY}wHPL-6^bLjUg4(h*i$R41e(Q`OzC#J$FDPrP>O^+7M)yZ82w+}UE zUWSDMMx1J9<~ZZn{311v+3Ch&K?-11$3300Ybm8+Ag$RjQ7wB!?+}z$vo5rh6*(D9 z5$$B$$%&E<;I^6KHqKw#BU#qrN110aOkWWuWn)7X8_T4?Nr>wztg6~VA;J|MoB~clvjf)`BoU#);xi&mU;;!4xXL_C06S6Kwlx(C-mB*xiya@ zO-GtY-2Fok*^8DQ1tk4tN$HuA`fDx|s zPyw}|g$q!a*0;7sbCb$g#0pfsm|%@bAg}Kox8iYF&{3grNZ%apb9d9RgfM}dE-w6p z9%FBU45RLon_zUpXATqopMc)c}Zlw>fhq{QxJ ziduCdU!a1z0MAgd8ui9{VD=Qa}&Rlf3ccemzWniU1<6$>k?@3Uf( zqpGSU*@cUjK&2aRy+3JhkLBvxiI>Du1`P6JoxEk`@$vDdqXm`|L+0&~>FL{}fNC1& zfcfm)D_Whd$LkoD3cyS>URV0wwB6n^apDaaF4nWx=B*|wE|;i^>_3oM*U*q86XBt7 z1O@tx?<0q@gTO~Y<&hn0Hv1|59Rl_DB@z#~+m5J-1D#jdeCzP=wy9~J;}sF41QmlF zGZtrCj;SW!diQRCe+(c>w;7mg_@~AS?E3iHbvjF|&lnTQg(^RRs>xADAhz6&F9a_5)JeDhLCb&~pRN-4ltI&H$VQA4u}_*_!>l-n7%B ze16fv#&&)zr-1R)i!F(X>zo*+XG`#>DxOM}>mF80;_JTkCZ8G%L*SEAbf9B9i?onV zd`qz=$2}_tFQ(wIuzPv}JB@NTS?|4=W3qFHf}GT23D8u zs-V3-$kM^~LKRkSCZ=FFH*AnqAOg&-ms^JKWS7fLHknriDQu|cw=UJoRNW!ByEk6Y z{x(p7Jb!+HamNnO7SPXT7aj7|Y31Ut-=^WC@jH0$wPo>ZI-q9_-gkEUv3NOUa#4YD z&h^R4=8ZDE(c(#s0TB_B#f#RS&4G;4jdT>kI>27m?Z$ai?&x0Y7~r>LpnIobpo=TI z!AgV@183RFd4;Kn`%Y5Qs#Yx-D_@^&T{*x)TQZ*&l?(!r;<<-;tmW9 z#AeM<_Ng}a58Usbwy7Vu7;`R00nGI$PqGFFUt^19JBkN1^>RQwJ;mi%86V;BB=_Yc zAvc~$-l5GK9e04w0tU~FlXve1KU*YuBQ7m%`q;}A+f^7$W3wiU6aq^+c*A{sCb@5B z?bI1ruSi4}>+A!VzLQ4h2S$9(aF+OuKzW)$NtPU9VDco7s4X99#j~2M7Bm_2QUzWE zsj7?(o&ANgNWA>PW57Q^lq9vsm(PfSm380wR9w7P!{!G*2OZzjoT~|o&CBZxp;%hK znfE+zgRGj`AzKUDj`8xsC(m0b2nwAj#qos*yDk!swb{~+)$ol@o-N%{rer)cBQP`c z!6hz^f|qyC*yD{P*TM{Glr*3KvNXq+KUaC`LAE8G^g%hEk@t9D(df;novDBMQtnv8 zNt*dNSC!or+KYNPf%M)^d!JsWHR^3V(H^xldpGT{`iDgaz<77NYZO!hO(jR72)(PT zQJejHEcMyOqz75IPwby%FB_bGUS|?=(BVA|n85M#1a1r21B))DhMmGQJjZ6SW5=E) z$f#YqG(9$PIMwvt$m1)`>u_De1X>>#E)IGD1B7=DEs$U`s{3XeBDm5Wkvj?eqRwWZ z2vWH|6!1&wEpjfEil$sB1w80@5@KHJSxDGR2#4e(&TswI8>gCV|pq*v5eBtI>>clj#2A9Tn6oCSuT^%`plYd z^akSa-p6p-;Ax<)=Q>0~(qd^xp{zuk-BM~hnp_UNar88(5J1?*jmCb_uh1#Ep&YK$hi;|_owq$Xyb5x5M@tHQf6w6L>Vd|q`c#SUw7 zTq&(jl{yXNJ>Vtwl$ zS>hW;B^4Ctk3EZLY4agX@B<&MwY1O#)LAt3T<2=;X-P~!NV|o?jdl(R$pse0O-+xg z5`h*l2?6<9Faj}FNxpj~!XPttBHD45o|U!o7STbi z-YS`qJmUjgp$7u|WI1GD|4dS5>wc7(1Xh==N_@QGzUOXR2c)Mz-*C1MsI_j~JkmQ5 zA3>>Pq2YtOZ{Ks30$m=sa4vpWS0V}q;lyiglCdIJOYMwUj{^0VdOF%I4f29D8c0X3 zLP7EM>(%^=Ro(oHQ{9w49vh~_MRj#?H5?a&X>5mz_gdd_8Dy})&>~GbaFcdvY+g24 zvGN&vft+^t7EFwRhrS|IKBq|;0eh;k(35R7RX@+rb;3U+q{MNF-BH>>m?m|h*D{RH za>?VGyBQG%Tvumj8vM-L?USUXq$mf=cjf?%iPjA_?2Uf>>9<&q?HGR<>ZtQ7<0hh?kxOB5JvfK7E(w?5{8A7&k^E6dmmlvoC<7v#FEio``&ARTS zArgSOIRpFr{tz$wipomO>X4iK6HirTc2M|DN0Xn1b8F4LlS)7XSoUFZGdCDc8q^7~ z1qIz&w<4mV>?$h{L%$Lpo~A^l?!A;#$CZwB_aPJ7A)%+B<>eT2VZMt0e)?iDpb`Zt z%Hwhom5-%2KAEduM^1;W8Rj1tctpL8;N`uOd*c>4C<$e6^IxsF&g?VIut5xU2AlkM zPZ+QOU1O9soi*g3%vaefMFbpWy9j}tCUpak7Vo2VvAMaXql511)vItN+qVTQ6nfyB zu-ZmRI!tZ*Gh0AUVBq89>xwP*$oLS(ZR+W=z)wcD5eSw27kQx}vUOeRtIOrxWy2QQ zaxzf~Ihyxq?{x4&TcE(aAuW5s6qT^FR`UZhPiAthBS*yJUv-+=nh@vokBr<|nw6%a zlAF99vB37e&63&1UZ>K9Xd^y0;FIy?9p_WQ+DW#lp%St>A^P+cfNN>HY+&Nw;B#a@ z7njGg-`Lo%4X)W`|iOy~FEfy|&SQC&@O`T-8Tw84q^JOLpjla8DKBuKT=piTV0-QixoTkjt@IMloW!8Umn?QtoJr7X!01Nc-4Pd$yO>dIb)%A$#W|Hoj9Y1E+ zl)o*|fFrSX55>4m!BC5(KM+DYEo{ld!AuZvE!ej{Aq4e8-&r+NwYEz39FPQn`41>v z3M>UR2eZ_G+l&6CUA^ax3ybEaL#^kN1wE#5*&=v@AICiH#mKqAXij$X=CMt*?Z7IA zM{B6FI9Cl+l1Hb5%k}|P5O9#}f>LyUy-iu)rcIjyZtEV)Fkqf~irIl9d(G&O;BU6S zc1NlDao`}djnAT?si}Iro0)ajF2EN`B$b44QLMve9J1h()c4D=6u&QXl;C;$=v%Oc zS{SxhU)@M_aCf2^YeRhC^}vW|-Ocg?&Rmf=LDT~;8yXrCf|Pw5Lu51}MC*A#i+}(| zwYAniIM}yLOM&f`{k;wN*!{o&ot@2Y*nJWx|IGVpN(|)`lO3g{uO2@k4;>0pQfS2c zqyoeMv!ZUB98R=V;E8UAhtgdue&BCpk>{F{vS(pw%t8zpH+7H8Gw<4UEO{gxt9eQY z|Fs_hCg50uxRSk_GR{FUHm&9o;Q74d@Qtb#KA1nPtyNOm4Rkm_u-<*jVwZ7Y!Jd2O z_5!rS!<)NoSV@T+;%;)DonZ8qXtY4hI1jC(#I#7bbo1&)=Cr9ScZQt`Y)3sBLn_0Q z0>xveve>Gh07FYfrJ^n&xtqLMdT^OnUy_>g1!mHR$5A(eca%Ohl#7bf-E;WXi^tV3 z*qh&&kM8WPEp&e@Hoe{isC0MkiZ>gzPilM<;cGy_7E%t}BX_k4Z^a+N1g1(ZusdBOuiR9drQ?qp35 zu=c%zR=LDPg4^~ZTX&ySjZW-ARKZNE2s%`)z`3mV-id82fP)Eb+@wyF5> z_ts-9^h*kMedvp@#4uMlb5N5qgXd~V6lRt5)zdk3?yV!FkB~Ef@d!GU7ZM*~?Q-^+ zkm5D-jA)k=X`AuuJyh;c*RCJLK^+rXs-8Xf_1!|ORx9^vHQt=GduZ7zKR zmILA(ENj-t+k9Jq==}`%OMmE(mVcdVp51k*$BLPc@4AxZ9_{JyXLoP^$Lk!ssL08y zx%84@+XCyUEW`LrCBycez;1N5B7kZn_uMA)-kRg{)q+(!J2v`AFchD_K^5WVGjYdpMZevGKUWb0ckrpBN135 z%XK_+$}PmeTzp=i_i%UMkr%HbqEbe%iHPEXKvg#CSNrxDZ#Z!%+s&vb5s)(>F|p$o zPor!YH+}O=s4>bIvI82AdoWS{xcM&k$Q6LE8yN40fsh5H7H(={prOK&JE5}F&>ajW zwRP)u0J$B^sZXWk88~;j-m4;%U3dS`7&|j5zGgNbcl*m4_nJM__KQHrVZt3|%7DG& z`Z{wnGU=;Vb#&sc-`3qaC(y80((yyqHY>t@N{9KTJg8#1UC&#*#PGfn*zCNe|4rQOviQi8ua#S07s}06el_$FJTHVa9kPcd~dEpyRBUcPf$z<)uDxN%9Tbnn_6_^zJm;A@ewJkbYn#FDUCz4 z+>H$zFr2&&yI^bX93xD(r?aVehvO2u`QVtq#0`X{V@vfZL~;8LR4F0T=4#X}%=RsF zsX}!4v5PY)kk@Y9 zvZB_f(vs&;QHE)Bx5w!Ud)h^Bk3`@sIK}i9(eBuZX~G(K#hEzB>9qG-WgSPC62145 zbXWGNN8(r?Db((7@IIZyPRZJRTQO=6DsbNor{lKLf)mdB-iEvBN1~o$rK5JGs|nLx zxwP=q`oO%Ca>xGkSL(xc@kIDUj#1-rg%pUOmCWXSuEc@PV2>b5T3k*nMMTqu1>8Hq z2Vess++p||V4yaxM}18HdGO5_1VJ!BS`U&WNX{VL1E~?DQIM8ET7&P40f^HvkY0k6 z0g^pPq98#U04o1@0QI0i!UKs9q$rSvKw5*Ji-BQKJ*0&QNH`$*jxQYA=h z@ath<5i}_uBr%ZSe(~=Dpe#7gZwDy>q&bk*;Mc|g><7spL7M%))&-Cs3nV#^dO=!) z|1JzbnjHlR`&%XgkPjE6iy*Cyd4PofQkVtpHV0`{>j8WpBnObzXb+I^Uk;Flkd`az z1K>SukYJx#qdh>vzXTvH;araOS8D4(;~K9A zknk@BNZak`<^b>J6amxN4Yv{~qb;=s;?pJwpm} zA0m%(a{tj(oS%=>fx5dpJCXM@Gpla@N;7=;@Bw+-)rHho*C0g?^ZwCqgg7nA%R_1^ zE0M1Dc4T^LYNgHo^Lua|fO@>&y8yU{dPAr?S{1-Hq}@$KbWf@x{JVA|yQ#J!yS7mM zlmzP*VB3S7Q&s&)m-nDgelLLiJ2xW(G0@OJ1lc)$`gigHT%S3vgk+_reQQ5}I^5sq z0B{d=$EzCq?Qh;77tWkPIA~~p3cdfTpK;LAAr|@uNMBFS|GNvoGAs=Yk$rUZzub4S zZ=*pBH8l}Pi*EovI01lskmrwDP5zG7Hbh0{@GpmtKlceOC1s?)_uJW7u)z+2W&F9^ zU+p)f#W(Z;NOMSgXg?fYDgEJ`Z*)fMm&eI6jV!>}h3oce0p_tcHT$pmPQ6p7k*Uea z)qEzj-9p+!8}f<)t~qetS;p_LeuZr<0sP@=;c4mPUvh2x8ou{XZ$nZOAZx!WfW8~{ zE6oAXYXcY44#f1VF5>Otg7~<){iDgt*#&|9pL06{+O}OfuaC^n&#&||KfY^W zV1TwPScidzCIajHr@s^87S6p8*XU?)R^{YsPqZSaudYTb`#`zqTh`bWRl16o=H})QO~qqh z;04Nt?QdFFToRP=(aEx^vPY1aAE;kgX#*EPA28EBhxR+G%Ac;Z82BEfJ@hGC5j=bH zj350X#QC4+VfY*B-&O&u^40tr z{oy+JtALG>5n8-Jo!v^|YxK7f=8pE*^;v4Moa|ijb#|A0rPRJV5+B zE+d_7?JMrcv9>uA{Y$KwU1RW6SHNKW0Mn3%;W$CWco33+*o9 zH*ft^JI8X9*XX~DiQleCF)@E@uNB*W02v(_`D4b2tGf_^?711BACpqcqpBnHJ?$+r43F)_dd{;!b z<$jPD75&j)0s1T~C-`jn?<=`p_w@YKfS+);M*mMpzv=D0a@v8hn-m@MJKdM*51*m4 z`G2i11o`=YYQRspTciIcq!(moBhdftYqa|OxfI|NnqR*9=nn#YLY5PJCdtjSqB3Az zxj;AgGhvPXpRhmlZt$ag_c@)>-NW&H!^``t{9kB5z>4TEFD#6V4E@~DM{D%|M1Ob( z`7!8+h>q^d&y=O4{!;#%7#~NDi%a}v8T%O+k@O_!HurO3jsAbc|H8t;N4Xrz_)|DS{RU!~SH`lF}B z;^LRvSm85t&(W9go9!2!j&L<)e68&7^?Z%~=rI`;5{md=zWi}tI^+rCZbu-t#wJK> z^UCM$-nVZ*&iybiEaQG+65{9XfxxnV6zeuAFs{-=#jfN|F6yepU+Lp_iOvV(2tkZJpJ1Gf7Q`xHO2hUcfU6N8*1xT zT<_QR|G}6--wM!10qs=KZV2twP$%`Sf8bk-1ODmg_y57TWIqa^kHnvKt8jdsQ$6)d z?Ei+b-%cL>GA+Z~x`&+fjF0xI&ux?tkI-i+ zKJw10{RyFdQeRE|i}t}XVSKnB1#n+HjDNO_kL4?jix7MJ_D|g#4{0BA?HaNd#Qs`t z*YZ`2b3ZaZw&HE>AKw)}!1YBr?7;Ug(AO84Tt%Fn)P%c#X_tcjgwStwr2uK40QwBN zSSK+49gKnaqX5pXSj2wK|1Ho|#(9>j)NDM0&< zovA6>?}V}Cl)yajweP$W9Q?a|2-+f`J?e8jp}U8E#n5jZ0@ORgeMac;2kX>OR75!G zx1%i+#yym+kETU$kGw0qg@;92{4?=Ea1CEoVg>%*|I!N9bp;3~=A^N^r3ktZmRo;r|ok zbh*xNxk7#r#z}}vcxR*UsT zu7V&=>l$6o#3dAKc|6L(C6#7lIOuG+P8$ir1_uwfah)mc|ZQ2)_`?lu=&e! zVLe^Xz~8_&rfFc(T=@BF|Bto@XoG;Z2xyb|nvU~pdhhS~9NJ`{Z3f!Gp{?e7>c(HA*1WC|B5LY?`F~|HmO%u*Q9sX~$e4c_J7IvHQKtaIv)d zCY}J!`DrGrqXVQxdB`X1haFjYe*XiX^1aSodA{X-cSjjP=2jl!;!|a-yn{Z5(AV&L z)9FW*2isavR<_Eo1hV=Q1hK?lJsmPEK2=rd1$YIpUN6(=udXSEpYlDvv9dg$mv;%A z;9i^Xsf-_S_gDVk&?g!CCV$N@8l6A$_j(5FJRvRfRsV13x3e0*5Xk34Uhi}KF5g3b zE`SF?VoxJTocfok*dOqJAU}kmR=_XPpf6{+Jb1Ms{v-oJ{;wkZ%W`2|v1$l%oe%WO zb?D24^UaUs2fw!e1JXV|BJ!v10s6TA1H^Ab$B(Xd{|A)uAfNv^jo>}xxAMSIcOO8Fm!eX%w{*|4*%{qM5>{`Zki^fI0==Vx;I?{EM04b%nH0GDtm<6p%7L^CKu zx^D+#{WgLu&i{28fBq|!{cp>EDr>nf!L%w*M2Jh5W04m7(Dm^oP8~YW9B) zy#5lm5XW%N|5liKhae59VEzDl;B0#Ysk;m0wzuC}8iJ%>MBm276`$t3`ntbH|9@Nj zhp*8euEDOvBaGDuV>ZGVD{wD0v{SXNB6csdr$D<3)WboY8q~+Y z@m2zKJHHC7jeqo%Ko_GG`q{76*M8ZC|9LITdcDt|{jB>n`u{A<{~GnK(H}h>-ZV9V zI6wg(W415He}`wa%+9XdQR2fCf>cHQwgv=>{$>M){(DfL|Es_n{r^Y_Xy1WnGYF&E zhYoFk@Jt7|7xV7``s)RX0bM_^r+uzhfx14KVl8?dhl$P zzp^7Mh=_jl5&UD$Prsnu$8Y~1>Hc{ifcMar19i7Q8`kLmi30E}CU_>(U(tT~Z-Ksk zXn8?scg=MIv|oX}-gDQ__uF2h|0nvxcqyO9R$Qhvx+^^64c+-~Z(g?j=ARG7_@Br8 zpMPJ(`puT}sRjT1-5UKr;T*@W8PI9L2kSfl?Z?8CEI z(b4*A&(NL!3io6!({?4-T<1^q|BSme`hUVYJfmf$dk;jw8PCv<< z1JHM)Chk-HKjUtV{-3Z8&tivXvVU#7fBqbv@s3Ux2>HLvzu0&2`JCXvh#=#=pX&b^ zcWdX|I9qTpCiK-qx5vwx=r>=@)%xrGv8CVV*BbrN;}OPE zyW-&RF&4SJkT9Zm>NFA)9{ziLJ@mQ$_;hXt==s7BBvb}Ly!HT{5ZIdm_kwg+|M9(_ z`D=~-KNI^uzwR~qqo)CS-forlU%(5Z1IQ!(DzHX>^pt>SC%_oYj|&Tts`94@)D1%a zWV|{J>qsPl%JY6wYyEgv+0*n9fpT5)hhqMP?FDrwu(ccT` z)PEKD+W3cY$yN$q+y4`LYNaLo`1ig>|HkxH)jbB@e!0>d@JtGHb~Zx|&F>m-Yo+b^ z^LsEph5AtiwEExnH!FAE9BxM+x8oYmkBzVJ=kNL2Zy1{<^4OPl3h1K<<<(UHq&<*w zR|YV?AOEi1U*Puu@Vm=MPX4L!A0X{No{Nd*Y(#iA5j>w}r7%4L;&X2O62BH89!x1X zs`HKXXU(g@g*$yx=eLNe~ z+r{Ohz6I)B{;34x55PGH-I=JcZ6?|}t2!qM+IM2WT>oeM!rw6VO0dLl`|lrEAjm(N zGA<&>o#W_f58DP~P0miPg8B$z58jqsO^$4Erq$osS^sQz{h7aETj3dHtA&(7 z#D7B9Xa0$2&|e+S3#$aMy8!`_WRRhi=9`|HLX5RncP8S`q(6-P1lNYu0*tY8R|owZ z@K4ZlwRMEcgR%eH5n?O-)M4- z*b4$i$ZBcvPrvWag&z(1R`3m4&Yh<&ohGYzxa0T zLMt2oQ#6NisUSPYM;h}WZ5AxzZg24EC4j{(bN@F_y9sR!L@33zBO$ZVK zxVFkj5Q}bg{N6H3^1%(xZ`A)tf7l1W*C9Z*eH$+T@~y$IhXKgfnS+G=HM)QP9J~i43&a7WZ{i0* zzBTxDFaT)?X^D2t|D5ih-^2Gof_-M?fm6WCYw$~90MZ`L<*TCoaz6n1utEC2_Ra)I zs^Sd57_1^GQ>8JLlqoMT#;8$9j7P-#0*xv0K)el61W_wq6lVb|N2qXk1mu=oz;GiV zpwSXt7P*#XIc0SPTm(fx4iQj1==@*5?YHl}={GZPW_ET~=db$b&Fk04|M&TK|J{Ex zX5?i;$%J|alo_&ILsOoqJS99bA@c&}4a^<$klQ&xn`a(Rnd$Z2RLVUVM&e>TVBLVV zqkKJ(OvpiC4VO0GC|G`(c$avYBZ{U`T`f34aJOI{>NW?^-BK3la9G33L{TSFys)*FDFb#1T7i2fKHs@heYA0-+WcX3( z#qo%wxm)a+rJm+SwM%GDa5pZxBY3B8q<@Hk)n#Ss-kVyfX0q2lo&A37)o*+2ZR))> zYh%&~I=r`bt!jJQZE4>{4b9LF4G_k~ zS@7k4s-7R%bIUi%nmX{wR@tDO2JG6gLvcQi_~3C~SB$4rT&!h5xa` zhWYL>;H)inO%3q>;d}3O%ZfV>UV3r3`JD1I7x-uF`?KZjHfOq#tHH@dMK15AzMdyx z(mCTrrsV?vrAwB?@CJ{M-v4(s|CL!9`EU64J_(x+t&opa|qwx=g|f94g(teNwCyp7L zPSNYIxxzohAb-shTM}hUm#XijuMYxa!ph~#wY`bW5$^O1#^Zg@CH~?2gAEmGX~`mW z=-@#wnfgEX*ezSMNL5x;s1@Qj6Oc>%`{n<<{2MIaT$TTsJ7)sC<-cQl{P`dExy1v< z6xv9lbHLvEA2R>5CbL`a9pi36`fKdsq&pYq45hJO&p2@4%h2KQsmrR@U08oZ&Pok*V+s%Us8zK-|a z7rOrAm4nCwZ+fMRmq?y$a`VX0hOEroV*TnhKL5?nI@_h6wMW~WBVK-NSi3IcYjM;i z?lBF6O_h~aJ52CeA#)IH0g+RGUB_LSMp~y|;f!_CNjK zfiI)=f9x{G-Wm4#vC{$`mMPN_Ih_!+k2v~z=iX-QCK$hj!)6lx(*ec~`qylZf1k-N z;4wFfJ-VOz?GshLrPSs{a&Ye_es^q*V6$S&a=&}$Mq(=f#i!AAtMWg;l zmNjEG_ZC^lWvTOH|5n38kK>dY+^hyS7Av(=M8}}*x=u$c^~q|v!$^4a`iF0mk1t*x ztt|xSKc8-u29*Y&(=c@@Z2p728&l`8fw`;Fp5VK~oV&W=4V#T`|J&|wuV{6#>4QJ) zDeaH2l<3!gWoQ0-U{_6fQI7F|I|``}d!=8D2mfha6X(wGW)~BMpZ``d-&1j*&6qa8 z*b#&%{0GB^y$`*lhW{vb)bjjiUjNB@%?BGc=rztmVpl2%*kEFe`&6c?)a^__E|ouX z`?)h_s+G%@Th}7KmnCudW{lfWkqPdV$`$^(x5>y*=s%ul*G@5yGk{Dx{`MOCYsfCx zV@?-xfq!&Z=(0@TXP(?^YV==A#vO9UYBOec{khylD|RZ=fn4A}8U5!AH&@2+Pd=pE z599*>jCJU;O}U#VYj#HeT{7}O4FAYB$S~oZSIzpEHj$ zb-zyzO7%X$i4Pn4yjy?~ zc23Y8U7`2B8TNpqOHK`MQtV|nt0zqtzpAf&L(!vq+p} zVofz!Kol_XU1<->1tdj+WqgW7kSzS_{1#^LBA;SvL z28})&pS%l>6s#`*t(pgUQfJ_)z5z5tJ9WxeXV|kpYsyshOy@4D=aWw*g}pmnAC;v{WoU|$?G1pu09tF#Lj@YmsP`<;);%x`YExVhdBwYF zyXts3Ki;QH*QDYk?e0Q@Ip;<>1b}{t{>g=Y-MZ^^y8rWW*DcvUQ^!xxVOw9wZm%AHIg=d(+74}+KJ4(Azg$EMyh(G#P|;L*tVVv9#fbr#p1e@gf_+192`cUZ~rQY4_w?r-wW0 z^EB{+pDE+VyEcQ6&l3S-yC@OQ|0Y5@z{JO7&@SSPg9Yt=d%L#NvJze^J3{zg_g4DVes5AKE1S zrmgQW>2EEQ{g`d!Jb~;(7<7(Y5c8;WH>p=A+2<5FlOr?Q5m!5YhMcF=bXhIu>`gL2 zAC=BJ0e$2;*;5pRt)f5edW>IpI`K|tFQHeT%Kkd`TnsqF@3;SNWsxU|qtf2-i?Jh_ zu?s(}7v0|SdfjJpmNN(wB;TR)S;^1RLZ!+kD)qse&b_dMq&y4{FW>Fx^jA%F{45?W zi?Js--`^P=j5YS%jMbTxA2_!K-OyM%E;h}BvgAb@SS6yxx3S`bn$gh-JGEVG*q}=~ z^LNUDF^Kj+dv`(pQjejZe2)sRJm!R*@<8H{>Co@W&)tLavnZ=%IcefuPMt|ih2KZE z=;tgm=lQXV5CqQsurXiToF4)29`^mH+|%wbCsgLM}ch6 zkNghp29al&yO%Fpq53pF?Dj9Tfn{T(P%rXP7V1B1B8GOJ$YRJd$OHqMee0v2zA*}9 zgMQYex;*-rUMs%#f(vxs8yY#^*{`v4u8lU#p4cdm4f>%6I|R&sY-4t? zoovzXtlwT5vwq9?HL8Up6GW{$FqSR)>uCJ)=>XEvUm!2hc5V8L=gxP=P~@4YFuAQ0 z7CAHk=w4QM-OL&YXEV^juy<A~#_V8TxIqlaXP1%h}WE4?A^&dXWgB9hsDVmvJNj z&|ctmJFNA0_xSokZ@-x6zoWm~?u}Ca-zR5|{&l)T2ed@RQ7xt4`YI+`bdQY%eRas_ zPnq{8t3PFJ3EgPCH4gfp;vq^+dq^%!6j>}8q^wE{t+Ye4-cKOU&Vuy~pjmH(kY_`| zk@biHXtnKufG1yF$}ygx4H|v4o82hlE-g#fDcS{XoBpY;0h&!eLt8cE>Sq%v zB<@jyO@u5LKDc#_yn}Y{{Mf`Fe6rVO zU_pWFJfv?wt&4FTLjDjpX;4Ph;MQ}KKC~tR((~%t-|4THy6GD^UYC{V_Gb$6ALLs+$VB>crcKj!kFiyWof%`d z@|+V-QnRN{iV zJKFHG{rkJ@K0jc9cJrRooilB^>es!yE+6BuNcsoTpsw4X!`=7jegyu)khHm{d!L|ucGu9m%oWL=`8~F`nD5%aZGQ>&64=_`eCc+(AM5CROx!ERJ9@ai zTa1g$aR)p0;12DpaWnst9e?moK2V2(W9U-wX^{-q*+n)dBY%l6-rK4~KZCoO+7 zhSEn(@W|gK&pUm~JA)j3De2gdwQBk(kDh?ET|xdenSU6&dq$=UK5g?4Z1G`_#b#^L z)J>kGT|NnJU109R94ONK%MBg)^Of{#^etf+uzgCJdLAmzI-7r*Niehsk{|AzNd9LM zOkJbAPc!Kj%c?;^9jwfdCTX)yAn>NO)ev($A@YomP4v`Pv z|3KRs@3SiV@Ndqauk#8UNYLzs zKzLn$XNA \ No newline at end of file diff --git a/examples/svelte/package.json b/examples/svelte/package.json index 03f324bf..2679983a 100644 --- a/examples/svelte/package.json +++ b/examples/svelte/package.json @@ -1,5 +1,5 @@ { - "name": "svelte", + "name": "svelte-examples", "version": "0.0.1", "private": true, "scripts": { diff --git a/examples/svelte/src/app.html b/examples/svelte/src/app.html index 68f1308a..a9d5b2f0 100644 --- a/examples/svelte/src/app.html +++ b/examples/svelte/src/app.html @@ -1,8 +1,9 @@ - + +