From 2af833aee1e86946dd6e34c64533895ed0766aff Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 1 Feb 2023 09:41:09 +0100 Subject: [PATCH 0001/1093] feat(packages): add svelte version --- packages/svelte/.eslintignore | 13 + packages/svelte/.eslintrc.cjs | 20 + packages/svelte/.gitignore | 10 + packages/svelte/.npmrc | 1 + packages/svelte/.prettierignore | 13 + packages/svelte/.prettierrc | 9 + packages/svelte/README.md | 38 + packages/svelte/package.json | 44 + packages/svelte/src/app.d.ts | 12 + packages/svelte/src/app.html | 20 + .../svelte/src/lib/components/Handle.svelte | 72 ++ .../src/lib/components/edges/BaseEdge.svelte | 29 + .../src/lib/components/nodes/BaseNode.svelte | 62 ++ .../lib/components/nodes/DefaultNode.svelte | 15 + .../src/lib/container/EdgeRenderer.svelte | 171 ++++ .../src/lib/container/NodeRenderer.svelte | 34 + .../src/lib/container/SvelteFlow.svelte | 62 ++ .../svelte/src/lib/container/Viewport.svelte | 35 + packages/svelte/src/lib/hooks/drag/index.ts | 128 +++ packages/svelte/src/lib/hooks/drag/utils.ts | 153 +++ packages/svelte/src/lib/hooks/zoom/index.ts | 103 ++ packages/svelte/src/lib/index.ts | 4 + packages/svelte/src/lib/store/index.ts | 116 +++ packages/svelte/src/routes/+page.svelte | 59 ++ packages/svelte/src/utils/index.ts | 101 ++ packages/svelte/static/favicon.png | Bin 0 -> 1571 bytes packages/svelte/svelte.config.js | 15 + packages/svelte/tsconfig.json | 17 + packages/svelte/vite.config.ts | 8 + pnpm-lock.yaml | 944 +++++++++++++++++- 30 files changed, 2283 insertions(+), 25 deletions(-) create mode 100644 packages/svelte/.eslintignore create mode 100644 packages/svelte/.eslintrc.cjs create mode 100644 packages/svelte/.gitignore create mode 100644 packages/svelte/.npmrc create mode 100644 packages/svelte/.prettierignore create mode 100644 packages/svelte/.prettierrc create mode 100644 packages/svelte/README.md create mode 100644 packages/svelte/package.json create mode 100644 packages/svelte/src/app.d.ts create mode 100644 packages/svelte/src/app.html create mode 100644 packages/svelte/src/lib/components/Handle.svelte create mode 100644 packages/svelte/src/lib/components/edges/BaseEdge.svelte create mode 100644 packages/svelte/src/lib/components/nodes/BaseNode.svelte create mode 100644 packages/svelte/src/lib/components/nodes/DefaultNode.svelte create mode 100644 packages/svelte/src/lib/container/EdgeRenderer.svelte create mode 100644 packages/svelte/src/lib/container/NodeRenderer.svelte create mode 100644 packages/svelte/src/lib/container/SvelteFlow.svelte create mode 100644 packages/svelte/src/lib/container/Viewport.svelte create mode 100644 packages/svelte/src/lib/hooks/drag/index.ts create mode 100644 packages/svelte/src/lib/hooks/drag/utils.ts create mode 100644 packages/svelte/src/lib/hooks/zoom/index.ts create mode 100644 packages/svelte/src/lib/index.ts create mode 100644 packages/svelte/src/lib/store/index.ts create mode 100644 packages/svelte/src/routes/+page.svelte create mode 100644 packages/svelte/src/utils/index.ts create mode 100644 packages/svelte/static/favicon.png create mode 100644 packages/svelte/svelte.config.js create mode 100644 packages/svelte/tsconfig.json create mode 100644 packages/svelte/vite.config.ts diff --git a/packages/svelte/.eslintignore b/packages/svelte/.eslintignore new file mode 100644 index 000000000..38972655f --- /dev/null +++ b/packages/svelte/.eslintignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/packages/svelte/.eslintrc.cjs b/packages/svelte/.eslintrc.cjs new file mode 100644 index 000000000..3ccf435f0 --- /dev/null +++ b/packages/svelte/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + plugins: ['svelte3', '@typescript-eslint'], + ignorePatterns: ['*.cjs'], + overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], + settings: { + 'svelte3/typescript': () => require('typescript') + }, + parserOptions: { + sourceType: 'module', + ecmaVersion: 2020 + }, + env: { + browser: true, + es2017: true, + node: true + } +}; diff --git a/packages/svelte/.gitignore b/packages/svelte/.gitignore new file mode 100644 index 000000000..6635cf554 --- /dev/null +++ b/packages/svelte/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/packages/svelte/.npmrc b/packages/svelte/.npmrc new file mode 100644 index 000000000..b6f27f135 --- /dev/null +++ b/packages/svelte/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/packages/svelte/.prettierignore b/packages/svelte/.prettierignore new file mode 100644 index 000000000..38972655f --- /dev/null +++ b/packages/svelte/.prettierignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/packages/svelte/.prettierrc b/packages/svelte/.prettierrc new file mode 100644 index 000000000..a77fddea9 --- /dev/null +++ b/packages/svelte/.prettierrc @@ -0,0 +1,9 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "pluginSearchDirs": ["."], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] +} diff --git a/packages/svelte/README.md b/packages/svelte/README.md new file mode 100644 index 000000000..5c91169b0 --- /dev/null +++ b/packages/svelte/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/packages/svelte/package.json b/packages/svelte/package.json new file mode 100644 index 000000000..ee91d37b2 --- /dev/null +++ b/packages/svelte/package.json @@ -0,0 +1,44 @@ +{ + "name": "svelte", + "version": "0.0.1", + "scripts": { + "dev": "vite dev", + "build": "svelte-kit sync && svelte-package", + "prepublishOnly": "echo 'Did you mean to publish `./package/`, instead of `./`?' && exit 1", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --plugin-search-dir . --check . && eslint .", + "format": "prettier --plugin-search-dir . --write ." + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^1.0.0", + "@sveltejs/kit": "^1.0.0", + "@sveltejs/package": "^1.0.0", + "@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-svelte3": "^4.0.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.8.1", + "svelte": "^3.54.0", + "svelte-check": "^3.0.1", + "tslib": "^2.4.1", + "typescript": "^4.9.3", + "vite": "^4.0.0" + }, + "type": "module", + "module": "index.ts", + "exports": { + ".": "./index.js" + }, + "dependencies": { + "@reactflow/core": "^11.5.1", + "cc": "^3.0.1", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } +} diff --git a/packages/svelte/src/app.d.ts b/packages/svelte/src/app.d.ts new file mode 100644 index 000000000..f59b884c5 --- /dev/null +++ b/packages/svelte/src/app.d.ts @@ -0,0 +1,12 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface Platform {} + } +} + +export {}; diff --git a/packages/svelte/src/app.html b/packages/svelte/src/app.html new file mode 100644 index 000000000..f04b760ba --- /dev/null +++ b/packages/svelte/src/app.html @@ -0,0 +1,20 @@ + + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/packages/svelte/src/lib/components/Handle.svelte b/packages/svelte/src/lib/components/Handle.svelte new file mode 100644 index 000000000..a90bccf2f --- /dev/null +++ b/packages/svelte/src/lib/components/Handle.svelte @@ -0,0 +1,72 @@ + + + +
+ +
+ + + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/edges/BaseEdge.svelte b/packages/svelte/src/lib/components/edges/BaseEdge.svelte new file mode 100644 index 000000000..60e05403c --- /dev/null +++ b/packages/svelte/src/lib/components/edges/BaseEdge.svelte @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/nodes/BaseNode.svelte b/packages/svelte/src/lib/components/nodes/BaseNode.svelte new file mode 100644 index 000000000..35b883120 --- /dev/null +++ b/packages/svelte/src/lib/components/nodes/BaseNode.svelte @@ -0,0 +1,62 @@ + + +
+ +
+ + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte new file mode 100644 index 000000000..7357f82ae --- /dev/null +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -0,0 +1,15 @@ + + + + {data?.label} + + diff --git a/packages/svelte/src/lib/container/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer.svelte new file mode 100644 index 000000000..edff13602 --- /dev/null +++ b/packages/svelte/src/lib/container/EdgeRenderer.svelte @@ -0,0 +1,171 @@ + + + + {#each edgesWithData as edge} + {#if edge} + + {/if} + {/each} + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer.svelte new file mode 100644 index 000000000..8e1bb4e15 --- /dev/null +++ b/packages/svelte/src/lib/container/NodeRenderer.svelte @@ -0,0 +1,34 @@ + + +
+ {#each $nodesStore as node} + + {/each} +
+ + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte new file mode 100644 index 000000000..af7ea786e --- /dev/null +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -0,0 +1,62 @@ + + + +
+ + + + +
+ + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/Viewport.svelte b/packages/svelte/src/lib/container/Viewport.svelte new file mode 100644 index 000000000..66cb8a271 --- /dev/null +++ b/packages/svelte/src/lib/container/Viewport.svelte @@ -0,0 +1,35 @@ + + +
+
+ +
+
+ + \ No newline at end of file diff --git a/packages/svelte/src/lib/hooks/drag/index.ts b/packages/svelte/src/lib/hooks/drag/index.ts new file mode 100644 index 000000000..52bf16fe3 --- /dev/null +++ b/packages/svelte/src/lib/hooks/drag/index.ts @@ -0,0 +1,128 @@ +import { get, type Writable } from 'svelte/store'; +import { drag as d3Drag, type D3DragEvent, type SubjectPosition } from 'd3-drag'; +import { select } from 'd3-selection'; +import type { XYPosition, CoordinateExtent, Node, Transform } from '@reactflow/core'; + +import { getDragItems, hasSelector, calcNextPosition } from './utils'; + +export type UseDragData = { dx: number; dy: number }; +export type UseDragEvent = D3DragEvent; +export type NodeDragItem = { + id: string; + position: XYPosition; + positionAbsolute: XYPosition; + // distance from the mouse cursor to the node when start dragging + distance: XYPosition; + width?: number | null; + height?: number | null; + extent?: 'parent' | CoordinateExtent; + parentNode?: string; + dragging?: boolean; +}; + +type UseDragParams = { + noDragClassName?: string; + handleSelector?: string; + nodeId?: string; + updateNodePositions: (dragItems: NodeDragItem[], d: boolean, p: boolean) => void; + nodesStore: Writable; + transformStore: Writable; +}; + +export default function drag( + nodeRef: Element, + { + noDragClassName, + handleSelector, + nodeId, + updateNodePositions, + nodesStore, + transformStore + }: UseDragParams +) { + let dragging = false; + let dragItems: NodeDragItem[] = []; + let lastPos: { x: number | null; y: number | null } = { x: null, y: null }; + + const selection = select(nodeRef); + + const getPointerPosition = ({ sourceEvent }: UseDragEvent) => { + const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX; + const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY; + const transform = get(transformStore); + + const pointerPos = { + x: (x - transform[0]) / transform[2], + y: (y - transform[1]) / transform[2] + }; + + // we need the snapped position in order to be able to skip unnecessary drag events + return { + xSnapped: pointerPos.x, + ySnapped: pointerPos.y, + ...pointerPos + }; + }; + + const updateNodes = ({ x, y }: XYPosition) => { + let hasChange = false; + + dragItems = dragItems.map((n) => { + const nextPosition = { x: x - n.distance.x, y: y - n.distance.y }; + const updatedPos = calcNextPosition(n, nextPosition, get(nodesStore)); + + // we want to make sure that we only fire a change event when there is a changes + hasChange = + hasChange || + n.position.x !== updatedPos.position.x || + n.position.y !== updatedPos.position.y; + + n.position = updatedPos.position; + n.positionAbsolute = updatedPos.positionAbsolute; + + return n; + }); + + if (!hasChange) { + return; + } + + updateNodePositions(dragItems, true, true); + dragging = true; + }; + + const dragHandler = d3Drag() + .on('start', (event: UseDragEvent) => { + const pointerPos = getPointerPosition(event); + + lastPos = pointerPos; + dragItems = getDragItems(get(nodesStore), pointerPos, nodeId); + }) + .on('drag', (event: UseDragEvent) => { + const pointerPos = getPointerPosition(event); + + // skip events without movement + if ((lastPos.x !== pointerPos.xSnapped || lastPos.y !== pointerPos.ySnapped) && dragItems) { + lastPos = pointerPos; + updateNodes(pointerPos); + } + }) + .on('end', (event: UseDragEvent) => { + dragging = false; + + if (dragItems) { + updateNodePositions(dragItems, false, false); + } + }) + .filter((event: MouseEvent) => { + const target = event.target as HTMLDivElement; + const isDraggable = + !event.button && + (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) && + (!handleSelector || hasSelector(target, handleSelector, nodeRef)); + + return isDraggable; + }); + + selection.call(dragHandler); +} diff --git a/packages/svelte/src/lib/hooks/drag/utils.ts b/packages/svelte/src/lib/hooks/drag/utils.ts new file mode 100644 index 000000000..50b95b09f --- /dev/null +++ b/packages/svelte/src/lib/hooks/drag/utils.ts @@ -0,0 +1,153 @@ +import type { + CoordinateExtent, + Node, + NodeDragItem, + NodeInternals, + NodeOrigin, + XYPosition +} from '@reactflow/core'; + +import { clampPosition, isNumeric } from '../../../utils'; + +export function isParentSelected(node: Node, nodes: Node[]): boolean { + if (!node.parentNode) { + return false; + } + + const parentNode = nodes.find((n) => n.id === node.parentNode); + + if (!parentNode) { + return false; + } + + if (parentNode.selected) { + return true; + } + + return isParentSelected(parentNode, nodes); +} + +export function hasSelector(target: Element, selector: string, domNode: Element): boolean { + let current = target; + + do { + if (current?.matches(selector)) return true; + if (current === domNode) return false; + current = current.parentElement as Element; + } while (current); + + return false; +} + +// looks for all selected nodes and created a NodeDragItem for each of them +export function getDragItems(nodes: Node[], mousePos: XYPosition, nodeId?: string): NodeDragItem[] { + console.log(mousePos, nodes); + return nodes + .filter( + (n) => (n.selected || n.id === nodeId) && (!n.parentNode || !isParentSelected(n, nodes)) + ) + .map((n) => ({ + id: n.id, + position: n.position ? { ...n.position } : { x: 0, y: 0 }, + positionAbsolute: n.positionAbsolute ? { ...n.positionAbsolute } : { x: 0, y: 0 }, + distance: { + x: mousePos.x - (n.positionAbsolute?.x ?? 0), + y: mousePos.y - (n.positionAbsolute?.y ?? 0) + }, + delta: { + x: 0, + y: 0 + }, + extent: n.extent, + parentNode: n.parentNode, + width: n.width, + height: n.height + })); +} + +export function calcNextPosition( + node: NodeDragItem | Node, + nextPosition: XYPosition, + nodes: Node[], + nodeExtent?: CoordinateExtent, + nodeOrigin: NodeOrigin = [0, 0] +): { position: XYPosition; positionAbsolute: XYPosition } { + let currentExtent = node.extent || nodeExtent; + + if (node.extent === 'parent') { + if (node.parentNode && node.width && node.height) { + const parent = nodes.find((n) => n.id === node.parentNode)!; + const { x: parentX, y: parentY } = parent.positionAbsolute!; + currentExtent = + parent && + isNumeric(parentX) && + isNumeric(parentY) && + isNumeric(parent.width) && + isNumeric(parent.height) + ? [ + [parentX + node.width * nodeOrigin[0], parentY + node.height * nodeOrigin[1]], + [ + parentX + parent.width! - node.width + node.width * nodeOrigin[0], + parentY + parent.height! - node.height + node.height * nodeOrigin[1] + ] + ] + : currentExtent; + } else { + currentExtent = nodeExtent; + } + } else if (node.extent && node.parentNode) { + const parent = nodes.find((n) => n.id === node.parentNode)!; + const { x: parentX, y: parentY } = parent.positionAbsolute!; + currentExtent = [ + [node.extent[0][0] + parentX, node.extent[0][1] + parentY], + [node.extent[1][0] + parentX, node.extent[1][1] + parentY] + ]; + } + + let parentPosition = { x: 0, y: 0 }; + + if (node.parentNode) { + const parent = nodes.find((n) => n.id === node.parentNode)!; + parentPosition = parent.positionAbsolute!; + } + + const positionAbsolute = currentExtent + ? clampPosition(nextPosition, currentExtent as CoordinateExtent) + : nextPosition; + + return { + position: { + x: positionAbsolute.x - parentPosition.x, + y: positionAbsolute.y - parentPosition.y + }, + positionAbsolute + }; +} + +// returns two params: +// 1. the dragged node (or the first of the list, if we are dragging a node selection) +// 2. array of selected nodes (for multi selections) +export function getEventHandlerParams({ + nodeId, + dragItems, + nodeInternals +}: { + nodeId?: string; + dragItems: NodeDragItem[]; + nodeInternals: NodeInternals; +}): [Node, Node[]] { + const extentedDragItems: Node[] = dragItems.map((n) => { + const node = nodeInternals.get(n.id)!; + + return { + ...node, + position: n.position, + positionAbsolute: n.positionAbsolute + }; + }); + + return [ + nodeId ? extentedDragItems.find((n) => n.id === nodeId)! : extentedDragItems[0], + extentedDragItems + ]; +} diff --git a/packages/svelte/src/lib/hooks/zoom/index.ts b/packages/svelte/src/lib/hooks/zoom/index.ts new file mode 100644 index 000000000..2292fc553 --- /dev/null +++ b/packages/svelte/src/lib/hooks/zoom/index.ts @@ -0,0 +1,103 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { Writable } from 'svelte/store'; +import { select } from 'd3-selection'; +import { zoom as d3Zoom, zoomIdentity } from 'd3-zoom'; +import type { D3ZoomEvent } from 'd3-zoom'; +import type { Transform } from '@reactflow/core'; + +const isWrappedWithClass = (event: any, className: string | undefined) => + event.target.closest(`.${className}`); + +export default function zoom( + domNode: Element, + { transformStore }: { transformStore: Writable } +) { + const d3ZoomInstance = d3Zoom(); + const selection = select(domNode).call(d3ZoomInstance); + const d3ZoomHandler = selection.on('wheel.zoom'); + d3ZoomInstance.transform(selection, zoomIdentity); + + selection.on('wheel.zoom', function (event: any, d: any) { + if (isWrappedWithClass(event, 'nowheel')) { + return null; + } + + event.preventDefault(); + d3ZoomHandler!.call(this, event, d); + }); + + d3ZoomInstance.on('zoom', (event: D3ZoomEvent) => { + transformStore.set([event.transform.x, event.transform.y, event.transform.k]); + }); + + d3ZoomInstance.filter((event: any) => { + const zoomScroll = true; + const pinchZoom = true; + + if ( + event.button === 1 && + event.type === 'mousedown' && + (isWrappedWithClass(event, 'react-flow__node') || + isWrappedWithClass(event, 'react-flow__edge')) + ) { + return true; + } + + // if all interactions are disabled, we prevent all zoom events + // if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) { + // return false; + // } + + // // during a selection we prevent all other interactions + // if (userSelectionActive) { + // return false; + // } + + // // if zoom on double click is disabled, we prevent the double click event + // if (!zoomOnDoubleClick && event.type === 'dblclick') { + // return false; + // } + + // // if the target element is inside an element with the nowheel class, we prevent zooming + // if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { + // return false; + // } + + // // if the target element is inside an element with the nopan class, we prevent panning + // if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { + // return false; + // } + + // if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { + // return false; + // } + + // // when there is no scroll handling enabled, we prevent all wheel events + // if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') { + // return false; + // } + + // // if the pane is not movable, we prevent dragging it with mousestart or touchstart + // if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) { + // return false; + // } + + // // if the pane is only movable using allowed clicks + // if ( + // Array.isArray(panOnDrag) && + // !panOnDrag.includes(event.button) && + // (event.type === 'mousedown' || event.type === 'touchstart') + // ) { + // return false; + // } + + // // We only allow right clicks if pan on drag is set to right click + // const buttonAllowed = + // (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || + // !event.button || + // event.button <= 1; + + // default filter for d3-zoom + return ((!event.ctrlKey || event.type === 'wheel') && !event.button) || event.button <= 1; + }); +} diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts new file mode 100644 index 000000000..029a19103 --- /dev/null +++ b/packages/svelte/src/lib/index.ts @@ -0,0 +1,4 @@ +// Reexport your entry components here +import SvelteFlow from '$lib/container/SvelteFlow.svelte'; + +export default SvelteFlow; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts new file mode 100644 index 000000000..a7e7807fb --- /dev/null +++ b/packages/svelte/src/lib/store/index.ts @@ -0,0 +1,116 @@ +import { getContext } from 'svelte'; +import { get, writable, type Writable } from 'svelte/store'; +import type { Node, Transform, NodeDragItem, NodeDimensionUpdate, Edge } from '@reactflow/core'; +import { internalsSymbol } from '@reactflow/core'; + +import { getDimensions, getHandleBounds, updateAbsoluteNodePositions } from '../../utils'; + +export const key = Symbol(); + +type CreateStoreProps = { + nodes: Node[]; + edges: Edge[]; + transform?: Transform; +}; + +type SvelteFlowStore = { + nodesStore: Writable; + edgesStore: Writable; + heightStore: Writable; + widthStore: Writable; + transformStore: Writable; + updateNodePositions: ( + nodeDragItems: NodeDragItem[], + positionChanged?: boolean, + dragging?: boolean + ) => void; + updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; +}; + +export function createStore({ + nodes = [], + edges = [], + transform = [0, 0, 1] +}: CreateStoreProps): SvelteFlowStore { + const nodesStore = writable(nodes.map((n) => ({ ...n, positionAbsolute: n.position }))); + const edgesStore = writable(edges); + const heightStore = writable(500); + const widthStore = writable(500); + + const transformStore = writable(transform); + + function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) { + nodesStore.update((nds) => { + return nds.map((n) => { + const nodeDragItem = nodeDragItems.find((ndi) => ndi.id === n.id); + + if (nodeDragItem) { + return { + ...n, + dragging, + positionAbsolute: nodeDragItem.positionAbsolute, + position: nodeDragItem.position + }; + } + + return n; + }); + }); + } + + function updateNodeDimensions(updates: NodeDimensionUpdate[]) { + const viewportNode = document?.querySelector('.react-flow__viewport'); + + if (!viewportNode) { + return; + } + + const style = window.getComputedStyle(viewportNode); + const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform); + const nds = get(nodesStore); + + updates.forEach((update) => { + const node = nds.find((n) => n.id === update.id); + + if (node) { + const dimensions = getDimensions(update.nodeElement); + const doUpdate = !!( + dimensions.width && + dimensions.height && + (node.width !== dimensions.width || + node.height !== dimensions.height || + update.forceUpdate) + ); + + if (doUpdate) { + node[internalsSymbol] = { + ...node[internalsSymbol], + handleBounds: { + source: getHandleBounds('.source', update.nodeElement, zoom), + target: getHandleBounds('.target', update.nodeElement, zoom) + } + }; + node.width = dimensions.width; + node.height = dimensions.height; + } + } + }); + + updateAbsoluteNodePositions(nds); + } + + return { + nodesStore, + edgesStore, + transformStore, + heightStore, + widthStore, + updateNodePositions, + updateNodeDimensions + }; +} + +export function useStore(): SvelteFlowStore { + const { getStore } = getContext<{ getStore: () => SvelteFlowStore }>(key); + return getStore(); +} diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte new file mode 100644 index 000000000..9591b5998 --- /dev/null +++ b/packages/svelte/src/routes/+page.svelte @@ -0,0 +1,59 @@ + + + + + diff --git a/packages/svelte/src/utils/index.ts b/packages/svelte/src/utils/index.ts new file mode 100644 index 000000000..c63d83af2 --- /dev/null +++ b/packages/svelte/src/utils/index.ts @@ -0,0 +1,101 @@ +import { + type CoordinateExtent, + type Dimensions, + type XYPosition, + type Node, + type XYZPosition, + type HandleElement, + internalsSymbol, + Position +} from '@reactflow/core'; + +export const clamp = (val: number, min = 0, max = 1): number => Math.min(Math.max(val, min), max); + +export const clampPosition = (position: XYPosition = { x: 0, y: 0 }, extent: CoordinateExtent) => ({ + x: clamp(position.x, extent[0][0], extent[1][0]), + y: clamp(position.y, extent[0][1], extent[1][1]) +}); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const isNumeric = (n: any): n is number => !isNaN(n) && isFinite(n); + +export const getDimensions = (node: HTMLDivElement): Dimensions => ({ + width: node.offsetWidth, + height: node.offsetHeight +}); + +type ParentNodes = Record; + +function calculateXYZPosition(node: Node, nodes: Node[], result: XYZPosition): XYZPosition { + if (!node.parentNode) { + return result; + } + const parentNode = nodes.find((n) => n.id === node.parentNode)!; + const parentNodePosition = parentNode.positionAbsolute!; + + return calculateXYZPosition(parentNode, nodes, { + x: (result.x ?? 0) + parentNodePosition.x, + y: (result.y ?? 0) + parentNodePosition.y, + z: + (parentNode[internalsSymbol]?.z ?? 0) > (result.z ?? 0) + ? parentNode[internalsSymbol]?.z ?? 0 + : result.z ?? 0 + }); +} + +export function updateAbsoluteNodePositions(nodes: Node[], parentNodes?: ParentNodes) { + nodes.forEach((node) => { + if (node.parentNode) { + throw new Error(`Parent node ${node.parentNode} not found`); + } + + if (node.parentNode || parentNodes?.[node.id]) { + const { x, y, z } = calculateXYZPosition(node, nodes, { + ...node.position, + z: node[internalsSymbol]?.z ?? 0 + }); + + node.positionAbsolute = { + x, + y + }; + + node[internalsSymbol]!.z = z; + + if (parentNodes?.[node.id]) { + node[internalsSymbol]!.isParent = true; + } + } + }); +} + +export const getHandleBounds = ( + selector: string, + nodeElement: HTMLDivElement, + zoom: number +): HandleElement[] | null => { + const handles = nodeElement.querySelectorAll(selector); + + if (!handles || !handles.length) { + return null; + } + + const handlesArray = Array.from(handles) as HTMLDivElement[]; + const nodeBounds = nodeElement.getBoundingClientRect(); + const nodeOffset = { + x: nodeBounds.width, + y: nodeBounds.height + }; + + return handlesArray.map((handle): HandleElement => { + const handleBounds = handle.getBoundingClientRect(); + + return { + id: handle.getAttribute('data-handleid'), + position: handle.getAttribute('data-handlepos') as unknown as Position, + x: (handleBounds.left - nodeBounds.left - nodeOffset.x) / zoom, + y: (handleBounds.top - nodeBounds.top - nodeOffset.y) / zoom, + ...getDimensions(handle) + }; + }); +}; diff --git a/packages/svelte/static/favicon.png b/packages/svelte/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH=16.0.0} + dependencies: + ajv: registry.npmjs.org/ajv/6.12.6 + debug: registry.npmjs.org/debug/4.3.4 + espree: registry.npmjs.org/espree/9.4.0 + globals: registry.npmjs.org/globals/13.20.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/@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} name: '@hapi/hoek' @@ -1391,6 +1459,19 @@ packages: - supports-color dev: true + registry.npmjs.org/@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz} + name: '@humanwhocodes/config-array' + version: 0.11.8 + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': registry.npmjs.org/@humanwhocodes/object-schema/1.2.1 + debug: registry.npmjs.org/debug/4.3.4 + minimatch: registry.npmjs.org/minimatch/3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/1.0.2: resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz} name: '@humanwhocodes/gitignore-to-minimatch' @@ -1520,6 +1601,12 @@ packages: fastq: registry.npmjs.org/fastq/1.15.0 dev: true + registry.npmjs.org/@polka/url/1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz} + name: '@polka/url' + version: 1.0.0-next.21 + dev: true + registry.npmjs.org/@preconstruct/cli/2.2.1: resolution: {integrity: sha512-G+sUV9o8l6Ds/82qJZYTXkCsVqPXLuD+bv+nVQeo3OL+eqzO/uAiBBFVp0DMcBJiyQYeU9nb+V8q22/PPaepDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@preconstruct/cli/-/cli-2.2.1.tgz} name: '@preconstruct/cli' @@ -1580,6 +1667,30 @@ packages: - supports-color dev: true + registry.npmjs.org/@reactflow/core/11.5.1_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-63pXpKNW5YHk8hOWpt7RaftSn7g92BvCCGpsUUaRDDuHvxmcqmMKPrAFkBPVc5JJ+Wubx4drThYJizgVP/j9/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@reactflow/core/-/core-11.5.1.tgz} + id: registry.npmjs.org/@reactflow/core/11.5.1 + name: '@reactflow/core' + version: 11.5.1 + peerDependencies: + react: '>=17' + react-dom: '>=17' + dependencies: + '@types/d3': registry.npmjs.org/@types/d3/7.4.0 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 + classcat: registry.npmjs.org/classcat/5.0.4 + d3-drag: registry.npmjs.org/d3-drag/3.0.0 + d3-selection: registry.npmjs.org/d3-selection/3.0.0 + d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 + react: registry.npmjs.org/react/18.2.0 + react-dom: registry.npmjs.org/react-dom/18.2.0_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.1_react@18.2.0 + transitivePeerDependencies: + - immer + dev: false + registry.npmjs.org/@rollup/plugin-alias/3.1.9_rollup@2.79.1: resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz} id: registry.npmjs.org/@rollup/plugin-alias/3.1.9 @@ -1807,6 +1918,96 @@ packages: version: 2.0.0 dev: true + registry.npmjs.org/@sveltejs/adapter-auto/1.0.2_@sveltejs+kit@1.3.6: + resolution: {integrity: sha512-UXpEO/gutERZnD+Z5Vi4J/ifD3WSRuCI7xwtLJTcKNQvJ6t5Xsj1X3Mw2F8Vv/XTUuxf7xPLYUgThU331r0Y9w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.2.tgz} + id: registry.npmjs.org/@sveltejs/adapter-auto/1.0.2 + name: '@sveltejs/adapter-auto' + version: 1.0.2 + peerDependencies: + '@sveltejs/kit': ^1.0.0 + dependencies: + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.3.6_svelte@3.55.1+vite@4.0.4 + import-meta-resolve: registry.npmjs.org/import-meta-resolve/2.2.1 + dev: true + + registry.npmjs.org/@sveltejs/kit/1.3.6_svelte@3.55.1+vite@4.0.4: + resolution: {integrity: sha512-SOGTKYiZ0ajIhQ9pUKr9F+h5Srm8Gdn3aza3dZxXWdHjpqv1iyhvt4oS0l5n1a+sXQzKlLpe/CikDBqSVSUS2Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.3.6.tgz} + id: registry.npmjs.org/@sveltejs/kit/1.3.6 + name: '@sveltejs/kit' + version: 1.3.6 + engines: {node: ^16.14 || >=18} + hasBin: true + requiresBuild: true + peerDependencies: + svelte: ^3.54.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.0.4 + '@types/cookie': registry.npmjs.org/@types/cookie/0.5.1 + cookie: registry.npmjs.org/cookie/0.5.0 + devalue: registry.npmjs.org/devalue/4.2.3 + 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.27.0 + mime: registry.npmjs.org/mime/3.0.0 + sade: registry.npmjs.org/sade/1.8.1 + set-cookie-parser: registry.npmjs.org/set-cookie-parser/2.5.1 + sirv: registry.npmjs.org/sirv/2.0.2 + svelte: registry.npmjs.org/svelte/3.55.1 + tiny-glob: registry.npmjs.org/tiny-glob/0.2.9 + undici: registry.npmjs.org/undici/5.16.0 + vite: registry.npmjs.org/vite/4.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@sveltejs/package/1.0.2_atrrhq7vg4ekua4nnyrpuardle: + resolution: {integrity: sha512-VY9U+05d9uNFDj7ScKRlHORYlfPSHwJewBjV+V2RsnViexpLFPUrboC9SiPYDCpLnbeqwXerxhO6twGHUBGeIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/package/-/package-1.0.2.tgz} + id: registry.npmjs.org/@sveltejs/package/1.0.2 + name: '@sveltejs/package' + version: 1.0.2 + engines: {node: ^16.14 || >=18} + hasBin: true + peerDependencies: + svelte: ^3.44.0 + dependencies: + chokidar: registry.npmjs.org/chokidar/3.5.3 + kleur: registry.npmjs.org/kleur/4.1.5 + sade: registry.npmjs.org/sade/1.8.1 + svelte: registry.npmjs.org/svelte/3.55.1 + svelte2tsx: registry.npmjs.org/svelte2tsx/0.6.0_atrrhq7vg4ekua4nnyrpuardle + transitivePeerDependencies: + - typescript + dev: true + + registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.0.4: + resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.2.tgz} + id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2 + name: '@sveltejs/vite-plugin-svelte' + version: 2.0.2 + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + svelte: ^3.54.0 + vite: ^4.0.0 + dependencies: + debug: registry.npmjs.org/debug/4.3.4 + deepmerge: registry.npmjs.org/deepmerge/4.2.2 + kleur: registry.npmjs.org/kleur/4.1.5 + magic-string: registry.npmjs.org/magic-string/0.27.0 + svelte: registry.npmjs.org/svelte/3.55.1 + svelte-hmr: registry.npmjs.org/svelte-hmr/0.15.1_svelte@3.55.1 + vite: registry.npmjs.org/vite/4.0.4 + vitefu: registry.npmjs.org/vitefu/0.2.4_vite@4.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@types/cookie/0.5.1: + resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz} + name: '@types/cookie' + version: 0.5.1 + dev: true + registry.npmjs.org/@types/d3-array/3.0.3: resolution: {integrity: sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.3.tgz} name: '@types/d3-array' @@ -2114,6 +2315,12 @@ packages: version: 15.7.5 dev: true + registry.npmjs.org/@types/pug/2.0.6: + resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz} + name: '@types/pug' + version: 2.0.6 + dev: true + registry.npmjs.org/@types/react-dom/18.0.6: resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz} name: '@types/react-dom' @@ -2146,6 +2353,14 @@ packages: version: 1.20.2 dev: true + registry.npmjs.org/@types/sass/1.43.1: + resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz} + name: '@types/sass' + version: 1.43.1 + dependencies: + '@types/node': registry.npmjs.org/@types/node/18.7.16 + dev: true + registry.npmjs.org/@types/scheduler/0.16.2: resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz} name: '@types/scheduler' @@ -2216,6 +2431,36 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/eslint-plugin/5.49.0_rsaczafy73x3xqauzesvzbsgzy: + resolution: {integrity: sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.49.0 + name: '@typescript-eslint/eslint-plugin' + version: 5.49.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.49.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u + debug: registry.npmjs.org/debug/4.3.4 + eslint: registry.npmjs.org/eslint/8.33.0 + ignore: registry.npmjs.org/ignore/5.2.4 + natural-compare-lite: registry.npmjs.org/natural-compare-lite/1.4.0 + regexpp: registry.npmjs.org/regexpp/3.2.0 + semver: registry.npmjs.org/semver/7.3.8 + tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 + typescript: registry.npmjs.org/typescript/4.9.4 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/parser/5.49.0_id2eilsndvzhjjktb64trvy3gu: resolution: {integrity: sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz} id: registry.npmjs.org/@typescript-eslint/parser/5.49.0 @@ -2239,6 +2484,29 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/parser/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u: + resolution: {integrity: sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/5.49.0 + name: '@typescript-eslint/parser' + version: 5.49.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.49.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.49.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.49.0_typescript@4.9.4 + debug: registry.npmjs.org/debug/4.3.4 + eslint: registry.npmjs.org/eslint/8.33.0 + typescript: registry.npmjs.org/typescript/4.9.4 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/scope-manager/5.49.0: resolution: {integrity: sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz} name: '@typescript-eslint/scope-manager' @@ -2272,6 +2540,29 @@ packages: - supports-color dev: true + registry.npmjs.org/@typescript-eslint/type-utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u: + resolution: {integrity: sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/5.49.0 + name: '@typescript-eslint/type-utils' + version: 5.49.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.49.0_typescript@4.9.4 + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u + debug: registry.npmjs.org/debug/4.3.4 + eslint: registry.npmjs.org/eslint/8.33.0 + tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 + typescript: registry.npmjs.org/typescript/4.9.4 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@typescript-eslint/types/5.49.0: resolution: {integrity: sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz} name: '@typescript-eslint/types' @@ -2326,6 +2617,29 @@ packages: - typescript dev: true + registry.npmjs.org/@typescript-eslint/utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u: + resolution: {integrity: sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/5.49.0 + name: '@typescript-eslint/utils' + version: 5.49.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11 + '@types/semver': registry.npmjs.org/@types/semver/7.3.13 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.49.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.49.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.49.0_typescript@4.9.4 + eslint: registry.npmjs.org/eslint/8.33.0 + eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 + eslint-utils: registry.npmjs.org/eslint-utils/3.0.0_eslint@8.33.0 + semver: registry.npmjs.org/semver/7.3.8 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + registry.npmjs.org/@typescript-eslint/visitor-keys/5.49.0: resolution: {integrity: sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz} name: '@typescript-eslint/visitor-keys' @@ -2631,7 +2945,6 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} name: balanced-match version: 1.0.2 - dev: true registry.npmjs.org/base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz} @@ -2682,7 +2995,6 @@ packages: dependencies: balanced-match: registry.npmjs.org/balanced-match/1.0.2 concat-map: registry.npmjs.org/concat-map/0.0.1 - dev: true registry.npmjs.org/brace-expansion/2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz} @@ -2763,6 +3075,15 @@ packages: engines: {node: '>=6'} dev: true + registry.npmjs.org/busboy/1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz} + name: busboy + version: 1.6.0 + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: registry.npmjs.org/streamsearch/1.1.0 + dev: true + registry.npmjs.org/cachedir/2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz} name: cachedir @@ -2822,6 +3143,17 @@ packages: version: 0.12.0 dev: true + registry.npmjs.org/cc/3.0.1: + resolution: {integrity: sha512-WowS4JZyJZOmPuNjJJOgvc1S1VCIg9MjXkSgsskl6YZ2rFilRql1bMaFu6JdWJMoG+upPtdqQ7BCdEkt42SpMg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cc/-/cc-3.0.1.tgz} + name: cc + version: 3.0.1 + hasBin: true + dependencies: + deglob: registry.npmjs.org/deglob/4.0.1 + pkg-conf: registry.npmjs.org/pkg-conf/3.1.0 + python-shell: registry.npmjs.org/python-shell/2.0.3 + dev: false + registry.npmjs.org/chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz} name: chalk @@ -3040,7 +3372,6 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz} name: concat-map version: 0.0.1 - dev: true registry.npmjs.org/concurrently/7.6.0: resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz} @@ -3074,6 +3405,13 @@ packages: version: 1.9.0 dev: true + registry.npmjs.org/cookie/0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz} + name: cookie + version: 0.5.0 + engines: {node: '>= 0.6'} + dev: true + registry.npmjs.org/core-util-is/1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz} name: core-util-is @@ -3335,6 +3673,13 @@ packages: version: 1.11.5 dev: true + registry.npmjs.org/debug-log/1.0.1: + resolution: {integrity: sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz} + name: debug-log + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: false + registry.npmjs.org/debug/3.2.7_supports-color@8.1.1: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-3.2.7.tgz} id: registry.npmjs.org/debug/3.2.7 @@ -3411,6 +3756,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + registry.npmjs.org/dedent-js/1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz} + name: dedent-js + version: 1.0.1 + dev: true + registry.npmjs.org/deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} name: deep-is @@ -3442,6 +3793,19 @@ packages: object-keys: registry.npmjs.org/object-keys/1.1.1 dev: true + registry.npmjs.org/deglob/4.0.1: + resolution: {integrity: sha512-/g+RDZ7yf2HvoW+E5Cy+K94YhgcFgr6C8LuHZD1O5HoNPkf3KY6RfXJ0DBGlB/NkLi5gml+G9zqRzk9S0mHZCg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/deglob/-/deglob-4.0.1.tgz} + name: deglob + version: 4.0.1 + dependencies: + find-root: registry.npmjs.org/find-root/1.1.0 + glob: registry.npmjs.org/glob/7.2.3 + ignore: registry.npmjs.org/ignore/5.2.4 + pkg-config: registry.npmjs.org/pkg-config/1.1.1 + run-parallel: registry.npmjs.org/run-parallel/1.2.0 + uniq: registry.npmjs.org/uniq/1.0.1 + dev: false + registry.npmjs.org/delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz} name: delayed-stream @@ -3463,6 +3827,12 @@ packages: engines: {node: '>=8'} dev: true + registry.npmjs.org/devalue/4.2.3: + resolution: {integrity: sha512-JG6Q248aN0pgFL57e3zqTVeFraBe+5W2ugvv1mLXsJP6YYIYJhRZhAl7QP8haJrqob6X10F9NEkuCvNILZTPeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/devalue/-/devalue-4.2.3.tgz} + name: devalue + version: 4.2.3 + dev: true + registry.npmjs.org/dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz} name: dir-glob @@ -3553,7 +3923,6 @@ packages: version: 1.3.2 dependencies: is-arrayish: registry.npmjs.org/is-arrayish/0.2.1 - dev: true registry.npmjs.org/es-abstract/1.21.1: resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz} @@ -3626,6 +3995,12 @@ packages: is-symbol: registry.npmjs.org/is-symbol/1.0.4 dev: true + registry.npmjs.org/es6-promise/3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz} + name: es6-promise + version: 3.3.1 + dev: true + registry.npmjs.org/esbuild/0.16.16: resolution: {integrity: sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz} name: esbuild @@ -3691,6 +4066,18 @@ packages: eslint: registry.npmjs.org/eslint/8.23.1 dev: true + registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.33.0: + resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz} + id: registry.npmjs.org/eslint-config-prettier/8.5.0 + name: eslint-config-prettier + version: 8.5.0 + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: registry.npmjs.org/eslint/8.33.0 + dev: true + registry.npmjs.org/eslint-config-turbo/0.0.7_eslint@8.23.1: resolution: {integrity: sha512-WbrGlyfs94rOXrhombi1wjIAYGdV2iosgJRndOZtmDQeq5GLTzYmBUCJQZWtLBEBUPCj96RxZ2OL7Cn+xv/Azg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-0.0.7.tgz} id: registry.npmjs.org/eslint-config-turbo/0.0.7 @@ -3750,6 +4137,19 @@ packages: string.prototype.matchall: registry.npmjs.org/string.prototype.matchall/4.0.8 dev: true + registry.npmjs.org/eslint-plugin-svelte3/4.0.0_4omm2ewoudhgnmf7aocafatnc4: + resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz} + id: registry.npmjs.org/eslint-plugin-svelte3/4.0.0 + name: eslint-plugin-svelte3 + version: 4.0.0 + peerDependencies: + eslint: '>=8.0.0' + svelte: ^3.2.0 + dependencies: + eslint: registry.npmjs.org/eslint/8.33.0 + svelte: registry.npmjs.org/svelte/3.55.1 + dev: true + registry.npmjs.org/eslint-plugin-turbo/0.0.7_eslint@8.23.1: resolution: {integrity: sha512-iajOH8eD4jha3duztGVBD1BEmvNrQBaA/y3HFHf91vMDRYRwH7BpHSDFtxydDpk5ghlhRxG299SFxz7D6z4MBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-0.0.7.tgz} id: registry.npmjs.org/eslint-plugin-turbo/0.0.7 @@ -3794,6 +4194,19 @@ packages: eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/2.1.0 dev: true + registry.npmjs.org/eslint-utils/3.0.0_eslint@8.33.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz} + id: registry.npmjs.org/eslint-utils/3.0.0 + name: eslint-utils + version: 3.0.0 + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: registry.npmjs.org/eslint/8.33.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/2.1.0 + dev: true + registry.npmjs.org/eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz} name: eslint-visitor-keys @@ -3826,7 +4239,57 @@ packages: 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.1.1 - eslint-utils: registry.npmjs.org/eslint-utils/3.0.0_eslint@8.23.1 + eslint-utils: registry.npmjs.org/eslint-utils/3.0.0_eslint@8.23.1 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 + espree: registry.npmjs.org/espree/9.4.0 + esquery: registry.npmjs.org/esquery/1.4.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.17.0 + globby: registry.npmjs.org/globby/11.1.0 + grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 + ignore: registry.npmjs.org/ignore/5.2.0 + import-fresh: registry.npmjs.org/import-fresh/3.3.0 + imurmurhash: registry.npmjs.org/imurmurhash/0.1.4 + is-glob: registry.npmjs.org/is-glob/4.0.3 + js-sdsl: registry.npmjs.org/js-sdsl/4.1.4 + 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.1 + regexpp: registry.npmjs.org/regexpp/3.2.0 + strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 + strip-json-comments: registry.npmjs.org/strip-json-comments/3.1.1 + text-table: registry.npmjs.org/text-table/0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/eslint/8.33.0: + resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz} + name: eslint + version: 8.33.0 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc/1.4.1 + '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array/0.11.8 + '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer/1.0.1 + '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk/1.2.8 + 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 + 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.1.1 + eslint-utils: registry.npmjs.org/eslint-utils/3.0.0_eslint@8.33.0 eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 espree: registry.npmjs.org/espree/9.4.0 esquery: registry.npmjs.org/esquery/1.4.0 @@ -3835,13 +4298,13 @@ packages: 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.17.0 - globby: registry.npmjs.org/globby/11.1.0 + globals: registry.npmjs.org/globals/13.20.0 grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 - ignore: registry.npmjs.org/ignore/5.2.0 + ignore: registry.npmjs.org/ignore/5.2.4 import-fresh: registry.npmjs.org/import-fresh/3.3.0 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-sdsl: registry.npmjs.org/js-sdsl/4.1.4 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 @@ -3858,6 +4321,12 @@ packages: - 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 + version: 1.0.0 + dev: true + registry.npmjs.org/espree/9.4.0: resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/espree/-/espree-9.4.0.tgz} name: espree @@ -4124,6 +4593,21 @@ packages: to-regex-range: registry.npmjs.org/to-regex-range/5.0.1 dev: true + registry.npmjs.org/find-root/1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz} + name: find-root + version: 1.1.0 + dev: false + + registry.npmjs.org/find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz} + name: find-up + version: 3.0.0 + engines: {node: '>=6'} + dependencies: + locate-path: registry.npmjs.org/locate-path/3.0.0 + dev: false + registry.npmjs.org/find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz} name: find-up @@ -4270,7 +4754,6 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz} name: fs.realpath 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} @@ -4426,7 +4909,6 @@ packages: 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/8.0.3: resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob/-/glob-8.0.3.tgz} @@ -4466,6 +4948,15 @@ packages: type-fest: registry.npmjs.org/type-fest/0.20.2 dev: true + registry.npmjs.org/globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globals/-/globals-13.20.0.tgz} + name: globals + version: 13.20.0 + engines: {node: '>=8'} + dependencies: + type-fest: registry.npmjs.org/type-fest/0.20.2 + dev: true + registry.npmjs.org/globalthis/1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz} name: globalthis @@ -4475,6 +4966,12 @@ packages: define-properties: registry.npmjs.org/define-properties/1.1.4 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 @@ -4502,6 +4999,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 @@ -4514,7 +5017,6 @@ packages: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs version: 4.2.10 - dev: true registry.npmjs.org/grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz} @@ -4677,7 +5179,6 @@ packages: name: ignore version: 5.2.4 engines: {node: '>= 4'} - dev: true registry.npmjs.org/immediate/3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz} @@ -4695,6 +5196,12 @@ packages: resolve-from: registry.npmjs.org/resolve-from/4.0.0 dev: true + registry.npmjs.org/import-meta-resolve/2.2.1: + resolution: {integrity: sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.1.tgz} + name: import-meta-resolve + version: 2.2.1 + 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} name: imurmurhash @@ -4716,13 +5223,11 @@ packages: dependencies: once: registry.npmjs.org/once/1.4.0 wrappy: registry.npmjs.org/wrappy/1.0.2 - dev: true registry.npmjs.org/inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz} name: inherits version: 2.0.4 - dev: true registry.npmjs.org/ini/2.0.0: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ini/-/ini-2.0.0.tgz} @@ -4756,7 +5261,6 @@ packages: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz} name: is-arrayish version: 0.2.1 - dev: true registry.npmjs.org/is-bigint/1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz} @@ -5115,6 +5619,12 @@ packages: hasBin: true dev: true + registry.npmjs.org/json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz} + name: json-parse-better-errors + version: 1.0.2 + dev: false + registry.npmjs.org/json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz} name: json-parse-even-better-errors @@ -5276,6 +5786,19 @@ packages: wrap-ansi: registry.npmjs.org/wrap-ansi/7.0.0 dev: true + registry.npmjs.org/load-json-file/5.3.0: + resolution: {integrity: sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz} + name: load-json-file + version: 5.3.0 + engines: {node: '>=6'} + dependencies: + graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + parse-json: registry.npmjs.org/parse-json/4.0.0 + pify: registry.npmjs.org/pify/4.0.1 + strip-bom: registry.npmjs.org/strip-bom/3.0.0 + type-fest: registry.npmjs.org/type-fest/0.3.1 + dev: false + registry.npmjs.org/load-yaml-file/0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz} name: load-yaml-file @@ -5296,6 +5819,16 @@ packages: lie: registry.npmjs.org/lie/3.1.1 dev: false + registry.npmjs.org/locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz} + name: locate-path + version: 3.0.0 + engines: {node: '>=6'} + dependencies: + p-locate: registry.npmjs.org/p-locate/3.0.0 + path-exists: registry.npmjs.org/path-exists/3.0.0 + dev: false + registry.npmjs.org/locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz} name: locate-path @@ -5367,6 +5900,14 @@ packages: dependencies: js-tokens: registry.npmjs.org/js-tokens/4.0.0 + registry.npmjs.org/lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz} + name: lower-case + version: 2.0.2 + dependencies: + tslib: registry.npmjs.org/tslib/2.4.1 + dev: true + registry.npmjs.org/lru-cache/4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz} name: lru-cache @@ -5507,6 +6048,14 @@ packages: mime-db: registry.npmjs.org/mime-db/1.52.0 dev: true + registry.npmjs.org/mime/3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mime/-/mime-3.0.0.tgz} + name: mime + version: 3.0.0 + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + registry.npmjs.org/mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz} name: mimic-fn @@ -5527,7 +6076,6 @@ packages: version: 3.1.2 dependencies: brace-expansion: registry.npmjs.org/brace-expansion/1.1.11 - dev: true registry.npmjs.org/minimatch/5.1.2: resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz} @@ -5562,6 +6110,29 @@ packages: engines: {node: '>= 8.0.0'} dev: true + registry.npmjs.org/mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz} + name: mkdirp + version: 0.5.6 + hasBin: true + dependencies: + minimist: registry.npmjs.org/minimist/1.2.6 + dev: true + + registry.npmjs.org/mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mri/-/mri-1.2.0.tgz} + name: mri + version: 1.2.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/mrmime/1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz} + name: mrmime + version: 1.0.1 + engines: {node: '>=10'} + dev: true + registry.npmjs.org/ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.1.2.tgz} name: ms @@ -5594,6 +6165,15 @@ packages: version: 1.4.0 dev: true + registry.npmjs.org/no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz} + name: no-case + version: 3.0.4 + dependencies: + lower-case: registry.npmjs.org/lower-case/2.0.2 + tslib: registry.npmjs.org/tslib/2.4.1 + dev: true + registry.npmjs.org/node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz} name: node-fetch @@ -5761,7 +6341,6 @@ packages: version: 1.4.0 dependencies: wrappy: registry.npmjs.org/wrappy/1.0.2 - dev: true registry.npmjs.org/onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz} @@ -5821,7 +6400,6 @@ packages: engines: {node: '>=6'} dependencies: p-try: registry.npmjs.org/p-try/2.2.0 - dev: true registry.npmjs.org/p-limit/3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz} @@ -5832,6 +6410,15 @@ packages: yocto-queue: registry.npmjs.org/yocto-queue/0.1.0 dev: true + registry.npmjs.org/p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz} + name: p-locate + version: 3.0.0 + engines: {node: '>=6'} + dependencies: + p-limit: registry.npmjs.org/p-limit/2.3.0 + dev: false + registry.npmjs.org/p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz} name: p-locate @@ -5871,7 +6458,6 @@ packages: name: p-try version: 2.2.0 engines: {node: '>=6'} - dev: true registry.npmjs.org/parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz} @@ -5894,6 +6480,16 @@ packages: is-glob: registry.npmjs.org/is-glob/2.0.1 dev: true + registry.npmjs.org/parse-json/4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz} + name: parse-json + version: 4.0.0 + engines: {node: '>=4'} + dependencies: + error-ex: registry.npmjs.org/error-ex/1.3.2 + json-parse-better-errors: registry.npmjs.org/json-parse-better-errors/1.0.2 + dev: false + registry.npmjs.org/parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz} name: parse-json @@ -5906,6 +6502,22 @@ packages: lines-and-columns: registry.npmjs.org/lines-and-columns/1.2.4 dev: true + registry.npmjs.org/pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz} + name: pascal-case + version: 3.1.2 + dependencies: + no-case: registry.npmjs.org/no-case/3.0.4 + tslib: registry.npmjs.org/tslib/2.4.1 + dev: true + + registry.npmjs.org/path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz} + name: path-exists + version: 3.0.0 + engines: {node: '>=4'} + dev: false + registry.npmjs.org/path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} name: path-exists @@ -5918,7 +6530,6 @@ packages: name: path-is-absolute version: 1.0.1 engines: {node: '>=0.10.0'} - dev: true registry.npmjs.org/path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz} @@ -5985,7 +6596,6 @@ packages: name: pify version: 4.0.1 engines: {node: '>=6'} - dev: true registry.npmjs.org/pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz} @@ -5994,6 +6604,27 @@ packages: engines: {node: '>= 6'} dev: true + registry.npmjs.org/pkg-conf/3.1.0: + resolution: {integrity: sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz} + name: pkg-conf + version: 3.1.0 + engines: {node: '>=6'} + dependencies: + find-up: registry.npmjs.org/find-up/3.0.0 + load-json-file: registry.npmjs.org/load-json-file/5.3.0 + dev: false + + registry.npmjs.org/pkg-config/1.1.1: + resolution: {integrity: sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz} + name: pkg-config + version: 1.1.1 + engines: {node: '>=0.10'} + dependencies: + debug-log: registry.npmjs.org/debug-log/1.0.1 + find-root: registry.npmjs.org/find-root/1.1.0 + xtend: registry.npmjs.org/xtend/4.0.2 + dev: false + registry.npmjs.org/pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz} name: pkg-dir @@ -6170,6 +6801,19 @@ packages: fast-diff: registry.npmjs.org/fast-diff/1.2.0 dev: true + registry.npmjs.org/prettier-plugin-svelte/2.9.0_kdmmghgdi3ngrsq6otxkjilbry: + resolution: {integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.9.0.tgz} + id: registry.npmjs.org/prettier-plugin-svelte/2.9.0 + name: prettier-plugin-svelte + version: 2.9.0 + peerDependencies: + prettier: ^1.16.4 || ^2.0.0 + svelte: ^3.2.0 + dependencies: + prettier: registry.npmjs.org/prettier/2.8.3 + svelte: registry.npmjs.org/svelte/3.55.1 + dev: true + registry.npmjs.org/prettier/2.7.1: resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz} name: prettier @@ -6178,6 +6822,14 @@ packages: hasBin: true dev: true + registry.npmjs.org/prettier/2.8.3: + resolution: {integrity: sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz} + name: prettier + version: 2.8.3 + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + registry.npmjs.org/pretty-bytes/5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz} name: pretty-bytes @@ -6246,6 +6898,13 @@ packages: engines: {node: '>=6'} dev: true + registry.npmjs.org/python-shell/2.0.3: + resolution: {integrity: sha512-SBYQzXjexcxmmgzpjdIVxum9tj4Zaov1jNuSGMLssPxRhZ7lxqlpuEtLT0TEed0RAqhGfx2YFVC+imCJOmkVHg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/python-shell/-/python-shell-2.0.3.tgz} + name: python-shell + version: 2.0.3 + engines: {node: '>=0.10'} + dev: false + registry.npmjs.org/qs/6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/qs/-/qs-6.5.3.tgz} name: qs @@ -6257,7 +6916,6 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz} name: queue-microtask version: 1.2.3 - dev: true registry.npmjs.org/quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz} @@ -6506,6 +7164,15 @@ packages: version: 1.3.0 dev: true + registry.npmjs.org/rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz} + name: rimraf + version: 2.7.1 + hasBin: true + dependencies: + glob: registry.npmjs.org/glob/7.2.3 + dev: true + registry.npmjs.org/rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz} name: rimraf @@ -6552,7 +7219,6 @@ packages: version: 1.2.0 dependencies: queue-microtask: registry.npmjs.org/queue-microtask/1.2.3 - dev: true registry.npmjs.org/rxjs/7.5.6: resolution: {integrity: sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz} @@ -6570,6 +7236,15 @@ packages: tslib: registry.npmjs.org/tslib/2.4.1 dev: true + registry.npmjs.org/sade/1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sade/-/sade-1.8.1.tgz} + name: sade + version: 1.8.1 + engines: {node: '>=6'} + dependencies: + mri: registry.npmjs.org/mri/1.2.0 + dev: true + registry.npmjs.org/safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz} name: safe-buffer @@ -6598,6 +7273,17 @@ packages: version: 2.1.2 dev: true + registry.npmjs.org/sander/0.5.1: + resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sander/-/sander-0.5.1.tgz} + name: sander + version: 0.5.1 + dependencies: + es6-promise: registry.npmjs.org/es6-promise/3.3.1 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + mkdirp: registry.npmjs.org/mkdirp/0.5.6 + rimraf: registry.npmjs.org/rimraf/2.7.1 + dev: true + registry.npmjs.org/scheduler/0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz} name: scheduler @@ -6653,6 +7339,12 @@ packages: version: 2.0.0 dev: true + registry.npmjs.org/set-cookie-parser/2.5.1: + resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz} + name: set-cookie-parser + version: 2.5.1 + dev: true + registry.npmjs.org/shebang-command/1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz} name: shebang-command @@ -6707,6 +7399,17 @@ packages: version: 3.0.7 dev: true + registry.npmjs.org/sirv/2.0.2: + resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz} + name: sirv + version: 2.0.2 + engines: {node: '>= 10'} + dependencies: + '@polka/url': registry.npmjs.org/@polka/url/1.0.0-next.21 + mrmime: registry.npmjs.org/mrmime/1.0.1 + totalist: registry.npmjs.org/totalist/3.0.0 + dev: true + registry.npmjs.org/slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slash/-/slash-3.0.0.tgz} name: slash @@ -6771,6 +7474,18 @@ packages: version: 0.0.6 dev: true + registry.npmjs.org/sorcery/0.11.0: + resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz} + name: sorcery + version: 0.11.0 + hasBin: true + dependencies: + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 + buffer-crc32: registry.npmjs.org/buffer-crc32/0.2.13 + minimist: registry.npmjs.org/minimist/1.2.6 + sander: registry.npmjs.org/sander/0.5.1 + dev: true + registry.npmjs.org/source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz} name: source-map-js @@ -6912,6 +7627,13 @@ packages: mixme: registry.npmjs.org/mixme/0.5.4 dev: true + registry.npmjs.org/streamsearch/1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz} + name: streamsearch + version: 1.1.0 + engines: {node: '>=10.0.0'} + dev: true + registry.npmjs.org/string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz} name: string-width @@ -6972,7 +7694,6 @@ packages: name: strip-bom version: 3.0.0 engines: {node: '>=4'} - dev: true registry.npmjs.org/strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz} @@ -7031,6 +7752,121 @@ packages: engines: {node: '>= 0.4'} dev: true + registry.npmjs.org/svelte-check/3.0.3_svelte@3.55.1: + resolution: {integrity: sha512-ByBFXo3bfHRGIsYEasHkdMhLkNleVfszX/Ns1oip58tPJlKdo5Ssr8kgVIuo5oq00hss8AIcdesuy0Xt0BcTvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.3.tgz} + id: registry.npmjs.org/svelte-check/3.0.3 + name: svelte-check + version: 3.0.3 + hasBin: true + peerDependencies: + svelte: ^3.55.0 + dependencies: + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.17 + chokidar: registry.npmjs.org/chokidar/3.5.3 + fast-glob: registry.npmjs.org/fast-glob/3.2.12 + 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/3.55.1 + svelte-preprocess: registry.npmjs.org/svelte-preprocess/5.0.1_atrrhq7vg4ekua4nnyrpuardle + typescript: registry.npmjs.org/typescript/4.9.4 + transitivePeerDependencies: + - '@babel/core' + - coffeescript + - less + - postcss + - postcss-load-config + - pug + - sass + - stylus + - sugarss + dev: true + + registry.npmjs.org/svelte-hmr/0.15.1_svelte@3.55.1: + resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz} + id: registry.npmjs.org/svelte-hmr/0.15.1 + name: svelte-hmr + version: 0.15.1 + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: '>=3.19.0' + dependencies: + svelte: registry.npmjs.org/svelte/3.55.1 + dev: true + + registry.npmjs.org/svelte-preprocess/5.0.1_atrrhq7vg4ekua4nnyrpuardle: + resolution: {integrity: sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz} + id: registry.npmjs.org/svelte-preprocess/5.0.1 + name: svelte-preprocess + version: 5.0.1 + engines: {node: '>= 14.10.0'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 + svelte: ^3.23.0 + typescript: ^3.9.5 || ^4.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': registry.npmjs.org/@types/pug/2.0.6 + '@types/sass': registry.npmjs.org/@types/sass/1.43.1 + detect-indent: registry.npmjs.org/detect-indent/6.1.0 + magic-string: registry.npmjs.org/magic-string/0.27.0 + sorcery: registry.npmjs.org/sorcery/0.11.0 + strip-indent: registry.npmjs.org/strip-indent/3.0.0 + svelte: registry.npmjs.org/svelte/3.55.1 + typescript: registry.npmjs.org/typescript/4.9.4 + dev: true + + registry.npmjs.org/svelte/3.55.1: + resolution: {integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz} + name: svelte + version: 3.55.1 + engines: {node: '>= 8'} + dev: true + + registry.npmjs.org/svelte2tsx/0.6.0_atrrhq7vg4ekua4nnyrpuardle: + resolution: {integrity: sha512-TrxfQkO7CKi8Pu2eC/FyteDCdk3OOeQV5u6z7OjYAsOhsd0ClzAKqxJdvp6xxNQLrbFzf/XvCi9Fy8MQ1MleFA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.0.tgz} + id: registry.npmjs.org/svelte2tsx/0.6.0 + name: svelte2tsx + version: 0.6.0 + peerDependencies: + svelte: ^3.55 + typescript: ^4.9.4 + 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/3.55.1 + typescript: registry.npmjs.org/typescript/4.9.4 + dev: true + registry.npmjs.org/term-size/2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz} name: term-size @@ -7088,6 +7924,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 @@ -7122,6 +7967,13 @@ packages: is-number: registry.npmjs.org/is-number/7.0.0 dev: true + registry.npmjs.org/totalist/3.0.0: + resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz} + name: totalist + version: 3.0.0 + engines: {node: '>=6'} + dev: true + registry.npmjs.org/tough-cookie/2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz} name: tough-cookie @@ -7312,6 +8164,13 @@ packages: engines: {node: '>=10'} dev: true + registry.npmjs.org/type-fest/0.3.1: + resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz} + name: type-fest + version: 0.3.1 + engines: {node: '>=6'} + dev: false + registry.npmjs.org/type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz} name: type-fest @@ -7355,6 +8214,21 @@ packages: which-boxed-primitive: registry.npmjs.org/which-boxed-primitive/1.0.2 dev: true + registry.npmjs.org/undici/5.16.0: + resolution: {integrity: sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici/-/undici-5.16.0.tgz} + name: undici + version: 5.16.0 + engines: {node: '>=12.18'} + dependencies: + busboy: registry.npmjs.org/busboy/1.6.0 + dev: true + + registry.npmjs.org/uniq/1.0.1: + resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz} + name: uniq + version: 1.0.1 + dev: false + registry.npmjs.org/universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz} name: universalify @@ -7497,6 +8371,20 @@ packages: fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true + registry.npmjs.org/vitefu/0.2.4_vite@4.0.4: + resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz} + id: registry.npmjs.org/vitefu/0.2.4 + name: vitefu + version: 0.2.4 + peerDependencies: + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: registry.npmjs.org/vite/4.0.4 + dev: true + 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 @@ -7631,7 +8519,13 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz} name: wrappy version: 1.0.2 - dev: true + + registry.npmjs.org/xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz} + name: xtend + version: 4.0.2 + engines: {node: '>=0.4'} + dev: false registry.npmjs.org/y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz} From 71bd05b7e719cfd1a9e209936d30c46d25734b1c Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 1 Feb 2023 15:25:14 +0100 Subject: [PATCH 0002/1093] fix(edges): use derived store for edge handling --- .../src/lib/components/edges/BaseEdge.svelte | 5 +- .../src/lib/components/nodes/BaseNode.svelte | 2 +- .../lib/components/nodes/DefaultNode.svelte | 2 +- .../src/lib/container/EdgeRenderer.svelte | 171 ------------------ .../lib/container/EdgeRenderer/index.svelte | 28 +++ .../src/lib/container/EdgeRenderer/utils.ts | 105 +++++++++++ .../src/lib/container/SvelteFlow.svelte | 5 +- packages/svelte/src/lib/store/index.ts | 129 ++++++++++--- packages/svelte/src/routes/+page.svelte | 7 + packages/svelte/src/utils/index.ts | 8 +- 10 files changed, 245 insertions(+), 217 deletions(-) delete mode 100644 packages/svelte/src/lib/container/EdgeRenderer.svelte create mode 100644 packages/svelte/src/lib/container/EdgeRenderer/index.svelte create mode 100644 packages/svelte/src/lib/container/EdgeRenderer/utils.ts diff --git a/packages/svelte/src/lib/components/edges/BaseEdge.svelte b/packages/svelte/src/lib/components/edges/BaseEdge.svelte index 60e05403c..1b798e413 100644 --- a/packages/svelte/src/lib/components/edges/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/edges/BaseEdge.svelte @@ -5,9 +5,6 @@ export let sourceY: number = 0; export let targetX: number = 0; export let targetY: number = 0; - - const path = `M ${sourceX},${sourceY}L ${targetX},${targetY}`; - diff --git a/packages/svelte/src/lib/components/nodes/BaseNode.svelte b/packages/svelte/src/lib/components/nodes/BaseNode.svelte index 35b883120..8aed2c023 100644 --- a/packages/svelte/src/lib/components/nodes/BaseNode.svelte +++ b/packages/svelte/src/lib/components/nodes/BaseNode.svelte @@ -44,7 +44,7 @@ .react-flow__node { padding: 10px; border-radius: 3px; - width: var(--node-width); + width: 50px; font-size: 12px; color: #222; text-align: center; diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte index 7357f82ae..a724b2436 100644 --- a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -10,6 +10,6 @@ - {data?.label} +{data?.label} diff --git a/packages/svelte/src/lib/container/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer.svelte deleted file mode 100644 index edff13602..000000000 --- a/packages/svelte/src/lib/container/EdgeRenderer.svelte +++ /dev/null @@ -1,171 +0,0 @@ - - - - {#each edgesWithData as edge} - {#if edge} - - {/if} - {/each} - - - \ No newline at end of file diff --git a/packages/svelte/src/lib/container/EdgeRenderer/index.svelte b/packages/svelte/src/lib/container/EdgeRenderer/index.svelte new file mode 100644 index 000000000..124b82230 --- /dev/null +++ b/packages/svelte/src/lib/container/EdgeRenderer/index.svelte @@ -0,0 +1,28 @@ + + + + {#each $edgesWithDataStore as edge} + + {/each} + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/EdgeRenderer/utils.ts b/packages/svelte/src/lib/container/EdgeRenderer/utils.ts new file mode 100644 index 000000000..1c794f27a --- /dev/null +++ b/packages/svelte/src/lib/container/EdgeRenderer/utils.ts @@ -0,0 +1,105 @@ +import { + type NodeHandleBounds, + type Rect, + type Node, + type HandleElement, + type XYPosition, + Position, + internalsSymbol +} from '@reactflow/core'; + +export function getNodeData(node?: Node): [Rect, NodeHandleBounds | null, boolean] { + const handleBounds = node?.[internalsSymbol]?.handleBounds || null; + + const isValid = + handleBounds && + node?.width && + node?.height && + typeof node?.positionAbsolute?.x !== 'undefined' && + typeof node?.positionAbsolute?.y !== 'undefined'; + + return [ + { + x: node?.positionAbsolute?.x || 0, + y: node?.positionAbsolute?.y || 0, + width: node?.width || 0, + height: node?.height || 0 + }, + handleBounds, + !!isValid + ]; +} + +export function getHandlePosition( + position: Position, + nodeRect: Rect, + handle: HandleElement | null = null +): XYPosition { + const x = (handle?.x || 0) + nodeRect.x; + const y = (handle?.y || 0) + nodeRect.y; + const width = handle?.width || nodeRect.width; + const height = handle?.height || nodeRect.height; + + switch (position) { + case Position.Top: + return { + x: x + width / 2, + y + }; + case Position.Right: + return { + x: x + width, + y: y + height / 2 + }; + case Position.Bottom: + return { + x: x + width / 2, + y: y + height + }; + case Position.Left: + return { + x, + y: y + height / 2 + }; + } +} + +export function getHandle(bounds: HandleElement[], handleId?: string | null): HandleElement | null { + if (!bounds) { + return null; + } + + if (handleId) { + return bounds.find((d) => d.id === handleId)!; + } else if (bounds.length === 1) { + return bounds[0]; + } + + return null; +} + +export type EdgePosition = { + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; +}; + +export function getEdgePositions( + sourceNodeRect: Rect, + sourceHandle: HandleElement, + sourcePosition: Position, + targetNodeRect: Rect, + targetHandle: HandleElement, + targetPosition: Position +): EdgePosition { + const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle); + const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle); + + return { + sourceX: sourceHandlePos.x, + sourceY: sourceHandlePos.y, + targetX: targetHandlePos.x, + targetY: targetHandlePos.y + }; +} diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte index af7ea786e..bda491416 100644 --- a/packages/svelte/src/lib/container/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -6,7 +6,7 @@ import { key, createStore } from '$lib/store'; import Viewport from '$lib/container/Viewport.svelte'; import NodeRenderer from '$lib/container/NodeRenderer.svelte'; - import EdgeRenderer from '$lib/container/EdgeRenderer.svelte'; + import EdgeRenderer from '$lib/container/EdgeRenderer/index.svelte'; export let nodes: Node[]; export let edges: Edge[]; @@ -56,7 +56,4 @@ z-index: 0; } - :root { - --node-width: 150px; - } \ No newline at end of file diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index a7e7807fb..7dde9e583 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -1,9 +1,22 @@ import { getContext } from 'svelte'; -import { get, writable, type Writable } from 'svelte/store'; -import type { Node, Transform, NodeDragItem, NodeDimensionUpdate, Edge } from '@reactflow/core'; +import { derived, writable, type Readable, type Writable } from 'svelte/store'; +import { + type Node, + type Transform, + type NodeDragItem, + type NodeDimensionUpdate, + type Edge, + Position +} from '@reactflow/core'; import { internalsSymbol } from '@reactflow/core'; -import { getDimensions, getHandleBounds, updateAbsoluteNodePositions } from '../../utils'; +import { getDimensions, getHandleBounds } from '../../utils'; +import { + getEdgePositions, + getHandle, + getNodeData, + type EdgePosition +} from '$lib/container/EdgeRenderer/utils'; export const key = Symbol(); @@ -13,12 +26,18 @@ type CreateStoreProps = { transform?: Transform; }; +export type EdgeWithData = EdgePosition & { + id: string; + type: string; +}; + type SvelteFlowStore = { nodesStore: Writable; edgesStore: Writable; heightStore: Writable; widthStore: Writable; transformStore: Writable; + edgesWithDataStore: Readable; updateNodePositions: ( nodeDragItems: NodeDragItem[], positionChanged?: boolean, @@ -37,6 +56,51 @@ export function createStore({ const heightStore = writable(500); const widthStore = writable(500); + const edgesWithDataStore = derived([edgesStore, nodesStore], ([$edges, $nodes]) => { + return $edges + .map((edge) => { + const sourceNode = $nodes.find((node) => node.id === edge.source); + const targetNode = $nodes.find((node) => node.id === edge.target); + const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(sourceNode); + const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(targetNode); + + if (!sourceIsValid || !targetIsValid) { + return null; + } + + const edgeType = edge.type || 'default'; + + const targetNodeHandles = targetHandleBounds!.target; + const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); + const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); + const sourcePosition = sourceHandle?.position || Position.Bottom; + const targetPosition = targetHandle?.position || Position.Top; + + if (!sourceHandle || !targetHandle) { + return null; + } + + const { sourceX, sourceY, targetX, targetY } = getEdgePositions( + sourceNodeRect, + sourceHandle, + sourcePosition, + targetNodeRect, + targetHandle, + targetPosition + ); + + return { + id: edge.id, + type: edgeType, + sourceX, + sourceY, + targetX, + targetY + }; + }) + .filter((e) => e !== null) as EdgeWithData[]; + }); + const transformStore = writable(transform); function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) { @@ -67,36 +131,40 @@ export function createStore({ const style = window.getComputedStyle(viewportNode); const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform); - const nds = get(nodesStore); - - updates.forEach((update) => { - const node = nds.find((n) => n.id === update.id); - - if (node) { - const dimensions = getDimensions(update.nodeElement); - const doUpdate = !!( - dimensions.width && - dimensions.height && - (node.width !== dimensions.width || - node.height !== dimensions.height || - update.forceUpdate) - ); - if (doUpdate) { - node[internalsSymbol] = { - ...node[internalsSymbol], - handleBounds: { - source: getHandleBounds('.source', update.nodeElement, zoom), - target: getHandleBounds('.target', update.nodeElement, zoom) - } - }; - node.width = dimensions.width; - node.height = dimensions.height; + nodesStore.update((nds) => { + const nextNodes = nds.map((node) => { + const update = updates.find((u) => u.id === node.id); + + if (update) { + const dimensions = getDimensions(update.nodeElement); + + const doUpdate = !!( + dimensions.width && + dimensions.height && + (node.width !== dimensions.width || + node.height !== dimensions.height || + update.forceUpdate) + ); + + if (doUpdate) { + node[internalsSymbol] = { + ...node[internalsSymbol], + handleBounds: { + source: getHandleBounds('.source', update.nodeElement, zoom), + target: getHandleBounds('.target', update.nodeElement, zoom) + } + }; + node.width = dimensions.width; + node.height = dimensions.height; + } } - } - }); - updateAbsoluteNodePositions(nds); + return node; + }); + + return nextNodes; + }); } return { @@ -105,6 +173,7 @@ export function createStore({ transformStore, heightStore, widthStore, + edgesWithDataStore, updateNodePositions, updateNodeDimensions }; diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 9591b5998..d905ae622 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -48,6 +48,13 @@ // data: { label: 'Input Node 2' }, // position: { x: 150, y: 250 }, // }] + + // const edges = [{ + // id: '1-2', + // type: 'default', + // source: '1', + // target: '2' + // }] diff --git a/packages/svelte/src/utils/index.ts b/packages/svelte/src/utils/index.ts index c63d83af2..dface9166 100644 --- a/packages/svelte/src/utils/index.ts +++ b/packages/svelte/src/utils/index.ts @@ -82,10 +82,6 @@ export const getHandleBounds = ( const handlesArray = Array.from(handles) as HTMLDivElement[]; const nodeBounds = nodeElement.getBoundingClientRect(); - const nodeOffset = { - x: nodeBounds.width, - y: nodeBounds.height - }; return handlesArray.map((handle): HandleElement => { const handleBounds = handle.getBoundingClientRect(); @@ -93,8 +89,8 @@ export const getHandleBounds = ( return { id: handle.getAttribute('data-handleid'), position: handle.getAttribute('data-handlepos') as unknown as Position, - x: (handleBounds.left - nodeBounds.left - nodeOffset.x) / zoom, - y: (handleBounds.top - nodeBounds.top - nodeOffset.y) / zoom, + x: (handleBounds.left - nodeBounds.left) / zoom, + y: (handleBounds.top - nodeBounds.top) / zoom, ...getDimensions(handle) }; }); From 216bf1bcd38a99d88d7aa293a4095b84c775c1ef Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 15 Feb 2023 10:37:52 +0100 Subject: [PATCH 0003/1093] chore(config): cleanup --- packages/core/package.json | 2 +- packages/svelte/package.json | 36 +++++----- pnpm-lock.yaml | 126 ++++++++++++++++++++++++++--------- 3 files changed, 114 insertions(+), 50 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index a9789782c..06db1a989 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -46,7 +46,7 @@ "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0", - "zustand": "^4.3.1" + "zustand": "^4.3.3" }, "peerDependencies": { "react": ">=17", diff --git a/packages/svelte/package.json b/packages/svelte/package.json index ee91d37b2..eb17ec7d8 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -10,35 +10,35 @@ "lint": "prettier --plugin-search-dir . --check . && eslint .", "format": "prettier --plugin-search-dir . --write ." }, - "devDependencies": { - "@sveltejs/adapter-auto": "^1.0.0", - "@sveltejs/kit": "^1.0.0", - "@sveltejs/package": "^1.0.0", - "@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-svelte3": "^4.0.0", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.8.1", - "svelte": "^3.54.0", - "svelte-check": "^3.0.1", - "tslib": "^2.4.1", - "typescript": "^4.9.3", - "vite": "^4.0.0" - }, "type": "module", "module": "index.ts", "exports": { ".": "./index.js" }, "dependencies": { - "@reactflow/core": "^11.5.1", + "@reactflow/core": "workspace:*", "cc": "^3.0.1", "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0", "react": "^18.2.0", "react-dom": "^18.2.0" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.5.6", + "@sveltejs/package": "^1.0.2", + "@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-svelte3": "^4.0.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.8.1", + "svelte": "^3.55.1", + "svelte-check": "^3.0.1", + "tslib": "^2.4.1", + "typescript": "^4.9.3", + "vite": "^4.1.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b63cf02f2..c25636717 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -159,7 +159,7 @@ importers: d3-zoom: ^3.0.0 react: ^18.2.0 typescript: ^4.9.4 - zustand: ^4.3.1 + zustand: ^4.3.3 dependencies: '@types/d3': registry.npmjs.org/@types/d3/7.4.0 '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 @@ -169,7 +169,7 @@ importers: d3-drag: registry.npmjs.org/d3-drag/3.0.0 d3-selection: registry.npmjs.org/d3-selection/3.0.0 d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 - zustand: registry.npmjs.org/zustand/4.3.1_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.3_react@18.2.0 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config @@ -306,10 +306,10 @@ importers: packages/svelte: specifiers: - '@reactflow/core': ^11.5.1 - '@sveltejs/adapter-auto': ^1.0.0 - '@sveltejs/kit': ^1.0.0 - '@sveltejs/package': ^1.0.0 + '@reactflow/core': workspace:* + '@sveltejs/adapter-auto': ^2.0.0 + '@sveltejs/kit': ^1.5.6 + '@sveltejs/package': ^1.0.2 '@typescript-eslint/eslint-plugin': ^5.45.0 '@typescript-eslint/parser': ^5.45.0 cc: ^3.0.1 @@ -323,11 +323,11 @@ importers: prettier-plugin-svelte: ^2.8.1 react: ^18.2.0 react-dom: ^18.2.0 - svelte: ^3.54.0 + svelte: ^3.55.1 svelte-check: ^3.0.1 tslib: ^2.4.1 typescript: ^4.9.3 - vite: ^4.0.0 + vite: ^4.1.1 dependencies: '@reactflow/core': link:../core cc: registry.npmjs.org/cc/3.0.1 @@ -337,8 +337,8 @@ importers: react: registry.npmjs.org/react/18.2.0 react-dom: registry.npmjs.org/react-dom/18.2.0_react@18.2.0 devDependencies: - '@sveltejs/adapter-auto': registry.npmjs.org/@sveltejs/adapter-auto/1.0.2_@sveltejs+kit@1.3.6 - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.3.6_svelte@3.55.1+vite@4.0.4 + '@sveltejs/adapter-auto': registry.npmjs.org/@sveltejs/adapter-auto/2.0.0_@sveltejs+kit@1.5.6 + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.5.6_svelte@3.55.1+vite@4.1.1 '@sveltejs/package': registry.npmjs.org/@sveltejs/package/1.0.2_atrrhq7vg4ekua4nnyrpuardle '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.49.0_rsaczafy73x3xqauzesvzbsgzy '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u @@ -351,7 +351,7 @@ importers: svelte-check: registry.npmjs.org/svelte-check/3.0.3_svelte@3.55.1 tslib: registry.npmjs.org/tslib/2.4.1 typescript: registry.npmjs.org/typescript/4.9.4 - vite: registry.npmjs.org/vite/4.0.4 + vite: registry.npmjs.org/vite/4.1.1 tooling/eslint-config: specifiers: @@ -1896,23 +1896,23 @@ packages: version: 2.0.0 dev: true - registry.npmjs.org/@sveltejs/adapter-auto/1.0.2_@sveltejs+kit@1.3.6: - resolution: {integrity: sha512-UXpEO/gutERZnD+Z5Vi4J/ifD3WSRuCI7xwtLJTcKNQvJ6t5Xsj1X3Mw2F8Vv/XTUuxf7xPLYUgThU331r0Y9w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.2.tgz} - id: registry.npmjs.org/@sveltejs/adapter-auto/1.0.2 + registry.npmjs.org/@sveltejs/adapter-auto/2.0.0_@sveltejs+kit@1.5.6: + resolution: {integrity: sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.0.0.tgz} + id: registry.npmjs.org/@sveltejs/adapter-auto/2.0.0 name: '@sveltejs/adapter-auto' - version: 1.0.2 + version: 2.0.0 peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.3.6_svelte@3.55.1+vite@4.0.4 + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.5.6_svelte@3.55.1+vite@4.1.1 import-meta-resolve: registry.npmjs.org/import-meta-resolve/2.2.1 dev: true - registry.npmjs.org/@sveltejs/kit/1.3.6_svelte@3.55.1+vite@4.0.4: - resolution: {integrity: sha512-SOGTKYiZ0ajIhQ9pUKr9F+h5Srm8Gdn3aza3dZxXWdHjpqv1iyhvt4oS0l5n1a+sXQzKlLpe/CikDBqSVSUS2Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.3.6.tgz} - id: registry.npmjs.org/@sveltejs/kit/1.3.6 + registry.npmjs.org/@sveltejs/kit/1.5.6_svelte@3.55.1+vite@4.1.1: + resolution: {integrity: sha512-CHVeQpbcwSIUekF6WwevmExKXyfHnzM5nlCEUv13lGgfJ0zKA0ny5YwIe40vccrm5w5Caec7jMTt9Ih3McJr5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.5.6.tgz} + id: registry.npmjs.org/@sveltejs/kit/1.5.6 name: '@sveltejs/kit' - version: 1.3.6 + version: 1.5.6 engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -1920,7 +1920,7 @@ packages: svelte: ^3.54.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.0.4 + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.1.1 '@types/cookie': registry.npmjs.org/@types/cookie/0.5.1 cookie: registry.npmjs.org/cookie/0.5.0 devalue: registry.npmjs.org/devalue/4.2.3 @@ -1933,8 +1933,8 @@ packages: sirv: registry.npmjs.org/sirv/2.0.2 svelte: registry.npmjs.org/svelte/3.55.1 tiny-glob: registry.npmjs.org/tiny-glob/0.2.9 - undici: registry.npmjs.org/undici/5.16.0 - vite: registry.npmjs.org/vite/4.0.4 + undici: registry.npmjs.org/undici/5.18.0 + vite: registry.npmjs.org/vite/4.1.1 transitivePeerDependencies: - supports-color dev: true @@ -1958,7 +1958,7 @@ packages: - typescript dev: true - registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.0.4: + registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.1.1: resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.2.tgz} id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.2 name: '@sveltejs/vite-plugin-svelte' @@ -1974,8 +1974,8 @@ packages: magic-string: registry.npmjs.org/magic-string/0.27.0 svelte: registry.npmjs.org/svelte/3.55.1 svelte-hmr: registry.npmjs.org/svelte-hmr/0.15.1_svelte@3.55.1 - vite: registry.npmjs.org/vite/4.0.4 - vitefu: registry.npmjs.org/vitefu/0.2.4_vite@4.0.4 + vite: registry.npmjs.org/vite/4.1.1 + vitefu: registry.npmjs.org/vitefu/0.2.4_vite@4.1.1 transitivePeerDependencies: - supports-color dev: true @@ -7239,6 +7239,16 @@ packages: fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true + registry.npmjs.org/rollup/3.15.0: + resolution: {integrity: sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz} + name: rollup + version: 3.15.0 + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: registry.npmjs.org/fsevents/2.3.2 + dev: true + registry.npmjs.org/rollup/3.9.1: resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz} name: rollup @@ -8250,10 +8260,10 @@ packages: which-boxed-primitive: registry.npmjs.org/which-boxed-primitive/1.0.2 dev: true - registry.npmjs.org/undici/5.16.0: - resolution: {integrity: sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici/-/undici-5.16.0.tgz} + registry.npmjs.org/undici/5.18.0: + resolution: {integrity: sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici/-/undici-5.18.0.tgz} name: undici - version: 5.16.0 + version: 5.18.0 engines: {node: '>=12.18'} dependencies: busboy: registry.npmjs.org/busboy/1.6.0 @@ -8407,7 +8417,42 @@ packages: fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true - registry.npmjs.org/vitefu/0.2.4_vite@4.0.4: + registry.npmjs.org/vite/4.1.1: + resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.1.1.tgz} + name: vite + version: 4.1.1 + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: registry.npmjs.org/esbuild/0.16.16 + postcss: registry.npmjs.org/postcss/8.4.21 + resolve: registry.npmjs.org/resolve/1.22.1 + rollup: registry.npmjs.org/rollup/3.15.0 + optionalDependencies: + fsevents: registry.npmjs.org/fsevents/2.3.2 + dev: true + + registry.npmjs.org/vitefu/0.2.4_vite@4.1.1: resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz} id: registry.npmjs.org/vitefu/0.2.4 name: vitefu @@ -8418,7 +8463,7 @@ packages: vite: optional: true dependencies: - vite: registry.npmjs.org/vite/4.0.4 + vite: registry.npmjs.org/vite/4.1.1 dev: true registry.npmjs.org/wait-on/6.0.0_debug@4.3.2: @@ -8701,3 +8746,22 @@ packages: 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/zustand/4.3.3_react@18.2.0: + resolution: {integrity: sha512-x2jXq8S0kfLGNwGh87nhRfEc2eZy37tSatpSoSIN+O6HIaBhgQHSONV/F9VNrNcBcKQu/E80K1DeHDYQC/zCrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.3.tgz} + id: registry.npmjs.org/zustand/4.3.3 + name: zustand + version: 4.3.3 + engines: {node: '>=12.7.0'} + peerDependencies: + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + immer: + optional: true + react: + optional: true + dependencies: + 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 From a12c8932267b3761806d6a0c3a2418832aba7c61 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 16 Feb 2023 16:37:47 +0100 Subject: [PATCH 0004/1093] refactor(packages): add @reactflow/system --- packages/core/package.json | 1 + .../src/components/ConnectionLine/index.tsx | 2 +- packages/core/src/components/Handle/utils.ts | 3 +- .../core/src/container/EdgeRenderer/utils.ts | 3 +- .../core/src/container/NodeRenderer/index.tsx | 3 +- .../core/src/hooks/useNodesInitialized.ts | 3 +- packages/core/src/hooks/useVisibleEdges.ts | 3 +- packages/core/src/index.ts | 5 +- packages/core/src/store/index.ts | 3 +- packages/core/src/store/utils.ts | 3 +- packages/core/src/types/nodes.ts | 2 +- packages/core/src/utils/index.ts | 2 - packages/svelte/package.json | 2 +- .../svelte/src/lib/components/Handle.svelte | 2 +- .../src/lib/components/nodes/BaseNode.svelte | 2 +- .../lib/components/nodes/DefaultNode.svelte | 2 +- .../src/lib/container/EdgeRenderer/utils.ts | 2 +- .../src/lib/container/SvelteFlow.svelte | 2 +- packages/svelte/src/lib/hooks/drag/index.ts | 2 +- packages/svelte/src/lib/hooks/drag/utils.ts | 2 +- packages/svelte/src/lib/hooks/zoom/index.ts | 2 +- packages/svelte/src/lib/index.ts | 1 - packages/svelte/src/lib/store/index.ts | 6 +- packages/svelte/src/routes/+page.svelte | 2 +- packages/svelte/src/utils/index.ts | 2 +- packages/system/.eslintrc.js | 4 + packages/system/README.md | 10 + packages/system/package.json | 62 ++++ packages/system/src/index.ts | 3 + packages/system/src/types/changes.ts | 62 ++++ packages/system/src/types/component-props.ts | 149 ++++++++++ packages/system/src/types/edges.ts | 180 +++++++++++ packages/system/src/types/general.ts | 279 ++++++++++++++++++ packages/system/src/types/handles.ts | 23 ++ packages/system/src/types/index.ts | 8 + packages/system/src/types/instance.ts | 56 ++++ packages/system/src/types/nodes.ts | 118 ++++++++ packages/system/src/types/utils.ts | 29 ++ packages/system/tsconfig.json | 6 + pnpm-lock.yaml | 131 ++++---- 40 files changed, 1104 insertions(+), 78 deletions(-) create mode 100644 packages/system/.eslintrc.js create mode 100644 packages/system/README.md create mode 100644 packages/system/package.json create mode 100644 packages/system/src/index.ts create mode 100644 packages/system/src/types/changes.ts create mode 100644 packages/system/src/types/component-props.ts create mode 100644 packages/system/src/types/edges.ts create mode 100644 packages/system/src/types/general.ts create mode 100644 packages/system/src/types/handles.ts create mode 100644 packages/system/src/types/index.ts create mode 100644 packages/system/src/types/instance.ts create mode 100644 packages/system/src/types/nodes.ts create mode 100644 packages/system/src/types/utils.ts create mode 100644 packages/system/tsconfig.json diff --git a/packages/core/package.json b/packages/core/package.json index 06db1a989..99bb8c3e6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,6 +38,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@reactflow/system": "workspace:11.5.5", "@types/d3": "^7.4.0", "@types/d3-drag": "^3.0.1", "@types/d3-selection": "^3.0.3", diff --git a/packages/core/src/components/ConnectionLine/index.tsx b/packages/core/src/components/ConnectionLine/index.tsx index 45ec79371..cb8135899 100644 --- a/packages/core/src/components/ConnectionLine/index.tsx +++ b/packages/core/src/components/ConnectionLine/index.tsx @@ -1,12 +1,12 @@ import { CSSProperties, useCallback } from 'react'; import { shallow } from 'zustand/shallow'; import cc from 'classcat'; +import { internalsSymbol } from '@reactflow/system'; import { useStore } from '../../hooks/useStore'; import { getBezierPath } from '../Edges/BezierEdge'; import { getSmoothStepPath } from '../Edges/SmoothStepEdge'; import { getSimpleBezierPath } from '../Edges/SimpleBezierEdge'; -import { internalsSymbol } from '../../utils'; import type { ConnectionLineComponent, ConnectionStatus, diff --git a/packages/core/src/components/Handle/utils.ts b/packages/core/src/components/Handle/utils.ts index 582637817..7287022e9 100644 --- a/packages/core/src/components/Handle/utils.ts +++ b/packages/core/src/components/Handle/utils.ts @@ -1,7 +1,8 @@ import { MouseEvent as ReactMouseEvent, TouchEvent as ReactTouchEvent } from 'react'; +import { internalsSymbol } from '@reactflow/system'; import { ConnectionMode, ConnectionStatus } from '../../types'; -import { getEventPosition, internalsSymbol } from '../../utils'; +import { getEventPosition } from '../../utils'; import type { Connection, HandleType, XYPosition, Node, NodeHandleBounds } from '../../types'; export type ConnectionHandle = { diff --git a/packages/core/src/container/EdgeRenderer/utils.ts b/packages/core/src/container/EdgeRenderer/utils.ts index edd745434..b3c3a8029 100644 --- a/packages/core/src/container/EdgeRenderer/utils.ts +++ b/packages/core/src/container/EdgeRenderer/utils.ts @@ -1,8 +1,9 @@ import type { ComponentType } from 'react'; +import { internalsSymbol } from '@reactflow/system'; import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; import wrapEdge from '../../components/Edges/wrapEdge'; -import { internalsSymbol, rectToBox } from '../../utils'; +import { rectToBox } from '../../utils'; import { Position } from '../../types'; import type { EdgeProps, diff --git a/packages/core/src/container/NodeRenderer/index.tsx b/packages/core/src/container/NodeRenderer/index.tsx index ab35cb74f..b2d036130 100644 --- a/packages/core/src/container/NodeRenderer/index.tsx +++ b/packages/core/src/container/NodeRenderer/index.tsx @@ -1,10 +1,11 @@ import { memo, useMemo, useEffect, useRef } from 'react'; import type { ComponentType } from 'react'; import { shallow } from 'zustand/shallow'; +import { internalsSymbol } from '@reactflow/system'; import useVisibleNodes from '../../hooks/useVisibleNodes'; import { useStore } from '../../hooks/useStore'; -import { clampPosition, internalsSymbol } from '../../utils'; +import { clampPosition } from '../../utils'; import { containerStyle } from '../../styles'; import { GraphViewProps } from '../GraphView'; import { getPositionWithOrigin } from './utils'; diff --git a/packages/core/src/hooks/useNodesInitialized.ts b/packages/core/src/hooks/useNodesInitialized.ts index 45b14a33d..0a1e851a6 100644 --- a/packages/core/src/hooks/useNodesInitialized.ts +++ b/packages/core/src/hooks/useNodesInitialized.ts @@ -1,4 +1,5 @@ -import { internalsSymbol } from '../utils'; +import { internalsSymbol } from '@reactflow/system'; + import { useStore } from './useStore'; import type { ReactFlowState } from '../types'; diff --git a/packages/core/src/hooks/useVisibleEdges.ts b/packages/core/src/hooks/useVisibleEdges.ts index cbd673e51..3944697ba 100644 --- a/packages/core/src/hooks/useVisibleEdges.ts +++ b/packages/core/src/hooks/useVisibleEdges.ts @@ -1,8 +1,9 @@ import { useCallback } from 'react'; +import { internalsSymbol } from '@reactflow/system'; import { useStore } from '../hooks/useStore'; import { isEdgeVisible } from '../container/EdgeRenderer/utils'; -import { internalsSymbol, isNumeric } from '../utils'; +import { isNumeric } from '../utils'; import type { ReactFlowState, NodeInternals, Edge } from '../types'; const defaultEdgeTree = [{ level: 0, isMaxLevel: true, edges: [] }]; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c4a5b19e2..140bcfcb7 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -8,7 +8,7 @@ export { default as SimpleBezierEdge, getSimpleBezierPath } from './components/E export { default as SmoothStepEdge, getSmoothStepPath } from './components/Edges/SmoothStepEdge'; export { default as BaseEdge } from './components/Edges/BaseEdge'; -export { internalsSymbol, rectToBox, boxToRect, getBoundsOfRects } from './utils'; +export { rectToBox, boxToRect, getBoundsOfRects } from './utils'; export { isNode, isEdge, @@ -40,5 +40,6 @@ export { default as useOnSelectionChange } from './hooks/useOnSelectionChange'; export { default as useNodesInitialized } from './hooks/useNodesInitialized'; export { default as useGetPointerPosition } from './hooks/useGetPointerPosition'; export { useNodeId } from './contexts/NodeIdContext'; +export * from '@reactflow/system'; -export * from './types'; +// export * from './types'; diff --git a/packages/core/src/store/index.ts b/packages/core/src/store/index.ts index c85225db3..21b04c285 100644 --- a/packages/core/src/store/index.ts +++ b/packages/core/src/store/index.ts @@ -1,7 +1,8 @@ import { createStore } from 'zustand'; import { zoomIdentity } from 'd3-zoom'; +import { internalsSymbol } from '@reactflow/system'; -import { clampPosition, getDimensions, internalsSymbol } from '../utils'; +import { clampPosition, getDimensions } from '../utils'; import { applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes'; import { getHandleBounds } from '../components/Nodes/utils'; import { createNodeInternals, fitView, updateAbsoluteNodePositions, updateNodesAndEdgesSelections } from './utils'; diff --git a/packages/core/src/store/utils.ts b/packages/core/src/store/utils.ts index 994fbf20c..b58b7e1db 100644 --- a/packages/core/src/store/utils.ts +++ b/packages/core/src/store/utils.ts @@ -1,7 +1,8 @@ import { zoomIdentity } from 'd3-zoom'; import type { StoreApi } from 'zustand'; +import { internalsSymbol } from '@reactflow/system'; -import { internalsSymbol, isNumeric } from '../utils'; +import { isNumeric } from '../utils'; import { getD3Transition, getRectOfNodes, getTransformForBounds, getNodePositionWithOrigin } from '../utils/graph'; import type { Edge, diff --git a/packages/core/src/types/nodes.ts b/packages/core/src/types/nodes.ts index a7ec9b2b8..1494b0cd5 100644 --- a/packages/core/src/types/nodes.ts +++ b/packages/core/src/types/nodes.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { CSSProperties, MouseEvent as ReactMouseEvent } from 'react'; +import { internalsSymbol } from '@reactflow/system'; -import { internalsSymbol } from '../utils'; import type { XYPosition, Position, CoordinateExtent, HandleElement } from '.'; // interface for the user node items diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index 2d801d059..1423a1499 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -84,8 +84,6 @@ export const isRectObject = (obj: any): obj is Rect => /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ export const isNumeric = (n: any): n is number => !isNaN(n) && isFinite(n); -export const internalsSymbol = Symbol.for('internals'); - // used for a11y key board controls for nodes and edges export const elementSelectionKeys = ['Enter', ' ', 'Escape']; diff --git a/packages/svelte/package.json b/packages/svelte/package.json index eb17ec7d8..9e8d13219 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -16,7 +16,7 @@ ".": "./index.js" }, "dependencies": { - "@reactflow/core": "workspace:*", + "@reactflow/system": "workspace:*", "cc": "^3.0.1", "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", diff --git a/packages/svelte/src/lib/components/Handle.svelte b/packages/svelte/src/lib/components/Handle.svelte index a90bccf2f..2e8798c02 100644 --- a/packages/svelte/src/lib/components/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle.svelte @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte index 67b265a8a..11a659f33 100644 --- a/packages/svelte/src/lib/container/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -47,6 +47,8 @@ + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Fit.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Fit.svelte new file mode 100644 index 000000000..1b68036e4 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Fit.svelte @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Lock.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Lock.svelte new file mode 100644 index 000000000..6205cfc7b --- /dev/null +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Lock.svelte @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Minus.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Minus.svelte new file mode 100644 index 000000000..dc8d310bf --- /dev/null +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Minus.svelte @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Plus.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Plus.svelte new file mode 100644 index 000000000..a13adbd7e --- /dev/null +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Plus.svelte @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Unlock.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Unlock.svelte new file mode 100644 index 000000000..2e59dbd76 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Unlock.svelte @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Controls/index.svelte b/packages/svelte/src/lib/plugins/Controls/index.svelte new file mode 100644 index 000000000..f8d4665d8 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Controls/index.svelte @@ -0,0 +1,89 @@ + + + + {#if showZoom} + + + + + + + {/if} + {#if showFitView} + + + + {/if} + {#if showInteractive} + + {#if isInteractive}{:else}{/if} + + {/if} + \ No newline at end of file diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index ac0385884..6a2912037 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -10,9 +10,10 @@ import { internalsSymbol, type NodeOrigin, type D3ZoomInstance, - type D3SelectionInstance + type D3SelectionInstance, + type ViewportHelperFunctionOptions } from '@reactflow/system'; -import { fitView } from '@reactflow/utils'; +import { fitView, getD3Transition } from '@reactflow/utils'; import { getDimensions, getHandleBounds } from '../../utils'; import { @@ -48,6 +49,9 @@ type SvelteFlowStore = { }>; transformStore: Writable; edgesWithDataStore: Readable; + zoomIn: (options?: ViewportHelperFunctionOptions) => void; + zoomOut: (options?: ViewportHelperFunctionOptions) => void; + fitView: (options?: ViewportHelperFunctionOptions) => void; updateNodePositions: ( nodeDragItems: NodeDragItem[], positionChanged?: boolean, @@ -68,7 +72,10 @@ export function createStore({ const heightStore = writable(500); const widthStore = writable(500); const nodeOriginStore = writable(nodeOrigin); - const d3Store = writable({ zoom: null, selection: null }); + const d3Store = writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ + zoom: null, + selection: null + }); let fitViewOnInitDone = false; @@ -205,6 +212,40 @@ export function createStore({ nodesStore.set(nextNodes); } + function zoomIn(options?: ViewportHelperFunctionOptions) { + const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + + if (d3Zoom && d3Selection) { + d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2); + } + } + + function zoomOut(options?: ViewportHelperFunctionOptions) { + const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + if (d3Zoom && d3Selection) { + d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2); + } + } + + function _fitView() { + const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + if (d3Zoom && d3Selection) { + fitView( + { + nodes: get(nodesStore), + width: get(widthStore), + height: get(heightStore), + minZoom: 0.2, + maxZoom: 2, + d3Selection, + d3Zoom, + nodeOrigin: get(nodeOriginStore) + }, + {} + ); + } + } + return { nodesStore, edgesStore, @@ -214,7 +255,10 @@ export function createStore({ widthStore, edgesWithDataStore, updateNodePositions, - updateNodeDimensions + updateNodeDimensions, + zoomIn, + zoomOut, + fitView: _fitView }; } diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 5afcd3b80..0f89b8fef 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1,7 +1,7 @@ - + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Background/DotPattern.svelte b/packages/svelte/src/lib/plugins/Background/DotPattern.svelte new file mode 100644 index 000000000..3eb76c7e0 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Background/DotPattern.svelte @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Background/LinePattern.svelte b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte new file mode 100644 index 000000000..60dd4a8cc --- /dev/null +++ b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Background/index.ts b/packages/svelte/src/lib/plugins/Background/index.ts new file mode 100644 index 000000000..cce074815 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Background/index.ts @@ -0,0 +1,2 @@ +export { BackgroundVariant } from './types'; +export { default as Background } from './Background.svelte'; diff --git a/packages/svelte/src/lib/plugins/Background/types.ts b/packages/svelte/src/lib/plugins/Background/types.ts new file mode 100644 index 000000000..c6e3e390f --- /dev/null +++ b/packages/svelte/src/lib/plugins/Background/types.ts @@ -0,0 +1,5 @@ +export enum BackgroundVariant { + Lines = 'lines', + Dots = 'dots', + Cross = 'cross' +} diff --git a/packages/svelte/src/lib/plugins/Controls/index.svelte b/packages/svelte/src/lib/plugins/Controls/Controls.svelte similarity index 98% rename from packages/svelte/src/lib/plugins/Controls/index.svelte rename to packages/svelte/src/lib/plugins/Controls/Controls.svelte index f8d4665d8..a36436b09 100644 --- a/packages/svelte/src/lib/plugins/Controls/index.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Controls.svelte @@ -1,7 +1,8 @@
diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index d053894a0..a2dbe617b 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -1,5 +1,6 @@ import SvelteFlow from '$lib/container/SvelteFlow.svelte'; export { Controls, ControlButton } from '$lib/plugins/Controls'; export { Background, BackgroundVariant } from '$lib/plugins/Background'; +export { Minimap } from '$lib/plugins/Minimap'; export default SvelteFlow; diff --git a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte new file mode 100644 index 000000000..9de661f32 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte @@ -0,0 +1,102 @@ + + + + + {#if ariaLabel}{ariaLabel}{/if} + + {#each $nodesStore as node} + {#if node.width && node.height} + {@const pos = getNodePositionWithOrigin(node, $nodeOriginStore).positionAbsolute} + + {/if} + {/each} + + + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte new file mode 100644 index 000000000..41de5dcf5 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte @@ -0,0 +1,34 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Minimap/index.ts b/packages/svelte/src/lib/plugins/Minimap/index.ts new file mode 100644 index 000000000..b21255c04 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Minimap/index.ts @@ -0,0 +1 @@ +export { default as Minimap } from './Minimap.svelte'; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 2ad3c2a7c..862095155 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -13,9 +13,9 @@ import { type D3SelectionInstance, type ViewportHelperFunctionOptions } from '@reactflow/system'; -import { fitView, getD3Transition } from '@reactflow/utils'; +import { fitView, getD3Transition, getDimensions } from '@reactflow/utils'; -import { getDimensions, getHandleBounds } from '../../utils'; +import { getHandleBounds } from '../../utils'; import { getEdgePositions, getHandle, @@ -51,6 +51,7 @@ type SvelteFlowStore = { transformStore: Writable; edgesWithDataStore: Readable; idStore: Writable; + nodeOriginStore: Writable; zoomIn: (options?: ViewportHelperFunctionOptions) => void; zoomOut: (options?: ViewportHelperFunctionOptions) => void; fitView: (options?: ViewportHelperFunctionOptions) => boolean; @@ -243,6 +244,7 @@ export function createStore({ widthStore, edgesWithDataStore, idStore, + nodeOriginStore, updateNodePositions, updateNodeDimensions, zoomIn, diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 2c5a8b095..bda7e50a3 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1,7 +1,7 @@ + + diff --git a/packages/svelte/src/lib/components/NodeSelection/index.svelte b/packages/svelte/src/lib/components/NodeSelection/index.svelte new file mode 100644 index 000000000..04295e15f --- /dev/null +++ b/packages/svelte/src/lib/components/NodeSelection/index.svelte @@ -0,0 +1,23 @@ + + +{#if selectedNodes} + +{/if} diff --git a/packages/svelte/src/lib/components/Selection/index.svelte b/packages/svelte/src/lib/components/Selection/index.svelte new file mode 100644 index 000000000..4c8f4946d --- /dev/null +++ b/packages/svelte/src/lib/components/Selection/index.svelte @@ -0,0 +1,30 @@ + + +{#if isVisible} +
+{/if} + + diff --git a/packages/svelte/src/lib/components/UserSelection/index.svelte b/packages/svelte/src/lib/components/UserSelection/index.svelte new file mode 100644 index 000000000..a595a68c5 --- /dev/null +++ b/packages/svelte/src/lib/components/UserSelection/index.svelte @@ -0,0 +1,14 @@ + + + diff --git a/packages/svelte/src/lib/components/nodes/BaseNode.svelte b/packages/svelte/src/lib/components/nodes/BaseNode.svelte index 40870b1ea..cda672574 100644 --- a/packages/svelte/src/lib/components/nodes/BaseNode.svelte +++ b/packages/svelte/src/lib/components/nodes/BaseNode.svelte @@ -2,7 +2,7 @@ import { onMount, setContext } from 'svelte'; import type { XYPosition } from '@reactflow/system'; - import drag from '$lib/hooks/drag' + import drag from '$lib/actions/drag' import { useStore } from '$lib/store'; import DefaultNode from './DefaultNode.svelte'; @@ -29,7 +29,6 @@ resizeObserver?.unobserve(nodeRef); } }); -
\ No newline at end of file diff --git a/packages/svelte/src/lib/container/Pane/index.svelte b/packages/svelte/src/lib/container/Pane/index.svelte new file mode 100644 index 000000000..b4a033863 --- /dev/null +++ b/packages/svelte/src/lib/container/Pane/index.svelte @@ -0,0 +1,180 @@ + + +
+ +
+ + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte index 11a659f33..f2617ae4c 100644 --- a/packages/svelte/src/lib/container/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -4,18 +4,23 @@ import type { Node, Edge } from '@reactflow/system'; import { key, createStore } from '$lib/store'; + import Zoom from '$lib/container/Zoom/index.svelte'; + import Pane from '$lib/container/Pane/index.svelte'; import Viewport from '$lib/container/Viewport.svelte'; import NodeRenderer from '$lib/container/NodeRenderer.svelte'; import EdgeRenderer from '$lib/container/EdgeRenderer/index.svelte'; + import UserSelection from '$lib/components/UserSelection/index.svelte'; + import NodeSelection from '$lib/components/NodeSelection/index.svelte'; + import KeyHandler from '$lib/components/KeyHandler/index.svelte'; - export let nodes: Node[]; - export let edges: Edge[]; - export let fitView: boolean; - - export let className: string | null = null; export let id: string = '1'; + export let nodes: Node[] = []; + export let edges: Edge[] = []; + export let fitView: boolean = false; + + let className: string = ''; + export { className as class }; - let props = { ...$$restProps }; let domNode: Element; const store = createStore({ @@ -35,19 +40,24 @@ }) -
- - - - - + + + + + + + + + + +
@@ -59,5 +69,4 @@ position: relative; z-index: 0; } - \ No newline at end of file diff --git a/packages/svelte/src/lib/container/Viewport.svelte b/packages/svelte/src/lib/container/Viewport.svelte index 61a8c9441..4be75a58e 100644 --- a/packages/svelte/src/lib/container/Viewport.svelte +++ b/packages/svelte/src/lib/container/Viewport.svelte @@ -1,35 +1,25 @@ -
-
- -
+
+
\ No newline at end of file diff --git a/packages/svelte/src/lib/container/Zoom/index.svelte b/packages/svelte/src/lib/container/Zoom/index.svelte new file mode 100644 index 000000000..6f9380436 --- /dev/null +++ b/packages/svelte/src/lib/container/Zoom/index.svelte @@ -0,0 +1,23 @@ + + +
+ +
+ + \ No newline at end of file diff --git a/packages/svelte/src/lib/hooks/zoom/index.ts b/packages/svelte/src/lib/hooks/zoom/index.ts deleted file mode 100644 index 352be67d9..000000000 --- a/packages/svelte/src/lib/hooks/zoom/index.ts +++ /dev/null @@ -1,114 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import type { Writable } from 'svelte/store'; -import { select } from 'd3-selection'; -import { zoom as d3Zoom, zoomIdentity } from 'd3-zoom'; -import type { D3ZoomEvent } from 'd3-zoom'; -import type { D3SelectionInstance, D3ZoomInstance, Transform } from '@reactflow/system'; - -const isWrappedWithClass = (event: any, className: string | undefined) => - event.target.closest(`.${className}`); - -export default function zoom( - domNode: Element, - { - transformStore, - d3Store - }: { - transformStore: Writable; - d3Store: Writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>; - } -) { - const d3ZoomInstance = d3Zoom(); - const selection = select(domNode).call(d3ZoomInstance); - const d3ZoomHandler = selection.on('wheel.zoom'); - d3ZoomInstance.transform(selection, zoomIdentity); - - selection.on('wheel.zoom', function (event: any, d: any) { - if (isWrappedWithClass(event, 'nowheel')) { - return null; - } - - event.preventDefault(); - d3ZoomHandler!.call(this, event, d); - }); - - d3Store.set({ - zoom: d3ZoomInstance, - selection - }); - - d3ZoomInstance.on('zoom', (event: D3ZoomEvent) => { - transformStore.set([event.transform.x, event.transform.y, event.transform.k]); - }); - - d3ZoomInstance.filter((event: any) => { - const zoomScroll = true; - const pinchZoom = true; - - if ( - event.button === 1 && - event.type === 'mousedown' && - (isWrappedWithClass(event, 'react-flow__node') || - isWrappedWithClass(event, 'react-flow__edge')) - ) { - return true; - } - - // if all interactions are disabled, we prevent all zoom events - // if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) { - // return false; - // } - - // // during a selection we prevent all other interactions - // if (userSelectionActive) { - // return false; - // } - - // // if zoom on double click is disabled, we prevent the double click event - // if (!zoomOnDoubleClick && event.type === 'dblclick') { - // return false; - // } - - // // if the target element is inside an element with the nowheel class, we prevent zooming - // if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { - // return false; - // } - - // // if the target element is inside an element with the nopan class, we prevent panning - // if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { - // return false; - // } - - // if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { - // return false; - // } - - // // when there is no scroll handling enabled, we prevent all wheel events - // if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') { - // return false; - // } - - // // if the pane is not movable, we prevent dragging it with mousestart or touchstart - // if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) { - // return false; - // } - - // // if the pane is only movable using allowed clicks - // if ( - // Array.isArray(panOnDrag) && - // !panOnDrag.includes(event.button) && - // (event.type === 'mousedown' || event.type === 'touchstart') - // ) { - // return false; - // } - - // // We only allow right clicks if pan on drag is set to right click - // const buttonAllowed = - // (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || - // !event.button || - // event.button <= 1; - - // default filter for d3-zoom - return ((!event.ctrlKey || event.type === 'wheel') && !event.button) || event.button <= 1; - }); -} diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 862095155..2dd687b32 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -11,7 +11,8 @@ import { type NodeOrigin, type D3ZoomInstance, type D3SelectionInstance, - type ViewportHelperFunctionOptions + type ViewportHelperFunctionOptions, + type SelectionRect } from '@reactflow/system'; import { fitView, getD3Transition, getDimensions } from '@reactflow/utils'; @@ -22,6 +23,7 @@ import { getNodeData, type EdgePosition } from '$lib/container/EdgeRenderer/utils'; +import { SelectionMode } from 'reactflow'; export const key = Symbol(); @@ -52,6 +54,11 @@ type SvelteFlowStore = { edgesWithDataStore: Readable; idStore: Writable; nodeOriginStore: Writable; + draggingStore: Writable; + selectionRectStore: Writable; + selectionRectModeStore: Writable; + selectionMode: Writable; + selectionKeyPressedStore: Writable; zoomIn: (options?: ViewportHelperFunctionOptions) => void; zoomOut: (options?: ViewportHelperFunctionOptions) => void; fitView: (options?: ViewportHelperFunctionOptions) => boolean; @@ -61,6 +68,7 @@ type SvelteFlowStore = { dragging?: boolean ) => void; updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; + resetSelectedElements: () => void; }; export function createStore({ @@ -81,6 +89,11 @@ export function createStore({ selection: null }); const idStore = writable(id); + const draggingStore = writable(false); + const selectionRectStore = writable(null); + const selectionKeyPressedStore = writable(false); + const selectionRectModeStore = writable(null); + const selectionMode = writable(SelectionMode.Partial); let fitViewOnInitDone = false; @@ -235,6 +248,22 @@ export function createStore({ ); } + function resetSelectedItem(item: T) { + if (item.selected) { + return { + ...item, + selected: false + }; + } + + return item; + } + + function resetSelectedElements() { + nodesStore.update((ns) => ns.map(resetSelectedItem)); + edgesStore.update((es) => es.map(resetSelectedItem)); + } + return { nodesStore, edgesStore, @@ -245,11 +274,17 @@ export function createStore({ edgesWithDataStore, idStore, nodeOriginStore, + draggingStore, + selectionRectStore, + selectionKeyPressedStore, + selectionRectModeStore, + selectionMode, updateNodePositions, updateNodeDimensions, zoomIn, zoomOut, - fitView: _fitView + fitView: _fitView, + resetSelectedElements }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a6916071..45c45930a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,6 +312,7 @@ importers: specifiers: '@reactflow/system': workspace:11.5.5 '@reactflow/utils': workspace:^11.5.5 + '@svelte-put/shortcut': ^2.0.0 '@sveltejs/adapter-auto': ^2.0.0 '@sveltejs/kit': ^1.5.6 '@sveltejs/package': ^1.0.2 @@ -336,6 +337,7 @@ importers: dependencies: '@reactflow/system': link:../system '@reactflow/utils': link:../utils + '@svelte-put/shortcut': registry.npmjs.org/@svelte-put/shortcut/2.0.0 classcat: registry.npmjs.org/classcat/5.0.4 d3-drag: registry.npmjs.org/d3-drag/3.0.0 d3-selection: registry.npmjs.org/d3-selection/3.0.0 @@ -1964,6 +1966,12 @@ packages: version: 2.0.0 dev: true + registry.npmjs.org/@svelte-put/shortcut/2.0.0: + resolution: {integrity: sha512-dDyxIFlRz+W6wxwQtl2jUen0rX8ofV2VBWaJdz0QehLb0IMDzP3aWM9W4k8cAZQIGmTT0adr1+Gt7HPPUugcpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-2.0.0.tgz} + name: '@svelte-put/shortcut' + version: 2.0.0 + dev: false + registry.npmjs.org/@sveltejs/adapter-auto/2.0.0_@sveltejs+kit@1.5.6: resolution: {integrity: sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.0.0.tgz} id: registry.npmjs.org/@sveltejs/adapter-auto/2.0.0 From 6b192d90d56e70f13b56ec7362db97f3482d8ab3 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 21 Feb 2023 11:35:15 +0100 Subject: [PATCH 0014/1093] feat(svelte): make selection draggable --- packages/svelte/src/lib/actions/drag/index.ts | 2 +- packages/svelte/src/lib/actions/drag/utils.ts | 1 - packages/svelte/src/lib/actions/zoom/index.ts | 6 +++--- .../lib/components/NodeSelection/index.svelte | 20 ++++++++++++++++--- .../src/lib/components/Selection/index.svelte | 2 +- .../{Panel.svelte => Panel/index.svelte} | 2 ++ packages/svelte/src/lib/index.ts | 1 + .../src/lib/plugins/Controls/Controls.svelte | 2 +- .../src/lib/plugins/Minimap/Minimap.svelte | 13 ++++-------- 9 files changed, 30 insertions(+), 19 deletions(-) rename packages/svelte/src/lib/container/{Panel.svelte => Panel/index.svelte} (93%) diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 84b7b5fb2..da2b66a95 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -94,7 +94,7 @@ export default function drag( const dragHandler = d3Drag() .on('start', (event: UseDragEvent) => { const pointerPos = getPointerPosition(event); - + console.log(pointerPos); lastPos = pointerPos; dragItems = getDragItems(get(nodesStore), pointerPos, nodeId); }) diff --git a/packages/svelte/src/lib/actions/drag/utils.ts b/packages/svelte/src/lib/actions/drag/utils.ts index bfb384a39..b5c701a78 100644 --- a/packages/svelte/src/lib/actions/drag/utils.ts +++ b/packages/svelte/src/lib/actions/drag/utils.ts @@ -41,7 +41,6 @@ export function hasSelector(target: Element, selector: string, domNode: Element) // looks for all selected nodes and created a NodeDragItem for each of them export function getDragItems(nodes: Node[], mousePos: XYPosition, nodeId?: string): NodeDragItem[] { - console.log(mousePos, nodes); return nodes .filter( (n) => (n.selected || n.id === nodeId) && (!n.parentNode || !isParentSelected(n, nodes)) diff --git a/packages/svelte/src/lib/actions/zoom/index.ts b/packages/svelte/src/lib/actions/zoom/index.ts index 29d0a1061..6c1ee091e 100644 --- a/packages/svelte/src/lib/actions/zoom/index.ts +++ b/packages/svelte/src/lib/actions/zoom/index.ts @@ -40,9 +40,9 @@ function filter(event: any, params: ZoomParams): boolean { // } // // if the target element is inside an element with the nopan class, we prevent panning - // if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { - // return false; - // } + if (isWrappedWithClass(event, 'nopan') && event.type !== 'wheel') { + return false; + } // if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { // return false; diff --git a/packages/svelte/src/lib/components/NodeSelection/index.svelte b/packages/svelte/src/lib/components/NodeSelection/index.svelte index 04295e15f..64a9e4094 100644 --- a/packages/svelte/src/lib/components/NodeSelection/index.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/index.svelte @@ -3,16 +3,20 @@ import { useStore } from '$lib/store'; import Selection from '$lib/components/Selection/index.svelte'; + import drag from '$lib/actions/drag' - const { selectionRectModeStore, nodesStore, nodeOriginStore } = useStore(); + const { selectionRectModeStore, nodesStore, nodeOriginStore, transformStore, updateNodePositions } = useStore(); $: selectedNodes = $nodesStore.filter(n => n.selected); $: rect = getRectOfNodes(selectedNodes, $nodeOriginStore); - - // @todo: use zoom action for selection {#if selectedNodes} +
{/if} + + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/Selection/index.svelte b/packages/svelte/src/lib/components/Selection/index.svelte index 4c8f4946d..9cb9a4c27 100644 --- a/packages/svelte/src/lib/components/Selection/index.svelte +++ b/packages/svelte/src/lib/components/Selection/index.svelte @@ -9,7 +9,7 @@ {#if isVisible}
{/if} diff --git a/packages/svelte/src/lib/container/Panel.svelte b/packages/svelte/src/lib/container/Panel/index.svelte similarity index 93% rename from packages/svelte/src/lib/container/Panel.svelte rename to packages/svelte/src/lib/container/Panel/index.svelte index e87917d9a..ce4313cbc 100644 --- a/packages/svelte/src/lib/container/Panel.svelte +++ b/packages/svelte/src/lib/container/Panel/index.svelte @@ -3,6 +3,7 @@ import cc from 'classcat'; export let position: PanelPosition = 'top-right'; + export let style: string = ''; export { className as class } let className: string; @@ -12,6 +13,7 @@
diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index a2dbe617b..cc39ec560 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -2,5 +2,6 @@ import SvelteFlow from '$lib/container/SvelteFlow.svelte'; export { Controls, ControlButton } from '$lib/plugins/Controls'; export { Background, BackgroundVariant } from '$lib/plugins/Background'; export { Minimap } from '$lib/plugins/Minimap'; +export { default as Panel } from '$lib/container/Panel/index.svelte'; export default SvelteFlow; diff --git a/packages/svelte/src/lib/plugins/Controls/Controls.svelte b/packages/svelte/src/lib/plugins/Controls/Controls.svelte index a36436b09..a2bba0c9e 100644 --- a/packages/svelte/src/lib/plugins/Controls/Controls.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Controls.svelte @@ -1,7 +1,7 @@ - + - - - \ No newline at end of file + \ No newline at end of file From aea43103afdbffa58b52a8f9172ace02adee5753 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 21 Feb 2023 14:36:07 +0100 Subject: [PATCH 0015/1093] feat(svelte): custom nodes --- packages/svelte/src/app.html | 1 + packages/svelte/src/customnodes/Custom.svelte | 22 ++++ .../{Handle.svelte => Handle/index.svelte} | 24 ++-- .../src/lib/components/nodes/BaseNode.svelte | 35 +++-- .../lib/components/nodes/DefaultNode.svelte | 17 ++- .../src/lib/components/nodes/InputNode.svelte | 13 ++ .../lib/components/nodes/OutputNode.svelte | 13 ++ .../src/lib/container/SvelteFlow.svelte | 6 +- packages/svelte/src/lib/store/index.ts | 14 ++ packages/svelte/src/lib/types/index.ts | 15 +++ packages/svelte/src/routes/+page.svelte | 9 +- pnpm-lock.yaml | 120 +++++++++--------- 12 files changed, 199 insertions(+), 90 deletions(-) create mode 100644 packages/svelte/src/customnodes/Custom.svelte rename packages/svelte/src/lib/components/{Handle.svelte => Handle/index.svelte} (78%) create mode 100644 packages/svelte/src/lib/components/nodes/InputNode.svelte create mode 100644 packages/svelte/src/lib/components/nodes/OutputNode.svelte create mode 100644 packages/svelte/src/lib/types/index.ts diff --git a/packages/svelte/src/app.html b/packages/svelte/src/app.html index f04b760ba..9e4c67b44 100644 --- a/packages/svelte/src/app.html +++ b/packages/svelte/src/app.html @@ -10,6 +10,7 @@ #root { height: 100%; margin: 0; + font-family: Arial, Helvetica, sans-serif; } %sveltekit.head% diff --git a/packages/svelte/src/customnodes/Custom.svelte b/packages/svelte/src/customnodes/Custom.svelte new file mode 100644 index 000000000..410571234 --- /dev/null +++ b/packages/svelte/src/customnodes/Custom.svelte @@ -0,0 +1,22 @@ + + +
+
{data.label}
+
{~~xPos}, {~~yPos}
+ + +
+ + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/Handle.svelte b/packages/svelte/src/lib/components/Handle/index.svelte similarity index 78% rename from packages/svelte/src/lib/components/Handle.svelte rename to packages/svelte/src/lib/components/Handle/index.svelte index 2e8798c02..3658bce58 100644 --- a/packages/svelte/src/lib/components/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/index.svelte @@ -6,13 +6,14 @@ export let type: HandleType = 'source'; export let position: Position = Position.Top; export let id: string | null = null; - export let className: string | null = null;; + + let className: string | null = null; + export { className as class }; const isTarget = type === 'target'; const nodeId = getContext('rf_nodeid'); -
- +
@@ -46,27 +47,26 @@ } .bottom { - top: auto; + top: 100%; left: 50%; - bottom: -4px; - transform: translate(-50%, 0); + transform: translate(-50%, -50%); } .top { left: 50%; - top: -4px; - transform: translate(-50%, 0); + top: 0; + transform: translate(-50%, -50%); } .left { top: 50%; - left: -4px; - transform: translate(0, -50%); + left: 0; + transform: translate(-50%, -50%); } .right { - right: -4px; top: 50%; - transform: translate(0, -50%); + left: 100%; + transform: translate(-50%, -50%); } \ No newline at end of file diff --git a/packages/svelte/src/lib/components/nodes/BaseNode.svelte b/packages/svelte/src/lib/components/nodes/BaseNode.svelte index cda672574..55274bbff 100644 --- a/packages/svelte/src/lib/components/nodes/BaseNode.svelte +++ b/packages/svelte/src/lib/components/nodes/BaseNode.svelte @@ -1,24 +1,30 @@ diff --git a/packages/svelte/src/lib/components/nodes/InputNode.svelte b/packages/svelte/src/lib/components/nodes/InputNode.svelte new file mode 100644 index 000000000..4fddf908d --- /dev/null +++ b/packages/svelte/src/lib/components/nodes/InputNode.svelte @@ -0,0 +1,13 @@ + + +{data?.label} + + diff --git a/packages/svelte/src/lib/components/nodes/OutputNode.svelte b/packages/svelte/src/lib/components/nodes/OutputNode.svelte new file mode 100644 index 000000000..41c31a2f2 --- /dev/null +++ b/packages/svelte/src/lib/components/nodes/OutputNode.svelte @@ -0,0 +1,13 @@ + + +{data?.label} + + diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte index f2617ae4c..32086d481 100644 --- a/packages/svelte/src/lib/container/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -1,5 +1,5 @@ - + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45c45930a..74088eff3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,8 +32,8 @@ importers: '@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.7 '@changesets/cli': registry.npmjs.org/@changesets/cli/2.25.0 '@preconstruct/cli': registry.npmjs.org/@preconstruct/cli/2.2.1 - '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.52.0_gyett2pgucfcswo4a3gkpdas2y - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.52.0_id2eilsndvzhjjktb64trvy3gu + '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.53.0_qwaoy36sxxjkr7fbascfous7zi + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.53.0_id2eilsndvzhjjktb64trvy3gu autoprefixer: registry.npmjs.org/autoprefixer/10.4.9_postcss@8.4.21 concurrently: registry.npmjs.org/concurrently/7.6.0 cypress: registry.npmjs.org/cypress/10.7.0 @@ -310,8 +310,8 @@ importers: packages/svelte: specifiers: - '@reactflow/system': workspace:11.5.5 - '@reactflow/utils': workspace:^11.5.5 + '@reactflow/system': workspace:* + '@reactflow/utils': workspace:* '@svelte-put/shortcut': ^2.0.0 '@sveltejs/adapter-auto': ^2.0.0 '@sveltejs/kit': ^1.5.6 @@ -432,7 +432,7 @@ importers: devDependencies: eslint: registry.npmjs.org/eslint/8.23.1 eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.23.1 - eslint-config-turbo: registry.npmjs.org/eslint-config-turbo/0.0.7_eslint@8.23.1 + eslint-config-turbo: registry.npmjs.org/eslint-config-turbo/0.0.8_eslint@8.23.1 eslint-plugin-react: registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.23.1 tooling/rollup-config: @@ -2491,11 +2491,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/eslint-plugin/5.52.0_gyett2pgucfcswo4a3gkpdas2y: - resolution: {integrity: sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.52.0 + registry.npmjs.org/@typescript-eslint/eslint-plugin/5.53.0_qwaoy36sxxjkr7fbascfous7zi: + resolution: {integrity: sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.53.0 name: '@typescript-eslint/eslint-plugin' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -2505,10 +2505,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.52.0_id2eilsndvzhjjktb64trvy3gu - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.52.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.52.0_id2eilsndvzhjjktb64trvy3gu - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.52.0_id2eilsndvzhjjktb64trvy3gu + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.53.0_id2eilsndvzhjjktb64trvy3gu + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.53.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.53.0_id2eilsndvzhjjktb64trvy3gu + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.53.0_id2eilsndvzhjjktb64trvy3gu debug: registry.npmjs.org/debug/4.3.4 eslint: registry.npmjs.org/eslint/8.23.1 grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 @@ -2545,11 +2545,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/parser/5.52.0_id2eilsndvzhjjktb64trvy3gu: - resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/5.52.0 + registry.npmjs.org/@typescript-eslint/parser/5.53.0_id2eilsndvzhjjktb64trvy3gu: + resolution: {integrity: sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/5.53.0 name: '@typescript-eslint/parser' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2558,9 +2558,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.52.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.52.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.52.0_typescript@4.9.4 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.53.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.53.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.53.0_typescript@4.9.4 debug: registry.npmjs.org/debug/4.3.4 eslint: registry.npmjs.org/eslint/8.23.1 typescript: registry.npmjs.org/typescript/4.9.4 @@ -2578,14 +2578,14 @@ packages: '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.49.0 dev: true - registry.npmjs.org/@typescript-eslint/scope-manager/5.52.0: - resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz} + registry.npmjs.org/@typescript-eslint/scope-manager/5.53.0: + resolution: {integrity: sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz} name: '@typescript-eslint/scope-manager' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.52.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.52.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.53.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.53.0 dev: true registry.npmjs.org/@typescript-eslint/type-utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u: @@ -2611,11 +2611,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/type-utils/5.52.0_id2eilsndvzhjjktb64trvy3gu: - resolution: {integrity: sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/5.52.0 + registry.npmjs.org/@typescript-eslint/type-utils/5.53.0_id2eilsndvzhjjktb64trvy3gu: + resolution: {integrity: sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/5.53.0 name: '@typescript-eslint/type-utils' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -2624,8 +2624,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.52.0_typescript@4.9.4 - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.52.0_id2eilsndvzhjjktb64trvy3gu + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.53.0_typescript@4.9.4 + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.53.0_id2eilsndvzhjjktb64trvy3gu debug: registry.npmjs.org/debug/4.3.4 eslint: registry.npmjs.org/eslint/8.23.1 tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 @@ -2641,10 +2641,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@typescript-eslint/types/5.52.0: - resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz} + registry.npmjs.org/@typescript-eslint/types/5.53.0: + resolution: {integrity: sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz} name: '@typescript-eslint/types' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -2672,11 +2672,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree/5.52.0_typescript@4.9.4: - resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.52.0 + registry.npmjs.org/@typescript-eslint/typescript-estree/5.53.0_typescript@4.9.4: + resolution: {integrity: sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.53.0 name: '@typescript-eslint/typescript-estree' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2684,8 +2684,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.52.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.52.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.53.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.53.0 debug: registry.npmjs.org/debug/4.3.4 globby: registry.npmjs.org/globby/11.1.0 is-glob: registry.npmjs.org/is-glob/4.0.3 @@ -2719,20 +2719,20 @@ packages: - typescript dev: true - registry.npmjs.org/@typescript-eslint/utils/5.52.0_id2eilsndvzhjjktb64trvy3gu: - resolution: {integrity: sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/5.52.0 + registry.npmjs.org/@typescript-eslint/utils/5.53.0_id2eilsndvzhjjktb64trvy3gu: + resolution: {integrity: sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/5.53.0 name: '@typescript-eslint/utils' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11 '@types/semver': registry.npmjs.org/@types/semver/7.3.13 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.52.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.52.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.52.0_typescript@4.9.4 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.53.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.53.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.53.0_typescript@4.9.4 eslint: registry.npmjs.org/eslint/8.23.1 eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 eslint-utils: registry.npmjs.org/eslint-utils/3.0.0_eslint@8.23.1 @@ -2752,13 +2752,13 @@ packages: eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 dev: true - registry.npmjs.org/@typescript-eslint/visitor-keys/5.52.0: - resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz} + registry.npmjs.org/@typescript-eslint/visitor-keys/5.53.0: + resolution: {integrity: sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz} name: '@typescript-eslint/visitor-keys' - version: 5.52.0 + version: 5.53.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.52.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.53.0 eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 dev: true @@ -4163,16 +4163,16 @@ packages: eslint: registry.npmjs.org/eslint/8.33.0 dev: true - registry.npmjs.org/eslint-config-turbo/0.0.7_eslint@8.23.1: - resolution: {integrity: sha512-WbrGlyfs94rOXrhombi1wjIAYGdV2iosgJRndOZtmDQeq5GLTzYmBUCJQZWtLBEBUPCj96RxZ2OL7Cn+xv/Azg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-0.0.7.tgz} - id: registry.npmjs.org/eslint-config-turbo/0.0.7 + registry.npmjs.org/eslint-config-turbo/0.0.8_eslint@8.23.1: + resolution: {integrity: sha512-ijj6uv0QX2kWahg3OYnTK1/q4MueXsqY2uE4MP9yeUA5CzVhL7GU+biKlv1BfMMqPltixHUcpZoW4yyNLCnMiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-0.0.8.tgz} + id: registry.npmjs.org/eslint-config-turbo/0.0.8 name: eslint-config-turbo - version: 0.0.7 + version: 0.0.8 peerDependencies: eslint: '>6.6.0' dependencies: eslint: registry.npmjs.org/eslint/8.23.1 - eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo/0.0.7_eslint@8.23.1 + eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo/0.0.8_eslint@8.23.1 dev: true registry.npmjs.org/eslint-plugin-prettier/4.2.1_cabrci5exjdaojcvd6xoxgeowu: @@ -4235,11 +4235,11 @@ packages: svelte: registry.npmjs.org/svelte/3.55.1 dev: true - registry.npmjs.org/eslint-plugin-turbo/0.0.7_eslint@8.23.1: - resolution: {integrity: sha512-iajOH8eD4jha3duztGVBD1BEmvNrQBaA/y3HFHf91vMDRYRwH7BpHSDFtxydDpk5ghlhRxG299SFxz7D6z4MBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-0.0.7.tgz} - id: registry.npmjs.org/eslint-plugin-turbo/0.0.7 + registry.npmjs.org/eslint-plugin-turbo/0.0.8_eslint@8.23.1: + resolution: {integrity: sha512-pExSCmjWw/KFKb3/0PVqxiWb30FbcwDEf6kKv3alvNBSVEzDHalyAGHc9klbLSG+nFmbkfNE3Ky/UHDryCqt8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-0.0.8.tgz} + id: registry.npmjs.org/eslint-plugin-turbo/0.0.8 name: eslint-plugin-turbo - version: 0.0.7 + version: 0.0.8 peerDependencies: eslint: '>6.6.0' dependencies: From 2497a36db3078ffaa71cd9cfdf746aeaf274bfc2 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 22 Feb 2023 10:23:05 +0100 Subject: [PATCH 0016/1093] feat(packages): add edge-utils --- packages/edge-utils/.eslintrc.js | 4 + packages/edge-utils/README.md | 10 ++ packages/edge-utils/package.json | 59 +++++++ packages/edge-utils/src/bezier-edge.ts | 115 ++++++++++++ packages/edge-utils/src/general.ts | 30 ++++ packages/edge-utils/src/index.ts | 4 + packages/edge-utils/src/smoothstep-edge.ts | 195 +++++++++++++++++++++ packages/edge-utils/src/straight-edge.ts | 24 +++ packages/edge-utils/tsconfig.json | 6 + 9 files changed, 447 insertions(+) create mode 100644 packages/edge-utils/.eslintrc.js create mode 100644 packages/edge-utils/README.md create mode 100644 packages/edge-utils/package.json create mode 100644 packages/edge-utils/src/bezier-edge.ts create mode 100644 packages/edge-utils/src/general.ts create mode 100644 packages/edge-utils/src/index.ts create mode 100644 packages/edge-utils/src/smoothstep-edge.ts create mode 100644 packages/edge-utils/src/straight-edge.ts create mode 100644 packages/edge-utils/tsconfig.json diff --git a/packages/edge-utils/.eslintrc.js b/packages/edge-utils/.eslintrc.js new file mode 100644 index 000000000..31cfbd113 --- /dev/null +++ b/packages/edge-utils/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['@reactflow/eslint-config'], +}; diff --git a/packages/edge-utils/README.md b/packages/edge-utils/README.md new file mode 100644 index 000000000..d87523edd --- /dev/null +++ b/packages/edge-utils/README.md @@ -0,0 +1,10 @@ +# @reactflow/core + +Core components and util functions of React Flow. + +## Installation + +```sh +npm install @reactflow/core +``` + diff --git a/packages/edge-utils/package.json b/packages/edge-utils/package.json new file mode 100644 index 000000000..108ac79a0 --- /dev/null +++ b/packages/edge-utils/package.json @@ -0,0 +1,59 @@ +{ + "name": "@reactflow/edge-utils", + "version": "11.5.5", + "description": "Core edge utils of React Flow for creating edge paths.", + "keywords": [ + "react", + "node-based UI", + "graph", + "diagram", + "workflow", + "react-flow" + ], + "files": [ + "dist" + ], + "source": "src/index.ts", + "main": "dist/umd/index.js", + "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", + "sideEffects": [ + "*.css" + ], + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/wbkd/react-flow.git", + "directory": "packages/edge-utils" + }, + "scripts": { + "dev": "rollup --config node:@reactflow/rollup-config --watch", + "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production", + "lint": "eslint --ext .js,.jsx,.ts,.tsx src", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@reactflow/system": "workspace:*" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + }, + "devDependencies": { + "@reactflow/eslint-config": "workspace:*", + "@reactflow/rollup-config": "workspace:*", + "@reactflow/tsconfig": "workspace:*", + "@types/node": "^18.7.16", + "@types/react": ">=17", + "@types/react-dom": ">=17", + "react": "^18.2.0", + "typescript": "^4.9.4" + }, + "rollup": { + "globals": {}, + "name": "ReactFlowEdgeUtils" + } +} diff --git a/packages/edge-utils/src/bezier-edge.ts b/packages/edge-utils/src/bezier-edge.ts new file mode 100644 index 000000000..50a1af089 --- /dev/null +++ b/packages/edge-utils/src/bezier-edge.ts @@ -0,0 +1,115 @@ +import { Position } from '@reactflow/system'; + +export type GetBezierPathParams = { + sourceX: number; + sourceY: number; + sourcePosition?: Position; + targetX: number; + targetY: number; + targetPosition?: Position; + curvature?: number; +}; + +export type GetControlWithCurvatureParams = { + pos: Position; + x1: number; + y1: number; + x2: number; + y2: number; + c: number; +}; + +export function getBezierEdgeCenter({ + sourceX, + sourceY, + targetX, + targetY, + sourceControlX, + sourceControlY, + targetControlX, + targetControlY, +}: { + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; + sourceControlX: number; + sourceControlY: number; + targetControlX: number; + targetControlY: number; +}): [number, number, number, number] { + // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate + // https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve + const centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125; + const centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125; + const offsetX = Math.abs(centerX - sourceX); + const offsetY = Math.abs(centerY - sourceY); + + return [centerX, centerY, offsetX, offsetY]; +} + +function calculateControlOffset(distance: number, curvature: number): number { + if (distance >= 0) { + return 0.5 * distance; + } + + return curvature * 25 * Math.sqrt(-distance); +} + +function getControlWithCurvature({ pos, x1, y1, x2, y2, c }: GetControlWithCurvatureParams): [number, number] { + switch (pos) { + case Position.Left: + return [x1 - calculateControlOffset(x1 - x2, c), y1]; + case Position.Right: + return [x1 + calculateControlOffset(x2 - x1, c), y1]; + case Position.Top: + return [x1, y1 - calculateControlOffset(y1 - y2, c)]; + case Position.Bottom: + return [x1, y1 + calculateControlOffset(y2 - y1, c)]; + } +} + +export function getBezierPath({ + sourceX, + sourceY, + sourcePosition = Position.Bottom, + targetX, + targetY, + targetPosition = Position.Top, + curvature = 0.25, +}: GetBezierPathParams): [path: string, labelX: number, labelY: number, offsetX: number, offsetY: number] { + const [sourceControlX, sourceControlY] = getControlWithCurvature({ + pos: sourcePosition, + x1: sourceX, + y1: sourceY, + x2: targetX, + y2: targetY, + c: curvature, + }); + const [targetControlX, targetControlY] = getControlWithCurvature({ + pos: targetPosition, + x1: targetX, + y1: targetY, + x2: sourceX, + y2: sourceY, + c: curvature, + }); + const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({ + sourceX, + sourceY, + targetX, + targetY, + sourceControlX, + sourceControlY, + targetControlX, + targetControlY, + }); + + return [ + `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`, + labelX, + labelY, + offsetX, + offsetY, + ]; +} diff --git a/packages/edge-utils/src/general.ts b/packages/edge-utils/src/general.ts new file mode 100644 index 000000000..16fcf90bd --- /dev/null +++ b/packages/edge-utils/src/general.ts @@ -0,0 +1,30 @@ +import { MarkerType } from '@reactflow/system'; + +// this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB) +export function getEdgeCenter({ + sourceX, + sourceY, + targetX, + targetY, +}: { + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; +}): [number, number, number, number] { + const xOffset = Math.abs(targetX - sourceX) / 2; + const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset; + + const yOffset = Math.abs(targetY - sourceY) / 2; + const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset; + + return [centerX, centerY, xOffset, yOffset]; +} + +export const getMarkerEnd = (markerType?: MarkerType, markerEndId?: string): string => { + if (typeof markerEndId !== 'undefined' && markerEndId) { + return `url(#${markerEndId})`; + } + + return typeof markerType !== 'undefined' ? `url(#react-flow__${markerType})` : 'none'; +}; diff --git a/packages/edge-utils/src/index.ts b/packages/edge-utils/src/index.ts new file mode 100644 index 000000000..78833a71e --- /dev/null +++ b/packages/edge-utils/src/index.ts @@ -0,0 +1,4 @@ +export * from './bezier-edge'; +export * from './straight-edge'; +export * from './smoothstep-edge'; +export * from './general'; diff --git a/packages/edge-utils/src/smoothstep-edge.ts b/packages/edge-utils/src/smoothstep-edge.ts new file mode 100644 index 000000000..84912f195 --- /dev/null +++ b/packages/edge-utils/src/smoothstep-edge.ts @@ -0,0 +1,195 @@ +import { Position, XYPosition } from '@reactflow/system'; +import { getEdgeCenter } from './general'; + +export interface GetSmoothStepPathParams { + sourceX: number; + sourceY: number; + sourcePosition?: Position; + targetX: number; + targetY: number; + targetPosition?: Position; + borderRadius?: number; + centerX?: number; + centerY?: number; + offset?: number; +} + +const handleDirections = { + [Position.Left]: { x: -1, y: 0 }, + [Position.Right]: { x: 1, y: 0 }, + [Position.Top]: { x: 0, y: -1 }, + [Position.Bottom]: { x: 0, y: 1 }, +}; + +const getDirection = ({ + source, + sourcePosition = Position.Bottom, + target, +}: { + source: XYPosition; + sourcePosition: Position; + target: XYPosition; +}): XYPosition => { + if (sourcePosition === Position.Left || sourcePosition === Position.Right) { + return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 }; + } + return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 }; +}; + +const distance = (a: XYPosition, b: XYPosition) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2)); + +// ith this function we try to mimic a orthogonal edge routing behaviour +// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges +function getPoints({ + source, + sourcePosition = Position.Bottom, + target, + targetPosition = Position.Top, + center, + offset, +}: { + source: XYPosition; + sourcePosition: Position; + target: XYPosition; + targetPosition: Position; + center: Partial; + offset: number; +}): [XYPosition[], number, number, number, number] { + const sourceDir = handleDirections[sourcePosition]; + const targetDir = handleDirections[targetPosition]; + const sourceGapped: XYPosition = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset }; + const targetGapped: XYPosition = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset }; + const dir = getDirection({ + source: sourceGapped, + sourcePosition, + target: targetGapped, + }); + const dirAccessor = dir.x !== 0 ? 'x' : 'y'; + const currDir = dir[dirAccessor]; + + let points: XYPosition[] = []; + let centerX, centerY; + const [defaultCenterX, defaultCenterY, defaultOffsetX, defaultOffsetY] = getEdgeCenter({ + sourceX: source.x, + sourceY: source.y, + targetX: target.x, + targetY: target.y, + }); + + // opposite handle positions, default case + if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) { + centerX = center.x || defaultCenterX; + centerY = center.y || defaultCenterY; + // ---> + // | + // >--- + const verticalSplit: XYPosition[] = [ + { x: centerX, y: sourceGapped.y }, + { x: centerX, y: targetGapped.y }, + ]; + // | + // --- + // | + const horizontalSplit: XYPosition[] = [ + { x: sourceGapped.x, y: centerY }, + { x: targetGapped.x, y: centerY }, + ]; + + if (sourceDir[dirAccessor] === currDir) { + points = dirAccessor === 'x' ? verticalSplit : horizontalSplit; + } else { + points = dirAccessor === 'x' ? horizontalSplit : verticalSplit; + } + } else { + // sourceTarget means we take x from source and y from target, targetSource is the opposite + const sourceTarget: XYPosition[] = [{ x: sourceGapped.x, y: targetGapped.y }]; + const targetSource: XYPosition[] = [{ x: targetGapped.x, y: sourceGapped.y }]; + // this handles edges with same handle positions + if (dirAccessor === 'x') { + points = sourceDir.x === currDir ? targetSource : sourceTarget; + } else { + points = sourceDir.y === currDir ? sourceTarget : targetSource; + } + + // these are conditions for handling mixed handle positions like Right -> Bottom for example + if (sourcePosition !== targetPosition) { + const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x'; + const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite]; + const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite]; + const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite]; + const flipSourceTarget = + (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) || + (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo))); + + if (flipSourceTarget) { + points = dirAccessor === 'x' ? sourceTarget : targetSource; + } + } + + centerX = points[0].x; + centerY = points[0].y; + } + + const pathPoints = [source, sourceGapped, ...points, targetGapped, target]; + + return [pathPoints, centerX, centerY, defaultOffsetX, defaultOffsetY]; +} + +function getBend(a: XYPosition, b: XYPosition, c: XYPosition, size: number): string { + const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size); + const { x, y } = b; + + // no bend + if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) { + return `L${x} ${y}`; + } + + // first segment is horizontal + if (a.y === y) { + const xDir = a.x < c.x ? -1 : 1; + const yDir = a.y < c.y ? 1 : -1; + return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`; + } + + const xDir = a.x < c.x ? 1 : -1; + const yDir = a.y < c.y ? -1 : 1; + return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`; +} + +export function getSmoothStepPath({ + sourceX, + sourceY, + sourcePosition = Position.Bottom, + targetX, + targetY, + targetPosition = Position.Top, + borderRadius = 5, + centerX, + centerY, + offset = 20, +}: GetSmoothStepPathParams): [path: string, labelX: number, labelY: number, offsetX: number, offsetY: number] { + const [points, labelX, labelY, offsetX, offsetY] = getPoints({ + source: { x: sourceX, y: sourceY }, + sourcePosition, + target: { x: targetX, y: targetY }, + targetPosition, + center: { x: centerX, y: centerY }, + offset, + }); + + const path = points.reduce((res, p, i) => { + let segment = ''; + + if (i > 0 && i < points.length - 1) { + segment = getBend(points[i - 1], p, points[i + 1], borderRadius); + } else { + segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`; + } + + res += segment; + + return res; + }, ''); + + return [path, labelX, labelY, offsetX, offsetY]; +} diff --git a/packages/edge-utils/src/straight-edge.ts b/packages/edge-utils/src/straight-edge.ts new file mode 100644 index 000000000..9cc6d9288 --- /dev/null +++ b/packages/edge-utils/src/straight-edge.ts @@ -0,0 +1,24 @@ +import { getEdgeCenter } from './general'; + +export type GetStraightPathParams = { + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; +}; + +export function getStraightPath({ + sourceX, + sourceY, + targetX, + targetY, +}: GetStraightPathParams): [path: string, labelX: number, labelY: number, offsetX: number, offsetY: number] { + const [labelX, labelY, offsetX, offsetY] = getEdgeCenter({ + sourceX, + sourceY, + targetX, + targetY, + }); + + return [`M ${sourceX},${sourceY}L ${targetX},${targetY}`, labelX, labelY, offsetX, offsetY]; +} diff --git a/packages/edge-utils/tsconfig.json b/packages/edge-utils/tsconfig.json new file mode 100644 index 000000000..b61349bb5 --- /dev/null +++ b/packages/edge-utils/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@reactflow/tsconfig/react.json", + "display": "@reactflow/utils", + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "dist"] +} From b3de45ce1aba279ab9260ea8ad97284473cb5904 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 22 Feb 2023 10:23:26 +0100 Subject: [PATCH 0017/1093] refactor(core): use edge-utils --- packages/core/package.json | 1 + .../src/components/ConnectionLine/index.tsx | 3 +- .../core/src/components/Edges/BezierEdge.tsx | 87 +------- .../src/components/Edges/SimpleBezierEdge.tsx | 2 +- .../src/components/Edges/SmoothStepEdge.tsx | 197 +----------------- .../src/components/Edges/StraightEdge.tsx | 25 +-- packages/core/src/components/Edges/utils.ts | 60 +----- packages/core/src/index.ts | 8 +- 8 files changed, 12 insertions(+), 371 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index e47b565ea..b8826a167 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,6 +38,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@reactflow/edge-utils": "workspace:*", "@reactflow/system": "workspace:*", "@reactflow/utils": "workspace:*", "@types/d3": "^7.4.0", diff --git a/packages/core/src/components/ConnectionLine/index.tsx b/packages/core/src/components/ConnectionLine/index.tsx index 990ccbe11..0c3c0a704 100644 --- a/packages/core/src/components/ConnectionLine/index.tsx +++ b/packages/core/src/components/ConnectionLine/index.tsx @@ -12,10 +12,9 @@ import { type ReactFlowState, type ReactFlowStore, } from '@reactflow/system'; +import { getBezierPath, getSmoothStepPath } from '@reactflow/edge-utils'; import { useStore } from '../../hooks/useStore'; -import { getBezierPath } from '../Edges/BezierEdge'; -import { getSmoothStepPath } from '../Edges/SmoothStepEdge'; import { getSimpleBezierPath } from '../Edges/SimpleBezierEdge'; type ConnectionLineProps = { diff --git a/packages/core/src/components/Edges/BezierEdge.tsx b/packages/core/src/components/Edges/BezierEdge.tsx index 11fca8eb1..443877b27 100644 --- a/packages/core/src/components/Edges/BezierEdge.tsx +++ b/packages/core/src/components/Edges/BezierEdge.tsx @@ -1,93 +1,8 @@ import { memo } from 'react'; import { Position, type BezierEdgeProps } from '@reactflow/system'; +import { getBezierPath } from '@reactflow/edge-utils'; import BaseEdge from './BaseEdge'; -import { getBezierEdgeCenter } from './utils'; - -export interface GetBezierPathParams { - sourceX: number; - sourceY: number; - sourcePosition?: Position; - targetX: number; - targetY: number; - targetPosition?: Position; - curvature?: number; -} - -interface GetControlWithCurvatureParams { - pos: Position; - x1: number; - y1: number; - x2: number; - y2: number; - c: number; -} - -function calculateControlOffset(distance: number, curvature: number): number { - if (distance >= 0) { - return 0.5 * distance; - } - - return curvature * 25 * Math.sqrt(-distance); -} - -function getControlWithCurvature({ pos, x1, y1, x2, y2, c }: GetControlWithCurvatureParams): [number, number] { - switch (pos) { - case Position.Left: - return [x1 - calculateControlOffset(x1 - x2, c), y1]; - case Position.Right: - return [x1 + calculateControlOffset(x2 - x1, c), y1]; - case Position.Top: - return [x1, y1 - calculateControlOffset(y1 - y2, c)]; - case Position.Bottom: - return [x1, y1 + calculateControlOffset(y2 - y1, c)]; - } -} - -export function getBezierPath({ - sourceX, - sourceY, - sourcePosition = Position.Bottom, - targetX, - targetY, - targetPosition = Position.Top, - curvature = 0.25, -}: GetBezierPathParams): [path: string, labelX: number, labelY: number, offsetX: number, offsetY: number] { - const [sourceControlX, sourceControlY] = getControlWithCurvature({ - pos: sourcePosition, - x1: sourceX, - y1: sourceY, - x2: targetX, - y2: targetY, - c: curvature, - }); - const [targetControlX, targetControlY] = getControlWithCurvature({ - pos: targetPosition, - x1: targetX, - y1: targetY, - x2: sourceX, - y2: sourceY, - c: curvature, - }); - const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({ - sourceX, - sourceY, - targetX, - targetY, - sourceControlX, - sourceControlY, - targetControlX, - targetControlY, - }); - - return [ - `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`, - labelX, - labelY, - offsetX, - offsetY, - ]; -} const BezierEdge = memo( ({ diff --git a/packages/core/src/components/Edges/SimpleBezierEdge.tsx b/packages/core/src/components/Edges/SimpleBezierEdge.tsx index f2de142f5..54236c987 100644 --- a/packages/core/src/components/Edges/SimpleBezierEdge.tsx +++ b/packages/core/src/components/Edges/SimpleBezierEdge.tsx @@ -1,8 +1,8 @@ import { memo } from 'react'; import { Position, type EdgeProps } from '@reactflow/system'; +import { getBezierEdgeCenter } from '@reactflow/edge-utils'; import BaseEdge from './BaseEdge'; -import { getBezierEdgeCenter } from './utils'; export interface GetSimpleBezierPathParams { sourceX: number; diff --git a/packages/core/src/components/Edges/SmoothStepEdge.tsx b/packages/core/src/components/Edges/SmoothStepEdge.tsx index 796871487..a5de79765 100644 --- a/packages/core/src/components/Edges/SmoothStepEdge.tsx +++ b/packages/core/src/components/Edges/SmoothStepEdge.tsx @@ -1,201 +1,8 @@ import { memo } from 'react'; -import { Position, type SmoothStepEdgeProps, type XYPosition } from '@reactflow/system'; +import { Position, type SmoothStepEdgeProps } from '@reactflow/system'; +import { getSmoothStepPath } from '@reactflow/edge-utils'; import BaseEdge from './BaseEdge'; -import { getEdgeCenter } from './utils'; - -export interface GetSmoothStepPathParams { - sourceX: number; - sourceY: number; - sourcePosition?: Position; - targetX: number; - targetY: number; - targetPosition?: Position; - borderRadius?: number; - centerX?: number; - centerY?: number; - offset?: number; -} - -const handleDirections = { - [Position.Left]: { x: -1, y: 0 }, - [Position.Right]: { x: 1, y: 0 }, - [Position.Top]: { x: 0, y: -1 }, - [Position.Bottom]: { x: 0, y: 1 }, -}; - -const getDirection = ({ - source, - sourcePosition = Position.Bottom, - target, -}: { - source: XYPosition; - sourcePosition: Position; - target: XYPosition; -}): XYPosition => { - if (sourcePosition === Position.Left || sourcePosition === Position.Right) { - return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 }; - } - return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 }; -}; - -const distance = (a: XYPosition, b: XYPosition) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2)); - -// ith this function we try to mimic a orthogonal edge routing behaviour -// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges -function getPoints({ - source, - sourcePosition = Position.Bottom, - target, - targetPosition = Position.Top, - center, - offset, -}: { - source: XYPosition; - sourcePosition: Position; - target: XYPosition; - targetPosition: Position; - center: Partial; - offset: number; -}): [XYPosition[], number, number, number, number] { - const sourceDir = handleDirections[sourcePosition]; - const targetDir = handleDirections[targetPosition]; - const sourceGapped: XYPosition = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset }; - const targetGapped: XYPosition = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset }; - const dir = getDirection({ - source: sourceGapped, - sourcePosition, - target: targetGapped, - }); - const dirAccessor = dir.x !== 0 ? 'x' : 'y'; - const currDir = dir[dirAccessor]; - - let points: XYPosition[] = []; - let centerX, centerY; - const [defaultCenterX, defaultCenterY, defaultOffsetX, defaultOffsetY] = getEdgeCenter({ - sourceX: source.x, - sourceY: source.y, - targetX: target.x, - targetY: target.y, - }); - - // opposite handle positions, default case - if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) { - centerX = center.x || defaultCenterX; - centerY = center.y || defaultCenterY; - // ---> - // | - // >--- - const verticalSplit: XYPosition[] = [ - { x: centerX, y: sourceGapped.y }, - { x: centerX, y: targetGapped.y }, - ]; - // | - // --- - // | - const horizontalSplit: XYPosition[] = [ - { x: sourceGapped.x, y: centerY }, - { x: targetGapped.x, y: centerY }, - ]; - - if (sourceDir[dirAccessor] === currDir) { - points = dirAccessor === 'x' ? verticalSplit : horizontalSplit; - } else { - points = dirAccessor === 'x' ? horizontalSplit : verticalSplit; - } - } else { - // sourceTarget means we take x from source and y from target, targetSource is the opposite - const sourceTarget: XYPosition[] = [{ x: sourceGapped.x, y: targetGapped.y }]; - const targetSource: XYPosition[] = [{ x: targetGapped.x, y: sourceGapped.y }]; - // this handles edges with same handle positions - if (dirAccessor === 'x') { - points = sourceDir.x === currDir ? targetSource : sourceTarget; - } else { - points = sourceDir.y === currDir ? sourceTarget : targetSource; - } - - // these are conditions for handling mixed handle positions like Right -> Bottom for example - if (sourcePosition !== targetPosition) { - const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x'; - const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite]; - const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite]; - const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite]; - const flipSourceTarget = - (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) || - (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo))); - - if (flipSourceTarget) { - points = dirAccessor === 'x' ? sourceTarget : targetSource; - } - } - - centerX = points[0].x; - centerY = points[0].y; - } - - const pathPoints = [source, sourceGapped, ...points, targetGapped, target]; - - return [pathPoints, centerX, centerY, defaultOffsetX, defaultOffsetY]; -} - -function getBend(a: XYPosition, b: XYPosition, c: XYPosition, size: number): string { - const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size); - const { x, y } = b; - - // no bend - if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) { - return `L${x} ${y}`; - } - - // first segment is horizontal - if (a.y === y) { - const xDir = a.x < c.x ? -1 : 1; - const yDir = a.y < c.y ? 1 : -1; - return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`; - } - - const xDir = a.x < c.x ? 1 : -1; - const yDir = a.y < c.y ? -1 : 1; - return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`; -} - -export function getSmoothStepPath({ - sourceX, - sourceY, - sourcePosition = Position.Bottom, - targetX, - targetY, - targetPosition = Position.Top, - borderRadius = 5, - centerX, - centerY, - offset = 20, -}: GetSmoothStepPathParams): [path: string, labelX: number, labelY: number, offsetX: number, offsetY: number] { - const [points, labelX, labelY, offsetX, offsetY] = getPoints({ - source: { x: sourceX, y: sourceY }, - sourcePosition, - target: { x: targetX, y: targetY }, - targetPosition, - center: { x: centerX, y: centerY }, - offset, - }); - - const path = points.reduce((res, p, i) => { - let segment = ''; - - if (i > 0 && i < points.length - 1) { - segment = getBend(points[i - 1], p, points[i + 1], borderRadius); - } else { - segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`; - } - - res += segment; - - return res; - }, ''); - - return [path, labelX, labelY, offsetX, offsetY]; -} const SmoothStepEdge = memo( ({ diff --git a/packages/core/src/components/Edges/StraightEdge.tsx b/packages/core/src/components/Edges/StraightEdge.tsx index f99790f99..209a49847 100644 --- a/packages/core/src/components/Edges/StraightEdge.tsx +++ b/packages/core/src/components/Edges/StraightEdge.tsx @@ -1,31 +1,8 @@ import { memo } from 'react'; import type { EdgeProps } from '@reactflow/system'; +import { getStraightPath } from '@reactflow/edge-utils'; import BaseEdge from './BaseEdge'; -import { getEdgeCenter } from './utils'; - -export type GetStraightPathParams = { - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; -}; - -export function getStraightPath({ - sourceX, - sourceY, - targetX, - targetY, -}: GetStraightPathParams): [path: string, labelX: number, labelY: number, offsetX: number, offsetY: number] { - const [labelX, labelY, offsetX, offsetY] = getEdgeCenter({ - sourceX, - sourceY, - targetX, - targetY, - }); - - return [`M ${sourceX},${sourceY}L ${targetX},${targetY}`, labelX, labelY, offsetX, offsetY]; -} const StraightEdge = memo( ({ diff --git a/packages/core/src/components/Edges/utils.ts b/packages/core/src/components/Edges/utils.ts index 3c21c3eaf..31d8a2bfa 100644 --- a/packages/core/src/components/Edges/utils.ts +++ b/packages/core/src/components/Edges/utils.ts @@ -1,14 +1,6 @@ import { MouseEvent as ReactMouseEvent } from 'react'; import { StoreApi } from 'zustand'; -import type { Edge, MarkerType, ReactFlowState } from '@reactflow/system'; - -export const getMarkerEnd = (markerType?: MarkerType, markerEndId?: string): string => { - if (typeof markerEndId !== 'undefined' && markerEndId) { - return `url(#${markerEndId})`; - } - - return typeof markerType !== 'undefined' ? `url(#react-flow__${markerType})` : 'none'; -}; +import type { Edge, ReactFlowState } from '@reactflow/system'; export function getMouseHandler( id: string, @@ -25,53 +17,3 @@ export function getMouseHandler( } }; } - -// this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB) -export function getEdgeCenter({ - sourceX, - sourceY, - targetX, - targetY, -}: { - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; -}): [number, number, number, number] { - const xOffset = Math.abs(targetX - sourceX) / 2; - const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset; - - const yOffset = Math.abs(targetY - sourceY) / 2; - const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset; - - return [centerX, centerY, xOffset, yOffset]; -} - -export function getBezierEdgeCenter({ - sourceX, - sourceY, - targetX, - targetY, - sourceControlX, - sourceControlY, - targetControlX, - targetControlY, -}: { - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; - sourceControlX: number; - sourceControlY: number; - targetControlX: number; - targetControlY: number; -}): [number, number, number, number] { - // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate - // https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve - const centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125; - const centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125; - const offsetX = Math.abs(centerX - sourceX); - const offsetY = Math.abs(centerY - sourceY); - - return [centerX, centerY, offsetX, offsetY]; -} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index ae58a6c17..52d202f51 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,11 +1,11 @@ export { default as ReactFlow } from './container/ReactFlow'; export { default as Handle } from './components/Handle'; export { default as EdgeText } from './components/Edges/EdgeText'; -export { default as StraightEdge, getStraightPath } from './components/Edges/StraightEdge'; +export { default as StraightEdge } from './components/Edges/StraightEdge'; export { default as StepEdge } from './components/Edges/StepEdge'; -export { default as BezierEdge, getBezierPath } from './components/Edges/BezierEdge'; +export { default as BezierEdge } from './components/Edges/BezierEdge'; export { default as SimpleBezierEdge, getSimpleBezierPath } from './components/Edges/SimpleBezierEdge'; -export { default as SmoothStepEdge, getSmoothStepPath } from './components/Edges/SmoothStepEdge'; +export { default as SmoothStepEdge } from './components/Edges/SmoothStepEdge'; export { default as BaseEdge } from './components/Edges/BaseEdge'; export { @@ -24,7 +24,6 @@ export { getBoundsOfRects, } from '@reactflow/utils'; export { applyNodeChanges, applyEdgeChanges } from './utils/changes'; -export { getMarkerEnd } from './components/Edges/utils'; export { default as ReactFlowProvider } from './components/ReactFlowProvider'; export { default as Panel } from './components/Panel'; export { default as EdgeLabelRenderer } from './components/EdgeLabelRenderer'; @@ -43,5 +42,6 @@ export { default as useNodesInitialized } from './hooks/useNodesInitialized'; export { default as useGetPointerPosition } from './hooks/useGetPointerPosition'; export { useNodeId } from './contexts/NodeIdContext'; export * from '@reactflow/system'; +export * from '@reactflow/edge-utils'; // export * from './types'; From a0bdd9574e247a45f97973fbebae6edc94761bef Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 22 Feb 2023 10:38:32 +0100 Subject: [PATCH 0018/1093] feat(svelte): edge types, use edge-utils --- packages/svelte/package.json | 1 + packages/svelte/src/customnodes/Custom.svelte | 4 +- .../src/lib/components/edges/BaseEdge.svelte | 30 ++++- .../lib/components/edges/BezierEdge.svelte | 21 ++++ .../components/edges/SmoothStepEdge.svelte | 21 ++++ .../lib/components/edges/StraightEdge.svelte | 19 +++ .../src/lib/container/Pane/index.svelte | 48 ++++---- .../src/lib/container/Panel/index.svelte | 2 +- packages/svelte/src/lib/store/index.ts | 17 ++- packages/svelte/src/lib/types/index.ts | 12 ++ packages/svelte/src/routes/+page.svelte | 116 ++++++++++-------- packages/system/package.json | 2 +- packages/system/src/types/general.ts | 2 + packages/utils/package.json | 2 +- pnpm-lock.yaml | 4 + 15 files changed, 219 insertions(+), 82 deletions(-) create mode 100644 packages/svelte/src/lib/components/edges/BezierEdge.svelte create mode 100644 packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte create mode 100644 packages/svelte/src/lib/components/edges/StraightEdge.svelte diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 09e72ce24..cd4162bd6 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -16,6 +16,7 @@ ".": "./index.js" }, "dependencies": { + "@reactflow/edge-utils": "workspace:*", "@reactflow/system": "workspace:*", "@reactflow/utils": "workspace:*", "@svelte-put/shortcut": "^2.0.0", diff --git a/packages/svelte/src/customnodes/Custom.svelte b/packages/svelte/src/customnodes/Custom.svelte index 410571234..09b6c7f5e 100644 --- a/packages/svelte/src/customnodes/Custom.svelte +++ b/packages/svelte/src/customnodes/Custom.svelte @@ -10,8 +10,8 @@
{data.label}
{~~xPos}, {~~yPos}
- - + +
\ No newline at end of file diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte new file mode 100644 index 000000000..decca7929 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte new file mode 100644 index 000000000..6b0d1c42d --- /dev/null +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte new file mode 100644 index 000000000..285bbadc0 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -0,0 +1,19 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/Pane/index.svelte b/packages/svelte/src/lib/container/Pane/index.svelte index b4a033863..ba7580f08 100644 --- a/packages/svelte/src/lib/container/Pane/index.svelte +++ b/packages/svelte/src/lib/container/Pane/index.svelte @@ -1,14 +1,8 @@ - + + diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index d7daecabc..85ded208d 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -27,7 +27,10 @@ import { SelectionMode } from 'reactflow'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; import InputNode from '$lib/components/nodes/InputNode.svelte'; import OutputNode from '$lib/components/nodes/OutputNode.svelte'; -import type { NodeTypes } from '$lib/types'; +import type { EdgeTypes, NodeTypes } from '$lib/types'; +import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; +import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; +import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; export const key = Symbol(); @@ -38,6 +41,7 @@ type CreateStoreProps = { nodeOrigin?: NodeOrigin; transform?: Transform; nodeTypes?: NodeTypes; + edgeTypes?: EdgeTypes; id?: string; }; @@ -65,6 +69,7 @@ type SvelteFlowStore = { selectionMode: Writable; selectionKeyPressedStore: Writable; nodeTypesStore: Writable; + edgeTypesStore: Writable; zoomIn: (options?: ViewportHelperFunctionOptions) => void; zoomOut: (options?: ViewportHelperFunctionOptions) => void; fitView: (options?: ViewportHelperFunctionOptions) => boolean; @@ -84,6 +89,7 @@ export function createStore({ nodeOrigin = [0, 0], fitView: fitViewOnInit = false, nodeTypes = {}, + edgeTypes = {}, id = '1' }: CreateStoreProps): SvelteFlowStore { const nodesStore = writable(nodes.map((n) => ({ ...n, positionAbsolute: n.position }))); @@ -108,6 +114,13 @@ export function createStore({ default: nodeTypes.default || DefaultNode }); + const edgeTypesStore = writable({ + ...edgeTypes, + straight: edgeTypes.straight || StraightEdge, + smoothstep: edgeTypes.smoothstep || SmoothStepEdge, + default: edgeTypes.default || BezierEdge + }); + let fitViewOnInitDone = false; const edgesWithDataStore = derived([edgesStore, nodesStore], ([$edges, $nodes]) => { @@ -293,6 +306,7 @@ export function createStore({ selectionRectModeStore, selectionMode, nodeTypesStore, + edgeTypesStore, updateNodePositions, updateNodeDimensions, zoomIn, @@ -304,5 +318,6 @@ export function createStore({ export function useStore(): SvelteFlowStore { const { getStore } = getContext<{ getStore: () => SvelteFlowStore }>(key); + return getStore(); } diff --git a/packages/svelte/src/lib/types/index.ts b/packages/svelte/src/lib/types/index.ts index d295e4ec4..1bc07e7d4 100644 --- a/packages/svelte/src/lib/types/index.ts +++ b/packages/svelte/src/lib/types/index.ts @@ -13,3 +13,15 @@ export type NodeProps = Record>; + +export type EdgeProps = { + id: string; + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; + sourcePosition?: Position; + targetPosition?: Position; +}; + +export type EdgeTypes = Record>; diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index b2736b948..6a664f0a2 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -4,64 +4,84 @@ import SvelteFlow, { Controls, Background, BackgroundVariant, Minimap } from '../lib/index'; import CustomNode from '../customnodes/Custom.svelte'; - const yNodes = 10; - const xNodes = 10; - - const nodes: Node[] = []; - const edges: Edge[] = []; - const nodeTypes = { custom: CustomNode, }; - let source = null; + // const yNodes = 10; + // const xNodes = 10; - for (let y = 0; y < yNodes; y++) { - for (let x = 0; x < xNodes; x++) { - const position = { x: x * 100, y: y * 50 }; - const id = `${x}-${y}`; - const data = { label: `Node ${id}` }; - const node = { - id, - data, - position, - type: x === 0 ? 'custom' : 'default', - }; - nodes.push(node); + // const nodes: Node[] = []; + // const edges: Edge[] = []; - if (source) { - const edge = { - id: `${source.id}-${id}`, - source: source.id, - target: id, - }; - edges.push(edge); - } - source = node; - - } - } + // let source = null; + + // for (let y = 0; y < yNodes; y++) { + // for (let x = 0; x < xNodes; x++) { + // const position = { x: x * 100, y: y * 50 }; + // const id = `${x}-${y}`; + // const data = { label: `Node ${id}` }; + // const node = { + // id, + // data, + // position, + // type: x === 0 ? 'custom' : 'default', + // }; + // nodes.push(node); + + // if (source) { + // const edge = { + // id: `${source.id}-${id}`, + // source: source.id, + // target: id, + // }; + // edges.push(edge); + // } + + // source = node; + // } + // } - // const nodes = [{ - // id: '1', - // type: 'input', - // data: { label: 'Input Node' }, - // position: { x: 250, y: 5 } - // }, { - // id: '2', - // type: 'input', - // data: { label: 'Input Node 2' }, - // position: { x: 150, y: 250 }, - // }] + const nodes: Node[] = [{ + id: '1', + type: 'input', + data: { label: 'Input Node' }, + position: { x: 150, y: 5 } + }, { + id: '2', + type: 'default', + data: { label: 'Node' }, + position: { x: 0, y: 150 }, + }, { + id: '3', + type: 'output', + data: { label: 'Output Node' }, + position: { x: 300, y: 150 }, + }, { + id: '4', + type: 'custom', + data: { label: 'Custom Node' }, + position: { x: 150, y: 300 }, + }]; - // const edges = [{ - // id: '1-2', - // type: 'default', - // source: '1', - // target: '2' - // }] + const edges: Edge[] = [{ + id: '1-2', + type: 'default', + source: '1', + target: '2' + }, { + id: '1-3', + type: 'smoothstep', + source: '1', + target: '3' + }, { + id: '2-4', + type: 'default', + source: '2', + target: '4' + }]; diff --git a/packages/system/package.json b/packages/system/package.json index 48a6575c2..67654749d 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -57,6 +57,6 @@ }, "rollup": { "globals": {}, - "name": "ReactFlowCore" + "name": "ReactFlowSystem" } } diff --git a/packages/system/src/types/general.ts b/packages/system/src/types/general.ts index 3a488d884..94a0c81c3 100644 --- a/packages/system/src/types/general.ts +++ b/packages/system/src/types/general.ts @@ -77,6 +77,8 @@ export type FitViewParams = { nodeOrigin: NodeOrigin; d3Zoom: D3ZoomInstance; d3Selection: D3SelectionInstance; + minZoom: number; + maxZoom: number; }; export type FitViewOptions = { diff --git a/packages/utils/package.json b/packages/utils/package.json index 887cdd899..33b95963b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -59,6 +59,6 @@ }, "rollup": { "globals": {}, - "name": "ReactFlowCore" + "name": "ReactFlowUtils" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74088eff3..afe772ebc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -143,6 +143,7 @@ importers: packages/core: specifiers: + '@reactflow/edge-utils': workspace:^11.5.5 '@reactflow/eslint-config': workspace:* '@reactflow/rollup-config': workspace:* '@reactflow/system': workspace:* @@ -163,6 +164,7 @@ importers: typescript: ^4.9.4 zustand: ^4.3.3 dependencies: + '@reactflow/edge-utils': link:../edge-utils '@reactflow/system': link:../system '@reactflow/utils': link:../utils '@types/d3': registry.npmjs.org/@types/d3/7.4.0 @@ -310,6 +312,7 @@ importers: packages/svelte: specifiers: + '@reactflow/edge-utils': workspace:^11.5.5 '@reactflow/system': workspace:* '@reactflow/utils': workspace:* '@svelte-put/shortcut': ^2.0.0 @@ -335,6 +338,7 @@ importers: typescript: ^4.9.3 vite: ^4.1.1 dependencies: + '@reactflow/edge-utils': link:../edge-utils '@reactflow/system': link:../system '@reactflow/utils': link:../utils '@svelte-put/shortcut': registry.npmjs.org/@svelte-put/shortcut/2.0.0 From fb8d0d677ec8148d257b25b88e6d599cfa17f7a8 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 22 Feb 2023 11:07:16 +0100 Subject: [PATCH 0019/1093] chore(svelte): cleanup --- packages/svelte/src/lib/components/edges/BaseEdge.svelte | 2 +- packages/svelte/src/lib/components/edges/BezierEdge.svelte | 4 ++-- .../svelte/src/lib/components/edges/SmoothStepEdge.svelte | 4 ++-- packages/svelte/src/lib/components/nodes/BaseNode.svelte | 4 ++-- packages/svelte/src/lib/components/nodes/DefaultNode.svelte | 3 +-- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/svelte/src/lib/components/edges/BaseEdge.svelte b/packages/svelte/src/lib/components/edges/BaseEdge.svelte index fc8abc98c..1e70dbe61 100644 --- a/packages/svelte/src/lib/components/edges/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/edges/BaseEdge.svelte @@ -1,6 +1,6 @@ diff --git a/packages/svelte/src/lib/container/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/index.svelte similarity index 100% rename from packages/svelte/src/lib/container/NodeRenderer.svelte rename to packages/svelte/src/lib/container/NodeRenderer/index.svelte diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte index 32086d481..cfb30c2ef 100644 --- a/packages/svelte/src/lib/container/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -1,24 +1,23 @@
; - edgesStore: Writable; + nodesStore: Writable; + edgesStore: Writable; heightStore: Writable; widthStore: Writable; d3Store: Writable<{ @@ -69,6 +67,8 @@ type SvelteFlowStore = { selectionKeyPressedStore: Writable; nodeTypesStore: Writable; edgeTypesStore: Writable; + setNodes: (nodes: Node[]) => void; + setEdges: (edges: Edge[]) => void; zoomIn: (options?: ViewportHelperFunctionOptions) => void; zoomOut: (options?: ViewportHelperFunctionOptions) => void; fitView: (options?: ViewportHelperFunctionOptions) => boolean; @@ -82,8 +82,6 @@ type SvelteFlowStore = { }; export function createStore({ - nodes = [], - edges = [], transform = [0, 0, 1], nodeOrigin = [0, 0], fitView: fitViewOnInit = false, @@ -91,8 +89,8 @@ export function createStore({ edgeTypes = {}, id = '1' }: CreateStoreProps): SvelteFlowStore { - const nodesStore = writable(nodes.map((n) => ({ ...n, positionAbsolute: n.position }))); - const edgesStore = writable(edges); + const nodesStore = writable([] as Node[]); + const edgesStore = writable([] as Edge[]); const heightStore = writable(500); const widthStore = writable(500); const nodeOriginStore = writable(nodeOrigin); @@ -119,6 +117,7 @@ export function createStore({ smoothstep: edgeTypes.smoothstep || SmoothStepEdge, default: edgeTypes.default || BezierEdge }); + const transformStore = writable(transform); let fitViewOnInitDone = false; @@ -171,7 +170,25 @@ export function createStore({ .filter((e) => e !== null) as EdgeWithData[]; }); - const transformStore = writable(transform); + function setEdges(edges: Edge[]) { + edgesStore.set(edges); + } + + function setNodes(nodes: Node[]) { + nodesStore.update((currentNodes) => { + const nextNodes = nodes.map((n) => { + const currentNode = currentNodes.find((cn) => cn.id === n.id) || {}; + + return { + ...currentNode, + ...n, + positionAbsolute: n.position + }; + }); + + return nextNodes; + }); + } function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) { nodesStore.update((nds) => { @@ -310,6 +327,8 @@ export function createStore({ selectionMode, nodeTypesStore, edgeTypesStore, + setNodes, + setEdges, updateNodePositions, updateNodeDimensions, zoomIn, diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index 82961ca95..3218b9140 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -8,4 +8,5 @@ export type SvelteFlowProps = { fitView?: boolean; class?: string; style?: string; + id?: string; }; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index 695d574e6..a359002d5 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -9,6 +9,7 @@ export type Node = { position: XYPosition; sourcePosition?: Position; targetPosition?: Position; + positionAbsolute?: XYPosition; width?: number; height?: number; @@ -35,7 +36,7 @@ export type NodeProps = Pick< }; export type WrapNodeProps = Node & { - resizeObserver?: ResizeObserver; + resizeObserver?: ResizeObserver | null; }; -export type NodeTypes = Record>; +export type NodeTypes = Record>>; diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 949d5563d..42118d11d 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1,9 +1,9 @@ - + + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte index 022d754ce..c9e4cc4fe 100644 --- a/packages/svelte/src/lib/components/edges/BezierEdge.svelte +++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte @@ -1,21 +1,24 @@ - \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte new file mode 100644 index 000000000..5a0e79f4e --- /dev/null +++ b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte @@ -0,0 +1,73 @@ + + + + + + + diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte index 956663555..ec1b2db91 100644 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte @@ -1,21 +1,24 @@ - \ No newline at end of file diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte index 285bbadc0..f1d7c190f 100644 --- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -1,19 +1,22 @@ - \ No newline at end of file diff --git a/packages/svelte/src/lib/components/nodes/BaseNode.svelte b/packages/svelte/src/lib/components/nodes/NodeWrapper.svelte similarity index 99% rename from packages/svelte/src/lib/components/nodes/BaseNode.svelte rename to packages/svelte/src/lib/components/nodes/NodeWrapper.svelte index c5f017954..fecb9832c 100644 --- a/packages/svelte/src/lib/components/nodes/BaseNode.svelte +++ b/packages/svelte/src/lib/components/nodes/NodeWrapper.svelte @@ -85,7 +85,6 @@ \ No newline at end of file diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 68ceaa356..8839d3b98 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -6,6 +6,7 @@ import { type NodeDimensionUpdate, Position, internalsSymbol, + SelectionMode, type NodeOrigin, type D3ZoomInstance, type D3SelectionInstance, @@ -16,17 +17,11 @@ import { import { fitView, getConnectedEdges, getD3Transition, getDimensions } from '@reactflow/utils'; import { getHandleBounds } from '../../utils'; -import { - getEdgePositions, - getHandle, - getNodeData, - type EdgePosition -} from '$lib/container/EdgeRenderer/utils'; -import { SelectionMode } from 'reactflow'; +import { getEdgePositions, getHandle, getNodeData } from '$lib/container/EdgeRenderer/utils'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; import InputNode from '$lib/components/nodes/InputNode.svelte'; import OutputNode from '$lib/components/nodes/OutputNode.svelte'; -import type { EdgeTypes, NodeTypes, Node, Edge } from '$lib/types'; +import type { EdgeTypes, NodeTypes, Node, Edge, WrapEdgeProps } from '$lib/types'; import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; @@ -42,11 +37,6 @@ type CreateStoreProps = { id?: string; }; -export type EdgeWithData = EdgePosition & { - id: string; - type: string; -}; - type SvelteFlowStore = { nodesStore: Writable; edgesStore: Writable; @@ -57,7 +47,7 @@ type SvelteFlowStore = { selection: D3SelectionInstance | null; }>; transformStore: Writable; - edgesWithDataStore: Readable; + edgesWithDataStore: Readable; idStore: Writable; nodeOriginStore: Writable; draggingStore: Writable; @@ -162,16 +152,24 @@ export function createStore({ targetPosition ); + // we nee to do this to match the types + const sourceHandleId = edge.sourceHandle; + const targetHandleId = edge.targetHandle; + return { - id: edge.id, + ...edge, type: edgeType, sourceX, sourceY, targetX, - targetY + targetY, + sourcePosition, + targetPosition, + sourceHandleId, + targetHandleId }; }) - .filter((e) => e !== null) as EdgeWithData[]; + .filter((e) => e !== null) as WrapEdgeProps[]; }); function setEdges(edges: Edge[]) { @@ -359,6 +357,7 @@ export function createStore({ function addSelectedNodes(ids: string[]) { selectionRectStore.set(null); + selectionRectModeStore.set(null); if (get(multiselectionKeyPressedStore)) { // @todo handle multiselection key diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 217b0efd1..37df39cd4 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -1,25 +1,4 @@ import type { SvelteComponentTyped } from 'svelte'; -import type { Position } from '@reactflow/system'; - -export type Edge = { - id: string; - type: string; - source: string; - target: string; - sourceHandle?: string; - targetHandle?: string; - selected?: boolean; - deletable?: boolean; -}; - -export type EdgeProps = { - id: string; - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; - sourcePosition?: Position; - targetPosition?: Position; -}; +import type { EdgeProps } from '$lib/types'; export type EdgeTypes = Record>; diff --git a/packages/svelte/src/lib/types/index.ts b/packages/svelte/src/lib/types/index.ts index 43288f9af..ced30c7ab 100644 --- a/packages/svelte/src/lib/types/index.ts +++ b/packages/svelte/src/lib/types/index.ts @@ -1,4 +1,11 @@ -export type { Position, XYPosition } from '@reactflow/system'; +export type { + Position, + XYPosition, + Edge, + BaseEdgeProps, + WrapEdgeProps, + EdgeProps +} from '@reactflow/system'; export * from './nodes'; export * from './edges'; diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 42118d11d..2eea4c7c9 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -83,7 +83,8 @@ id: '1-2', type: 'default', source: '1', - target: '2' + target: '2', + label: 'Edge Text' }, { id: '1-3', type: 'smoothstep', @@ -93,7 +94,8 @@ id: '2-4', type: 'default', source: '2', - target: '4' + target: '4', + animated: true }]; function updateNode() { From 7a879f3c54a8bbd306d044d7864b123b84fa23c2 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 27 Feb 2023 18:01:18 +0100 Subject: [PATCH 0024/1093] feat(svelte): add connectionline and connection functionality --- packages/svelte/src/lib/actions/drag/index.ts | 12 +- .../ConnectionLine/ConnectionLine.svelte | 46 ++++ .../lib/components/ConnectionLine/index.ts | 1 + .../src/lib/components/Handle/handler.ts | 210 ++++++++++++++++++ .../src/lib/components/Handle/index.svelte | 81 ++++++- .../svelte/src/lib/components/Handle/utils.ts | 188 ++++++++++++++++ .../src/lib/container/SvelteFlow.svelte | 5 +- packages/svelte/src/lib/store/index.ts | 180 ++++++++++++++- packages/svelte/src/lib/types/general.ts | 12 +- 9 files changed, 707 insertions(+), 28 deletions(-) create mode 100644 packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte create mode 100644 packages/svelte/src/lib/components/ConnectionLine/index.ts create mode 100644 packages/svelte/src/lib/components/Handle/handler.ts create mode 100644 packages/svelte/src/lib/components/Handle/utils.ts diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 0a647225b..a8e242260 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -22,7 +22,6 @@ export type NodeDragItem = { }; type UseDragParams = { - noDragClassName?: string; handleSelector?: string; nodeId?: string; updateNodePositions: (dragItems: NodeDragItem[], d: boolean, p: boolean) => void; @@ -32,14 +31,7 @@ type UseDragParams = { export default function drag( nodeRef: Element, - { - noDragClassName, - handleSelector, - nodeId, - updateNodePositions, - nodesStore, - transformStore - }: UseDragParams + { handleSelector, nodeId, updateNodePositions, nodesStore, transformStore }: UseDragParams ) { let dragging = false; let dragItems: NodeDragItem[] = []; @@ -119,7 +111,7 @@ export default function drag( const target = event.target as HTMLDivElement; const isDraggable = !event.button && - (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) && + !hasSelector(target, '.nodrag', nodeRef) && (!handleSelector || hasSelector(target, handleSelector, nodeRef)); return isDraggable; diff --git a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte new file mode 100644 index 000000000..a84a023e4 --- /dev/null +++ b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte @@ -0,0 +1,46 @@ + + +{#if $connectionPathStore} + + + + + +{/if} + + \ No newline at end of file diff --git a/packages/svelte/src/lib/components/ConnectionLine/index.ts b/packages/svelte/src/lib/components/ConnectionLine/index.ts new file mode 100644 index 000000000..45de356da --- /dev/null +++ b/packages/svelte/src/lib/components/ConnectionLine/index.ts @@ -0,0 +1 @@ +export { default as ConnectionLine } from './ConnectionLine.svelte'; diff --git a/packages/svelte/src/lib/components/Handle/handler.ts b/packages/svelte/src/lib/components/Handle/handler.ts new file mode 100644 index 000000000..beb473a90 --- /dev/null +++ b/packages/svelte/src/lib/components/Handle/handler.ts @@ -0,0 +1,210 @@ +import { + getHostForElement, + calcAutoPan, + getEventPosition, + pointToRendererPoint, + rendererPointToPoint +} from '@reactflow/utils'; +import type { + OnConnect, + HandleType, + Connection, + ConnectionMode, + Node, + XYPosition, + Transform +} from '@reactflow/system'; + +import { + getClosestHandle, + getConnectionStatus, + getHandleLookup, + getHandleType, + isValidHandle, + resetRecentHandle, + type ConnectionHandle, + type ValidConnectionFunc +} from './utils'; +import { get, type Writable } from 'svelte/store'; +import type { ConnectionData } from '$lib/types'; + +export function handlePointerDown({ + event, + handleId, + nodeId, + onConnect, + domNode, + nodes, + connectionMode, + connectionRadius, + isTarget, + transformStore, + panBy, + updateConnection, + cancelConnection, + isValidConnection, + edgeUpdaterType, + onEdgeUpdateEnd +}: { + event: MouseEvent | TouchEvent; + handleId: string | null; + nodeId: string; + onConnect: OnConnect; + isTarget: boolean; + connectionMode: ConnectionMode; + domNode: HTMLDivElement | null; + nodes: Node[]; + connectionRadius: number; + isValidConnection: ValidConnectionFunc; + transformStore: Writable; + updateConnection: (connection: Partial) => void; + cancelConnection: () => void; + panBy: (delta: XYPosition) => void; + edgeUpdaterType?: HandleType; + onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; +}): void { + // when react-flow is used inside a shadow root we can't use document + const doc = getHostForElement(event.target as HTMLElement); + let autoPanId = 0; + let prevClosestHandle: ConnectionHandle | null; + + const { x, y } = getEventPosition(event); + const clickedHandle = doc?.elementFromPoint(x, y); + const handleType = getHandleType(edgeUpdaterType, clickedHandle); + const containerBounds = domNode?.getBoundingClientRect(); + + if (!containerBounds || !handleType) { + return; + } + + let prevActiveHandle: Element; + let connectionPosition = getEventPosition(event, containerBounds); + let autoPanStarted = false; + let connection: Connection | null = null; + let isValid = false; + let handleDomNode: Element | null = null; + + const autoPanOnConnect = true; + + const handleLookup = getHandleLookup({ + nodes, + nodeId, + handleId, + handleType + }); + + // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas + const autoPan = (): void => { + // @todd add prop + if (!autoPanOnConnect) { + return; + } + const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds); + + panBy({ x: xMovement, y: yMovement }); + autoPanId = requestAnimationFrame(autoPan); + }; + + updateConnection({ + position: connectionPosition, + nodeId, + handleId, + handleType, + status: null + }); + + // @todo add prop + // onConnectStart?.(event, { nodeId, handleId, handleType }); + + function onPointerMove(event: MouseEvent | TouchEvent) { + const transform = get(transformStore); + connectionPosition = getEventPosition(event, containerBounds); + + prevClosestHandle = getClosestHandle( + pointToRendererPoint(connectionPosition, transform, false, [1, 1]), + connectionRadius, + handleLookup + ); + + if (!autoPanStarted) { + autoPan(); + autoPanStarted = true; + } + + const result = isValidHandle( + event, + prevClosestHandle, + connectionMode, + nodeId, + handleId, + isTarget ? 'target' : 'source', + isValidConnection, + doc + ); + + handleDomNode = result.handleDomNode; + connection = result.connection; + isValid = result.isValid; + + updateConnection({ + position: + prevClosestHandle && isValid + ? rendererPointToPoint( + { + x: prevClosestHandle.x, + y: prevClosestHandle.y + }, + transform + ) + : connectionPosition, + status: getConnectionStatus(!!prevClosestHandle, isValid) + }); + + if (!prevClosestHandle && !isValid && !handleDomNode) { + return resetRecentHandle(prevActiveHandle); + } + + if (connection.source !== connection.target && handleDomNode) { + resetRecentHandle(prevActiveHandle); + prevActiveHandle = handleDomNode; + // @todo: remove the old class names "react-flow__handle-" in the next major version + handleDomNode.classList.add('connecting'); + handleDomNode.classList.toggle('valid', isValid); + } + } + + function onPointerUp(event: MouseEvent | TouchEvent) { + if ((prevClosestHandle || handleDomNode) && connection && isValid) { + onConnect?.(connection); + } + + // it's important to get a fresh reference from the store here + // in order to get the latest state of onConnectEnd + // @todo add onConnectEnd prop + // getState().onConnectEnd?.(event); + + if (edgeUpdaterType) { + onEdgeUpdateEnd?.(event); + } + + resetRecentHandle(prevActiveHandle); + cancelConnection(); + cancelAnimationFrame(autoPanId); + autoPanStarted = false; + isValid = false; + connection = null; + handleDomNode = null; + + doc.removeEventListener('mousemove', onPointerMove as EventListener); + doc.removeEventListener('mouseup', onPointerUp as EventListener); + + doc.removeEventListener('touchmove', onPointerMove as EventListener); + doc.removeEventListener('touchend', onPointerUp as EventListener); + } + + doc.addEventListener('mousemove', onPointerMove as EventListener); + doc.addEventListener('mouseup', onPointerUp as EventListener); + + doc.addEventListener('touchmove', onPointerMove as EventListener); + doc.addEventListener('touchend', onPointerUp as EventListener); +} diff --git a/packages/svelte/src/lib/components/Handle/index.svelte b/packages/svelte/src/lib/components/Handle/index.svelte index 3658bce58..496c05813 100644 --- a/packages/svelte/src/lib/components/Handle/index.svelte +++ b/packages/svelte/src/lib/components/Handle/index.svelte @@ -1,21 +1,77 @@
+ class:connectable={isConnectable} + on:mousedown={onPointerDown} + on:touchstart={onPointerDown} +>
@@ -46,6 +106,11 @@ border-radius: 100%; } + .connectable { + pointer-events: all; + cursor: crosshair; + } + .bottom { top: 100%; left: 50%; diff --git a/packages/svelte/src/lib/components/Handle/utils.ts b/packages/svelte/src/lib/components/Handle/utils.ts new file mode 100644 index 000000000..adcc231d9 --- /dev/null +++ b/packages/svelte/src/lib/components/Handle/utils.ts @@ -0,0 +1,188 @@ +import { internalsSymbol, ConnectionMode, type ConnectionStatus } from '@reactflow/system'; +import type { Connection, HandleType, XYPosition, Node, NodeHandleBounds } from '@reactflow/system'; +import { getEventPosition } from '@reactflow/utils'; + +export type ConnectionHandle = { + id: string | null; + type: HandleType; + nodeId: string; + x: number; + y: number; +}; + +export type ValidConnectionFunc = (connection: Connection) => boolean; + +// this functions collects all handles and adds an absolute position +// so that we can later find the closest handle to the mouse position +export function getHandles( + node: Node, + handleBounds: NodeHandleBounds, + type: HandleType, + currentHandle: string +): ConnectionHandle[] { + return (handleBounds[type] || []).reduce((res, h) => { + if (`${node.id}-${h.id}-${type}` !== currentHandle) { + res.push({ + id: h.id || null, + type, + nodeId: node.id, + x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2, + y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2 + }); + } + return res; + }, []); +} + +export function getClosestHandle( + pos: XYPosition, + connectionRadius: number, + handles: ConnectionHandle[] +): ConnectionHandle | null { + let closestHandle: ConnectionHandle | null = null; + let minDistance = Infinity; + + handles.forEach((handle) => { + const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2)); + if (distance <= connectionRadius && distance < minDistance) { + minDistance = distance; + closestHandle = handle; + } + }); + + return closestHandle; +} + +type Result = { + handleDomNode: Element | null; + isValid: boolean; + connection: Connection; +}; + +const nullConnection: Connection = { + source: null, + target: null, + sourceHandle: null, + targetHandle: null +}; + +// checks if and returns connection in fom of an object { source: 123, target: 312 } +export function isValidHandle( + event: MouseEvent | TouchEvent, + handle: Pick | null, + connectionMode: ConnectionMode, + fromNodeId: string, + fromHandleId: string | null, + fromType: string, + isValidConnection: ValidConnectionFunc, + doc: Document | ShadowRoot +) { + const isTarget = fromType === 'target'; + const handleDomNode = doc.querySelector( + `.react-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` + ); + const { x, y } = getEventPosition(event); + const handleBelow = doc.elementFromPoint(x, y); + const handleToCheck = handleBelow?.classList.contains('react-flow__handle') + ? handleBelow + : handleDomNode; + + const result: Result = { + handleDomNode: handleToCheck, + isValid: false, + connection: nullConnection + }; + + if (handleToCheck) { + const handleType = getHandleType(undefined, handleToCheck); + const handleNodeId = handleToCheck.getAttribute('data-nodeid'); + const handleId = handleToCheck.getAttribute('data-handleid'); + + const connection: Connection = { + source: isTarget ? handleNodeId : fromNodeId, + sourceHandle: isTarget ? handleId : fromHandleId, + target: isTarget ? fromNodeId : handleNodeId, + targetHandle: isTarget ? fromHandleId : handleId + }; + + result.connection = connection; + + // in strict mode we don't allow target to target or source to source connections + const isValid = + connectionMode === ConnectionMode.Strict + ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') + : handleNodeId !== fromNodeId || handleId !== fromHandleId; + + if (isValid) { + result.isValid = isValidConnection(connection); + } + } + + return result; +} + +type GetHandleLookupParams = { + nodes: Node[]; + nodeId: string; + handleId: string | null; + handleType: string; +}; + +export function getHandleLookup({ nodes, nodeId, handleId, handleType }: GetHandleLookupParams) { + return nodes.reduce((res, node) => { + if (node[internalsSymbol]) { + const { handleBounds } = node[internalsSymbol]; + let sourceHandles: ConnectionHandle[] = []; + let targetHandles: ConnectionHandle[] = []; + + if (handleBounds) { + sourceHandles = getHandles( + node, + handleBounds, + 'source', + `${nodeId}-${handleId}-${handleType}` + ); + targetHandles = getHandles( + node, + handleBounds, + 'target', + `${nodeId}-${handleId}-${handleType}` + ); + } + + res.push(...sourceHandles, ...targetHandles); + } + return res; + }, []); +} + +export function getHandleType( + edgeUpdaterType: HandleType | undefined, + handleDomNode: Element | null +): HandleType | null { + if (edgeUpdaterType) { + return edgeUpdaterType; + } else if (handleDomNode?.classList.contains('target')) { + return 'target'; + } else if (handleDomNode?.classList.contains('source')) { + return 'source'; + } + + return null; +} + +export function resetRecentHandle(handleDomNode: Element): void { + handleDomNode?.classList.remove('valid', 'connecting'); +} + +export function getConnectionStatus(isInsideConnectionRadius: boolean, isHandleValid: boolean) { + let connectionStatus = null; + + if (isHandleValid) { + connectionStatus = 'valid'; + } else if (isInsideConnectionRadius && !isHandleValid) { + connectionStatus = 'invalid'; + } + + return connectionStatus as ConnectionStatus; +} diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte index c0c23433f..e49ec9259 100644 --- a/packages/svelte/src/lib/container/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -11,6 +11,7 @@ import UserSelection from '$lib/components/UserSelection/index.svelte'; import NodeSelection from '$lib/components/NodeSelection/index.svelte'; import { KeyHandler } from '$lib/components/KeyHandler'; + import { ConnectionLine } from '$lib/components/ConnectionLine'; import type { SvelteFlowProps } from '$lib/types'; type $$Props = SvelteFlowProps; @@ -26,7 +27,7 @@ let className: $$Props['class'] = undefined; export { className as class }; - let domNode: Element; + let domNode: HTMLDivElement; const store = createStore({ fitView, @@ -41,6 +42,7 @@ const { width, height } = domNode.getBoundingClientRect(); store.widthStore.set(width); store.heightStore.set(height); + store.domNodeStore.set(domNode); // @todo: is this a svelte way for two way binding? store.nodesStore.subscribe((ns) => { @@ -69,6 +71,7 @@ +
diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 8839d3b98..6856f03ee 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -12,19 +12,32 @@ import { type D3SelectionInstance, type ViewportHelperFunctionOptions, type SelectionRect, - type Node as RFNode + type Node as RFNode, + type Connection, + ConnectionMode, + type XYPosition, + type CoordinateExtent, + ConnectionLineType } from '@reactflow/system'; -import { fitView, getConnectedEdges, getD3Transition, getDimensions } from '@reactflow/utils'; +import { + fitView as fitViewUtil, + getConnectedEdges, + getD3Transition, + getDimensions, + addEdge as addEdgeUtil +} from '@reactflow/utils'; +import { zoomIdentity } from 'd3-zoom'; import { getHandleBounds } from '../../utils'; import { getEdgePositions, getHandle, getNodeData } from '$lib/container/EdgeRenderer/utils'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; import InputNode from '$lib/components/nodes/InputNode.svelte'; import OutputNode from '$lib/components/nodes/OutputNode.svelte'; -import type { EdgeTypes, NodeTypes, Node, Edge, WrapEdgeProps } from '$lib/types'; +import type { EdgeTypes, NodeTypes, Node, Edge, WrapEdgeProps, ConnectionData } from '$lib/types'; import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; +import { getBezierPath, getSmoothStepPath, getStraightPath } from '@reactflow/edge-utils'; export const key = Symbol(); @@ -58,8 +71,14 @@ type SvelteFlowStore = { deleteKeyPressedStore: Writable; nodeTypesStore: Writable; edgeTypesStore: Writable; + domNodeStore: Writable; + connectionRadiusStore: Writable; + connectionModeStore: Writable; + connectionStore: Writable; + connectionPathStore: Readable; setNodes: (nodes: Node[]) => void; setEdges: (edges: Edge[]) => void; + addEdge: (edge: Edge | Connection) => void; zoomIn: (options?: ViewportHelperFunctionOptions) => void; zoomOut: (options?: ViewportHelperFunctionOptions) => void; fitView: (options?: ViewportHelperFunctionOptions) => boolean; @@ -71,6 +90,17 @@ type SvelteFlowStore = { updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; resetSelectedElements: () => void; addSelectedNodes: (ids: string[]) => void; + panBy: (delta: XYPosition) => void; + updateConnection: (connection: Partial) => void; + cancelConnection: () => void; +}; + +const initConnectionData = { + nodeId: null, + handleId: null, + handleType: null, + position: null, + status: null }; export function createStore({ @@ -112,6 +142,11 @@ export function createStore({ default: edgeTypes.default || BezierEdge }); const transformStore = writable(transform); + const connectionModeStore = writable(ConnectionMode.Strict); + const domNodeStore = writable(null); + const connectionStore = writable(initConnectionData); + const connectionRadiusStore = writable(25); + const connectionLineTypeStore = writable(ConnectionLineType.Bezier); let fitViewOnInitDone = false; @@ -172,10 +207,84 @@ export function createStore({ .filter((e) => e !== null) as WrapEdgeProps[]; }); + const oppositePosition = { + [Position.Left]: Position.Right, + [Position.Right]: Position.Left, + [Position.Top]: Position.Bottom, + [Position.Bottom]: Position.Top + }; + + const connectionPathStore = derived( + [connectionStore, connectionLineTypeStore, connectionModeStore, nodesStore, transformStore], + ([ + $connectionStore, + $connectionLineTypeStore, + $connectionModeStore, + $nodesStore, + $transformStore + ]) => { + if (!$connectionStore.nodeId) { + return null; + } + + const fromNode = $nodesStore.find((n) => n.id === $connectionStore.nodeId); + const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds; + const handleBoundsStrict = fromHandleBounds?.[$connectionStore.handleType || 'source'] || []; + const handleBoundsLoose = handleBoundsStrict + ? handleBoundsStrict + : fromHandleBounds?.[$connectionStore.handleType === 'source' ? 'target' : 'source']!; + const handleBounds = + $connectionModeStore === ConnectionMode.Strict ? handleBoundsStrict : handleBoundsLoose; + const fromHandle = $connectionStore.handleId + ? handleBounds.find((d) => d.id === $connectionStore.handleId) + : handleBounds[0]; + const fromHandleX = fromHandle + ? fromHandle.x + fromHandle.width / 2 + : (fromNode?.width ?? 0) / 2; + const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode?.height ?? 0; + const fromX = (fromNode?.positionAbsolute?.x ?? 0) + fromHandleX; + const fromY = (fromNode?.positionAbsolute?.y ?? 0) + fromHandleY; + const fromPosition = fromHandle?.position; + const toPosition = fromPosition ? oppositePosition[fromPosition] : undefined; + + const pathParams = { + sourceX: fromX, + sourceY: fromY, + sourcePosition: fromPosition, + targetX: (($connectionStore.position?.x ?? 0) - $transformStore[0]) / $transformStore[2], + targetY: (($connectionStore.position?.y ?? 0) - $transformStore[1]) / $transformStore[2], + targetPosition: toPosition + }; + + let path = ''; + + if ($connectionLineTypeStore === ConnectionLineType.Bezier) { + // we assume the destination position is opposite to the source position + [path] = getBezierPath(pathParams); + } else if ($connectionLineTypeStore === ConnectionLineType.Step) { + [path] = getSmoothStepPath({ + ...pathParams, + borderRadius: 0 + }); + } else if ($connectionLineTypeStore === ConnectionLineType.SmoothStep) { + [path] = getSmoothStepPath(pathParams); + } else { + [path] = getStraightPath(pathParams); + } + + return path; + } + ); + function setEdges(edges: Edge[]) { edgesStore.set(edges); } + function addEdge(edgeParams: Edge | Connection) { + const edges = get(edgesStore); + edgesStore.set(addEdgeUtil(edgeParams, edges)); + } + function setNodes(nodes: Node[]) { nodesStore.update((currentNodes) => { const nextNodes = nodes.map((n) => { @@ -254,7 +363,7 @@ export function createStore({ const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); fitViewOnInitDone = - fitViewOnInitDone || (fitViewOnInit && !!d3Zoom && !!d3Selection && _fitView()); + fitViewOnInitDone || (fitViewOnInit && !!d3Zoom && !!d3Selection && fitView()); nodesStore.set(nextNodes); } @@ -274,14 +383,14 @@ export function createStore({ } } - function _fitView() { + function fitView() { const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); if (!d3Zoom || !d3Selection) { return false; } - return fitView( + return fitViewUtil( { nodes: get(nodesStore) as RFNode[], width: get(widthStore), @@ -373,6 +482,52 @@ export function createStore({ ); } + function panBy(delta: XYPosition) { + const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + const transform = get(transformStore); + const width = get(widthStore); + const height = get(heightStore); + + if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) { + return; + } + + const nextTransform = zoomIdentity + .translate(transform[0] + delta.x, transform[1] + delta.y) + .scale(transform[2]); + + const extent: CoordinateExtent = [ + [0, 0], + [width, height] + ]; + + const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, [ + [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY], + [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY] + ]); + d3Zoom.transform(d3Selection, constrainedTransform); + } + + function updateConnection(connectionUpdate: Partial | null) { + const currentConnectionData = get(connectionStore); + const nextConnectionData = currentConnectionData + ? { + ...initConnectionData, + ...currentConnectionData, + ...connectionUpdate + } + : { + ...initConnectionData, + ...connectionUpdate + }; + + connectionStore.set(nextConnectionData); + } + + function cancelConnection() { + updateConnection(initConnectionData); + } + return { nodesStore, edgesStore, @@ -391,15 +546,24 @@ export function createStore({ selectionMode, nodeTypesStore, edgeTypesStore, + connectionModeStore, + domNodeStore, + connectionStore, + connectionRadiusStore, + connectionPathStore, setNodes, setEdges, + addEdge, updateNodePositions, updateNodeDimensions, zoomIn, zoomOut, - fitView: _fitView, + fitView, resetSelectedElements, - addSelectedNodes + addSelectedNodes, + panBy, + updateConnection, + cancelConnection }; } diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index f19e96d1e..e723c5e47 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -1,11 +1,21 @@ import type { Node, NodeTypes } from './nodes'; -import type { Edge } from './edges'; import type { ShortcutModifierDefinition } from '@svelte-put/shortcut'; +import type { Edge, HandleType, XYPosition } from '@reactflow/system'; export type KeyModifier = ShortcutModifierDefinition; export type KeyDefinitionObject = { key: string; modifier?: KeyModifier }; export type KeyDefinition = string | KeyDefinitionObject; +export type ConnectionData = { + position: XYPosition | null; + nodeId: string | null; + handleId: string | null; + handleType: HandleType | null; + status: string | null; +}; + +export type ConnectionLineProps = {}; + export type SvelteFlowProps = { nodes: Node[]; edges: Edge[]; From 62a627868271ec18c274c5394d3c42633994637f Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 28 Feb 2023 12:43:29 +0100 Subject: [PATCH 0025/1093] refactor(svelte): cleanup store usage --- packages/svelte/src/lib/actions/drag/index.ts | 10 +- packages/svelte/src/lib/actions/zoom/index.ts | 10 +- .../ConnectionLine/ConnectionLine.svelte | 12 +- .../src/lib/components/Handle/handler.ts | 4 +- .../src/lib/components/Handle/index.svelte | 20 +- .../components/KeyHandler/KeyHandler.svelte | 10 +- .../lib/components/NodeSelection/index.svelte | 10 +- .../lib/components/UserSelection/index.svelte | 12 +- .../lib/components/edges/EdgeWrapper.svelte | 4 +- .../lib/components/nodes/NodeWrapper.svelte | 6 +- .../lib/container/EdgeRenderer/index.svelte | 8 +- .../lib/container/NodeRenderer/index.svelte | 4 +- .../src/lib/container/Pane/index.svelte | 46 +-- .../src/lib/container/SvelteFlow.svelte | 33 +- .../svelte/src/lib/container/Viewport.svelte | 4 +- .../src/lib/container/Zoom/index.svelte | 6 +- .../lib/plugins/Background/Background.svelte | 12 +- .../src/lib/plugins/Minimap/Minimap.svelte | 26 +- .../lib/plugins/Minimap/MinimapNode.svelte | 3 +- .../svelte/src/lib/store/connection-path.ts | 76 ++++ .../svelte/src/lib/store/edges-layouted.ts | 61 ++++ packages/svelte/src/lib/store/index.ts | 338 +++--------------- .../svelte/src/lib/store/initial-store.ts | 65 ++++ packages/svelte/src/lib/store/types.d.ts | 34 ++ packages/svelte/src/lib/types/general.ts | 3 +- 25 files changed, 420 insertions(+), 397 deletions(-) create mode 100644 packages/svelte/src/lib/store/connection-path.ts create mode 100644 packages/svelte/src/lib/store/edges-layouted.ts create mode 100644 packages/svelte/src/lib/store/initial-store.ts create mode 100644 packages/svelte/src/lib/store/types.d.ts diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index a8e242260..cda7987b8 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -25,13 +25,13 @@ type UseDragParams = { handleSelector?: string; nodeId?: string; updateNodePositions: (dragItems: NodeDragItem[], d: boolean, p: boolean) => void; - nodesStore: Writable; - transformStore: Writable; + nodes: Writable; + transform: Writable; }; export default function drag( nodeRef: Element, - { handleSelector, nodeId, updateNodePositions, nodesStore, transformStore }: UseDragParams + { handleSelector, nodeId, updateNodePositions, nodes, transform: transformStore }: UseDragParams ) { let dragging = false; let dragItems: NodeDragItem[] = []; @@ -62,7 +62,7 @@ export default function drag( dragItems = dragItems.map((n) => { const nextPosition = { x: x - n.distance.x, y: y - n.distance.y }; - const updatedPos = calcNextPosition(n, nextPosition, get(nodesStore) as RFNode[]); + const updatedPos = calcNextPosition(n, nextPosition, get(nodes) as RFNode[]); // we want to make sure that we only fire a change event when there is a changes hasChange = @@ -89,7 +89,7 @@ export default function drag( const pointerPos = getPointerPosition(event); console.log(pointerPos); lastPos = pointerPos; - dragItems = getDragItems(get(nodesStore) as RFNode[], pointerPos, nodeId); + dragItems = getDragItems(get(nodes) as RFNode[], pointerPos, nodeId); }) .on('drag', (event: UseDragEvent) => { const pointerPos = getPointerPosition(event); diff --git a/packages/svelte/src/lib/actions/zoom/index.ts b/packages/svelte/src/lib/actions/zoom/index.ts index 6c1ee091e..d8f92f140 100644 --- a/packages/svelte/src/lib/actions/zoom/index.ts +++ b/packages/svelte/src/lib/actions/zoom/index.ts @@ -78,13 +78,13 @@ function filter(event: any, params: ZoomParams): boolean { } type ZoomParams = { - transformStore: Writable; + transform: Writable; selecting: boolean; - d3Store: Writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>; + d3: Writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>; }; export default function zoom(domNode: Element, params: ZoomParams) { - const { transformStore, d3Store } = params; + const { transform, d3 } = params; const d3ZoomInstance = d3Zoom(); const selection = select(domNode).call(d3ZoomInstance); const d3ZoomHandler = selection.on('wheel.zoom'); @@ -100,13 +100,13 @@ export default function zoom(domNode: Element, params: ZoomParams) { d3ZoomHandler!.call(this, event, d); }); - d3Store.set({ + d3.set({ zoom: d3ZoomInstance, selection }); d3ZoomInstance.on('zoom', (event: D3ZoomEvent) => { - transformStore.set([event.transform.x, event.transform.y, event.transform.k]); + transform.set([event.transform.x, event.transform.y, event.transform.k]); }); d3ZoomInstance.filter((event: any) => filter(event, params)); diff --git a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte index a84a023e4..7b74a6c2a 100644 --- a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte +++ b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte @@ -6,17 +6,17 @@ type $$Props = ConnectionLineProps; - const { connectionPathStore, widthStore, heightStore, connectionStore } = useStore(); + const { connectionPath, width, height, connection } = useStore(); -{#if $connectionPathStore} +{#if $connectionPath} - - + + {/if} diff --git a/packages/svelte/src/lib/components/Handle/handler.ts b/packages/svelte/src/lib/components/Handle/handler.ts index beb473a90..56be794a4 100644 --- a/packages/svelte/src/lib/components/Handle/handler.ts +++ b/packages/svelte/src/lib/components/Handle/handler.ts @@ -38,7 +38,7 @@ export function handlePointerDown({ connectionMode, connectionRadius, isTarget, - transformStore, + transform: transformStore, panBy, updateConnection, cancelConnection, @@ -56,7 +56,7 @@ export function handlePointerDown({ nodes: Node[]; connectionRadius: number; isValidConnection: ValidConnectionFunc; - transformStore: Writable; + transform: Writable; updateConnection: (connection: Partial) => void; cancelConnection: () => void; panBy: (delta: XYPosition) => void; diff --git a/packages/svelte/src/lib/components/Handle/index.svelte b/packages/svelte/src/lib/components/Handle/index.svelte index 496c05813..eef61a696 100644 --- a/packages/svelte/src/lib/components/Handle/index.svelte +++ b/packages/svelte/src/lib/components/Handle/index.svelte @@ -22,11 +22,11 @@ const handleId = id || null; const { - connectionModeStore, - domNodeStore, - nodesStore, - connectionRadiusStore, - transformStore, + connectionMode, + domNode, + nodes, + connectionRadius, + transform, addEdge, panBy, cancelConnection, @@ -49,11 +49,11 @@ handleId, nodeId, isTarget, - connectionRadius: $connectionRadiusStore, - domNode: $domNodeStore, - nodes: $nodesStore, - connectionMode: $connectionModeStore, - transformStore, + connectionRadius: $connectionRadius, + domNode: $domNode, + nodes: $nodes, + connectionMode: $connectionMode, + transform, isValidConnection: isValidConnection!, onConnect: onConnectExtended, updateConnection, diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte index cb59b3c9c..512a4303f 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte @@ -5,7 +5,7 @@ import type { KeyHandlerProps } from './KeyHandler' import type { KeyDefinition, KeyDefinitionObject } from '$lib/types'; - const { selectionKeyPressedStore, deleteKeyPressedStore } = useStore(); + const { selectionKeyPressed, deleteKeyPressed } = useStore(); type $$Props = KeyHandlerProps; @@ -25,19 +25,19 @@ selectionKeyPressedStore.set(true) }], + trigger: [{ key: selectionKeyString, modifier: selectionKeyModifier, callback: () => selectionKeyPressed.set(true) }], type: 'keydown' }} use:shortcut={{ - trigger: [{ key: selectionKeyString, modifier: selectionKeyModifier, callback: () => selectionKeyPressedStore.set(false) }], + trigger: [{ key: selectionKeyString, modifier: selectionKeyModifier, callback: () => selectionKeyPressed.set(false) }], type: 'keyup' }} use:shortcut={{ - trigger: [{ key: deleteKeyString, modifier: deleteKeyModifier, callback: () => deleteKeyPressedStore.set(true) }], + trigger: [{ key: deleteKeyString, modifier: deleteKeyModifier, callback: () => deleteKeyPressed.set(true) }], type: 'keydown' }} use:shortcut={{ - trigger: [{ key: deleteKeyString, modifier: deleteKeyModifier, callback: () => deleteKeyPressedStore.set(false) }], + trigger: [{ key: deleteKeyString, modifier: deleteKeyModifier, callback: () => deleteKeyPressed.set(false) }], type: 'keyup' }} /> diff --git a/packages/svelte/src/lib/components/NodeSelection/index.svelte b/packages/svelte/src/lib/components/NodeSelection/index.svelte index 64a9e4094..a992bc7f7 100644 --- a/packages/svelte/src/lib/components/NodeSelection/index.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/index.svelte @@ -5,20 +5,20 @@ import Selection from '$lib/components/Selection/index.svelte'; import drag from '$lib/actions/drag' - const { selectionRectModeStore, nodesStore, nodeOriginStore, transformStore, updateNodePositions } = useStore(); + const { selectionRectMode, nodes, nodeOrigin, transform, updateNodePositions } = useStore(); - $: selectedNodes = $nodesStore.filter(n => n.selected); - $: rect = getRectOfNodes(selectedNodes, $nodeOriginStore); + $: selectedNodes = $nodes.filter(n => n.selected); + $: rect = getRectOfNodes(selectedNodes, $nodeOrigin); {#if selectedNodes}
diff --git a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte index 5a0e79f4e..7a18f90ea 100644 --- a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte @@ -22,8 +22,8 @@ export let selected: $$Props['selected'] = false; export let label: $$Props['label'] = undefined; - const { edgeTypesStore } = useStore(); - const edgeComponent: typeof SvelteComponentTyped = $edgeTypesStore[type!] || BezierEdge; + const { edgeTypes } = useStore(); + const edgeComponent: typeof SvelteComponentTyped = $edgeTypes[type!] || BezierEdge; > = $nodeTypesStore[type] || DefaultNode; + const { nodes, transform, nodeTypes, updateNodePositions, addSelectedNodes } = useStore(); + const nodeComponent: typeof SvelteComponentTyped> = $nodeTypes[type] || DefaultNode; const isSelectable = true; const selectNodesOnDrag = false; const isDraggable = true; @@ -58,7 +58,7 @@
- {#each $edgesWithDataStore as edge (edge.id)} + {#each $edgesLayouted as edge (edge.id)} {/each} diff --git a/packages/svelte/src/lib/container/NodeRenderer/index.svelte b/packages/svelte/src/lib/container/NodeRenderer/index.svelte index e19115039..1312ecfac 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/index.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/index.svelte @@ -4,7 +4,7 @@ import NodeWrapper from '$lib/components/nodes/NodeWrapper.svelte'; import { useStore } from '$lib/store'; - const { nodesStore, updateNodeDimensions } = useStore(); + const { nodes, updateNodeDimensions } = useStore(); const resizeObserver: ResizeObserver | null = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver((entries: ResizeObserverEntry[]) => { const updates = entries.map((entry: ResizeObserverEntry) => ({ id: entry.target.getAttribute('data-id') as string, @@ -21,7 +21,7 @@
- {#each $nodesStore as node (node.id)} + {#each $nodes as node (node.id)} {/each}
diff --git a/packages/svelte/src/lib/container/Pane/index.svelte b/packages/svelte/src/lib/container/Pane/index.svelte index ba7580f08..883fcf586 100644 --- a/packages/svelte/src/lib/container/Pane/index.svelte +++ b/packages/svelte/src/lib/container/Pane/index.svelte @@ -33,7 +33,7 @@ import { SelectionMode, type Node, type Edge } from '@reactflow/system'; import { getConnectedEdges, getEventPosition, getNodesInside } from '@reactflow/utils'; - const { nodesStore, edgesStore, transformStore, nodeOriginStore, draggingStore, selectionRectStore, selectionRectModeStore, selectionKeyPressedStore, resetSelectedElements } = useStore(); + const { nodes, edges, transform, nodeOrigin, dragging, selectionRect, selectionRectMode, selectionKeyPressed, resetSelectedElements } = useStore(); // @todo take from props const elementsSelectable = true; @@ -43,15 +43,15 @@ let containerBounds: DOMRect | null = null let selectedNodes: Node[] = []; - $: isSelecting = $selectionKeyPressedStore; - $: hasActiveSelection = elementsSelectable && (isSelecting || $selectionRectModeStore === 'user'); + $: isSelecting = $selectionKeyPressed; + $: hasActiveSelection = elementsSelectable && (isSelecting || $selectionRectMode === 'user'); function onClick (event: MouseEvent) { // onPaneClick?.(event); resetSelectedElements(); - selectionRectModeStore.set(null) + selectionRectMode.set(null) } function onMouseDown(event: MouseEvent) { @@ -71,7 +71,7 @@ resetSelectedElements(); - selectionRectStore.set({ + selectionRect.set({ width: 0, height: 0, startX: x, @@ -87,14 +87,14 @@ function onMouseMove(event: MouseEvent) { - if (!isSelecting || !containerBounds || !$selectionRectStore) { + if (!isSelecting || !containerBounds || !$selectionRect) { return; } const mousePos = getEventPosition(event, containerBounds); - const startX = $selectionRectStore.startX ?? 0; - const startY = $selectionRectStore.startY ?? 0; + const startX = $selectionRect.startX ?? 0; + const startY = $selectionRect.startY ?? 0; const nextUserSelectRect = { - ...$selectionRectStore, + ...$selectionRect, x: mousePos.x < startX ? mousePos.x : startX, y: mousePos.y < startY ? mousePos.y : startY, width: Math.abs(mousePos.x - startX), @@ -102,21 +102,21 @@ }; selectedNodes = getNodesInside( - new Map($nodesStore.map(node => [node.id, node])), + new Map($nodes.map(node => [node.id, node])), nextUserSelectRect, - $transformStore, + $transform, selectionMode === SelectionMode.Partial, true, - $nodeOriginStore + $nodeOrigin ); - const selectedEdgeIds = getConnectedEdges(selectedNodes, $edgesStore).map((e) => e.id); + const selectedEdgeIds = getConnectedEdges(selectedNodes, $edges).map((e) => e.id); const selectedNodeIds = selectedNodes.map((n) => n.id); - nodesStore.update(nodes => nodes.map(toggleSelected(selectedNodeIds))); - edgesStore.update(edges => edges.map(toggleSelected(selectedEdgeIds))); + nodes.update(nodes => nodes.map(toggleSelected(selectedNodeIds))); + edges.update(edges => edges.map(toggleSelected(selectedEdgeIds))); - selectionRectModeStore.set('user'); - selectionRectStore.set(nextUserSelectRect); + selectionRectMode.set('user'); + selectionRect.set(nextUserSelectRect); } function onMouseUp(event: MouseEvent) { @@ -129,10 +129,10 @@ // if (!userSelectionActive && userSelectionRect && event.target === container.current) { // onClick?.(event); // } - selectionRectStore.set(null); + selectionRect.set(null); if (selectedNodes.length > 0) { - selectionRectModeStore.set('nodes'); + selectionRectMode.set('nodes'); } @@ -140,19 +140,19 @@ } const onMouseLeave = (event: MouseEvent) => { - if ($selectionRectModeStore === 'user') { - selectionRectModeStore.set(selectedNodes.length > 0 ? 'nodes' : null); + if ($selectionRectMode === 'user') { + selectionRectMode.set(selectedNodes.length > 0 ? 'nodes' : null); // onSelectionEnd?.(event); } - selectionRectStore.set(null); + selectionRect.set(null); };
{ const { width, height } = domNode.getBoundingClientRect(); - store.widthStore.set(width); - store.heightStore.set(height); - store.domNodeStore.set(domNode); + store.width.set(width); + store.height.set(height); + store.domNode.set(domNode); // @todo: is this a svelte way for two way binding? - store.nodesStore.subscribe((ns) => { + store.nodes.subscribe((ns) => { nodes = ns; }); }); + + // $: { + // const updatableProps = { + // defaultEdgeOptions, + // connectionMode, + // snapToGrid, + // snapGrid, + // nodesDraggable, + // connectOnClick, + // fitViewOnInit: fitView, + // fitViewOnInitOptions: fitViewOptions, + // }; + + // Object.keys(updatableProps).forEach((key) => { + // store.update((state) => ({ + // ...state, + // [key]: valuesToUpdate[key], + // })); + + // }); + // } + $: { store.setNodes(nodes); } diff --git a/packages/svelte/src/lib/container/Viewport.svelte b/packages/svelte/src/lib/container/Viewport.svelte index 4be75a58e..49aa5e547 100644 --- a/packages/svelte/src/lib/container/Viewport.svelte +++ b/packages/svelte/src/lib/container/Viewport.svelte @@ -1,12 +1,12 @@
diff --git a/packages/svelte/src/lib/container/Zoom/index.svelte b/packages/svelte/src/lib/container/Zoom/index.svelte index 6f9380436..51c7bbfd4 100644 --- a/packages/svelte/src/lib/container/Zoom/index.svelte +++ b/packages/svelte/src/lib/container/Zoom/index.svelte @@ -2,12 +2,12 @@ import { useStore } from '$lib/store'; import zoom from '$lib/actions/zoom'; - const { transformStore, d3Store, selectionKeyPressedStore, selectionRectModeStore } = useStore(); + const { transform, d3, selectionKeyPressed, selectionRectMode } = useStore(); - $: selecting = $selectionKeyPressedStore || $selectionRectModeStore === 'user'; + $: selecting = $selectionKeyPressed || $selectionRectMode === 'user'; -
+
diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index e4c1e7e31..75526092c 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -27,16 +27,16 @@ [BackgroundVariant.Cross]: 6, }; - const { transformStore, idStore } = useStore(); + const { transform, id } = useStore(); const patternColor = color || defaultColor[variant]; const patternSize = size || defaultSize[variant]; const isDots = variant === BackgroundVariant.Dots; const isCross = variant === BackgroundVariant.Cross; const gapXY: number[] = Array.isArray(gap) ? gap : [gap, gap]; - $: patternId = `background-pattern-${$idStore}`; - $: scaledGap = [gapXY[0] * $transformStore[2] || 1, gapXY[1] * $transformStore[2] || 1]; - $: scaledSize = patternSize * $transformStore[2]; + $: patternId = `background-pattern-${$id}`; + $: scaledGap = [gapXY[0] * $transform[2] || 1, gapXY[1] * $transform[2] || 1]; + $: scaledSize = patternSize * $transform[2]; $: patternDimensions = (isCross ? [scaledSize, scaledSize] : scaledGap) as [number, number]; $: patternOffset = isDots ? [scaledSize / 2, scaledSize / 2] @@ -46,8 +46,8 @@ string; const getAttrFunction = (func: any): GetMiniMapNodeAttribute => (func instanceof Function ? func : () => func); @@ -32,15 +32,15 @@ const nodeStrokeColorFunc = getAttrFunction(nodeStrokeColor); const nodeClassNameFunc = getAttrFunction(nodeClassName); const shapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision'; - const labelledBy = `react-flow__minimap-desc-${$idStore}`; + const labelledBy = `react-flow__minimap-desc-${$id}`; $: viewBB = { - x: -$transformStore[0] / $transformStore[2], - y: -$transformStore[1] / $transformStore[2], - width: $widthStore / $transformStore[2], - height: $heightStore / $transformStore[2], + x: -$transform[0] / $transform[2], + y: -$transform[1] / $transform[2], + width: $width / $transform[2], + height: $height / $transform[2], } as Rect; - $: boundingRect = $nodesStore.length > 0 ? getBoundsOfRects(getRectOfNodes($nodesStore, $nodeOriginStore), viewBB) : viewBB + $: boundingRect = $nodes.length > 0 ? getBoundsOfRects(getRectOfNodes($nodes, $nodeOrigin), viewBB) : viewBB $: elementWidth = (style?.width as number) ?? defaultWidth; $: elementHeight = (style?.height as number) ?? defaultHeight; $: scaledWidth = boundingRect.width / elementWidth; @@ -51,23 +51,23 @@ $: offset = 5 * viewScale; $: x = boundingRect.x - (viewWidth - boundingRect.width) / 2 - offset; $: y = boundingRect.y - (viewHeight - boundingRect.height) / 2 - offset; - $: width = viewWidth + offset * 2; - $: height = viewHeight + offset * 2; + $: viewboxWidth = viewWidth + offset * 2; + $: viewboxHeight = viewHeight + offset * 2; {#if ariaLabel}{ariaLabel}{/if} - {#each $nodesStore as node} + {#each $nodes as node(node.id)} {#if node.width && node.height} - {@const pos = getNodePositionWithOrigin(node, $nodeOriginStore).positionAbsolute} + {@const pos = getNodePositionWithOrigin(node, $nodeOrigin).positionAbsolute} ; - + let className: string = ''; export { className as class }; const { background, backgroundColor } = style || {}; diff --git a/packages/svelte/src/lib/store/connection-path.ts b/packages/svelte/src/lib/store/connection-path.ts new file mode 100644 index 000000000..9b2805fa6 --- /dev/null +++ b/packages/svelte/src/lib/store/connection-path.ts @@ -0,0 +1,76 @@ +import { getBezierPath, getSmoothStepPath, getStraightPath } from '@reactflow/edge-utils'; +import { ConnectionLineType, ConnectionMode, Position } from '@reactflow/system'; + +import type { SvelteFlowStoreState } from './types'; +import { derived } from 'svelte/store'; + +const oppositePosition = { + [Position.Left]: Position.Right, + [Position.Right]: Position.Left, + [Position.Top]: Position.Bottom, + [Position.Bottom]: Position.Top +}; + +export function getConnectionPath(store: SvelteFlowStoreState) { + return derived( + [ + store.connection, + store.connectionLineType, + store.connectionMode, + store.nodes, + store.transform + ], + ([$connection, $connectionLineType, $connectionMode, $nodes, $transform]) => { + if (!$connection.nodeId) { + return null; + } + + const fromNode = $nodes.find((n) => n.id === $connection.nodeId); + const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds; + const handleBoundsStrict = fromHandleBounds?.[$connection.handleType || 'source'] || []; + const handleBoundsLoose = handleBoundsStrict + ? handleBoundsStrict + : fromHandleBounds?.[$connection.handleType === 'source' ? 'target' : 'source']!; + const handleBounds = + $connectionMode === ConnectionMode.Strict ? handleBoundsStrict : handleBoundsLoose; + const fromHandle = $connection.handleId + ? handleBounds.find((d) => d.id === $connection.handleId) + : handleBounds[0]; + const fromHandleX = fromHandle + ? fromHandle.x + fromHandle.width / 2 + : (fromNode?.width ?? 0) / 2; + const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode?.height ?? 0; + const fromX = (fromNode?.positionAbsolute?.x ?? 0) + fromHandleX; + const fromY = (fromNode?.positionAbsolute?.y ?? 0) + fromHandleY; + const fromPosition = fromHandle?.position; + const toPosition = fromPosition ? oppositePosition[fromPosition] : undefined; + + const pathParams = { + sourceX: fromX, + sourceY: fromY, + sourcePosition: fromPosition, + targetX: (($connection.position?.x ?? 0) - $transform[0]) / $transform[2], + targetY: (($connection.position?.y ?? 0) - $transform[1]) / $transform[2], + targetPosition: toPosition + }; + + let path = ''; + + if ($connectionLineType === ConnectionLineType.Bezier) { + // we assume the destination position is opposite to the source position + [path] = getBezierPath(pathParams); + } else if ($connectionLineType === ConnectionLineType.Step) { + [path] = getSmoothStepPath({ + ...pathParams, + borderRadius: 0 + }); + } else if ($connectionLineType === ConnectionLineType.SmoothStep) { + [path] = getSmoothStepPath(pathParams); + } else { + [path] = getStraightPath(pathParams); + } + + return path; + } + ); +} diff --git a/packages/svelte/src/lib/store/edges-layouted.ts b/packages/svelte/src/lib/store/edges-layouted.ts new file mode 100644 index 000000000..b1acfd531 --- /dev/null +++ b/packages/svelte/src/lib/store/edges-layouted.ts @@ -0,0 +1,61 @@ +import { derived } from 'svelte/store'; +import { Position } from '@reactflow/system'; + +import { getEdgePositions, getHandle, getNodeData } from '$lib/container/EdgeRenderer/utils'; +import type { WrapEdgeProps } from '$lib/types'; +import type { SvelteFlowStoreState } from './types'; + +export function getEdgesLayouted(store: SvelteFlowStoreState) { + return derived([store.edges, store.nodes], ([$edges, $nodes]) => { + return $edges + .map((edge) => { + const sourceNode = $nodes.find((node) => node.id === edge.source); + const targetNode = $nodes.find((node) => node.id === edge.target); + const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(sourceNode); + const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(targetNode); + + if (!sourceIsValid || !targetIsValid) { + return null; + } + + const edgeType = edge.type || 'default'; + + const targetNodeHandles = targetHandleBounds!.target; + const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); + const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); + const sourcePosition = sourceHandle?.position || Position.Bottom; + const targetPosition = targetHandle?.position || Position.Top; + + if (!sourceHandle || !targetHandle) { + return null; + } + + const { sourceX, sourceY, targetX, targetY } = getEdgePositions( + sourceNodeRect, + sourceHandle, + sourcePosition, + targetNodeRect, + targetHandle, + targetPosition + ); + + // we nee to do this to match the types + const sourceHandleId = edge.sourceHandle; + const targetHandleId = edge.targetHandle; + + return { + ...edge, + type: edgeType, + sourceX, + sourceY, + targetX, + targetY, + sourcePosition, + targetPosition, + sourceHandleId, + targetHandleId + }; + }) + .filter((e) => e !== null) as WrapEdgeProps[]; + }); +} diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 6856f03ee..63da61042 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -1,23 +1,16 @@ import { getContext } from 'svelte'; -import { derived, get, writable, type Readable, type Writable } from 'svelte/store'; +import { get } from 'svelte/store'; import { type Transform, type NodeDragItem, type NodeDimensionUpdate, - Position, internalsSymbol, - SelectionMode, type NodeOrigin, - type D3ZoomInstance, - type D3SelectionInstance, type ViewportHelperFunctionOptions, - type SelectionRect, type Node as RFNode, type Connection, - ConnectionMode, type XYPosition, - type CoordinateExtent, - ConnectionLineType + type CoordinateExtent } from '@reactflow/system'; import { fitView as fitViewUtil, @@ -29,15 +22,12 @@ import { import { zoomIdentity } from 'd3-zoom'; import { getHandleBounds } from '../../utils'; -import { getEdgePositions, getHandle, getNodeData } from '$lib/container/EdgeRenderer/utils'; -import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; -import InputNode from '$lib/components/nodes/InputNode.svelte'; -import OutputNode from '$lib/components/nodes/OutputNode.svelte'; -import type { EdgeTypes, NodeTypes, Node, Edge, WrapEdgeProps, ConnectionData } from '$lib/types'; -import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; -import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; -import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; -import { getBezierPath, getSmoothStepPath, getStraightPath } from '@reactflow/edge-utils'; +import type { EdgeTypes, NodeTypes, Node, Edge, ConnectionData } from '$lib/types'; + +import { getEdgesLayouted } from './edges-layouted'; +import { getConnectionPath } from './connection-path'; +import { initConnectionData, initialStoreState } from './initial-store'; +import type { SvelteFlowStore } from './types'; export const key = Symbol(); @@ -50,59 +40,6 @@ type CreateStoreProps = { id?: string; }; -type SvelteFlowStore = { - nodesStore: Writable; - edgesStore: Writable; - heightStore: Writable; - widthStore: Writable; - d3Store: Writable<{ - zoom: D3ZoomInstance | null; - selection: D3SelectionInstance | null; - }>; - transformStore: Writable; - edgesWithDataStore: Readable; - idStore: Writable; - nodeOriginStore: Writable; - draggingStore: Writable; - selectionRectStore: Writable; - selectionRectModeStore: Writable; - selectionMode: Writable; - selectionKeyPressedStore: Writable; - deleteKeyPressedStore: Writable; - nodeTypesStore: Writable; - edgeTypesStore: Writable; - domNodeStore: Writable; - connectionRadiusStore: Writable; - connectionModeStore: Writable; - connectionStore: Writable; - connectionPathStore: Readable; - setNodes: (nodes: Node[]) => void; - setEdges: (edges: Edge[]) => void; - addEdge: (edge: Edge | Connection) => void; - zoomIn: (options?: ViewportHelperFunctionOptions) => void; - zoomOut: (options?: ViewportHelperFunctionOptions) => void; - fitView: (options?: ViewportHelperFunctionOptions) => boolean; - updateNodePositions: ( - nodeDragItems: NodeDragItem[], - positionChanged?: boolean, - dragging?: boolean - ) => void; - updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; - resetSelectedElements: () => void; - addSelectedNodes: (ids: string[]) => void; - panBy: (delta: XYPosition) => void; - updateConnection: (connection: Partial) => void; - cancelConnection: () => void; -}; - -const initConnectionData = { - nodeId: null, - handleId: null, - handleType: null, - position: null, - status: null -}; - export function createStore({ transform = [0, 0, 1], nodeOrigin = [0, 0], @@ -111,182 +48,23 @@ export function createStore({ edgeTypes = {}, id = '1' }: CreateStoreProps): SvelteFlowStore { - const nodesStore = writable([] as Node[]); - const edgesStore = writable([] as Edge[]); - const heightStore = writable(500); - const widthStore = writable(500); - const nodeOriginStore = writable(nodeOrigin); - const d3Store = writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ - zoom: null, - selection: null - }); - const idStore = writable(id); - const draggingStore = writable(false); - const selectionRectStore = writable(null); - const selectionKeyPressedStore = writable(false); - const multiselectionKeyPressedStore = writable(false); - const deleteKeyPressedStore = writable(false); - const selectionRectModeStore = writable(null); - const selectionMode = writable(SelectionMode.Partial); - const nodeTypesStore = writable({ - ...nodeTypes, - input: nodeTypes.input || InputNode, - output: nodeTypes.output || OutputNode, - default: nodeTypes.default || DefaultNode - }); - - const edgeTypesStore = writable({ - ...edgeTypes, - straight: edgeTypes.straight || StraightEdge, - smoothstep: edgeTypes.smoothstep || SmoothStepEdge, - default: edgeTypes.default || BezierEdge - }); - const transformStore = writable(transform); - const connectionModeStore = writable(ConnectionMode.Strict); - const domNodeStore = writable(null); - const connectionStore = writable(initConnectionData); - const connectionRadiusStore = writable(25); - const connectionLineTypeStore = writable(ConnectionLineType.Bezier); - - let fitViewOnInitDone = false; - - const edgesWithDataStore = derived([edgesStore, nodesStore], ([$edges, $nodes]) => { - return $edges - .map((edge) => { - const sourceNode = $nodes.find((node) => node.id === edge.source); - const targetNode = $nodes.find((node) => node.id === edge.target); - const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData( - sourceNode as RFNode - ); - const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData( - targetNode as RFNode - ); - - if (!sourceIsValid || !targetIsValid) { - return null; - } - - const edgeType = edge.type || 'default'; - - const targetNodeHandles = targetHandleBounds!.target; - const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); - const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); - const sourcePosition = sourceHandle?.position || Position.Bottom; - const targetPosition = targetHandle?.position || Position.Top; - - if (!sourceHandle || !targetHandle) { - return null; - } - - const { sourceX, sourceY, targetX, targetY } = getEdgePositions( - sourceNodeRect, - sourceHandle, - sourcePosition, - targetNodeRect, - targetHandle, - targetPosition - ); - - // we nee to do this to match the types - const sourceHandleId = edge.sourceHandle; - const targetHandleId = edge.targetHandle; - - return { - ...edge, - type: edgeType, - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - sourceHandleId, - targetHandleId - }; - }) - .filter((e) => e !== null) as WrapEdgeProps[]; - }); - - const oppositePosition = { - [Position.Left]: Position.Right, - [Position.Right]: Position.Left, - [Position.Top]: Position.Bottom, - [Position.Bottom]: Position.Top + const store = { + ...initialStoreState }; - const connectionPathStore = derived( - [connectionStore, connectionLineTypeStore, connectionModeStore, nodesStore, transformStore], - ([ - $connectionStore, - $connectionLineTypeStore, - $connectionModeStore, - $nodesStore, - $transformStore - ]) => { - if (!$connectionStore.nodeId) { - return null; - } - - const fromNode = $nodesStore.find((n) => n.id === $connectionStore.nodeId); - const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds; - const handleBoundsStrict = fromHandleBounds?.[$connectionStore.handleType || 'source'] || []; - const handleBoundsLoose = handleBoundsStrict - ? handleBoundsStrict - : fromHandleBounds?.[$connectionStore.handleType === 'source' ? 'target' : 'source']!; - const handleBounds = - $connectionModeStore === ConnectionMode.Strict ? handleBoundsStrict : handleBoundsLoose; - const fromHandle = $connectionStore.handleId - ? handleBounds.find((d) => d.id === $connectionStore.handleId) - : handleBounds[0]; - const fromHandleX = fromHandle - ? fromHandle.x + fromHandle.width / 2 - : (fromNode?.width ?? 0) / 2; - const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode?.height ?? 0; - const fromX = (fromNode?.positionAbsolute?.x ?? 0) + fromHandleX; - const fromY = (fromNode?.positionAbsolute?.y ?? 0) + fromHandleY; - const fromPosition = fromHandle?.position; - const toPosition = fromPosition ? oppositePosition[fromPosition] : undefined; - - const pathParams = { - sourceX: fromX, - sourceY: fromY, - sourcePosition: fromPosition, - targetX: (($connectionStore.position?.x ?? 0) - $transformStore[0]) / $transformStore[2], - targetY: (($connectionStore.position?.y ?? 0) - $transformStore[1]) / $transformStore[2], - targetPosition: toPosition - }; - - let path = ''; - - if ($connectionLineTypeStore === ConnectionLineType.Bezier) { - // we assume the destination position is opposite to the source position - [path] = getBezierPath(pathParams); - } else if ($connectionLineTypeStore === ConnectionLineType.Step) { - [path] = getSmoothStepPath({ - ...pathParams, - borderRadius: 0 - }); - } else if ($connectionLineTypeStore === ConnectionLineType.SmoothStep) { - [path] = getSmoothStepPath(pathParams); - } else { - [path] = getStraightPath(pathParams); - } - - return path; - } - ); + let fitViewOnInitDone = false; function setEdges(edges: Edge[]) { - edgesStore.set(edges); + store.edges.set(edges); } function addEdge(edgeParams: Edge | Connection) { - const edges = get(edgesStore); - edgesStore.set(addEdgeUtil(edgeParams, edges)); + const edges = get(store.edges); + store.edges.set(addEdgeUtil(edgeParams, edges)); } function setNodes(nodes: Node[]) { - nodesStore.update((currentNodes) => { + store.nodes.update((currentNodes) => { const nextNodes = nodes.map((n) => { const currentNode = currentNodes.find((cn) => cn.id === n.id) || {}; @@ -302,7 +80,7 @@ export function createStore({ } function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) { - nodesStore.update((nds) => { + store.nodes.update((nds) => { return nds.map((n) => { const nodeDragItem = nodeDragItems.find((ndi) => ndi.id === n.id); @@ -330,7 +108,7 @@ export function createStore({ const style = window.getComputedStyle(viewportNode); const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform); - const nextNodes = get(nodesStore).map((node) => { + const nextNodes = get(store.nodes).map((node) => { const update = updates.find((u) => u.id === node.id); if (update) { @@ -360,16 +138,16 @@ export function createStore({ return node; }); - const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); fitViewOnInitDone = fitViewOnInitDone || (fitViewOnInit && !!d3Zoom && !!d3Selection && fitView()); - nodesStore.set(nextNodes); + store.nodes.set(nextNodes); } function zoomIn(options?: ViewportHelperFunctionOptions) { - const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); if (d3Zoom && d3Selection) { d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2); @@ -377,14 +155,14 @@ export function createStore({ } function zoomOut(options?: ViewportHelperFunctionOptions) { - const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); if (d3Zoom && d3Selection) { d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2); } } function fitView() { - const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); if (!d3Zoom || !d3Selection) { return false; @@ -392,14 +170,14 @@ export function createStore({ return fitViewUtil( { - nodes: get(nodesStore) as RFNode[], - width: get(widthStore), - height: get(heightStore), + nodes: get(store.nodes) as RFNode[], + width: get(store.width), + height: get(store.height), minZoom: 0.2, maxZoom: 2, d3Selection, d3Zoom, - nodeOrigin: get(nodeOriginStore) + nodeOrigin: get(store.nodeOrigin) }, {} ); @@ -417,14 +195,14 @@ export function createStore({ } function resetSelectedElements() { - nodesStore.update((ns) => ns.map(resetSelectedItem)); - edgesStore.update((es) => es.map(resetSelectedItem)); + store.nodes.update((ns) => ns.map(resetSelectedItem)); + store.edges.update((es) => es.map(resetSelectedItem)); } - deleteKeyPressedStore.subscribe((deleteKeyPressed) => { + store.deleteKeyPressed.subscribe((deleteKeyPressed) => { if (deleteKeyPressed) { - const nodes = get(nodesStore); - const edges = get(edgesStore); + const nodes = get(store.nodes); + const edges = get(store.edges); const selectedNodes = nodes.filter((node) => node.selected); const selectedEdges = edges.filter((edge) => edge.selected); @@ -458,21 +236,21 @@ export function createStore({ return res; }, []); - nodesStore.update((nds) => nds.filter((node) => !nodeIds.includes(node.id))); - edgesStore.update((eds) => eds.filter((edge) => !edgeIdsToRemove.includes(edge.id))); + store.nodes.update((nds) => nds.filter((node) => !nodeIds.includes(node.id))); + store.edges.update((eds) => eds.filter((edge) => !edgeIdsToRemove.includes(edge.id))); } } }); function addSelectedNodes(ids: string[]) { - selectionRectStore.set(null); - selectionRectModeStore.set(null); + store.selectionRect.set(null); + store.selectionRectMode.set(null); - if (get(multiselectionKeyPressedStore)) { + if (get(store.multiselectionKeyPressed)) { // @todo handle multiselection key } - nodesStore.update((ns) => + store.nodes.update((ns) => ns.map((node) => { return { ...node, @@ -483,10 +261,10 @@ export function createStore({ } function panBy(delta: XYPosition) { - const { zoom: d3Zoom, selection: d3Selection } = get(d3Store); - const transform = get(transformStore); - const width = get(widthStore); - const height = get(heightStore); + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + const transform = get(store.transform); + const width = get(store.width); + const height = get(store.height); if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) { return; @@ -509,7 +287,7 @@ export function createStore({ } function updateConnection(connectionUpdate: Partial | null) { - const currentConnectionData = get(connectionStore); + const currentConnectionData = get(store.connection); const nextConnectionData = currentConnectionData ? { ...initConnectionData, @@ -521,7 +299,7 @@ export function createStore({ ...connectionUpdate }; - connectionStore.set(nextConnectionData); + store.connection.set(nextConnectionData); } function cancelConnection() { @@ -529,28 +307,14 @@ export function createStore({ } return { - nodesStore, - edgesStore, - transformStore, - d3Store, - heightStore, - widthStore, - edgesWithDataStore, - idStore, - nodeOriginStore, - draggingStore, - selectionRectStore, - selectionKeyPressedStore, - deleteKeyPressedStore, - selectionRectModeStore, - selectionMode, - nodeTypesStore, - edgeTypesStore, - connectionModeStore, - domNodeStore, - connectionStore, - connectionRadiusStore, - connectionPathStore, + // state + ...store, + + // derived state + edgesLayouted: getEdgesLayouted(store), + connectionPath: getConnectionPath(store), + + // actions setNodes, setEdges, addEdge, diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts new file mode 100644 index 000000000..43221c0b6 --- /dev/null +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -0,0 +1,65 @@ +import { readable, writable } from 'svelte/store'; +import { + SelectionMode, + type D3ZoomInstance, + type D3SelectionInstance, + ConnectionMode, + ConnectionLineType, + type Transform, + type NodeOrigin, + type Rect +} from '@reactflow/system'; + +import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; +import InputNode from '$lib/components/nodes/InputNode.svelte'; +import OutputNode from '$lib/components/nodes/OutputNode.svelte'; +import type { Node, Edge, ConnectionData, NodeTypes, EdgeTypes } from '$lib/types'; +import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; +import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; +import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; + +export const initConnectionData = { + nodeId: null, + handleId: null, + handleType: null, + position: null, + status: null +}; + +export const initialStoreState = { + nodes: writable([]), + edges: writable([]), + edgesLayouted: readable([]), + height: writable(500), + width: writable(500), + nodeOrigin: writable([0.5, 0.5]), + d3: writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ + zoom: null, + selection: null + }), + id: writable(null), + dragging: writable(false), + selectionRect: writable<(Rect & { startX: number; startY: number }) | null>(null), + selectionKeyPressed: writable(false), + multiselectionKeyPressed: writable(false), + deleteKeyPressed: writable(false), + selectionRectMode: writable(null), + selectionMode: writable(SelectionMode.Partial), + nodeTypes: writable({ + input: InputNode, + output: OutputNode, + default: DefaultNode + }), + edgeTypes: writable({ + straight: StraightEdge, + smoothstep: SmoothStepEdge, + default: BezierEdge + }), + transform: writable([0, 0, 1]), + connectionMode: writable(ConnectionMode.Strict), + domNode: writable(null), + connectionPath: readable(null), + connection: writable(initConnectionData), + connectionRadius: writable(25), + connectionLineType: writable(ConnectionLineType.Bezier) +}; diff --git a/packages/svelte/src/lib/store/types.d.ts b/packages/svelte/src/lib/store/types.d.ts new file mode 100644 index 000000000..d9f32e4df --- /dev/null +++ b/packages/svelte/src/lib/store/types.d.ts @@ -0,0 +1,34 @@ +import type { + NodeDimensionUpdate, + XYPosition, + ViewportHelperFunctionOptions, + Connection, + NodeDragItem +} from '@reactflow/system'; + +import { initialStoreState } from './initial-store'; +import type { Node, Edge, ConnectionData } from '$lib/types'; + +export type SvelteFlowStoreActions = { + setNodes: (nodes: Node[]) => void; + setEdges: (edges: Edge[]) => void; + addEdge: (edge: Edge | Connection) => void; + zoomIn: (options?: ViewportHelperFunctionOptions) => void; + zoomOut: (options?: ViewportHelperFunctionOptions) => void; + fitView: (options?: ViewportHelperFunctionOptions) => boolean; + updateNodePositions: ( + nodeDragItems: NodeDragItem[], + positionChanged?: boolean, + dragging?: boolean + ) => void; + updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; + resetSelectedElements: () => void; + addSelectedNodes: (ids: string[]) => void; + panBy: (delta: XYPosition) => void; + updateConnection: (connection: Partial) => void; + cancelConnection: () => void; +}; + +export type SvelteFlowStoreState = typeof initialStoreState; + +export type SvelteFlowStore = SvelteFlowStoreState & SvelteFlowStoreActions; diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index e723c5e47..81f32c0ac 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -1,6 +1,6 @@ import type { Node, NodeTypes } from './nodes'; import type { ShortcutModifierDefinition } from '@svelte-put/shortcut'; -import type { Edge, HandleType, XYPosition } from '@reactflow/system'; +import type { ConnectionLineType, Edge, HandleType, XYPosition } from '@reactflow/system'; export type KeyModifier = ShortcutModifierDefinition; export type KeyDefinitionObject = { key: string; modifier?: KeyModifier }; @@ -20,6 +20,7 @@ export type SvelteFlowProps = { nodes: Node[]; edges: Edge[]; + connectionLineType?: ConnectionLineType; selectionKey?: KeyDefinition; deleteKey?: KeyDefinition; nodeTypes?: NodeTypes; From dda21e1fd219209d5a4dc16f6d47742e1664d568 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 28 Feb 2023 12:48:52 +0100 Subject: [PATCH 0026/1093] chore(svelte): run prettier --- packages/svelte/.eslintrc.cjs | 36 +- packages/svelte/.prettierrc | 13 +- packages/svelte/package.json | 90 +-- packages/svelte/src/app.d.ts | 12 +- packages/svelte/src/app.html | 36 +- packages/svelte/src/customnodes/Custom.svelte | 6 +- packages/svelte/src/lib/actions/drag/index.ts | 204 +++--- packages/svelte/src/lib/actions/drag/utils.ts | 240 +++---- .../svelte/src/lib/actions/portal/index.ts | 22 +- packages/svelte/src/lib/actions/zoom/index.ts | 204 +++--- .../ConnectionLine/ConnectionLine.svelte | 12 +- .../components/EdgeLabelRenderer/index.svelte | 4 +- .../src/lib/components/Handle/handler.ts | 392 +++++------ .../src/lib/components/Handle/index.svelte | 81 ++- .../svelte/src/lib/components/Handle/utils.ts | 282 ++++---- .../lib/components/KeyHandler/KeyHandler.d.ts | 4 +- .../components/KeyHandler/KeyHandler.svelte | 50 +- .../lib/components/NodeSelection/index.svelte | 10 +- .../src/lib/components/Selection/index.svelte | 2 +- .../lib/components/UserSelection/index.svelte | 2 +- .../src/lib/components/edges/BaseEdge.svelte | 10 +- .../lib/components/edges/BezierEdge.svelte | 11 +- .../lib/components/edges/EdgeWrapper.svelte | 14 +- .../components/edges/SmoothStepEdge.svelte | 11 +- .../lib/components/edges/StraightEdge.svelte | 13 +- .../lib/components/nodes/DefaultNode.svelte | 8 +- .../src/lib/components/nodes/InputNode.svelte | 3 +- .../lib/components/nodes/NodeWrapper.svelte | 27 +- .../lib/components/nodes/OutputNode.svelte | 3 +- .../lib/container/EdgeRenderer/index.svelte | 12 +- .../src/lib/container/EdgeRenderer/utils.ts | 160 ++--- .../lib/container/NodeRenderer/index.svelte | 21 +- .../src/lib/container/Pane/index.svelte | 57 +- .../svelte/src/lib/container/Panel/Panel.d.ts | 6 +- .../src/lib/container/Panel/index.svelte | 9 +- .../src/lib/container/SvelteFlow.svelte | 13 +- .../svelte/src/lib/container/Viewport.svelte | 6 +- .../src/lib/container/Zoom/index.svelte | 2 +- .../lib/plugins/Background/Background.svelte | 12 +- .../lib/plugins/Background/DotPattern.svelte | 4 +- .../lib/plugins/Background/LinePattern.svelte | 8 +- .../src/lib/plugins/Background/types.ts | 6 +- .../lib/plugins/Controls/ControlButton.svelte | 11 +- .../src/lib/plugins/Controls/Controls.svelte | 8 +- .../src/lib/plugins/Controls/Icons/Fit.svelte | 6 +- .../lib/plugins/Controls/Icons/Lock.svelte | 6 +- .../lib/plugins/Controls/Icons/Minus.svelte | 2 +- .../lib/plugins/Controls/Icons/Plus.svelte | 2 +- .../lib/plugins/Controls/Icons/Unlock.svelte | 6 +- .../src/lib/plugins/Minimap/Minimap.svelte | 37 +- .../lib/plugins/Minimap/MinimapNode.svelte | 12 +- .../svelte/src/lib/store/connection-path.ts | 120 ++-- .../svelte/src/lib/store/edges-layouted.ts | 104 +-- packages/svelte/src/lib/store/index.ts | 620 +++++++++--------- .../svelte/src/lib/store/initial-store.ts | 96 +-- packages/svelte/src/lib/store/types.d.ts | 44 +- packages/svelte/src/lib/types/general.ts | 30 +- packages/svelte/src/lib/types/index.ts | 12 +- packages/svelte/src/lib/types/nodes.ts | 54 +- packages/svelte/src/routes/+page.svelte | 129 ++-- packages/svelte/src/utils/index.ts | 144 ++-- packages/svelte/svelte.config.js | 12 +- packages/svelte/tsconfig.json | 30 +- packages/svelte/vite.config.ts | 2 +- 64 files changed, 1814 insertions(+), 1791 deletions(-) diff --git a/packages/svelte/.eslintrc.cjs b/packages/svelte/.eslintrc.cjs index 3ccf435f0..eaf19f561 100644 --- a/packages/svelte/.eslintrc.cjs +++ b/packages/svelte/.eslintrc.cjs @@ -1,20 +1,20 @@ module.exports = { - root: true, - parser: '@typescript-eslint/parser', - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], - plugins: ['svelte3', '@typescript-eslint'], - ignorePatterns: ['*.cjs'], - overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], - settings: { - 'svelte3/typescript': () => require('typescript') - }, - parserOptions: { - sourceType: 'module', - ecmaVersion: 2020 - }, - env: { - browser: true, - es2017: true, - node: true - } + root: true, + parser: '@typescript-eslint/parser', + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + plugins: ['svelte3', '@typescript-eslint'], + ignorePatterns: ['*.cjs'], + overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], + settings: { + 'svelte3/typescript': () => require('typescript') + }, + parserOptions: { + sourceType: 'module', + ecmaVersion: 2020 + }, + env: { + browser: true, + es2017: true, + node: true + } }; diff --git a/packages/svelte/.prettierrc b/packages/svelte/.prettierrc index a77fddea9..862e74f21 100644 --- a/packages/svelte/.prettierrc +++ b/packages/svelte/.prettierrc @@ -1,9 +1,8 @@ { - "useTabs": true, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], - "pluginSearchDirs": ["."], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "pluginSearchDirs": ["."], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] } diff --git a/packages/svelte/package.json b/packages/svelte/package.json index cd4162bd6..98f38b777 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,47 +1,47 @@ { - "name": "svelte", - "version": "0.0.1", - "scripts": { - "dev": "vite dev", - "build": "svelte-kit sync && svelte-package", - "prepublishOnly": "echo 'Did you mean to publish `./package/`, instead of `./`?' && exit 1", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --plugin-search-dir . --check . && eslint .", - "format": "prettier --plugin-search-dir . --write ." - }, - "type": "module", - "module": "index.ts", - "exports": { - ".": "./index.js" - }, - "dependencies": { - "@reactflow/edge-utils": "workspace:*", - "@reactflow/system": "workspace:*", - "@reactflow/utils": "workspace:*", - "@svelte-put/shortcut": "^2.0.0", - "classcat": "^5.0.4", - "d3-drag": "^3.0.0", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/kit": "^1.5.6", - "@sveltejs/package": "^1.0.2", - "@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-svelte3": "^4.0.0", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.8.1", - "svelte": "^3.55.1", - "svelte-check": "^3.0.1", - "tslib": "^2.4.1", - "typescript": "^4.9.3", - "vite": "^4.1.1" - } + "name": "svelte", + "version": "0.0.1", + "scripts": { + "dev": "vite dev", + "build": "svelte-kit sync && svelte-package", + "prepublishOnly": "echo 'Did you mean to publish `./package/`, instead of `./`?' && exit 1", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --plugin-search-dir . --check . && eslint .", + "format": "prettier --plugin-search-dir . --write ." + }, + "type": "module", + "module": "index.ts", + "exports": { + ".": "./index.js" + }, + "dependencies": { + "@reactflow/edge-utils": "workspace:*", + "@reactflow/system": "workspace:*", + "@reactflow/utils": "workspace:*", + "@svelte-put/shortcut": "^2.0.0", + "classcat": "^5.0.4", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.5.6", + "@sveltejs/package": "^1.0.2", + "@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-svelte3": "^4.0.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.8.1", + "svelte": "^3.55.1", + "svelte-check": "^3.0.1", + "tslib": "^2.4.1", + "typescript": "^4.9.3", + "vite": "^4.1.1" + } } diff --git a/packages/svelte/src/app.d.ts b/packages/svelte/src/app.d.ts index f59b884c5..899c7e8fc 100644 --- a/packages/svelte/src/app.d.ts +++ b/packages/svelte/src/app.d.ts @@ -1,12 +1,12 @@ // See https://kit.svelte.dev/docs/types#app // for information about these interfaces declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface Platform {} - } + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface Platform {} + } } export {}; diff --git a/packages/svelte/src/app.html b/packages/svelte/src/app.html index 9e4c67b44..442bc2200 100644 --- a/packages/svelte/src/app.html +++ b/packages/svelte/src/app.html @@ -1,21 +1,21 @@ - - - - - - %sveltekit.head% - - -
%sveltekit.body%
- + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ diff --git a/packages/svelte/src/customnodes/Custom.svelte b/packages/svelte/src/customnodes/Custom.svelte index c2be70f7e..cb4dc2ee9 100644 --- a/packages/svelte/src/customnodes/Custom.svelte +++ b/packages/svelte/src/customnodes/Custom.svelte @@ -1,7 +1,7 @@ {#if $connectionPath} - + @@ -43,4 +39,4 @@ stroke-width: 1; fill: none; } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte index 03000191a..b76d8b05e 100644 --- a/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte +++ b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte @@ -1,9 +1,9 @@
-
\ No newline at end of file +
diff --git a/packages/svelte/src/lib/components/Handle/handler.ts b/packages/svelte/src/lib/components/Handle/handler.ts index 56be794a4..d9da352f1 100644 --- a/packages/svelte/src/lib/components/Handle/handler.ts +++ b/packages/svelte/src/lib/components/Handle/handler.ts @@ -1,210 +1,210 @@ import { - getHostForElement, - calcAutoPan, - getEventPosition, - pointToRendererPoint, - rendererPointToPoint + getHostForElement, + calcAutoPan, + getEventPosition, + pointToRendererPoint, + rendererPointToPoint } from '@reactflow/utils'; import type { - OnConnect, - HandleType, - Connection, - ConnectionMode, - Node, - XYPosition, - Transform + OnConnect, + HandleType, + Connection, + ConnectionMode, + Node, + XYPosition, + Transform } from '@reactflow/system'; import { - getClosestHandle, - getConnectionStatus, - getHandleLookup, - getHandleType, - isValidHandle, - resetRecentHandle, - type ConnectionHandle, - type ValidConnectionFunc + getClosestHandle, + getConnectionStatus, + getHandleLookup, + getHandleType, + isValidHandle, + resetRecentHandle, + type ConnectionHandle, + type ValidConnectionFunc } from './utils'; import { get, type Writable } from 'svelte/store'; import type { ConnectionData } from '$lib/types'; export function handlePointerDown({ - event, - handleId, - nodeId, - onConnect, - domNode, - nodes, - connectionMode, - connectionRadius, - isTarget, - transform: transformStore, - panBy, - updateConnection, - cancelConnection, - isValidConnection, - edgeUpdaterType, - onEdgeUpdateEnd + event, + handleId, + nodeId, + onConnect, + domNode, + nodes, + connectionMode, + connectionRadius, + isTarget, + transform: transformStore, + panBy, + updateConnection, + cancelConnection, + isValidConnection, + edgeUpdaterType, + onEdgeUpdateEnd }: { - event: MouseEvent | TouchEvent; - handleId: string | null; - nodeId: string; - onConnect: OnConnect; - isTarget: boolean; - connectionMode: ConnectionMode; - domNode: HTMLDivElement | null; - nodes: Node[]; - connectionRadius: number; - isValidConnection: ValidConnectionFunc; - transform: Writable; - updateConnection: (connection: Partial) => void; - cancelConnection: () => void; - panBy: (delta: XYPosition) => void; - edgeUpdaterType?: HandleType; - onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; + event: MouseEvent | TouchEvent; + handleId: string | null; + nodeId: string; + onConnect: OnConnect; + isTarget: boolean; + connectionMode: ConnectionMode; + domNode: HTMLDivElement | null; + nodes: Node[]; + connectionRadius: number; + isValidConnection: ValidConnectionFunc; + transform: Writable; + updateConnection: (connection: Partial) => void; + cancelConnection: () => void; + panBy: (delta: XYPosition) => void; + edgeUpdaterType?: HandleType; + onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; }): void { - // when react-flow is used inside a shadow root we can't use document - const doc = getHostForElement(event.target as HTMLElement); - let autoPanId = 0; - let prevClosestHandle: ConnectionHandle | null; - - const { x, y } = getEventPosition(event); - const clickedHandle = doc?.elementFromPoint(x, y); - const handleType = getHandleType(edgeUpdaterType, clickedHandle); - const containerBounds = domNode?.getBoundingClientRect(); - - if (!containerBounds || !handleType) { - return; - } - - let prevActiveHandle: Element; - let connectionPosition = getEventPosition(event, containerBounds); - let autoPanStarted = false; - let connection: Connection | null = null; - let isValid = false; - let handleDomNode: Element | null = null; - - const autoPanOnConnect = true; - - const handleLookup = getHandleLookup({ - nodes, - nodeId, - handleId, - handleType - }); - - // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas - const autoPan = (): void => { - // @todd add prop - if (!autoPanOnConnect) { - return; - } - const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds); - - panBy({ x: xMovement, y: yMovement }); - autoPanId = requestAnimationFrame(autoPan); - }; - - updateConnection({ - position: connectionPosition, - nodeId, - handleId, - handleType, - status: null - }); - - // @todo add prop - // onConnectStart?.(event, { nodeId, handleId, handleType }); - - function onPointerMove(event: MouseEvent | TouchEvent) { - const transform = get(transformStore); - connectionPosition = getEventPosition(event, containerBounds); - - prevClosestHandle = getClosestHandle( - pointToRendererPoint(connectionPosition, transform, false, [1, 1]), - connectionRadius, - handleLookup - ); - - if (!autoPanStarted) { - autoPan(); - autoPanStarted = true; - } - - const result = isValidHandle( - event, - prevClosestHandle, - connectionMode, - nodeId, - handleId, - isTarget ? 'target' : 'source', - isValidConnection, - doc - ); - - handleDomNode = result.handleDomNode; - connection = result.connection; - isValid = result.isValid; - - updateConnection({ - position: - prevClosestHandle && isValid - ? rendererPointToPoint( - { - x: prevClosestHandle.x, - y: prevClosestHandle.y - }, - transform - ) - : connectionPosition, - status: getConnectionStatus(!!prevClosestHandle, isValid) - }); - - if (!prevClosestHandle && !isValid && !handleDomNode) { - return resetRecentHandle(prevActiveHandle); - } - - if (connection.source !== connection.target && handleDomNode) { - resetRecentHandle(prevActiveHandle); - prevActiveHandle = handleDomNode; - // @todo: remove the old class names "react-flow__handle-" in the next major version - handleDomNode.classList.add('connecting'); - handleDomNode.classList.toggle('valid', isValid); - } - } - - function onPointerUp(event: MouseEvent | TouchEvent) { - if ((prevClosestHandle || handleDomNode) && connection && isValid) { - onConnect?.(connection); - } - - // it's important to get a fresh reference from the store here - // in order to get the latest state of onConnectEnd - // @todo add onConnectEnd prop - // getState().onConnectEnd?.(event); - - if (edgeUpdaterType) { - onEdgeUpdateEnd?.(event); - } - - resetRecentHandle(prevActiveHandle); - cancelConnection(); - cancelAnimationFrame(autoPanId); - autoPanStarted = false; - isValid = false; - connection = null; - handleDomNode = null; - - doc.removeEventListener('mousemove', onPointerMove as EventListener); - doc.removeEventListener('mouseup', onPointerUp as EventListener); - - doc.removeEventListener('touchmove', onPointerMove as EventListener); - doc.removeEventListener('touchend', onPointerUp as EventListener); - } - - doc.addEventListener('mousemove', onPointerMove as EventListener); - doc.addEventListener('mouseup', onPointerUp as EventListener); - - doc.addEventListener('touchmove', onPointerMove as EventListener); - doc.addEventListener('touchend', onPointerUp as EventListener); + // when react-flow is used inside a shadow root we can't use document + const doc = getHostForElement(event.target as HTMLElement); + let autoPanId = 0; + let prevClosestHandle: ConnectionHandle | null; + + const { x, y } = getEventPosition(event); + const clickedHandle = doc?.elementFromPoint(x, y); + const handleType = getHandleType(edgeUpdaterType, clickedHandle); + const containerBounds = domNode?.getBoundingClientRect(); + + if (!containerBounds || !handleType) { + return; + } + + let prevActiveHandle: Element; + let connectionPosition = getEventPosition(event, containerBounds); + let autoPanStarted = false; + let connection: Connection | null = null; + let isValid = false; + let handleDomNode: Element | null = null; + + const autoPanOnConnect = true; + + const handleLookup = getHandleLookup({ + nodes, + nodeId, + handleId, + handleType + }); + + // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas + const autoPan = (): void => { + // @todd add prop + if (!autoPanOnConnect) { + return; + } + const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds); + + panBy({ x: xMovement, y: yMovement }); + autoPanId = requestAnimationFrame(autoPan); + }; + + updateConnection({ + position: connectionPosition, + nodeId, + handleId, + handleType, + status: null + }); + + // @todo add prop + // onConnectStart?.(event, { nodeId, handleId, handleType }); + + function onPointerMove(event: MouseEvent | TouchEvent) { + const transform = get(transformStore); + connectionPosition = getEventPosition(event, containerBounds); + + prevClosestHandle = getClosestHandle( + pointToRendererPoint(connectionPosition, transform, false, [1, 1]), + connectionRadius, + handleLookup + ); + + if (!autoPanStarted) { + autoPan(); + autoPanStarted = true; + } + + const result = isValidHandle( + event, + prevClosestHandle, + connectionMode, + nodeId, + handleId, + isTarget ? 'target' : 'source', + isValidConnection, + doc + ); + + handleDomNode = result.handleDomNode; + connection = result.connection; + isValid = result.isValid; + + updateConnection({ + position: + prevClosestHandle && isValid + ? rendererPointToPoint( + { + x: prevClosestHandle.x, + y: prevClosestHandle.y + }, + transform + ) + : connectionPosition, + status: getConnectionStatus(!!prevClosestHandle, isValid) + }); + + if (!prevClosestHandle && !isValid && !handleDomNode) { + return resetRecentHandle(prevActiveHandle); + } + + if (connection.source !== connection.target && handleDomNode) { + resetRecentHandle(prevActiveHandle); + prevActiveHandle = handleDomNode; + // @todo: remove the old class names "react-flow__handle-" in the next major version + handleDomNode.classList.add('connecting'); + handleDomNode.classList.toggle('valid', isValid); + } + } + + function onPointerUp(event: MouseEvent | TouchEvent) { + if ((prevClosestHandle || handleDomNode) && connection && isValid) { + onConnect?.(connection); + } + + // it's important to get a fresh reference from the store here + // in order to get the latest state of onConnectEnd + // @todo add onConnectEnd prop + // getState().onConnectEnd?.(event); + + if (edgeUpdaterType) { + onEdgeUpdateEnd?.(event); + } + + resetRecentHandle(prevActiveHandle); + cancelConnection(); + cancelAnimationFrame(autoPanId); + autoPanStarted = false; + isValid = false; + connection = null; + handleDomNode = null; + + doc.removeEventListener('mousemove', onPointerMove as EventListener); + doc.removeEventListener('mouseup', onPointerUp as EventListener); + + doc.removeEventListener('touchmove', onPointerMove as EventListener); + doc.removeEventListener('touchend', onPointerUp as EventListener); + } + + doc.addEventListener('mousemove', onPointerMove as EventListener); + doc.addEventListener('mouseup', onPointerUp as EventListener); + + doc.addEventListener('touchmove', onPointerMove as EventListener); + doc.addEventListener('touchend', onPointerUp as EventListener); } diff --git a/packages/svelte/src/lib/components/Handle/index.svelte b/packages/svelte/src/lib/components/Handle/index.svelte index eef61a696..b722e3f83 100644 --- a/packages/svelte/src/lib/components/Handle/index.svelte +++ b/packages/svelte/src/lib/components/Handle/index.svelte @@ -1,11 +1,11 @@
- \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/Handle/utils.ts b/packages/svelte/src/lib/components/Handle/utils.ts index adcc231d9..6029dac06 100644 --- a/packages/svelte/src/lib/components/Handle/utils.ts +++ b/packages/svelte/src/lib/components/Handle/utils.ts @@ -3,11 +3,11 @@ import type { Connection, HandleType, XYPosition, Node, NodeHandleBounds } from import { getEventPosition } from '@reactflow/utils'; export type ConnectionHandle = { - id: string | null; - type: HandleType; - nodeId: string; - x: number; - y: number; + id: string | null; + type: HandleType; + nodeId: string; + x: number; + y: number; }; export type ValidConnectionFunc = (connection: Connection) => boolean; @@ -15,174 +15,174 @@ export type ValidConnectionFunc = (connection: Connection) => boolean; // this functions collects all handles and adds an absolute position // so that we can later find the closest handle to the mouse position export function getHandles( - node: Node, - handleBounds: NodeHandleBounds, - type: HandleType, - currentHandle: string + node: Node, + handleBounds: NodeHandleBounds, + type: HandleType, + currentHandle: string ): ConnectionHandle[] { - return (handleBounds[type] || []).reduce((res, h) => { - if (`${node.id}-${h.id}-${type}` !== currentHandle) { - res.push({ - id: h.id || null, - type, - nodeId: node.id, - x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2, - y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2 - }); - } - return res; - }, []); + return (handleBounds[type] || []).reduce((res, h) => { + if (`${node.id}-${h.id}-${type}` !== currentHandle) { + res.push({ + id: h.id || null, + type, + nodeId: node.id, + x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2, + y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2 + }); + } + return res; + }, []); } export function getClosestHandle( - pos: XYPosition, - connectionRadius: number, - handles: ConnectionHandle[] + pos: XYPosition, + connectionRadius: number, + handles: ConnectionHandle[] ): ConnectionHandle | null { - let closestHandle: ConnectionHandle | null = null; - let minDistance = Infinity; - - handles.forEach((handle) => { - const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2)); - if (distance <= connectionRadius && distance < minDistance) { - minDistance = distance; - closestHandle = handle; - } - }); - - return closestHandle; + let closestHandle: ConnectionHandle | null = null; + let minDistance = Infinity; + + handles.forEach((handle) => { + const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2)); + if (distance <= connectionRadius && distance < minDistance) { + minDistance = distance; + closestHandle = handle; + } + }); + + return closestHandle; } type Result = { - handleDomNode: Element | null; - isValid: boolean; - connection: Connection; + handleDomNode: Element | null; + isValid: boolean; + connection: Connection; }; const nullConnection: Connection = { - source: null, - target: null, - sourceHandle: null, - targetHandle: null + source: null, + target: null, + sourceHandle: null, + targetHandle: null }; // checks if and returns connection in fom of an object { source: 123, target: 312 } export function isValidHandle( - event: MouseEvent | TouchEvent, - handle: Pick | null, - connectionMode: ConnectionMode, - fromNodeId: string, - fromHandleId: string | null, - fromType: string, - isValidConnection: ValidConnectionFunc, - doc: Document | ShadowRoot + event: MouseEvent | TouchEvent, + handle: Pick | null, + connectionMode: ConnectionMode, + fromNodeId: string, + fromHandleId: string | null, + fromType: string, + isValidConnection: ValidConnectionFunc, + doc: Document | ShadowRoot ) { - const isTarget = fromType === 'target'; - const handleDomNode = doc.querySelector( - `.react-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` - ); - const { x, y } = getEventPosition(event); - const handleBelow = doc.elementFromPoint(x, y); - const handleToCheck = handleBelow?.classList.contains('react-flow__handle') - ? handleBelow - : handleDomNode; - - const result: Result = { - handleDomNode: handleToCheck, - isValid: false, - connection: nullConnection - }; - - if (handleToCheck) { - const handleType = getHandleType(undefined, handleToCheck); - const handleNodeId = handleToCheck.getAttribute('data-nodeid'); - const handleId = handleToCheck.getAttribute('data-handleid'); - - const connection: Connection = { - source: isTarget ? handleNodeId : fromNodeId, - sourceHandle: isTarget ? handleId : fromHandleId, - target: isTarget ? fromNodeId : handleNodeId, - targetHandle: isTarget ? fromHandleId : handleId - }; - - result.connection = connection; - - // in strict mode we don't allow target to target or source to source connections - const isValid = - connectionMode === ConnectionMode.Strict - ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') - : handleNodeId !== fromNodeId || handleId !== fromHandleId; - - if (isValid) { - result.isValid = isValidConnection(connection); - } - } - - return result; + const isTarget = fromType === 'target'; + const handleDomNode = doc.querySelector( + `.react-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` + ); + const { x, y } = getEventPosition(event); + const handleBelow = doc.elementFromPoint(x, y); + const handleToCheck = handleBelow?.classList.contains('react-flow__handle') + ? handleBelow + : handleDomNode; + + const result: Result = { + handleDomNode: handleToCheck, + isValid: false, + connection: nullConnection + }; + + if (handleToCheck) { + const handleType = getHandleType(undefined, handleToCheck); + const handleNodeId = handleToCheck.getAttribute('data-nodeid'); + const handleId = handleToCheck.getAttribute('data-handleid'); + + const connection: Connection = { + source: isTarget ? handleNodeId : fromNodeId, + sourceHandle: isTarget ? handleId : fromHandleId, + target: isTarget ? fromNodeId : handleNodeId, + targetHandle: isTarget ? fromHandleId : handleId + }; + + result.connection = connection; + + // in strict mode we don't allow target to target or source to source connections + const isValid = + connectionMode === ConnectionMode.Strict + ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') + : handleNodeId !== fromNodeId || handleId !== fromHandleId; + + if (isValid) { + result.isValid = isValidConnection(connection); + } + } + + return result; } type GetHandleLookupParams = { - nodes: Node[]; - nodeId: string; - handleId: string | null; - handleType: string; + nodes: Node[]; + nodeId: string; + handleId: string | null; + handleType: string; }; export function getHandleLookup({ nodes, nodeId, handleId, handleType }: GetHandleLookupParams) { - return nodes.reduce((res, node) => { - if (node[internalsSymbol]) { - const { handleBounds } = node[internalsSymbol]; - let sourceHandles: ConnectionHandle[] = []; - let targetHandles: ConnectionHandle[] = []; - - if (handleBounds) { - sourceHandles = getHandles( - node, - handleBounds, - 'source', - `${nodeId}-${handleId}-${handleType}` - ); - targetHandles = getHandles( - node, - handleBounds, - 'target', - `${nodeId}-${handleId}-${handleType}` - ); - } - - res.push(...sourceHandles, ...targetHandles); - } - return res; - }, []); + return nodes.reduce((res, node) => { + if (node[internalsSymbol]) { + const { handleBounds } = node[internalsSymbol]; + let sourceHandles: ConnectionHandle[] = []; + let targetHandles: ConnectionHandle[] = []; + + if (handleBounds) { + sourceHandles = getHandles( + node, + handleBounds, + 'source', + `${nodeId}-${handleId}-${handleType}` + ); + targetHandles = getHandles( + node, + handleBounds, + 'target', + `${nodeId}-${handleId}-${handleType}` + ); + } + + res.push(...sourceHandles, ...targetHandles); + } + return res; + }, []); } export function getHandleType( - edgeUpdaterType: HandleType | undefined, - handleDomNode: Element | null + edgeUpdaterType: HandleType | undefined, + handleDomNode: Element | null ): HandleType | null { - if (edgeUpdaterType) { - return edgeUpdaterType; - } else if (handleDomNode?.classList.contains('target')) { - return 'target'; - } else if (handleDomNode?.classList.contains('source')) { - return 'source'; - } - - return null; + if (edgeUpdaterType) { + return edgeUpdaterType; + } else if (handleDomNode?.classList.contains('target')) { + return 'target'; + } else if (handleDomNode?.classList.contains('source')) { + return 'source'; + } + + return null; } export function resetRecentHandle(handleDomNode: Element): void { - handleDomNode?.classList.remove('valid', 'connecting'); + handleDomNode?.classList.remove('valid', 'connecting'); } export function getConnectionStatus(isInsideConnectionRadius: boolean, isHandleValid: boolean) { - let connectionStatus = null; + let connectionStatus = null; - if (isHandleValid) { - connectionStatus = 'valid'; - } else if (isInsideConnectionRadius && !isHandleValid) { - connectionStatus = 'invalid'; - } + if (isHandleValid) { + connectionStatus = 'valid'; + } else if (isInsideConnectionRadius && !isHandleValid) { + connectionStatus = 'invalid'; + } - return connectionStatus as ConnectionStatus; + return connectionStatus as ConnectionStatus; } diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.d.ts b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.d.ts index d4fa169e4..d7ef91b72 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.d.ts +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.d.ts @@ -1,6 +1,6 @@ import { KeyDefinition } from '$lib/types'; export type KeyHandlerProps = { - selectionKey?: KeyDefinition; - deleteKey?: KeyDefinition; + selectionKey?: KeyDefinition; + deleteKey?: KeyDefinition; }; diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte index 512a4303f..adb11daec 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte @@ -2,19 +2,19 @@ import { shortcut } from '@svelte-put/shortcut'; import { useStore } from '$lib/store'; - import type { KeyHandlerProps } from './KeyHandler' - import type { KeyDefinition, KeyDefinitionObject } from '$lib/types'; + import type { KeyHandlerProps } from './KeyHandler'; + import type { KeyDefinition, KeyDefinitionObject } from '$lib/types'; const { selectionKeyPressed, deleteKeyPressed } = useStore(); type $$Props = KeyHandlerProps; - export let selectionKey: $$Props['selectionKey'] = 'Shift'; - export let deleteKey: $$Props['deleteKey'] = 'Backspace'; + export let selectionKey: $$Props['selectionKey'] = 'Shift'; + export let deleteKey: $$Props['deleteKey'] = 'Backspace'; function isKeyObject(key?: KeyDefinition): key is KeyDefinitionObject { return typeof key === 'object'; - } + } $: selectionKeyString = typeof selectionKey === 'string' ? selectionKey : selectionKey!.key; $: selectionKeyModifier = isKeyObject(selectionKey) ? selectionKey?.modifier : []; @@ -24,20 +24,44 @@ selectionKeyPressed.set(true) }], + use:shortcut={{ + trigger: [ + { + key: selectionKeyString, + modifier: selectionKeyModifier, + callback: () => selectionKeyPressed.set(true) + } + ], type: 'keydown' }} - use:shortcut={{ - trigger: [{ key: selectionKeyString, modifier: selectionKeyModifier, callback: () => selectionKeyPressed.set(false) }], + use:shortcut={{ + trigger: [ + { + key: selectionKeyString, + modifier: selectionKeyModifier, + callback: () => selectionKeyPressed.set(false) + } + ], type: 'keyup' }} - use:shortcut={{ - trigger: [{ key: deleteKeyString, modifier: deleteKeyModifier, callback: () => deleteKeyPressed.set(true) }], + use:shortcut={{ + trigger: [ + { + key: deleteKeyString, + modifier: deleteKeyModifier, + callback: () => deleteKeyPressed.set(true) + } + ], type: 'keydown' }} - use:shortcut={{ - trigger: [{ key: deleteKeyString, modifier: deleteKeyModifier, callback: () => deleteKeyPressed.set(false) }], + use:shortcut={{ + trigger: [ + { + key: deleteKeyString, + modifier: deleteKeyModifier, + callback: () => deleteKeyPressed.set(false) + } + ], type: 'keyup' }} /> diff --git a/packages/svelte/src/lib/components/NodeSelection/index.svelte b/packages/svelte/src/lib/components/NodeSelection/index.svelte index a992bc7f7..5b649d36b 100644 --- a/packages/svelte/src/lib/components/NodeSelection/index.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/index.svelte @@ -1,15 +1,15 @@ + {#if selectedNodes}
\ No newline at end of file + diff --git a/packages/svelte/src/lib/components/Selection/index.svelte b/packages/svelte/src/lib/components/Selection/index.svelte index 9cb9a4c27..d4e41d042 100644 --- a/packages/svelte/src/lib/components/Selection/index.svelte +++ b/packages/svelte/src/lib/components/Selection/index.svelte @@ -4,7 +4,7 @@ export let width: number | null = 0; export let height: number | null = 0; export let isVisible: boolean = true; - + {#if isVisible}
+ - + {#if interactionWidth} - {label} + {label}
{/if} @@ -43,4 +39,4 @@ position: absolute; background: white; } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte index c9e4cc4fe..fa8b69143 100644 --- a/packages/svelte/src/lib/components/edges/BezierEdge.svelte +++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte @@ -2,7 +2,7 @@ import { getBezierPath } from '@reactflow/edge-utils'; import type { EdgeProps } from '$lib/types'; - import BaseEdge from './BaseEdge.svelte'; + import BaseEdge from './BaseEdge.svelte'; type $$Props = EdgeProps; @@ -12,13 +12,8 @@ targetX: $$props.targetX, targetY: $$props.targetY, sourcePosition: $$props.sourcePosition, - targetPosition: $$props.targetPosition, + targetPosition: $$props.targetPosition }); - + diff --git a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte index 7a18f90ea..8f24ab5e8 100644 --- a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte @@ -1,10 +1,10 @@ - + - \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte index f1d7c190f..5e27ec3d5 100644 --- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -1,8 +1,8 @@ - \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte index 22c551d81..1c10eb343 100644 --- a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -1,10 +1,10 @@
\ No newline at end of file + diff --git a/packages/svelte/src/lib/components/nodes/OutputNode.svelte b/packages/svelte/src/lib/components/nodes/OutputNode.svelte index 41c31a2f2..7c42facdc 100644 --- a/packages/svelte/src/lib/components/nodes/OutputNode.svelte +++ b/packages/svelte/src/lib/components/nodes/OutputNode.svelte @@ -1,6 +1,6 @@ + - + {#each $edgesLayouted as edge (edge.id)} {/each} @@ -25,4 +21,4 @@ pointer-events: none; overflow: visible; } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/container/EdgeRenderer/utils.ts b/packages/svelte/src/lib/container/EdgeRenderer/utils.ts index 139a9d687..c593abf93 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/utils.ts +++ b/packages/svelte/src/lib/container/EdgeRenderer/utils.ts @@ -1,105 +1,105 @@ import { - type NodeHandleBounds, - type Rect, - type Node, - type HandleElement, - type XYPosition, - Position, - internalsSymbol + type NodeHandleBounds, + type Rect, + type Node, + type HandleElement, + type XYPosition, + Position, + internalsSymbol } from '@reactflow/system'; export function getNodeData(node?: Node): [Rect, NodeHandleBounds | null, boolean] { - const handleBounds = node?.[internalsSymbol]?.handleBounds || null; + const handleBounds = node?.[internalsSymbol]?.handleBounds || null; - const isValid = - handleBounds && - node?.width && - node?.height && - typeof node?.positionAbsolute?.x !== 'undefined' && - typeof node?.positionAbsolute?.y !== 'undefined'; + const isValid = + handleBounds && + node?.width && + node?.height && + typeof node?.positionAbsolute?.x !== 'undefined' && + typeof node?.positionAbsolute?.y !== 'undefined'; - return [ - { - x: node?.positionAbsolute?.x || 0, - y: node?.positionAbsolute?.y || 0, - width: node?.width || 0, - height: node?.height || 0 - }, - handleBounds, - !!isValid - ]; + return [ + { + x: node?.positionAbsolute?.x || 0, + y: node?.positionAbsolute?.y || 0, + width: node?.width || 0, + height: node?.height || 0 + }, + handleBounds, + !!isValid + ]; } export function getHandlePosition( - position: Position, - nodeRect: Rect, - handle: HandleElement | null = null + position: Position, + nodeRect: Rect, + handle: HandleElement | null = null ): XYPosition { - const x = (handle?.x || 0) + nodeRect.x; - const y = (handle?.y || 0) + nodeRect.y; - const width = handle?.width || nodeRect.width; - const height = handle?.height || nodeRect.height; + const x = (handle?.x || 0) + nodeRect.x; + const y = (handle?.y || 0) + nodeRect.y; + const width = handle?.width || nodeRect.width; + const height = handle?.height || nodeRect.height; - switch (position) { - case Position.Top: - return { - x: x + width / 2, - y - }; - case Position.Right: - return { - x: x + width, - y: y + height / 2 - }; - case Position.Bottom: - return { - x: x + width / 2, - y: y + height - }; - case Position.Left: - return { - x, - y: y + height / 2 - }; - } + switch (position) { + case Position.Top: + return { + x: x + width / 2, + y + }; + case Position.Right: + return { + x: x + width, + y: y + height / 2 + }; + case Position.Bottom: + return { + x: x + width / 2, + y: y + height + }; + case Position.Left: + return { + x, + y: y + height / 2 + }; + } } export function getHandle(bounds: HandleElement[], handleId?: string | null): HandleElement | null { - if (!bounds) { - return null; - } + if (!bounds) { + return null; + } - if (handleId) { - return bounds.find((d) => d.id === handleId)!; - } else if (bounds.length === 1) { - return bounds[0]; - } + if (handleId) { + return bounds.find((d) => d.id === handleId)!; + } else if (bounds.length === 1) { + return bounds[0]; + } - return null; + return null; } export type EdgePosition = { - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; }; export function getEdgePositions( - sourceNodeRect: Rect, - sourceHandle: HandleElement, - sourcePosition: Position, - targetNodeRect: Rect, - targetHandle: HandleElement, - targetPosition: Position + sourceNodeRect: Rect, + sourceHandle: HandleElement, + sourcePosition: Position, + targetNodeRect: Rect, + targetHandle: HandleElement, + targetPosition: Position ): EdgePosition { - const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle); - const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle); + const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle); + const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle); - return { - sourceX: sourceHandlePos.x, - sourceY: sourceHandlePos.y, - targetX: targetHandlePos.x, - targetY: targetHandlePos.y - }; + return { + sourceX: sourceHandlePos.x, + sourceY: sourceHandlePos.y, + targetX: targetHandlePos.x, + targetY: targetHandlePos.y + }; } diff --git a/packages/svelte/src/lib/container/NodeRenderer/index.svelte b/packages/svelte/src/lib/container/NodeRenderer/index.svelte index 1312ecfac..74021b77d 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/index.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/index.svelte @@ -5,15 +5,18 @@ import { useStore } from '$lib/store'; const { nodes, updateNodeDimensions } = useStore(); - const resizeObserver: ResizeObserver | null = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver((entries: ResizeObserverEntry[]) => { - const updates = entries.map((entry: ResizeObserverEntry) => ({ - id: entry.target.getAttribute('data-id') as string, - nodeElement: entry.target as HTMLDivElement, - forceUpdate: true, - })) + const resizeObserver: ResizeObserver | null = + typeof ResizeObserver === 'undefined' + ? null + : new ResizeObserver((entries: ResizeObserverEntry[]) => { + const updates = entries.map((entry: ResizeObserverEntry) => ({ + id: entry.target.getAttribute('data-id') as string, + nodeElement: entry.target as HTMLDivElement, + forceUpdate: true + })); - updateNodeDimensions(updates); - }); + updateNodeDimensions(updates); + }); onDestroy(() => { resizeObserver?.disconnect(); @@ -33,4 +36,4 @@ pointer-events: none; transform-origin: 0 0; } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/container/Pane/index.svelte b/packages/svelte/src/lib/container/Pane/index.svelte index 883fcf586..2ca1b5dff 100644 --- a/packages/svelte/src/lib/container/Pane/index.svelte +++ b/packages/svelte/src/lib/container/Pane/index.svelte @@ -10,7 +10,7 @@ handler?.(event); }; - }; + } export function toggleSelected(ids: string[]) { return (item: Item) => { @@ -19,39 +19,48 @@ if (item.selected !== isSelected) { return { ...item, - selected: isSelected, + selected: isSelected }; } return item; - } + }; } -
+
@@ -46,4 +43,4 @@ left: 50%; transform: translateX(-50%); } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/container/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow.svelte index d91d81816..421577679 100644 --- a/packages/svelte/src/lib/container/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow.svelte @@ -1,8 +1,8 @@
@@ -22,4 +22,4 @@ z-index: 2; pointer-events: none; } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/container/Zoom/index.svelte b/packages/svelte/src/lib/container/Zoom/index.svelte index 51c7bbfd4..4097d51f2 100644 --- a/packages/svelte/src/lib/container/Zoom/index.svelte +++ b/packages/svelte/src/lib/container/Zoom/index.svelte @@ -20,4 +20,4 @@ left: 0; z-index: 4; } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index 75526092c..c30b958fb 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -4,7 +4,7 @@ import DotPattern from './DotPattern.svelte'; import LinePattern from './LinePattern.svelte'; import { useStore } from '$lib/store'; - import { BackgroundVariant } from './types'; + import { BackgroundVariant } from './types'; export let variant: BackgroundVariant = BackgroundVariant.Dots; export let gap = 20; @@ -18,13 +18,13 @@ const defaultColor = { [BackgroundVariant.Dots]: '#91919a', [BackgroundVariant.Lines]: '#eee', - [BackgroundVariant.Cross]: '#e2e2e2', + [BackgroundVariant.Cross]: '#e2e2e2' }; const defaultSize = { [BackgroundVariant.Dots]: 1, [BackgroundVariant.Lines]: 1, - [BackgroundVariant.Cross]: 6, + [BackgroundVariant.Cross]: 6 }; const { transform, id } = useStore(); @@ -43,7 +43,7 @@ : [patternDimensions[0] / 2, patternDimensions[1] / 2]; - + {:else} - + {/if} @@ -72,4 +72,4 @@ pointer-events: none; z-index: -1; } - \ No newline at end of file + diff --git a/packages/svelte/src/lib/plugins/Background/DotPattern.svelte b/packages/svelte/src/lib/plugins/Background/DotPattern.svelte index 3eb76c7e0..365842304 100644 --- a/packages/svelte/src/lib/plugins/Background/DotPattern.svelte +++ b/packages/svelte/src/lib/plugins/Background/DotPattern.svelte @@ -1,6 +1,6 @@ - \ No newline at end of file + diff --git a/packages/svelte/src/lib/plugins/Background/LinePattern.svelte b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte index 60dd4a8cc..64c7dad7d 100644 --- a/packages/svelte/src/lib/plugins/Background/LinePattern.svelte +++ b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte @@ -1,13 +1,11 @@ \ No newline at end of file + d={`M${dimensions[0] / 2} 0 V${dimensions[1]} M0 ${dimensions[1] / 2} H${dimensions[0]}`} +/> diff --git a/packages/svelte/src/lib/plugins/Background/types.ts b/packages/svelte/src/lib/plugins/Background/types.ts index c6e3e390f..3d252810c 100644 --- a/packages/svelte/src/lib/plugins/Background/types.ts +++ b/packages/svelte/src/lib/plugins/Background/types.ts @@ -1,5 +1,5 @@ export enum BackgroundVariant { - Lines = 'lines', - Dots = 'dots', - Cross = 'cross' + Lines = 'lines', + Dots = 'dots', + Cross = 'cross' } diff --git a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte index 4db8270db..27e4cc317 100644 --- a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte +++ b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte @@ -3,10 +3,15 @@ let className: string; - export { className as class } + export { className as class }; - diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Lock.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Lock.svelte index 6205cfc7b..8fd1dddbf 100644 --- a/packages/svelte/src/lib/plugins/Controls/Icons/Lock.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Lock.svelte @@ -1,3 +1,5 @@ - - \ No newline at end of file + + diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Minus.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Minus.svelte index dc8d310bf..b2f109bb3 100644 --- a/packages/svelte/src/lib/plugins/Controls/Icons/Minus.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Minus.svelte @@ -1,3 +1,3 @@ - \ No newline at end of file + diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Plus.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Plus.svelte index a13adbd7e..feb813da8 100644 --- a/packages/svelte/src/lib/plugins/Controls/Icons/Plus.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Plus.svelte @@ -1,3 +1,3 @@ - \ No newline at end of file + diff --git a/packages/svelte/src/lib/plugins/Controls/Icons/Unlock.svelte b/packages/svelte/src/lib/plugins/Controls/Icons/Unlock.svelte index 2e59dbd76..828668514 100644 --- a/packages/svelte/src/lib/plugins/Controls/Icons/Unlock.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Icons/Unlock.svelte @@ -1,3 +1,5 @@ - - \ No newline at end of file + + diff --git a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte index 1d6f33489..cf24f1d2b 100644 --- a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte +++ b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte @@ -1,10 +1,10 @@ - + {#if ariaLabel}{ariaLabel}{/if} - {#each $nodes as node(node.id)} + {#each $nodes as node (node.id)} {#if node.width && node.height} {@const pos = getNodePositionWithOrigin(node, $nodeOrigin).positionAbsolute} @@ -85,7 +92,9 @@ {/each} - \ No newline at end of file + diff --git a/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte index 5d5493325..079ef22a3 100644 --- a/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte +++ b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte @@ -20,14 +20,14 @@ \ No newline at end of file +/> diff --git a/packages/svelte/src/lib/store/connection-path.ts b/packages/svelte/src/lib/store/connection-path.ts index 9b2805fa6..bd3b420d1 100644 --- a/packages/svelte/src/lib/store/connection-path.ts +++ b/packages/svelte/src/lib/store/connection-path.ts @@ -5,72 +5,72 @@ import type { SvelteFlowStoreState } from './types'; import { derived } from 'svelte/store'; const oppositePosition = { - [Position.Left]: Position.Right, - [Position.Right]: Position.Left, - [Position.Top]: Position.Bottom, - [Position.Bottom]: Position.Top + [Position.Left]: Position.Right, + [Position.Right]: Position.Left, + [Position.Top]: Position.Bottom, + [Position.Bottom]: Position.Top }; export function getConnectionPath(store: SvelteFlowStoreState) { - return derived( - [ - store.connection, - store.connectionLineType, - store.connectionMode, - store.nodes, - store.transform - ], - ([$connection, $connectionLineType, $connectionMode, $nodes, $transform]) => { - if (!$connection.nodeId) { - return null; - } + return derived( + [ + store.connection, + store.connectionLineType, + store.connectionMode, + store.nodes, + store.transform + ], + ([$connection, $connectionLineType, $connectionMode, $nodes, $transform]) => { + if (!$connection.nodeId) { + return null; + } - const fromNode = $nodes.find((n) => n.id === $connection.nodeId); - const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds; - const handleBoundsStrict = fromHandleBounds?.[$connection.handleType || 'source'] || []; - const handleBoundsLoose = handleBoundsStrict - ? handleBoundsStrict - : fromHandleBounds?.[$connection.handleType === 'source' ? 'target' : 'source']!; - const handleBounds = - $connectionMode === ConnectionMode.Strict ? handleBoundsStrict : handleBoundsLoose; - const fromHandle = $connection.handleId - ? handleBounds.find((d) => d.id === $connection.handleId) - : handleBounds[0]; - const fromHandleX = fromHandle - ? fromHandle.x + fromHandle.width / 2 - : (fromNode?.width ?? 0) / 2; - const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode?.height ?? 0; - const fromX = (fromNode?.positionAbsolute?.x ?? 0) + fromHandleX; - const fromY = (fromNode?.positionAbsolute?.y ?? 0) + fromHandleY; - const fromPosition = fromHandle?.position; - const toPosition = fromPosition ? oppositePosition[fromPosition] : undefined; + const fromNode = $nodes.find((n) => n.id === $connection.nodeId); + const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds; + const handleBoundsStrict = fromHandleBounds?.[$connection.handleType || 'source'] || []; + const handleBoundsLoose = handleBoundsStrict + ? handleBoundsStrict + : fromHandleBounds?.[$connection.handleType === 'source' ? 'target' : 'source']!; + const handleBounds = + $connectionMode === ConnectionMode.Strict ? handleBoundsStrict : handleBoundsLoose; + const fromHandle = $connection.handleId + ? handleBounds.find((d) => d.id === $connection.handleId) + : handleBounds[0]; + const fromHandleX = fromHandle + ? fromHandle.x + fromHandle.width / 2 + : (fromNode?.width ?? 0) / 2; + const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode?.height ?? 0; + const fromX = (fromNode?.positionAbsolute?.x ?? 0) + fromHandleX; + const fromY = (fromNode?.positionAbsolute?.y ?? 0) + fromHandleY; + const fromPosition = fromHandle?.position; + const toPosition = fromPosition ? oppositePosition[fromPosition] : undefined; - const pathParams = { - sourceX: fromX, - sourceY: fromY, - sourcePosition: fromPosition, - targetX: (($connection.position?.x ?? 0) - $transform[0]) / $transform[2], - targetY: (($connection.position?.y ?? 0) - $transform[1]) / $transform[2], - targetPosition: toPosition - }; + const pathParams = { + sourceX: fromX, + sourceY: fromY, + sourcePosition: fromPosition, + targetX: (($connection.position?.x ?? 0) - $transform[0]) / $transform[2], + targetY: (($connection.position?.y ?? 0) - $transform[1]) / $transform[2], + targetPosition: toPosition + }; - let path = ''; + let path = ''; - if ($connectionLineType === ConnectionLineType.Bezier) { - // we assume the destination position is opposite to the source position - [path] = getBezierPath(pathParams); - } else if ($connectionLineType === ConnectionLineType.Step) { - [path] = getSmoothStepPath({ - ...pathParams, - borderRadius: 0 - }); - } else if ($connectionLineType === ConnectionLineType.SmoothStep) { - [path] = getSmoothStepPath(pathParams); - } else { - [path] = getStraightPath(pathParams); - } + if ($connectionLineType === ConnectionLineType.Bezier) { + // we assume the destination position is opposite to the source position + [path] = getBezierPath(pathParams); + } else if ($connectionLineType === ConnectionLineType.Step) { + [path] = getSmoothStepPath({ + ...pathParams, + borderRadius: 0 + }); + } else if ($connectionLineType === ConnectionLineType.SmoothStep) { + [path] = getSmoothStepPath(pathParams); + } else { + [path] = getStraightPath(pathParams); + } - return path; - } - ); + return path; + } + ); } diff --git a/packages/svelte/src/lib/store/edges-layouted.ts b/packages/svelte/src/lib/store/edges-layouted.ts index b1acfd531..b5825e990 100644 --- a/packages/svelte/src/lib/store/edges-layouted.ts +++ b/packages/svelte/src/lib/store/edges-layouted.ts @@ -6,56 +6,56 @@ import type { WrapEdgeProps } from '$lib/types'; import type { SvelteFlowStoreState } from './types'; export function getEdgesLayouted(store: SvelteFlowStoreState) { - return derived([store.edges, store.nodes], ([$edges, $nodes]) => { - return $edges - .map((edge) => { - const sourceNode = $nodes.find((node) => node.id === edge.source); - const targetNode = $nodes.find((node) => node.id === edge.target); - const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(sourceNode); - const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(targetNode); - - if (!sourceIsValid || !targetIsValid) { - return null; - } - - const edgeType = edge.type || 'default'; - - const targetNodeHandles = targetHandleBounds!.target; - const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); - const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); - const sourcePosition = sourceHandle?.position || Position.Bottom; - const targetPosition = targetHandle?.position || Position.Top; - - if (!sourceHandle || !targetHandle) { - return null; - } - - const { sourceX, sourceY, targetX, targetY } = getEdgePositions( - sourceNodeRect, - sourceHandle, - sourcePosition, - targetNodeRect, - targetHandle, - targetPosition - ); - - // we nee to do this to match the types - const sourceHandleId = edge.sourceHandle; - const targetHandleId = edge.targetHandle; - - return { - ...edge, - type: edgeType, - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - sourceHandleId, - targetHandleId - }; - }) - .filter((e) => e !== null) as WrapEdgeProps[]; - }); + return derived([store.edges, store.nodes], ([$edges, $nodes]) => { + return $edges + .map((edge) => { + const sourceNode = $nodes.find((node) => node.id === edge.source); + const targetNode = $nodes.find((node) => node.id === edge.target); + const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(sourceNode); + const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(targetNode); + + if (!sourceIsValid || !targetIsValid) { + return null; + } + + const edgeType = edge.type || 'default'; + + const targetNodeHandles = targetHandleBounds!.target; + const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); + const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); + const sourcePosition = sourceHandle?.position || Position.Bottom; + const targetPosition = targetHandle?.position || Position.Top; + + if (!sourceHandle || !targetHandle) { + return null; + } + + const { sourceX, sourceY, targetX, targetY } = getEdgePositions( + sourceNodeRect, + sourceHandle, + sourcePosition, + targetNodeRect, + targetHandle, + targetPosition + ); + + // we nee to do this to match the types + const sourceHandleId = edge.sourceHandle; + const targetHandleId = edge.targetHandle; + + return { + ...edge, + type: edgeType, + sourceX, + sourceY, + targetX, + targetY, + sourcePosition, + targetPosition, + sourceHandleId, + targetHandleId + }; + }) + .filter((e) => e !== null) as WrapEdgeProps[]; + }); } diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 63da61042..5039627c2 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -1,23 +1,23 @@ import { getContext } from 'svelte'; import { get } from 'svelte/store'; import { - type Transform, - type NodeDragItem, - type NodeDimensionUpdate, - internalsSymbol, - type NodeOrigin, - type ViewportHelperFunctionOptions, - type Node as RFNode, - type Connection, - type XYPosition, - type CoordinateExtent + type Transform, + type NodeDragItem, + type NodeDimensionUpdate, + internalsSymbol, + type NodeOrigin, + type ViewportHelperFunctionOptions, + type Node as RFNode, + type Connection, + type XYPosition, + type CoordinateExtent } from '@reactflow/system'; import { - fitView as fitViewUtil, - getConnectedEdges, - getD3Transition, - getDimensions, - addEdge as addEdgeUtil + fitView as fitViewUtil, + getConnectedEdges, + getD3Transition, + getDimensions, + addEdge as addEdgeUtil } from '@reactflow/utils'; import { zoomIdentity } from 'd3-zoom'; @@ -32,307 +32,307 @@ import type { SvelteFlowStore } from './types'; export const key = Symbol(); type CreateStoreProps = { - fitView?: boolean; - nodeOrigin?: NodeOrigin; - transform?: Transform; - nodeTypes?: NodeTypes; - edgeTypes?: EdgeTypes; - id?: string; + fitView?: boolean; + nodeOrigin?: NodeOrigin; + transform?: Transform; + nodeTypes?: NodeTypes; + edgeTypes?: EdgeTypes; + id?: string; }; export function createStore({ - transform = [0, 0, 1], - nodeOrigin = [0, 0], - fitView: fitViewOnInit = false, - nodeTypes = {}, - edgeTypes = {}, - id = '1' + transform = [0, 0, 1], + nodeOrigin = [0, 0], + fitView: fitViewOnInit = false, + nodeTypes = {}, + edgeTypes = {}, + id = '1' }: CreateStoreProps): SvelteFlowStore { - const store = { - ...initialStoreState - }; - - let fitViewOnInitDone = false; - - function setEdges(edges: Edge[]) { - store.edges.set(edges); - } - - function addEdge(edgeParams: Edge | Connection) { - const edges = get(store.edges); - store.edges.set(addEdgeUtil(edgeParams, edges)); - } - - function setNodes(nodes: Node[]) { - store.nodes.update((currentNodes) => { - const nextNodes = nodes.map((n) => { - const currentNode = currentNodes.find((cn) => cn.id === n.id) || {}; - - return { - ...currentNode, - ...n, - positionAbsolute: n.position - }; - }); - - return nextNodes; - }); - } - - function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) { - store.nodes.update((nds) => { - return nds.map((n) => { - const nodeDragItem = nodeDragItems.find((ndi) => ndi.id === n.id); - - if (nodeDragItem) { - return { - ...n, - dragging, - positionAbsolute: nodeDragItem.positionAbsolute, - position: nodeDragItem.position - }; - } - - return n; - }); - }); - } - - function updateNodeDimensions(updates: NodeDimensionUpdate[]) { - const viewportNode = document?.querySelector('.react-flow__viewport'); - - if (!viewportNode) { - return; - } - - const style = window.getComputedStyle(viewportNode); - const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform); - - const nextNodes = get(store.nodes).map((node) => { - const update = updates.find((u) => u.id === node.id); - - if (update) { - const dimensions = getDimensions(update.nodeElement); - - const doUpdate = !!( - dimensions.width && - dimensions.height && - (node.width !== dimensions.width || - node.height !== dimensions.height || - update.forceUpdate) - ); - - if (doUpdate) { - node[internalsSymbol] = { - ...node[internalsSymbol], - handleBounds: { - source: getHandleBounds('.source', update.nodeElement, zoom), - target: getHandleBounds('.target', update.nodeElement, zoom) - } - }; - node.width = dimensions.width; - node.height = dimensions.height; - } - } - - return node; - }); - - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); - - fitViewOnInitDone = - fitViewOnInitDone || (fitViewOnInit && !!d3Zoom && !!d3Selection && fitView()); - - store.nodes.set(nextNodes); - } - - function zoomIn(options?: ViewportHelperFunctionOptions) { - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); - - if (d3Zoom && d3Selection) { - d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2); - } - } - - function zoomOut(options?: ViewportHelperFunctionOptions) { - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); - if (d3Zoom && d3Selection) { - d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2); - } - } - - function fitView() { - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); - - if (!d3Zoom || !d3Selection) { - return false; - } - - return fitViewUtil( - { - nodes: get(store.nodes) as RFNode[], - width: get(store.width), - height: get(store.height), - minZoom: 0.2, - maxZoom: 2, - d3Selection, - d3Zoom, - nodeOrigin: get(store.nodeOrigin) - }, - {} - ); - } - - function resetSelectedItem(item: T) { - if (item.selected) { - return { - ...item, - selected: false - }; - } - - return item; - } - - function resetSelectedElements() { - store.nodes.update((ns) => ns.map(resetSelectedItem)); - store.edges.update((es) => es.map(resetSelectedItem)); - } - - store.deleteKeyPressed.subscribe((deleteKeyPressed) => { - if (deleteKeyPressed) { - const nodes = get(store.nodes); - const edges = get(store.edges); - const selectedNodes = nodes.filter((node) => node.selected); - const selectedEdges = edges.filter((edge) => edge.selected); - - // @todo can we put this stuff into @reactflow/utils? - const nodeIds = selectedNodes.map((node) => node.id); - const edgeIds = selectedEdges.map((edge) => edge.id); - const nodesToRemove = nodes.reduce((res, node) => { - const parentHit = - !nodeIds.includes(node.id) && - node.parentNode && - res.find((n) => n.id === node.parentNode); - const deletable = typeof node.deletable === 'boolean' ? node.deletable : true; - if (deletable && (nodeIds.includes(node.id) || parentHit)) { - res.push(node); - } - - return res; - }, []); - const deletableEdges = edges.filter((e) => - typeof e.deletable === 'boolean' ? e.deletable : true - ); - const initialHitEdges = deletableEdges.filter((e) => edgeIds.includes(e.id)); - - if (nodesToRemove || initialHitEdges) { - const connectedEdges = getConnectedEdges(nodesToRemove as RFNode[], deletableEdges); - const edgesToRemove = [...initialHitEdges, ...connectedEdges]; - const edgeIdsToRemove = edgesToRemove.reduce((res, edge) => { - if (!res.includes(edge.id)) { - res.push(edge.id); - } - return res; - }, []); - - store.nodes.update((nds) => nds.filter((node) => !nodeIds.includes(node.id))); - store.edges.update((eds) => eds.filter((edge) => !edgeIdsToRemove.includes(edge.id))); - } - } - }); - - function addSelectedNodes(ids: string[]) { - store.selectionRect.set(null); - store.selectionRectMode.set(null); - - if (get(store.multiselectionKeyPressed)) { - // @todo handle multiselection key - } - - store.nodes.update((ns) => - ns.map((node) => { - return { - ...node, - selected: ids.includes(node.id) - }; - }) - ); - } - - function panBy(delta: XYPosition) { - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); - const transform = get(store.transform); - const width = get(store.width); - const height = get(store.height); - - if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) { - return; - } - - const nextTransform = zoomIdentity - .translate(transform[0] + delta.x, transform[1] + delta.y) - .scale(transform[2]); - - const extent: CoordinateExtent = [ - [0, 0], - [width, height] - ]; - - const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, [ - [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY], - [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY] - ]); - d3Zoom.transform(d3Selection, constrainedTransform); - } - - function updateConnection(connectionUpdate: Partial | null) { - const currentConnectionData = get(store.connection); - const nextConnectionData = currentConnectionData - ? { - ...initConnectionData, - ...currentConnectionData, - ...connectionUpdate - } - : { - ...initConnectionData, - ...connectionUpdate - }; - - store.connection.set(nextConnectionData); - } - - function cancelConnection() { - updateConnection(initConnectionData); - } - - return { - // state - ...store, - - // derived state - edgesLayouted: getEdgesLayouted(store), - connectionPath: getConnectionPath(store), - - // actions - setNodes, - setEdges, - addEdge, - updateNodePositions, - updateNodeDimensions, - zoomIn, - zoomOut, - fitView, - resetSelectedElements, - addSelectedNodes, - panBy, - updateConnection, - cancelConnection - }; + const store = { + ...initialStoreState + }; + + let fitViewOnInitDone = false; + + function setEdges(edges: Edge[]) { + store.edges.set(edges); + } + + function addEdge(edgeParams: Edge | Connection) { + const edges = get(store.edges); + store.edges.set(addEdgeUtil(edgeParams, edges)); + } + + function setNodes(nodes: Node[]) { + store.nodes.update((currentNodes) => { + const nextNodes = nodes.map((n) => { + const currentNode = currentNodes.find((cn) => cn.id === n.id) || {}; + + return { + ...currentNode, + ...n, + positionAbsolute: n.position + }; + }); + + return nextNodes; + }); + } + + function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) { + store.nodes.update((nds) => { + return nds.map((n) => { + const nodeDragItem = nodeDragItems.find((ndi) => ndi.id === n.id); + + if (nodeDragItem) { + return { + ...n, + dragging, + positionAbsolute: nodeDragItem.positionAbsolute, + position: nodeDragItem.position + }; + } + + return n; + }); + }); + } + + function updateNodeDimensions(updates: NodeDimensionUpdate[]) { + const viewportNode = document?.querySelector('.react-flow__viewport'); + + if (!viewportNode) { + return; + } + + const style = window.getComputedStyle(viewportNode); + const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform); + + const nextNodes = get(store.nodes).map((node) => { + const update = updates.find((u) => u.id === node.id); + + if (update) { + const dimensions = getDimensions(update.nodeElement); + + const doUpdate = !!( + dimensions.width && + dimensions.height && + (node.width !== dimensions.width || + node.height !== dimensions.height || + update.forceUpdate) + ); + + if (doUpdate) { + node[internalsSymbol] = { + ...node[internalsSymbol], + handleBounds: { + source: getHandleBounds('.source', update.nodeElement, zoom), + target: getHandleBounds('.target', update.nodeElement, zoom) + } + }; + node.width = dimensions.width; + node.height = dimensions.height; + } + } + + return node; + }); + + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + + fitViewOnInitDone = + fitViewOnInitDone || (fitViewOnInit && !!d3Zoom && !!d3Selection && fitView()); + + store.nodes.set(nextNodes); + } + + function zoomIn(options?: ViewportHelperFunctionOptions) { + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + + if (d3Zoom && d3Selection) { + d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2); + } + } + + function zoomOut(options?: ViewportHelperFunctionOptions) { + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + if (d3Zoom && d3Selection) { + d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2); + } + } + + function fitView() { + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + + if (!d3Zoom || !d3Selection) { + return false; + } + + return fitViewUtil( + { + nodes: get(store.nodes) as RFNode[], + width: get(store.width), + height: get(store.height), + minZoom: 0.2, + maxZoom: 2, + d3Selection, + d3Zoom, + nodeOrigin: get(store.nodeOrigin) + }, + {} + ); + } + + function resetSelectedItem(item: T) { + if (item.selected) { + return { + ...item, + selected: false + }; + } + + return item; + } + + function resetSelectedElements() { + store.nodes.update((ns) => ns.map(resetSelectedItem)); + store.edges.update((es) => es.map(resetSelectedItem)); + } + + store.deleteKeyPressed.subscribe((deleteKeyPressed) => { + if (deleteKeyPressed) { + const nodes = get(store.nodes); + const edges = get(store.edges); + const selectedNodes = nodes.filter((node) => node.selected); + const selectedEdges = edges.filter((edge) => edge.selected); + + // @todo can we put this stuff into @reactflow/utils? + const nodeIds = selectedNodes.map((node) => node.id); + const edgeIds = selectedEdges.map((edge) => edge.id); + const nodesToRemove = nodes.reduce((res, node) => { + const parentHit = + !nodeIds.includes(node.id) && + node.parentNode && + res.find((n) => n.id === node.parentNode); + const deletable = typeof node.deletable === 'boolean' ? node.deletable : true; + if (deletable && (nodeIds.includes(node.id) || parentHit)) { + res.push(node); + } + + return res; + }, []); + const deletableEdges = edges.filter((e) => + typeof e.deletable === 'boolean' ? e.deletable : true + ); + const initialHitEdges = deletableEdges.filter((e) => edgeIds.includes(e.id)); + + if (nodesToRemove || initialHitEdges) { + const connectedEdges = getConnectedEdges(nodesToRemove as RFNode[], deletableEdges); + const edgesToRemove = [...initialHitEdges, ...connectedEdges]; + const edgeIdsToRemove = edgesToRemove.reduce((res, edge) => { + if (!res.includes(edge.id)) { + res.push(edge.id); + } + return res; + }, []); + + store.nodes.update((nds) => nds.filter((node) => !nodeIds.includes(node.id))); + store.edges.update((eds) => eds.filter((edge) => !edgeIdsToRemove.includes(edge.id))); + } + } + }); + + function addSelectedNodes(ids: string[]) { + store.selectionRect.set(null); + store.selectionRectMode.set(null); + + if (get(store.multiselectionKeyPressed)) { + // @todo handle multiselection key + } + + store.nodes.update((ns) => + ns.map((node) => { + return { + ...node, + selected: ids.includes(node.id) + }; + }) + ); + } + + function panBy(delta: XYPosition) { + const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + const transform = get(store.transform); + const width = get(store.width); + const height = get(store.height); + + if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) { + return; + } + + const nextTransform = zoomIdentity + .translate(transform[0] + delta.x, transform[1] + delta.y) + .scale(transform[2]); + + const extent: CoordinateExtent = [ + [0, 0], + [width, height] + ]; + + const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, [ + [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY], + [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY] + ]); + d3Zoom.transform(d3Selection, constrainedTransform); + } + + function updateConnection(connectionUpdate: Partial | null) { + const currentConnectionData = get(store.connection); + const nextConnectionData = currentConnectionData + ? { + ...initConnectionData, + ...currentConnectionData, + ...connectionUpdate + } + : { + ...initConnectionData, + ...connectionUpdate + }; + + store.connection.set(nextConnectionData); + } + + function cancelConnection() { + updateConnection(initConnectionData); + } + + return { + // state + ...store, + + // derived state + edgesLayouted: getEdgesLayouted(store), + connectionPath: getConnectionPath(store), + + // actions + setNodes, + setEdges, + addEdge, + updateNodePositions, + updateNodeDimensions, + zoomIn, + zoomOut, + fitView, + resetSelectedElements, + addSelectedNodes, + panBy, + updateConnection, + cancelConnection + }; } export function useStore(): SvelteFlowStore { - const { getStore } = getContext<{ getStore: () => SvelteFlowStore }>(key); + const { getStore } = getContext<{ getStore: () => SvelteFlowStore }>(key); - return getStore(); + return getStore(); } diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 43221c0b6..80f74ffc1 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -1,13 +1,13 @@ import { readable, writable } from 'svelte/store'; import { - SelectionMode, - type D3ZoomInstance, - type D3SelectionInstance, - ConnectionMode, - ConnectionLineType, - type Transform, - type NodeOrigin, - type Rect + SelectionMode, + type D3ZoomInstance, + type D3SelectionInstance, + ConnectionMode, + ConnectionLineType, + type Transform, + type NodeOrigin, + type Rect } from '@reactflow/system'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; @@ -19,47 +19,47 @@ import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; export const initConnectionData = { - nodeId: null, - handleId: null, - handleType: null, - position: null, - status: null + nodeId: null, + handleId: null, + handleType: null, + position: null, + status: null }; export const initialStoreState = { - nodes: writable([]), - edges: writable([]), - edgesLayouted: readable([]), - height: writable(500), - width: writable(500), - nodeOrigin: writable([0.5, 0.5]), - d3: writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ - zoom: null, - selection: null - }), - id: writable(null), - dragging: writable(false), - selectionRect: writable<(Rect & { startX: number; startY: number }) | null>(null), - selectionKeyPressed: writable(false), - multiselectionKeyPressed: writable(false), - deleteKeyPressed: writable(false), - selectionRectMode: writable(null), - selectionMode: writable(SelectionMode.Partial), - nodeTypes: writable({ - input: InputNode, - output: OutputNode, - default: DefaultNode - }), - edgeTypes: writable({ - straight: StraightEdge, - smoothstep: SmoothStepEdge, - default: BezierEdge - }), - transform: writable([0, 0, 1]), - connectionMode: writable(ConnectionMode.Strict), - domNode: writable(null), - connectionPath: readable(null), - connection: writable(initConnectionData), - connectionRadius: writable(25), - connectionLineType: writable(ConnectionLineType.Bezier) + nodes: writable([]), + edges: writable([]), + edgesLayouted: readable([]), + height: writable(500), + width: writable(500), + nodeOrigin: writable([0.5, 0.5]), + d3: writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ + zoom: null, + selection: null + }), + id: writable(null), + dragging: writable(false), + selectionRect: writable<(Rect & { startX: number; startY: number }) | null>(null), + selectionKeyPressed: writable(false), + multiselectionKeyPressed: writable(false), + deleteKeyPressed: writable(false), + selectionRectMode: writable(null), + selectionMode: writable(SelectionMode.Partial), + nodeTypes: writable({ + input: InputNode, + output: OutputNode, + default: DefaultNode + }), + edgeTypes: writable({ + straight: StraightEdge, + smoothstep: SmoothStepEdge, + default: BezierEdge + }), + transform: writable([0, 0, 1]), + connectionMode: writable(ConnectionMode.Strict), + domNode: writable(null), + connectionPath: readable(null), + connection: writable(initConnectionData), + connectionRadius: writable(25), + connectionLineType: writable(ConnectionLineType.Bezier) }; diff --git a/packages/svelte/src/lib/store/types.d.ts b/packages/svelte/src/lib/store/types.d.ts index d9f32e4df..c7c3a4c44 100644 --- a/packages/svelte/src/lib/store/types.d.ts +++ b/packages/svelte/src/lib/store/types.d.ts @@ -1,32 +1,32 @@ import type { - NodeDimensionUpdate, - XYPosition, - ViewportHelperFunctionOptions, - Connection, - NodeDragItem + NodeDimensionUpdate, + XYPosition, + ViewportHelperFunctionOptions, + Connection, + NodeDragItem } from '@reactflow/system'; import { initialStoreState } from './initial-store'; import type { Node, Edge, ConnectionData } from '$lib/types'; export type SvelteFlowStoreActions = { - setNodes: (nodes: Node[]) => void; - setEdges: (edges: Edge[]) => void; - addEdge: (edge: Edge | Connection) => void; - zoomIn: (options?: ViewportHelperFunctionOptions) => void; - zoomOut: (options?: ViewportHelperFunctionOptions) => void; - fitView: (options?: ViewportHelperFunctionOptions) => boolean; - updateNodePositions: ( - nodeDragItems: NodeDragItem[], - positionChanged?: boolean, - dragging?: boolean - ) => void; - updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; - resetSelectedElements: () => void; - addSelectedNodes: (ids: string[]) => void; - panBy: (delta: XYPosition) => void; - updateConnection: (connection: Partial) => void; - cancelConnection: () => void; + setNodes: (nodes: Node[]) => void; + setEdges: (edges: Edge[]) => void; + addEdge: (edge: Edge | Connection) => void; + zoomIn: (options?: ViewportHelperFunctionOptions) => void; + zoomOut: (options?: ViewportHelperFunctionOptions) => void; + fitView: (options?: ViewportHelperFunctionOptions) => boolean; + updateNodePositions: ( + nodeDragItems: NodeDragItem[], + positionChanged?: boolean, + dragging?: boolean + ) => void; + updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; + resetSelectedElements: () => void; + addSelectedNodes: (ids: string[]) => void; + panBy: (delta: XYPosition) => void; + updateConnection: (connection: Partial) => void; + cancelConnection: () => void; }; export type SvelteFlowStoreState = typeof initialStoreState; diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index 81f32c0ac..b759fd89b 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -7,25 +7,25 @@ export type KeyDefinitionObject = { key: string; modifier?: KeyModifier }; export type KeyDefinition = string | KeyDefinitionObject; export type ConnectionData = { - position: XYPosition | null; - nodeId: string | null; - handleId: string | null; - handleType: HandleType | null; - status: string | null; + position: XYPosition | null; + nodeId: string | null; + handleId: string | null; + handleType: HandleType | null; + status: string | null; }; export type ConnectionLineProps = {}; export type SvelteFlowProps = { - nodes: Node[]; - edges: Edge[]; + nodes: Node[]; + edges: Edge[]; - connectionLineType?: ConnectionLineType; - selectionKey?: KeyDefinition; - deleteKey?: KeyDefinition; - nodeTypes?: NodeTypes; - fitView?: boolean; - class?: string; - style?: string; - id?: string; + connectionLineType?: ConnectionLineType; + selectionKey?: KeyDefinition; + deleteKey?: KeyDefinition; + nodeTypes?: NodeTypes; + fitView?: boolean; + class?: string; + style?: string; + id?: string; }; diff --git a/packages/svelte/src/lib/types/index.ts b/packages/svelte/src/lib/types/index.ts index ced30c7ab..2fccfa9a5 100644 --- a/packages/svelte/src/lib/types/index.ts +++ b/packages/svelte/src/lib/types/index.ts @@ -1,10 +1,10 @@ export type { - Position, - XYPosition, - Edge, - BaseEdgeProps, - WrapEdgeProps, - EdgeProps + Position, + XYPosition, + Edge, + BaseEdgeProps, + WrapEdgeProps, + EdgeProps } from '@reactflow/system'; export * from './nodes'; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index cc180f128..9b4025c5e 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -5,43 +5,43 @@ import type { internalsSymbol, NodeHandleBounds, Position, XYPosition } from '@r // we need a base node type or helpes that accept Node like types // eslint-disable-next-line @typescript-eslint/no-explicit-any export type Node = { - id: string; - type: string; - data: NodeData; - position: XYPosition; - sourcePosition?: Position; - targetPosition?: Position; - positionAbsolute?: XYPosition; + id: string; + type: string; + data: NodeData; + position: XYPosition; + sourcePosition?: Position; + targetPosition?: Position; + positionAbsolute?: XYPosition; - width?: number; - height?: number; - selected?: boolean; - class?: string; - style?: string; - deletable?: boolean; - // not supported yet - parentNode?: string; + width?: number; + height?: number; + selected?: boolean; + class?: string; + style?: string; + deletable?: boolean; + // not supported yet + parentNode?: string; - // only used internally - [internalsSymbol]?: { - z?: number; - handleBounds?: NodeHandleBounds; - isParent?: boolean; - }; + // only used internally + [internalsSymbol]?: { + z?: number; + handleBounds?: NodeHandleBounds; + isParent?: boolean; + }; }; // eslint-disable-next-line @typescript-eslint/no-explicit-any export type NodeProps = Pick< - Node, - 'id' | 'data' | 'selected' | 'sourcePosition' | 'targetPosition' + Node, + 'id' | 'data' | 'selected' | 'sourcePosition' | 'targetPosition' > & { - xPos: number; - yPos: number; - isConnectable?: boolean; + xPos: number; + yPos: number; + isConnectable?: boolean; }; export type WrapNodeProps = Node & { - resizeObserver?: ResizeObserver | null; + resizeObserver?: ResizeObserver | null; }; export type NodeTypes = Record>>; diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 2eea4c7c9..df9e6fb4b 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1,10 +1,16 @@ diff --git a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte index 8f24ab5e8..1bcb6b4bb 100644 --- a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte @@ -4,9 +4,9 @@ import { useStore } from '$lib/store'; import BezierEdge from '$lib/components/edges/StraightEdge.svelte'; - import type { EdgeProps, WrapEdgeProps } from '$lib/types'; + import type { EdgeProps, EdgeLayouted } from '$lib/types'; - type $$Props = WrapEdgeProps; + type $$Props = EdgeLayouted; export let id: $$Props['id']; export let type: $$Props['type'] = 'default'; @@ -16,6 +16,8 @@ export let sourceY: $$Props['sourceY'] = 0; export let targetX: $$Props['targetX'] = 0; export let targetY: $$Props['targetY'] = 0; + export let sourceHandleId: $$Props['sourceHandleId'] = undefined; + export let targetHandleId: $$Props['targetHandleId'] = undefined; export let sourcePosition: $$Props['sourcePosition'] = Position.Bottom; export let targetPosition: $$Props['targetPosition'] = Position.Top; export let animated: $$Props['animated'] = false; diff --git a/packages/svelte/src/lib/container/Pane/index.svelte b/packages/svelte/src/lib/container/Pane/index.svelte index 2ca1b5dff..996501cf7 100644 --- a/packages/svelte/src/lib/container/Pane/index.svelte +++ b/packages/svelte/src/lib/container/Pane/index.svelte @@ -30,8 +30,11 @@ diff --git a/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte b/packages/svelte/src/lib/components/EdgeLabelRenderer/EdgeLabelRenderer.svelte similarity index 100% rename from packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte rename to packages/svelte/src/lib/components/EdgeLabelRenderer/EdgeLabelRenderer.svelte diff --git a/packages/svelte/src/lib/components/EdgeLabelRenderer/index.ts b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.ts new file mode 100644 index 000000000..18592b1bd --- /dev/null +++ b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.ts @@ -0,0 +1 @@ +export { default as EdgeLabelRenderer } from './EdgeLabelRenderer.svelte'; \ No newline at end of file diff --git a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte similarity index 96% rename from packages/svelte/src/lib/components/edges/EdgeWrapper.svelte rename to packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 1bcb6b4bb..be931cbdf 100644 --- a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -3,7 +3,7 @@ import { Position } from '@reactflow/system'; import { useStore } from '$lib/store'; - import BezierEdge from '$lib/components/edges/StraightEdge.svelte'; + import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import type { EdgeProps, EdgeLayouted } from '$lib/types'; type $$Props = EdgeLayouted; diff --git a/packages/svelte/src/lib/components/EdgeWrapper/index.ts b/packages/svelte/src/lib/components/EdgeWrapper/index.ts new file mode 100644 index 000000000..b055ce5a2 --- /dev/null +++ b/packages/svelte/src/lib/components/EdgeWrapper/index.ts @@ -0,0 +1 @@ +export { default as EdgeWrapper } from './EdgeWrapper.svelte'; diff --git a/packages/svelte/src/lib/components/Handle/index.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte similarity index 97% rename from packages/svelte/src/lib/components/Handle/index.svelte rename to packages/svelte/src/lib/components/Handle/Handle.svelte index 4ce9f57a2..82a39e046 100644 --- a/packages/svelte/src/lib/components/Handle/index.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -14,8 +14,6 @@ export let position: $$Props['position'] = Position.Top; export let isConnectable: $$Props['isConnectable'] = true; export let isValidConnection: $$Props['isValidConnection'] = (_: Connection) => true; - let className: string | null = null; - export { className as class }; const isTarget = type === 'target'; const nodeId = getContext('rf_nodeid'); @@ -80,7 +78,6 @@ `react-flow__handle-${position}`, 'nodrag', 'nopan', - className, position ])} class:source={!isTarget} diff --git a/packages/svelte/src/lib/components/Handle/index.ts b/packages/svelte/src/lib/components/Handle/index.ts new file mode 100644 index 000000000..162ffba09 --- /dev/null +++ b/packages/svelte/src/lib/components/Handle/index.ts @@ -0,0 +1 @@ +export { default as Handle } from './Handle.svelte'; diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte index adb11daec..8f800add5 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte @@ -2,7 +2,7 @@ import { shortcut } from '@svelte-put/shortcut'; import { useStore } from '$lib/store'; - import type { KeyHandlerProps } from './KeyHandler'; + import type { KeyHandlerProps } from './types'; import type { KeyDefinition, KeyDefinitionObject } from '$lib/types'; const { selectionKeyPressed, deleteKeyPressed } = useStore(); diff --git a/packages/svelte/src/lib/components/KeyHandler/index.ts b/packages/svelte/src/lib/components/KeyHandler/index.ts index 414813844..4973665d3 100644 --- a/packages/svelte/src/lib/components/KeyHandler/index.ts +++ b/packages/svelte/src/lib/components/KeyHandler/index.ts @@ -1,2 +1,2 @@ export { default as KeyHandler } from './KeyHandler.svelte'; -export type { KeyHandlerProps } from './KeyHandler'; +export type { KeyHandlerProps } from './types'; diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.d.ts b/packages/svelte/src/lib/components/KeyHandler/types.ts similarity index 66% rename from packages/svelte/src/lib/components/KeyHandler/KeyHandler.d.ts rename to packages/svelte/src/lib/components/KeyHandler/types.ts index d7ef91b72..14e761671 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.d.ts +++ b/packages/svelte/src/lib/components/KeyHandler/types.ts @@ -1,4 +1,4 @@ -import { KeyDefinition } from '$lib/types'; +import type { KeyDefinition } from '$lib/types'; export type KeyHandlerProps = { selectionKey?: KeyDefinition; diff --git a/packages/svelte/src/lib/components/NodeSelection/index.svelte b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte similarity index 93% rename from packages/svelte/src/lib/components/NodeSelection/index.svelte rename to packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte index 5b649d36b..743aacc93 100644 --- a/packages/svelte/src/lib/components/NodeSelection/index.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte @@ -2,7 +2,7 @@ import { getRectOfNodes } from '@reactflow/utils'; import { useStore } from '$lib/store'; - import Selection from '$lib/components/Selection/index.svelte'; + import { Selection } from '$lib/components/Selection'; import drag from '$lib/actions/drag'; const { selectionRectMode, nodes, nodeOrigin, transform, updateNodePositions } = useStore(); diff --git a/packages/svelte/src/lib/components/NodeSelection/index.ts b/packages/svelte/src/lib/components/NodeSelection/index.ts new file mode 100644 index 000000000..655394946 --- /dev/null +++ b/packages/svelte/src/lib/components/NodeSelection/index.ts @@ -0,0 +1 @@ +export { default as NodeSelection } from './NodeSelection.svelte'; diff --git a/packages/svelte/src/lib/components/nodes/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte similarity index 67% rename from packages/svelte/src/lib/components/nodes/NodeWrapper.svelte rename to packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 643298aa9..ef1a81ce5 100644 --- a/packages/svelte/src/lib/components/nodes/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -1,36 +1,46 @@ diff --git a/packages/svelte/src/lib/components/UserSelection/index.ts b/packages/svelte/src/lib/components/UserSelection/index.ts new file mode 100644 index 000000000..743064e18 --- /dev/null +++ b/packages/svelte/src/lib/components/UserSelection/index.ts @@ -0,0 +1 @@ +export { default as UserSelection } from './UserSelection.svelte'; diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte index fa8b69143..622c3240b 100644 --- a/packages/svelte/src/lib/components/edges/BezierEdge.svelte +++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte @@ -2,7 +2,7 @@ import { getBezierPath } from '@reactflow/edge-utils'; import type { EdgeProps } from '$lib/types'; - import BaseEdge from './BaseEdge.svelte'; + import { BaseEdge } from '$lib/components/BaseEdge'; type $$Props = EdgeProps; diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte index fd360f9d0..b43dd7895 100644 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte @@ -2,7 +2,7 @@ import { getSmoothStepPath } from '@reactflow/edge-utils'; import type { EdgeProps } from '$lib/types'; - import BaseEdge from './BaseEdge.svelte'; + import { BaseEdge } from '$lib/components/BaseEdge'; type $$Props = EdgeProps; diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte index 5e27ec3d5..a0123b678 100644 --- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -2,7 +2,7 @@ import { getStraightPath } from '@reactflow/edge-utils'; import type { EdgeProps } from '$lib/types'; - import BaseEdge from './BaseEdge.svelte'; + import { BaseEdge } from '$lib/components/BaseEdge'; type $$Props = EdgeProps; diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte index 1c10eb343..998733474 100644 --- a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -1,7 +1,7 @@ + + - + - import type { PanelPosition } from '@reactflow/system'; - - import Panel from '$lib/container/Panel/index.svelte'; + import Panel from '$lib/container/Panel/Panel.svelte'; import { useStore } from '$lib/store'; import ControlButton from './ControlButton.svelte'; import PlusIcon from './Icons/Plus.svelte'; @@ -10,10 +8,14 @@ import LockIcon from './Icons/Lock.svelte'; import UnlockIcon from './Icons/Unlock.svelte'; - export let position: PanelPosition = 'bottom-left'; - export let showZoom = true; - export let showFitView = true; - export let showInteractive = true; + import type { ControlsProps } from './types'; + + type $$Props = ControlsProps; + + export let position: $$Props['position'] = 'bottom-left'; + export let showZoom: $$Props['showZoom'] = true; + export let showFitView: $$Props['showFitView'] = true; + export let showInteractive: $$Props['showInteractive'] = true; const { zoomIn, zoomOut, fitView } = useStore(); diff --git a/packages/svelte/src/lib/plugins/Controls/index.ts b/packages/svelte/src/lib/plugins/Controls/index.ts index 58323ba35..681f52556 100644 --- a/packages/svelte/src/lib/plugins/Controls/index.ts +++ b/packages/svelte/src/lib/plugins/Controls/index.ts @@ -1,2 +1,3 @@ export { default as Controls } from './Controls.svelte'; export { default as ControlButton } from './ControlButton.svelte'; +export { type ControlsProps } from './types'; diff --git a/packages/svelte/src/lib/plugins/Controls/types.ts b/packages/svelte/src/lib/plugins/Controls/types.ts new file mode 100644 index 000000000..2c52f4327 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Controls/types.ts @@ -0,0 +1,8 @@ +import type { PanelPosition } from '@reactflow/system'; + +export type ControlsProps = { + position: PanelPosition; + showZoom: boolean; + showFitView: boolean; + showInteractive: boolean; +}; diff --git a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte index cf24f1d2b..a42591744 100644 --- a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte +++ b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte @@ -1,34 +1,43 @@ + + - + {#if interactionWidth} {/if} {#if label}
{label} @@ -35,7 +35,7 @@ {/if} diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte index 998733474..b5b10297f 100644 --- a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -16,6 +16,7 @@ export let selected: $$Props['selected'] = false; - + {data?.label} - + + diff --git a/packages/svelte/src/lib/components/nodes/InputNode.svelte b/packages/svelte/src/lib/components/nodes/InputNode.svelte index 5afc07f22..fd8f09b4a 100644 --- a/packages/svelte/src/lib/components/nodes/InputNode.svelte +++ b/packages/svelte/src/lib/components/nodes/InputNode.svelte @@ -1,12 +1,20 @@ {data?.label} - + diff --git a/packages/svelte/src/lib/components/nodes/OutputNode.svelte b/packages/svelte/src/lib/components/nodes/OutputNode.svelte index 87d59bf57..73a42f981 100644 --- a/packages/svelte/src/lib/components/nodes/OutputNode.svelte +++ b/packages/svelte/src/lib/components/nodes/OutputNode.svelte @@ -1,12 +1,20 @@ {data?.label} - + diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index cf26c9204..a60efbb8b 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -5,14 +5,14 @@ const { edgesLayouted, width, height } = useStore(); - + {#each $edgesLayouted as edge (edge.id)} - + {/each}
+
{#each $nodes as node (node.id)} - + {/each}
\ No newline at end of file diff --git a/packages/svelte/src/example-components/Header/index.ts b/packages/svelte/src/example-components/Header/index.ts new file mode 100644 index 000000000..3d0d3e764 --- /dev/null +++ b/packages/svelte/src/example-components/Header/index.ts @@ -0,0 +1 @@ +export { default as Header } from './Header.svelte'; diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 69db093cc..f9cfab2d2 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -6,14 +6,7 @@ import type { Viewport } from '@reactflow/system'; -import type { - Edge, - Node, - NodeTypes, - KeyDefinition, - EdgeTypes, - DefaultEdgeOptions -} from '$lib/types'; +import type { Edge, Node, NodeTypes, KeyDefinition, EdgeTypes } from '$lib/types'; import type { Writable } from 'svelte/store'; import type { createNodes } from '$lib/utils'; @@ -31,7 +24,6 @@ export type SvelteFlowProps = { minZoom?: number; maxZoom?: number; initialViewport?: Viewport; - defaultEdgeOptions?: DefaultEdgeOptions; connectionRadius?: number; class?: string; diff --git a/packages/svelte/src/routes/+layout.server.ts b/packages/svelte/src/routes/+layout.server.ts new file mode 100644 index 000000000..b64f11707 --- /dev/null +++ b/packages/svelte/src/routes/+layout.server.ts @@ -0,0 +1,8 @@ +import { redirect } from '@sveltejs/kit'; + +/** @type {import('./$types').LayoutServerLoad} */ +export function load({ route }) { + if (route.id === '/') { + throw redirect(307, '/overview'); + } +} diff --git a/packages/svelte/src/routes/+layout.svelte b/packages/svelte/src/routes/+layout.svelte new file mode 100644 index 000000000..44117affb --- /dev/null +++ b/packages/svelte/src/routes/+layout.svelte @@ -0,0 +1,6 @@ + + +
+ \ No newline at end of file diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 7cf6b0c7b..cd4105376 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1,175 +1 @@ - - - console.log('on node click', event)} - on:node:mouseenter={(event) => console.log('on node enter', event)} - on:node:mouseleave={(event) => console.log('on node leave', event)} - on:edge:click={(event) => console.log('edge click', event)} - on:connect:start={(event) => console.log('on connect start', event)} - on:connect={(event) => console.log('on connect', event)} - on:connect:end={(event) => console.log('on connect end', event)} - on:pane:click={(event) => console.log('on pane click', event)} - on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} -> - - - - - - - - - +
this redirects to /overview
\ No newline at end of file diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte new file mode 100644 index 000000000..412a7423e --- /dev/null +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -0,0 +1,141 @@ + + + console.log('on node click', event)} + on:node:mouseenter={(event) => console.log('on node enter', event)} + on:node:mouseleave={(event) => console.log('on node leave', event)} + on:edge:click={(event) => console.log('edge click', event)} + on:connect:start={(event) => console.log('on connect start', event)} + on:connect={(event) => console.log('on connect', event)} + on:connect:end={(event) => console.log('on connect end', event)} + on:pane:click={(event) => console.log('on pane click', event)} + on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} +> + + + + + + + + + diff --git a/packages/svelte/src/routes/stress/+page.svelte b/packages/svelte/src/routes/stress/+page.svelte new file mode 100644 index 000000000..b071bb298 --- /dev/null +++ b/packages/svelte/src/routes/stress/+page.svelte @@ -0,0 +1,60 @@ + + + + + + + + diff --git a/packages/svelte/static/favicon.png b/packages/svelte/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH Date: Wed, 8 Mar 2023 20:17:33 +0100 Subject: [PATCH 0036/1093] feat(svelte): add SvelteFlowProvider and useSvelteFlow hook --- .../example-components/Header/Header.svelte | 3 +- .../components/EdgeWrapper/EdgeWrapper.svelte | 2 +- .../components/KeyHandler/KeyHandler.svelte | 4 +- .../SvelteFlowProvider.svelte | 13 ++++ .../components/SvelteFlowProvider/index.ts | 2 + .../components/SvelteFlowProvider/types.ts | 6 ++ .../NodeRenderer/NodeRenderer.svelte | 5 +- .../container/SvelteFlow/SvelteFlow.svelte | 8 +-- .../lib/container/SvelteFlow/Wrapper.svelte | 25 +++++++ .../src/lib/container/SvelteFlow/index.ts | 2 +- .../svelte/src/lib/hooks/useSvelteFlow.ts | 19 ++++++ packages/svelte/src/lib/index.ts | 4 ++ packages/svelte/src/lib/store/index.ts | 38 ++++------- .../svelte/src/lib/store/initial-store.ts | 5 +- packages/svelte/src/lib/types/general.ts | 6 +- packages/svelte/src/routes/+layout.svelte | 20 +++++- .../src/routes/usesvelteflow/+page.svelte | 11 ++++ .../src/routes/usesvelteflow/Flow.svelte | 65 +++++++++++++++++++ packages/utils/src/graph.ts | 12 ++-- 19 files changed, 203 insertions(+), 47 deletions(-) create mode 100644 packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte create mode 100644 packages/svelte/src/lib/components/SvelteFlowProvider/index.ts create mode 100644 packages/svelte/src/lib/components/SvelteFlowProvider/types.ts create mode 100644 packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte create mode 100644 packages/svelte/src/lib/hooks/useSvelteFlow.ts create mode 100644 packages/svelte/src/routes/usesvelteflow/+page.svelte create mode 100644 packages/svelte/src/routes/usesvelteflow/Flow.svelte diff --git a/packages/svelte/src/example-components/Header/Header.svelte b/packages/svelte/src/example-components/Header/Header.svelte index 75ec5053f..edf34a58c 100644 --- a/packages/svelte/src/example-components/Header/Header.svelte +++ b/packages/svelte/src/example-components/Header/Header.svelte @@ -3,7 +3,8 @@ const routes = [ 'overview', - 'stress' + 'stress', + 'usesvelteflow' ]; const onChange = (event: Event) => { diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index c4944a026..3de2050c4 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -24,7 +24,7 @@ export let selected: $$Props['selected'] = false; export let label: $$Props['label'] = undefined; - const { edgeTypes, edges } = useStore(); + const { edges, edgeTypes } = useStore(); const dispatch = createEventDispatcher(); const edgeComponent: typeof SvelteComponentTyped = $edgeTypes[type!] || BezierEdge; diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte index 8f800add5..9b2747db4 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte @@ -5,13 +5,13 @@ import type { KeyHandlerProps } from './types'; import type { KeyDefinition, KeyDefinitionObject } from '$lib/types'; - const { selectionKeyPressed, deleteKeyPressed } = useStore(); - type $$Props = KeyHandlerProps; export let selectionKey: $$Props['selectionKey'] = 'Shift'; export let deleteKey: $$Props['deleteKey'] = 'Backspace'; + const { selectionKeyPressed, deleteKeyPressed } = useStore(); + function isKeyObject(key?: KeyDefinition): key is KeyDefinitionObject { return typeof key === 'object'; } diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte new file mode 100644 index 000000000..ee448ab7d --- /dev/null +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte @@ -0,0 +1,13 @@ + + + diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/index.ts b/packages/svelte/src/lib/components/SvelteFlowProvider/index.ts new file mode 100644 index 000000000..38389c7bc --- /dev/null +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/index.ts @@ -0,0 +1,2 @@ +export { default as SvelteFlowProvider } from './SvelteFlowProvider.svelte'; +export type { SvelteFlowProviderProps } from './types'; diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts b/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts new file mode 100644 index 000000000..2b102f3f7 --- /dev/null +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts @@ -0,0 +1,6 @@ +import type { SvelteFlowProps } from '$lib/container/SvelteFlow/types'; + +export type SvelteFlowProviderProps = Pick< + SvelteFlowProps, + 'nodes' | 'edges' | 'fitView' | 'nodeTypes' +>; diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index c6b740150..4d6432fd0 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -1,12 +1,12 @@ + +{#if hasContext(key)} + + + +{:else} + + + + + +{/if} \ No newline at end of file diff --git a/packages/svelte/src/lib/container/SvelteFlow/index.ts b/packages/svelte/src/lib/container/SvelteFlow/index.ts index eaec432bf..e0b8153e8 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/index.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/index.ts @@ -1,2 +1,2 @@ -export { default as SvelteFlow } from './SvelteFlow.svelte'; +export { default as SvelteFlow } from './Wrapper.svelte'; export * from './types'; diff --git a/packages/svelte/src/lib/hooks/useSvelteFlow.ts b/packages/svelte/src/lib/hooks/useSvelteFlow.ts new file mode 100644 index 000000000..60fdd3efe --- /dev/null +++ b/packages/svelte/src/lib/hooks/useSvelteFlow.ts @@ -0,0 +1,19 @@ +import type { ZoomInOut } from '@reactflow/system'; + +import { useStore } from '$lib/store'; +import type { FitViewOptions } from '$lib/types'; + +export function useSvelteFlow(): { + zoomIn: ZoomInOut; + zoomOut: ZoomInOut; + fitView: (options?: FitViewOptions) => void; +} { + // how to get the new context here? fit view doesn't work, because the store is not updated (uses old nodes store) + const { zoomIn, zoomOut, fitView } = useStore(); + + return { + zoomIn, + zoomOut, + fitView + }; +} diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index 7cbf7b236..6b1dad92c 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -3,6 +3,8 @@ import { SvelteFlow } from '$lib/container/SvelteFlow'; export * from '$lib/container/SvelteFlow'; export * from '$lib/container/Panel'; +export * from '$lib/components/SvelteFlowProvider'; + export * from '$lib/plugins/Controls'; export * from '$lib/plugins/Background'; export * from '$lib/plugins/Minimap'; @@ -10,4 +12,6 @@ export * from '$lib/plugins/Minimap'; export * from '$lib/types'; export * from '$lib/utils'; +export * from '$lib/hooks/useSvelteFlow'; + export default SvelteFlow; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index ee39094ce..1c1f1a43c 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -2,11 +2,9 @@ import { getContext } from 'svelte'; import { get } from 'svelte/store'; import { zoomIdentity } from 'd3-zoom'; import { - type Transform, type NodeDragItem, type NodeDimensionUpdate, internalsSymbol, - type NodeOrigin, type ViewportHelperFunctionOptions, type Connection, type XYPosition, @@ -30,30 +28,15 @@ import { initialStoreState } from './initial-store'; import type { SvelteFlowStore } from './types'; -import type { SvelteFlowProps } from '$lib/container/SvelteFlow/types'; export const key = Symbol(); -type CreateStoreProps = { - nodes: SvelteFlowProps['nodes']; - edges: SvelteFlowProps['edges']; - fitView?: boolean; - nodeOrigin?: NodeOrigin; - transform?: Transform; - nodeTypes?: NodeTypes; - edgeTypes?: EdgeTypes; - id?: string; -}; - -export function createStore({ - fitView: fitViewOnInit = false, - nodes, - edges -}: CreateStoreProps): SvelteFlowStore { +type CreateStoreParams = Pick & { fitView?: boolean }; + +export function createStore(params?: CreateStoreParams): SvelteFlowStore { const store = { ...initialStoreState, - nodes, - edges + ...(params !== undefined ? params : {}) }; let fitViewOnInitDone = false; @@ -105,7 +88,6 @@ export function createStore({ const style = window.getComputedStyle(viewportNode); const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform); - const nextNodes = get(store.nodes).map((node) => { const update = updates.find((u) => u.id === node.id); @@ -139,7 +121,7 @@ export function createStore({ const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); fitViewOnInitDone = - fitViewOnInitDone || (fitViewOnInit && !!d3Zoom && !!d3Selection && fitView()); + fitViewOnInitDone || (!!params?.fitView && !!d3Zoom && !!d3Selection && fitView()); store.nodes.set(nextNodes); } @@ -333,7 +315,13 @@ export function createStore({ } export function useStore(): SvelteFlowStore { - const { getStore } = getContext<{ getStore: () => SvelteFlowStore }>(key); + const store = getContext<{ getStore: () => SvelteFlowStore }>(key); + + if (!store) { + throw new Error( + 'In order to use useStore you need to wrap your component in a ' + ); + } - return getStore(); + return store.getStore(); } diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 13b407db4..ee22e0cfb 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -16,7 +16,7 @@ import OutputNode from '$lib/components/nodes/OutputNode.svelte'; import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; -import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted } from '$lib/types'; +import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted, Edge, Node } from '$lib/types'; export const initConnectionData = { nodeId: null, @@ -40,11 +40,14 @@ export const initialEdgeTypes = { export const initialStoreState = { id: writable(null), + nodes: writable([]), + edges: writable([]), edgesLayouted: readable([]), height: writable(500), width: writable(500), minZoom: writable(0.5), maxZoom: writable(2), + fitViewOnInit: false, nodeOrigin: writable([0, 0]), d3: writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ zoom: null, diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index 7dccd4f28..a329c840f 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -1,5 +1,7 @@ import type { ShortcutModifierDefinition } from '@svelte-put/shortcut'; -import type { HandleProps, HandleType, XYPosition } from '@reactflow/system'; +import type { FitViewOptionsBase, HandleProps, HandleType, XYPosition } from '@reactflow/system'; + +import type { Node } from './nodes'; export type KeyModifier = ShortcutModifierDefinition; export type KeyDefinitionObject = { key: string; modifier?: KeyModifier }; @@ -17,3 +19,5 @@ export type HandleComponentProps = HandleProps & { class?: string; style?: string; }; + +export type FitViewOptions = FitViewOptionsBase; diff --git a/packages/svelte/src/routes/+layout.svelte b/packages/svelte/src/routes/+layout.svelte index 44117affb..bc95f151b 100644 --- a/packages/svelte/src/routes/+layout.svelte +++ b/packages/svelte/src/routes/+layout.svelte @@ -2,5 +2,21 @@ import { Header } from '../example-components/Header' -
- \ No newline at end of file +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/packages/svelte/src/routes/usesvelteflow/+page.svelte b/packages/svelte/src/routes/usesvelteflow/+page.svelte new file mode 100644 index 000000000..c80a3eae1 --- /dev/null +++ b/packages/svelte/src/routes/usesvelteflow/+page.svelte @@ -0,0 +1,11 @@ + + + + + diff --git a/packages/svelte/src/routes/usesvelteflow/Flow.svelte b/packages/svelte/src/routes/usesvelteflow/Flow.svelte new file mode 100644 index 000000000..58bec508e --- /dev/null +++ b/packages/svelte/src/routes/usesvelteflow/Flow.svelte @@ -0,0 +1,65 @@ + + + + + + + + + + + + diff --git a/packages/utils/src/graph.ts b/packages/utils/src/graph.ts index 165bba31e..404c3e759 100644 --- a/packages/utils/src/graph.ts +++ b/packages/utils/src/graph.ts @@ -1,5 +1,4 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { Selection as D3Selection } from 'd3'; import { zoomIdentity } from 'd3-zoom'; import { boxToRect, clamp, devWarn, getBoundsOfBoxes, getOverlappingArea, rectToBox } from './utils'; @@ -11,10 +10,11 @@ import { type XYPosition, type Rect, type NodeOrigin, - BaseNode, - BaseEdge, - FitViewParamsBase, - FitViewOptionsBase, + type BaseNode, + type BaseEdge, + type FitViewParamsBase, + type FitViewOptionsBase, + type D3SelectionInstance, } from '@reactflow/system'; export const isEdgeBase = ( @@ -304,7 +304,7 @@ export const getTransformForBounds = ( return [x, y, clampedZoom]; }; -export const getD3Transition = (selection: D3Selection, duration = 0) => { +export const getD3Transition = (selection: D3SelectionInstance, duration = 0) => { return selection.transition().duration(duration); }; From 3a3987638334699ee89e13ea39856c9332a781d9 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 9 Mar 2023 13:10:19 +0100 Subject: [PATCH 0037/1093] feat(svelte): add Provider --- .../SvelteFlowProvider.svelte | 11 ++++- .../components/SvelteFlowProvider/types.ts | 13 +++-- .../container/SvelteFlow/SvelteFlow.svelte | 21 +++----- .../lib/container/SvelteFlow/Wrapper.svelte | 25 ---------- .../src/lib/container/SvelteFlow/index.ts | 2 +- .../src/lib/container/SvelteFlow/types.ts | 3 -- packages/svelte/src/lib/store/index.ts | 14 +++--- .../svelte/src/lib/store/initial-store.ts | 3 +- .../svelte/src/routes/overview/+page.svelte | 48 ++++++++++--------- .../svelte/src/routes/stress/+page.svelte | 17 ++++--- .../src/routes/usesvelteflow/+page.svelte | 44 ++++++++++++++++- .../src/routes/usesvelteflow/Flow.svelte | 44 +---------------- 12 files changed, 115 insertions(+), 130 deletions(-) delete mode 100644 packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte index ee448ab7d..44ecb77f0 100644 --- a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte @@ -2,8 +2,17 @@ import { setContext } from 'svelte'; import { createStore, key } from '$lib/store'; + import type { SvelteFlowProviderProps } from './types'; - const store = createStore(); + type $$Props = SvelteFlowProviderProps; + + export let nodes: $$Props['nodes']; + export let edges: $$Props['edges']; + + const store = createStore({ + nodes, + edges, + }); setContext(key, { getStore: () => store diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts b/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts index 2b102f3f7..151bef8a4 100644 --- a/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/types.ts @@ -1,6 +1,9 @@ -import type { SvelteFlowProps } from '$lib/container/SvelteFlow/types'; +import type { Writable } from 'svelte/store'; -export type SvelteFlowProviderProps = Pick< - SvelteFlowProps, - 'nodes' | 'edges' | 'fitView' | 'nodeTypes' ->; +import type { Edge } from '$lib/types'; +import type { createNodes } from '$lib/utils'; + +export type SvelteFlowProviderProps = { + nodes: ReturnType; + edges: Writable; +}; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index f200b5e6a..e47c4da2a 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -1,5 +1,5 @@ diff --git a/packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte b/packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte deleted file mode 100644 index eb703fda0..000000000 --- a/packages/svelte/src/lib/container/SvelteFlow/Wrapper.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - -{#if hasContext(key)} - - - -{:else} - - - - - -{/if} \ No newline at end of file diff --git a/packages/svelte/src/lib/container/SvelteFlow/index.ts b/packages/svelte/src/lib/container/SvelteFlow/index.ts index e0b8153e8..eaec432bf 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/index.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/index.ts @@ -1,2 +1,2 @@ -export { default as SvelteFlow } from './Wrapper.svelte'; +export { default as SvelteFlow } from './SvelteFlow.svelte'; export * from './types'; diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index f9cfab2d2..352604c0b 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -11,9 +11,6 @@ import type { Writable } from 'svelte/store'; import type { createNodes } from '$lib/utils'; export type SvelteFlowProps = { - nodes: ReturnType; - edges: Writable; - id?: string; nodeTypes?: NodeTypes; edgeTypes?: EdgeTypes; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 1c1f1a43c..c94c44a62 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -31,16 +31,14 @@ import type { SvelteFlowStore } from './types'; export const key = Symbol(); -type CreateStoreParams = Pick & { fitView?: boolean }; +type CreateStoreParams = Pick; -export function createStore(params?: CreateStoreParams): SvelteFlowStore { +export function createStore(params: CreateStoreParams): SvelteFlowStore { const store = { ...initialStoreState, - ...(params !== undefined ? params : {}) + ...params }; - let fitViewOnInitDone = false; - function setNodeTypes(nodeTypes: NodeTypes) { store.nodeTypes.set({ ...initialNodeTypes, @@ -120,9 +118,11 @@ export function createStore(params?: CreateStoreParams): SvelteFlowStore { const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); - fitViewOnInitDone = - fitViewOnInitDone || (!!params?.fitView && !!d3Zoom && !!d3Selection && fitView()); + const fitViewOnInitDone = + get(store.fitViewOnInitDone) || + (get(store.fitViewOnInit) && !!d3Zoom && !!d3Selection && fitView()); + store.fitViewOnInitDone.set(fitViewOnInitDone); store.nodes.set(nextNodes); } diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index ee22e0cfb..f0e6f10c6 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -47,7 +47,8 @@ export const initialStoreState = { width: writable(500), minZoom: writable(0.5), maxZoom: writable(2), - fitViewOnInit: false, + fitViewOnInit: writable(false), + fitViewOnInitDone: writable(false), nodeOrigin: writable([0, 0]), d3: writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ zoom: null, diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index 412a7423e..d7c1ba766 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -1,5 +1,6 @@ - console.log('on node click', event)} - on:node:mouseenter={(event) => console.log('on node enter', event)} - on:node:mouseleave={(event) => console.log('on node leave', event)} - on:edge:click={(event) => console.log('edge click', event)} - on:connect:start={(event) => console.log('on connect start', event)} - on:connect={(event) => console.log('on connect', event)} - on:connect:end={(event) => console.log('on connect end', event)} - on:pane:click={(event) => console.log('on pane click', event)} - on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} > - - - - - - - + console.log('on node click', event)} + on:node:mouseenter={(event) => console.log('on node enter', event)} + on:node:mouseleave={(event) => console.log('on node leave', event)} + on:edge:click={(event) => console.log('edge click', event)} + on:connect:start={(event) => console.log('on connect start', event)} + on:connect={(event) => console.log('on connect', event)} + on:connect:end={(event) => console.log('on connect end', event)} + on:pane:click={(event) => console.log('on pane click', event)} + on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} + > + + + + + + + + \ No newline at end of file diff --git a/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte b/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte new file mode 100644 index 000000000..c18a8b832 --- /dev/null +++ b/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file From 233e6aedca92218f3407aaa4739b4424b9910449 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 14 Mar 2023 14:55:49 +0100 Subject: [PATCH 0047/1093] feat(svelte): add isValidConnection prop, cleanup handle classes --- .../example-components/Header/Header.svelte | 3 +- .../src/lib/components/Handle/Handle.svelte | 15 +++--- .../src/lib/components/Handle/handler.ts | 16 +++--- .../svelte/src/lib/components/Handle/utils.ts | 12 +++-- .../components/NodeWrapper/NodeWrapper.svelte | 6 ++- .../src/lib/components/NodeWrapper/types.ts | 1 + .../NodeRenderer/NodeRenderer.svelte | 1 + .../container/SvelteFlow/SvelteFlow.svelte | 5 +- .../src/lib/container/SvelteFlow/types.ts | 12 +++-- .../svelte/src/lib/store/initial-store.ts | 13 ++++- packages/svelte/src/lib/types/general.ts | 15 +++++- packages/svelte/src/lib/types/nodes.ts | 2 +- .../svelte/src/routes/validation/+page.svelte | 51 +++++++++++++++++++ 13 files changed, 120 insertions(+), 32 deletions(-) create mode 100644 packages/svelte/src/routes/validation/+page.svelte diff --git a/packages/svelte/src/example-components/Header/Header.svelte b/packages/svelte/src/example-components/Header/Header.svelte index edf34a58c..078f8ed9e 100644 --- a/packages/svelte/src/example-components/Header/Header.svelte +++ b/packages/svelte/src/example-components/Header/Header.svelte @@ -4,7 +4,8 @@ const routes = [ 'overview', 'stress', - 'usesvelteflow' + 'usesvelteflow', + 'validation' ]; const onChange = (event: Event) => { diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index dd5a3cc32..d26e98df0 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -13,14 +13,14 @@ export let id: $$Props['id'] = undefined; export let type: $$Props['type'] = 'source'; export let position: $$Props['position'] = Position.Top; - export let isConnectable: $$Props['isConnectable'] = true; export let style: $$Props['style'] = undefined; - export let isValidConnection: $$Props['isValidConnection'] = (_: Connection) => true; let className: $$Props['class'] = undefined; export { className as class }; const isTarget = type === 'target'; - const nodeId = getContext('rf_nodeid'); + const nodeId = getContext('svelteflow__node_id'); + const connectable = getContext('svelteflow__node_connectable'); + const handleId = id || null; const dispatch = createEventDispatcher(); @@ -30,10 +30,11 @@ nodes, connectionRadius, transform, + isValidConnection, addEdge, panBy, cancelConnection, - updateConnection + updateConnection, } = useStore(); function dispatchEvent(eventName: string, params?: Connection) { @@ -56,10 +57,10 @@ isTarget, connectionRadius: $connectionRadius, domNode: $domNode, - nodes: $nodes, + nodes, connectionMode: $connectionMode, transform, - isValidConnection: isValidConnection!, + isValidConnection: $isValidConnection, onConnect: onConnectExtended, updateConnection, cancelConnection, @@ -86,7 +87,7 @@ ])} class:source={!isTarget} class:target={isTarget} - class:connectable={isConnectable} + class:connectable on:mousedown={onPointerDown} on:touchstart={onPointerDown} {style} diff --git a/packages/svelte/src/lib/components/Handle/handler.ts b/packages/svelte/src/lib/components/Handle/handler.ts index 972fd3033..0275f3334 100644 --- a/packages/svelte/src/lib/components/Handle/handler.ts +++ b/packages/svelte/src/lib/components/Handle/handler.ts @@ -22,10 +22,9 @@ import { getHandleType, isValidHandle, resetRecentHandle, - type ConnectionHandle, - type ValidConnectionFunc + type ConnectionHandle } from './utils'; -import type { ConnectionData, Node } from '$lib/types'; +import type { ConnectionData, IsValidConnection, Node } from '$lib/types'; export function handlePointerDown({ event, @@ -54,9 +53,9 @@ export function handlePointerDown({ isTarget: boolean; connectionMode: ConnectionMode; domNode: HTMLDivElement | null; - nodes: Node[]; + nodes: Writable; connectionRadius: number; - isValidConnection: ValidConnectionFunc; + isValidConnection: IsValidConnection; transform: Writable; updateConnection: (connection: Partial) => void; cancelConnection: () => void; @@ -90,7 +89,7 @@ export function handlePointerDown({ const autoPanOnConnect = true; const handleLookup = getHandleLookup({ - nodes, + nodes: get(nodes), nodeId, handleId, handleType @@ -116,8 +115,6 @@ export function handlePointerDown({ status: null }); - // @todo add prop - // onConnectStart?.(event, { nodeId, handleId, handleType }); onConnectStart(); @@ -144,7 +141,8 @@ export function handlePointerDown({ handleId, isTarget ? 'target' : 'source', isValidConnection, - doc + doc, + get(nodes) ); handleDomNode = result.handleDomNode; diff --git a/packages/svelte/src/lib/components/Handle/utils.ts b/packages/svelte/src/lib/components/Handle/utils.ts index 673831ad9..183227182 100644 --- a/packages/svelte/src/lib/components/Handle/utils.ts +++ b/packages/svelte/src/lib/components/Handle/utils.ts @@ -2,7 +2,7 @@ import { internalsSymbol, ConnectionMode, type ConnectionStatus } from '@reactfl import type { Connection, HandleType, XYPosition, NodeHandleBounds } from '@reactflow/system'; import { getEventPosition } from '@reactflow/utils'; -import type { Node } from '$lib/types'; +import type { IsValidConnection, Node } from '$lib/types'; export type ConnectionHandle = { id: string | null; @@ -76,8 +76,9 @@ export function isValidHandle( fromNodeId: string, fromHandleId: string | null, fromType: string, - isValidConnection: ValidConnectionFunc, - doc: Document | ShadowRoot + isValidConnection: IsValidConnection, + doc: Document | ShadowRoot, + nodes: Node[] ) { const isTarget = fromType === 'target'; const handleDomNode = doc.querySelector( @@ -116,7 +117,10 @@ export function isValidHandle( : handleNodeId !== fromNodeId || handleId !== fromHandleId; if (isValid) { - result.isValid = isValidConnection(connection); + const fromNode: Node | undefined = nodes.find((n) => n.id === connection.source); + const toNode: Node | undefined = nodes.find((n) => n.id === connection.target); + + if (fromNode && toNode) result.isValid = isValidConnection(connection, { fromNode, toNode }); } } diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index ec79f3aa2..bbbe42e5a 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -15,6 +15,7 @@ export let data: NodeWrapperProps['data'] = {}; export let selected: NodeWrapperProps['selected'] = false; export let draggable: NodeWrapperProps['draggable'] = undefined; + export let connectable: NodeWrapperProps['connectable'] = true; export let dragging: boolean = false; export let resizeObserver: NodeWrapperProps['resizeObserver'] = null; export let style: NodeWrapperProps['style'] = undefined; @@ -45,7 +46,8 @@ const selectNodesOnDrag = false; const dispatch = createEventDispatcher(); - setContext('rf_nodeid', id); + setContext('svelteflow__node_id', id); + setContext('svelteflow__node_connectable', connectable); onMount(() => { resizeObserver?.observe(nodeRef); @@ -79,6 +81,7 @@ class:dragging class:selected class:draggable + class:connectable style:transform={`translate(${positionOrigin?.x ?? 0}px, ${positionOrigin?.y ?? 0}px)`} {style} on:click={onSelectNodeHandler} @@ -93,7 +96,6 @@ {selected} {sourcePosition} {targetPosition} - isConnectable={true} xPos={positionAbsolute?.x ?? 0} yPos={positionAbsolute?.y ?? 0} on:connect:start diff --git a/packages/svelte/src/lib/components/NodeWrapper/types.ts b/packages/svelte/src/lib/components/NodeWrapper/types.ts index 1dd04945b..564aaa41c 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/types.ts +++ b/packages/svelte/src/lib/components/NodeWrapper/types.ts @@ -5,6 +5,7 @@ export type NodeWrapperProps = Pick< Node, | 'id' | 'class' + | 'connectable' | 'data' | 'draggable' | 'dragging' diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index 473e2ec9b..6b99962ab 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -38,6 +38,7 @@ data={node.data} selected={node.selected} draggable={node.draggable || node.draggable === undefined} + connectable={node.connectable || node.connectable === undefined} positionAbsolute={node.positionAbsolute} positionOrigin={posOrigin} width={node.width} diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 5c55c0731..dbbb2a2bb 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -27,7 +27,9 @@ export let selectionKey: $$Props['selectionKey'] = undefined; export let deleteKey: $$Props['deleteKey'] = undefined; export let connectionRadius: $$Props['connectionRadius'] = undefined; - export let connectionLineType: $$Props['connectionLineType'] = undefined + export let connectionLineType: $$Props['connectionLineType'] = undefined; + export let isValidConnection: $$Props['isValidConnection'] = undefined; + export let style: $$Props['style'] = undefined; let className: $$Props['class'] = undefined; export { className as class }; @@ -52,6 +54,7 @@ id, connectionLineType, connectionRadius, + isValidConnection }; Object.keys(updatableProps).forEach(prop => { diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 352604c0b..52552a514 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -6,9 +6,14 @@ import type { Viewport } from '@reactflow/system'; -import type { Edge, Node, NodeTypes, KeyDefinition, EdgeTypes } from '$lib/types'; -import type { Writable } from 'svelte/store'; -import type { createNodes } from '$lib/utils'; +import type { + Edge, + Node, + NodeTypes, + KeyDefinition, + EdgeTypes, + IsValidConnection +} from '$lib/types'; export type SvelteFlowProps = { id?: string; @@ -27,6 +32,7 @@ export type SvelteFlowProps = { style?: string; connectionLineType?: ConnectionLineType; + isValidConnection?: IsValidConnection; }; export type SvelteFlowEvents = { diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 9f29aa1b1..943e26844 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -15,7 +15,15 @@ import OutputNode from '$lib/components/nodes/OutputNode.svelte'; import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; -import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted, Edge, Node } from '$lib/types'; +import type { + ConnectionData, + NodeTypes, + EdgeTypes, + EdgeLayouted, + Edge, + Node, + IsValidConnection +} from '$lib/types'; export const initConnectionData = { nodeId: null, @@ -67,5 +75,6 @@ export const initialStoreState = { connectionPath: readable(null), connection: writable(initConnectionData), connectionRadius: writable(25), - connectionLineType: writable(ConnectionLineType.Bezier) + connectionLineType: writable(ConnectionLineType.Bezier), + isValidConnection: writable(() => true) }; diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index a329c840f..09530b3a2 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -1,5 +1,11 @@ import type { ShortcutModifierDefinition } from '@svelte-put/shortcut'; -import type { FitViewOptionsBase, HandleProps, HandleType, XYPosition } from '@reactflow/system'; +import type { + Connection, + FitViewOptionsBase, + HandleProps, + HandleType, + XYPosition +} from '@reactflow/system'; import type { Node } from './nodes'; @@ -15,9 +21,14 @@ export type ConnectionData = { status: string | null; }; -export type HandleComponentProps = HandleProps & { +export type HandleComponentProps = Omit & { class?: string; style?: string; }; export type FitViewOptions = FitViewOptionsBase; + +export type IsValidConnection = ( + connection: Connection, + { fromNode, toNode }: { fromNode: Node; toNode: Node } +) => boolean; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index 1cb4bebcb..35fe7e1a1 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -26,4 +26,4 @@ export type NodeProps = Pick< export type NodeTypes = Record>>; -export type DefaultNodeOptions = Omit; +export type DefaultNodeOptions = Partial>; diff --git a/packages/svelte/src/routes/validation/+page.svelte b/packages/svelte/src/routes/validation/+page.svelte new file mode 100644 index 000000000..7b08fb5f6 --- /dev/null +++ b/packages/svelte/src/routes/validation/+page.svelte @@ -0,0 +1,51 @@ + + + + + + + + + + From ae244526bd60ba9aa868bc789e481c122b5ebf8b Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 14 Mar 2023 15:25:46 +0100 Subject: [PATCH 0048/1093] feat(svelte): add selectionMode prop --- .../lib/components/NodeWrapper/NodeWrapper.svelte | 5 +++-- packages/svelte/src/lib/container/Pane/Pane.svelte | 6 +++--- .../src/lib/container/SvelteFlow/SvelteFlow.svelte | 2 ++ .../svelte/src/lib/container/SvelteFlow/types.ts | 4 +++- packages/svelte/src/lib/index.ts | 4 ++++ packages/svelte/src/lib/types/nodes.ts | 12 +----------- packages/svelte/src/routes/overview/+page.svelte | 4 +++- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index bbbe42e5a..030c14338 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -1,12 +1,12 @@ +
e.id); diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index dbbb2a2bb..3fb9b4b08 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -25,6 +25,7 @@ export let nodeTypes: $$Props['nodeTypes'] = undefined; export let edgeTypes: $$Props['edgeTypes'] = undefined; export let selectionKey: $$Props['selectionKey'] = undefined; + export let selectionMode: $$Props['selectionMode'] = undefined; export let deleteKey: $$Props['deleteKey'] = undefined; export let connectionRadius: $$Props['connectionRadius'] = undefined; export let connectionLineType: $$Props['connectionLineType'] = undefined; @@ -54,6 +55,7 @@ id, connectionLineType, connectionRadius, + selectionMode, isValidConnection }; diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 52552a514..70327e45f 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -3,7 +3,8 @@ import type { ConnectionLineType, NodeOrigin, OnConnectStartParams, - Viewport + Viewport, + SelectionMode } from '@reactflow/system'; import type { @@ -27,6 +28,7 @@ export type SvelteFlowProps = { maxZoom?: number; initialViewport?: Viewport; connectionRadius?: number; + selectionMode?: SelectionMode; class?: string; style?: string; diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index 6b1dad92c..a5af2d974 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -14,4 +14,8 @@ export * from '$lib/utils'; export * from '$lib/hooks/useSvelteFlow'; +export * from '@reactflow/utils'; +export * from '@reactflow/system'; +export * from '@reactflow/edge-utils'; + export default SvelteFlow; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index 35fe7e1a1..9eb55ac68 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { SvelteComponentTyped } from 'svelte'; -import type { BaseNode } from '@reactflow/system'; +import type { BaseNode, NodeProps } from '@reactflow/system'; // @todo: currently the helper function only like Node from '@reactflow/core' // we need a base node type or helpes that accept Node like types @@ -14,16 +14,6 @@ export type Node< style?: string; }; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type NodeProps = Pick< - Node, - 'id' | 'data' | 'selected' | 'sourcePosition' | 'targetPosition' -> & { - xPos: number; - yPos: number; - isConnectable?: boolean; -}; - export type NodeTypes = Record>>; export type DefaultNodeOptions = Partial>; diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index d7c1ba766..94d811857 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -8,7 +8,8 @@ Panel, createNodes, createEdges, - type NodeTypes + type NodeTypes, + SelectionMode } from '../../lib/index'; import { CustomNode } from '../../example-components/CustomNode'; @@ -113,6 +114,7 @@ fitView minZoom={0.1} maxZoom={2.5} + selectionMode={SelectionMode.Full} initialViewport={{ x: 100, y: 100, zoom: 2 }} on:node:click={(event) => console.log('on node click', event)} on:node:mouseenter={(event) => console.log('on node enter', event)} From 9c7bd6dc6864a3381942ff13c304080d6cdec224 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 14 Mar 2023 15:43:14 +0100 Subject: [PATCH 0049/1093] feat(svelte): add snapGrid --- packages/svelte/src/lib/actions/drag/index.ts | 27 +++++++++++++++---- .../NodeSelection/NodeSelection.svelte | 4 +-- .../components/NodeWrapper/NodeWrapper.svelte | 4 +-- .../container/SvelteFlow/SvelteFlow.svelte | 2 ++ .../src/lib/container/SvelteFlow/types.ts | 4 ++- .../svelte/src/lib/store/initial-store.ts | 4 ++- .../svelte/src/routes/overview/+page.svelte | 7 ++--- 7 files changed, 36 insertions(+), 16 deletions(-) diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index d7b5ca97c..c96777c2e 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -5,6 +5,7 @@ import type { XYPosition, CoordinateExtent, Transform } from '@reactflow/system' import { getDragItems, hasSelector, calcNextPosition } from './utils'; import type { Node } from '$lib/types'; +import type { SvelteFlowStore } from '$lib/store/types'; export type UseDragData = { dx: number; dy: number }; export type UseDragEvent = D3DragEvent; @@ -25,13 +26,21 @@ type UseDragParams = { handleSelector?: string; nodeId?: string; updateNodePositions: (dragItems: NodeDragItem[], d: boolean, p: boolean) => void; - nodes: Writable; - transform: Writable; + nodes: SvelteFlowStore['nodes']; + transform: SvelteFlowStore['transform']; + snapGrid: SvelteFlowStore['snapGrid']; }; export default function drag( nodeRef: Element, - { handleSelector, nodeId, updateNodePositions, nodes, transform: transformStore }: UseDragParams + { + handleSelector, + nodeId, + updateNodePositions, + nodes, + transform: transformStore, + snapGrid: snapGridStore + }: UseDragParams ) { let dragging = false; let dragItems: NodeDragItem[] = []; @@ -43,6 +52,7 @@ export default function drag( const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX; const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY; const transform = get(transformStore); + const snapGrid = get(snapGridStore); const pointerPos = { x: (x - transform[0]) / transform[2], @@ -51,17 +61,24 @@ export default function drag( // we need the snapped position in order to be able to skip unnecessary drag events return { - xSnapped: pointerPos.x, - ySnapped: pointerPos.y, + xSnapped: snapGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x, + ySnapped: snapGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y, ...pointerPos }; }; const updateNodes = ({ x, y }: XYPosition) => { let hasChange = false; + const snapGrid = get(snapGridStore); dragItems = dragItems.map((n) => { const nextPosition = { x: x - n.distance.x, y: y - n.distance.y }; + + if (snapGrid) { + nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]); + nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]); + } + const updatedPos = calcNextPosition(n, nextPosition, get(nodes)); // we want to make sure that we only fire a change event when there is a changes diff --git a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte index c6e79d82f..6c7396d36 100644 --- a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte @@ -5,7 +5,7 @@ import { Selection } from '$lib/components/Selection'; import drag from '$lib/actions/drag'; - const { selectionRectMode, nodes, transform, updateNodePositions } = useStore(); + const { selectionRectMode, nodes, transform, snapGrid, updateNodePositions } = useStore(); $: selectedNodes = $nodes.filter((n) => n.selected); $: rect = getRectOfNodes(selectedNodes); @@ -15,7 +15,7 @@
(null), dragging: writable(false), selectionRect: writable(null), selectionKeyPressed: writable(false), diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index 94d811857..fe15840f5 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -63,7 +63,7 @@ data: { label: 'Custom Node' }, position: { x: 150, y: 300 } } - ]); + ], { style: 'width: 125px;' }); const edges = createEdges([ { @@ -116,6 +116,7 @@ maxZoom={2.5} selectionMode={SelectionMode.Full} initialViewport={{ x: 100, y: 100, zoom: 2 }} + snapGrid={[25, 25]} on:node:click={(event) => console.log('on node click', event)} on:node:mouseenter={(event) => console.log('on node enter', event)} on:node:mouseleave={(event) => console.log('on node leave', event)} @@ -136,10 +137,6 @@ \ No newline at end of file diff --git a/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte b/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte new file mode 100644 index 000000000..532cfbed0 --- /dev/null +++ b/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file From 5b3c260e452bc355506c30b8714a6b4f872f21c5 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 14 Mar 2023 17:24:01 +0100 Subject: [PATCH 0051/1093] feat(svelte): add functions to useSvelteFlow --- .../src/lib/container/Panel/Panel.svelte | 7 +- .../svelte/src/lib/container/Panel/types.ts | 4 +- .../container/SvelteFlow/SvelteFlow.svelte | 2 +- .../svelte/src/lib/hooks/useSvelteFlow.ts | 82 +++++++++++++++++-- .../lib/plugins/Background/Background.svelte | 2 +- .../src/lib/plugins/Controls/Controls.svelte | 4 +- .../src/lib/plugins/Minimap/Minimap.svelte | 7 +- packages/svelte/src/lib/store/index.ts | 13 +-- .../src/routes/usesvelteflow/Sidebar.svelte | 6 +- 9 files changed, 102 insertions(+), 25 deletions(-) diff --git a/packages/svelte/src/lib/container/Panel/Panel.svelte b/packages/svelte/src/lib/container/Panel/Panel.svelte index 23d3f79e6..86b8aa358 100644 --- a/packages/svelte/src/lib/container/Panel/Panel.svelte +++ b/packages/svelte/src/lib/container/Panel/Panel.svelte @@ -2,17 +2,18 @@ import cc from 'classcat'; import type { PanelProps } from './types'; - interface $$Props extends PanelProps {} + type $$Props = PanelProps; export let position: $$Props['position'] = 'top-right'; - export let style: $$Props['style'] = ''; + export let style: $$Props['style'] = undefined; + let className: $$Props['class'] = undefined; export { className as class }; $: positionClasses = `${position}`.split('-'); -
+
diff --git a/packages/svelte/src/lib/container/Panel/types.ts b/packages/svelte/src/lib/container/Panel/types.ts index 01f071da2..32bbea01f 100644 --- a/packages/svelte/src/lib/container/Panel/types.ts +++ b/packages/svelte/src/lib/container/Panel/types.ts @@ -1,6 +1,8 @@ import type { PanelPosition } from '@reactflow/system'; +import type { HTMLAttributes } from 'svelte/elements'; -export type PanelProps = { +export type PanelProps = HTMLAttributes & { + 'data-testid'?: string; position?: PanelPosition; style?: string; class?: string; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index a12fd9248..7b7153b35 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -96,7 +96,7 @@ bind:this={domNode} style={style} class={cc(['svelte-flow', className])} - data-testid="rf__wrapper" + data-testid="svelte-flow__wrapper" on:dragover on:drop {...$$restProps} diff --git a/packages/svelte/src/lib/hooks/useSvelteFlow.ts b/packages/svelte/src/lib/hooks/useSvelteFlow.ts index cd246eea4..d24c299f6 100644 --- a/packages/svelte/src/lib/hooks/useSvelteFlow.ts +++ b/packages/svelte/src/lib/hooks/useSvelteFlow.ts @@ -1,22 +1,47 @@ -import type { Project, Viewport, XYPosition, ZoomInOut } from '@reactflow/system'; +import { get, writable, type Writable } from 'svelte/store'; +import type { + Project, + SetCenterOptions, + Viewport, + ViewportHelperFunctionOptions, + XYPosition, + ZoomInOut +} from '@reactflow/system'; +import { zoomIdentity } from 'd3-zoom'; import { useStore } from '$lib/store'; import type { FitViewOptions } from '$lib/types'; -import { get, writable, type Writable } from 'svelte/store'; import type { SvelteFlowStore } from '$lib/store/types'; -import { pointToRendererPoint } from '@reactflow/utils'; +import { getD3Transition, pointToRendererPoint } from '@reactflow/utils'; export function useSvelteFlow(): { zoomIn: ZoomInOut; zoomOut: ZoomInOut; + setZoom: (zoomLevel: number, options?: ViewportHelperFunctionOptions) => void; + getZoom: () => number; + setCenter: (x: number, y: number, options?: SetCenterOptions) => void; + setViewport: (viewport: Viewport, options?: ViewportHelperFunctionOptions) => void; + getViewport: () => Viewport; fitView: (options?: FitViewOptions) => void; + project: Project; viewport: Writable; nodes: SvelteFlowStore['nodes']; edges: SvelteFlowStore['edges']; - project: Project; } { // how to get the new context here? fit view doesn't work, because the store is not updated (uses old nodes store) - const { zoomIn, zoomOut, fitView, snapGrid: snapGridStore, transform, nodes, edges } = useStore(); + const { + zoomIn, + zoomOut, + fitView, + snapGrid, + transform, + width, + height, + maxZoom, + d3, + nodes, + edges + } = useStore(); const transformValues = get(transform); const viewportWritable = writable({ @@ -36,10 +61,53 @@ export function useSvelteFlow(): { return { zoomIn, zoomOut, + setZoom: (zoomLevel, options) => { + const { zoom, selection } = get(d3); + + if (zoom && selection) { + zoom.scaleTo(getD3Transition(selection, options?.duration), zoomLevel); + } + }, + getZoom: () => get(transform)[2], + setViewport: (viewport, options) => { + const [x, y, zoom] = get(transform); + const { zoom: d3Zoom, selection } = get(d3); + + if (d3Zoom && selection) { + const nextTransform = zoomIdentity + .translate(viewport.x ?? x, viewport.y ?? y) + .scale(viewport.zoom ?? zoom); + d3Zoom.transform(getD3Transition(selection, options?.duration), nextTransform); + } + }, + getViewport: () => { + const [x, y, zoom] = get(transform); + return { x, y, zoom }; + }, + setCenter: (x, y, options) => { + const _width = get(width); + const _height = get(height); + const _maxZoom = get(maxZoom); + const { zoom, selection } = get(d3); + + if (zoom && selection) { + const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : _maxZoom; + const centerX = _width / 2 - x * nextZoom; + const centerY = _height / 2 - y * nextZoom; + const transform = zoomIdentity.translate(centerX, centerY).scale(nextZoom); + + zoom.transform(getD3Transition(selection, options?.duration), transform); + } + }, fitView, project: (position: XYPosition) => { - const snapGrid = get(snapGridStore); - return pointToRendererPoint(position, get(transform), snapGrid !== null, snapGrid || [1, 1]); + const _snapGrid = get(snapGrid); + return pointToRendererPoint( + position, + get(transform), + _snapGrid !== null, + _snapGrid || [1, 1] + ); }, nodes, edges, diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index c8e74f720..908d3f6de 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -47,7 +47,7 @@ : [patternDimensions[0] / 2, patternDimensions[1] / 2]; - + - - + + {#if showZoom} 0 ? getBoundsOfRects(getRectOfNodes($nodes, $nodeOrigin), viewBB) : viewBB; + $nodes.length > 0 ? getBoundsOfRects(getRectOfNodes($nodes), viewBB) : viewBB; $: elementWidth = width ?? defaultWidth; $: elementHeight = height ?? defaultHeight; $: scaledWidth = boundingRect.width / elementWidth; @@ -71,6 +71,7 @@ {position} class={cc(['svelte-flow__minimap', className])} style={`background-color: ${bgColor}; ${style}`} + data-testid="svelte-flow__minimap" >
Functions:
+ + + +
Nodes:
{#each $nodes as node (node.id)} From 564302147d0174963ce5637ab01054b0dda7472a Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 14 Mar 2023 23:36:36 +0100 Subject: [PATCH 0052/1093] feat(svelte): add attribution --- .../example-components/Header/Header.svelte | 2 +- .../components/Attribution/Attribution.svelte | 36 +++++++++++++++++++ .../src/lib/components/Attribution/index.ts | 1 + .../src/lib/components/Attribution/types.ts | 6 ++++ .../svelte/src/lib/container/Panel/types.ts | 1 + .../container/SvelteFlow/SvelteFlow.svelte | 2 ++ .../svelte/src/routes/validation/+page.svelte | 2 +- 7 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 packages/svelte/src/lib/components/Attribution/Attribution.svelte create mode 100644 packages/svelte/src/lib/components/Attribution/index.ts create mode 100644 packages/svelte/src/lib/components/Attribution/types.ts diff --git a/packages/svelte/src/example-components/Header/Header.svelte b/packages/svelte/src/example-components/Header/Header.svelte index 0d937de5b..e6ada6674 100644 --- a/packages/svelte/src/example-components/Header/Header.svelte +++ b/packages/svelte/src/example-components/Header/Header.svelte @@ -16,7 +16,7 @@
- + + + diff --git a/packages/svelte/src/routes/customnode/CustomNode/index.ts b/packages/svelte/src/routes/customnode/CustomNode/index.ts new file mode 100644 index 000000000..c22c77aaf --- /dev/null +++ b/packages/svelte/src/routes/customnode/CustomNode/index.ts @@ -0,0 +1 @@ +export { default as CustomNode } from './Custom.svelte'; From 6d248a7ca52bc02bbc588b92f76d2290e58fdb70 Mon Sep 17 00:00:00 2001 From: Moritz Klack Date: Mon, 20 Mar 2023 18:20:32 +0100 Subject: [PATCH 0059/1093] chore(svelte): update readme --- packages/svelte/README.md | 83 ++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 15 deletions(-) diff --git a/packages/svelte/README.md b/packages/svelte/README.md index 55fa00096..bb200bfd1 100644 --- a/packages/svelte/README.md +++ b/packages/svelte/README.md @@ -1,26 +1,79 @@ # SvelteFlow -A highly customizable Svelte component for building interactive graphs and node-based editors. +A highly customizable Svelte component for building interactive graphs and node-based editors. **This package is currently under heavy development and the API is very likely to change.** -## Developing +## Getting started -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: +If you want to check out the current version you need to run the following command from the root directory: -```bash -npm run dev +1. `pnpm install` - installs dependencies +2. `pnpm build` - needs to be done once +3. `pnpm dev` - starts dev server -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` +You can now access the examples under http://127.0.0.1:5173 -## Building +## A basic flow -To create a production version of your app: +A basic flow looks like this: -```bash -npm run build -``` +```svelte + + + + console.log('on node click', event)} + > + + + + + +``` From edf4e3c4c6e8d2cbeaa56baf760c50d4efb4c253 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 May 2023 13:56:55 +0200 Subject: [PATCH 0060/1093] chore(examples): add edges --- .../example-components/Header/Header.svelte | 1 + .../svelte/src/routes/customnode/+page.svelte | 6 +- packages/svelte/src/routes/edges/+page.svelte | 165 ++++++++++++++++++ 3 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 packages/svelte/src/routes/edges/+page.svelte diff --git a/packages/svelte/src/example-components/Header/Header.svelte b/packages/svelte/src/example-components/Header/Header.svelte index 0894fc078..39f8a8785 100644 --- a/packages/svelte/src/example-components/Header/Header.svelte +++ b/packages/svelte/src/example-components/Header/Header.svelte @@ -4,6 +4,7 @@ const routes = [ 'customnode', 'drag-n-drop', + 'edges', 'overview', 'stress', 'subflows', diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte index 5224a8096..6cad68154 100644 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ b/packages/svelte/src/routes/customnode/+page.svelte @@ -1,6 +1,6 @@ + + + + + + + + + + From 24400d259bb312e097f4e9345b2aecbad5829e2a Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 May 2023 13:59:09 +0200 Subject: [PATCH 0061/1093] feat(svelte): add step edge --- .../src/lib/components/edges/StepEdge.svelte | 20 +++++++++++++++++++ .../svelte/src/lib/store/initial-store.ts | 4 +++- packages/svelte/src/lib/types/edges.ts | 10 +++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 packages/svelte/src/lib/components/edges/StepEdge.svelte diff --git a/packages/svelte/src/lib/components/edges/StepEdge.svelte b/packages/svelte/src/lib/components/edges/StepEdge.svelte new file mode 100644 index 000000000..b765adcc7 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StepEdge.svelte @@ -0,0 +1,20 @@ + + + diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 4d3cfdbfa..31e37833b 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -16,6 +16,7 @@ import OutputNode from '$lib/components/nodes/OutputNode.svelte'; import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; +import StepEdge from '$lib/components/edges/StepEdge.svelte'; import type { ConnectionData, NodeTypes, @@ -43,7 +44,8 @@ export const initialNodeTypes = { export const initialEdgeTypes = { straight: StraightEdge, smoothstep: SmoothStepEdge, - default: BezierEdge + default: BezierEdge, + step: StepEdge }; export const initialStoreState = { diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index a6b961e49..a60f5f769 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -28,7 +28,15 @@ type BezierEdgeType = DefaultEdge & { pathOptions?: BezierPathOptions; }; -export type Edge = DefaultEdge | SmoothStepEdgeType | BezierEdgeType; +type StepEdgeType = DefaultEdge & { + type: 'step'; +}; + +export type Edge = + | DefaultEdge + | SmoothStepEdgeType + | BezierEdgeType + | StepEdgeType; export type EdgeLayouted = Omit & { sourceX: number; From 425f6250205cc2f76ad5b557307d0868903763e5 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 May 2023 16:15:42 +0200 Subject: [PATCH 0062/1093] feat(svelte): edge marker support --- .../EdgeRenderer/MarkerDefinitions.tsx | 25 ++-------- .../lib/components/BaseEdge/BaseEdge.svelte | 14 +++++- .../src/lib/components/BaseEdge/types.ts | 5 +- .../components/EdgeWrapper/EdgeWrapper.svelte | 23 ++++++++-- .../lib/components/edges/BezierEdge.svelte | 13 +++++- .../components/edges/SmoothStepEdge.svelte | 12 ++++- .../src/lib/components/edges/StepEdge.svelte | 12 ++++- .../lib/components/edges/StraightEdge.svelte | 13 +++++- .../EdgeRenderer/EdgeRenderer.svelte | 4 ++ .../MarkerDefinition/Marker.svelte | 46 +++++++++++++++++++ .../MarkerDefinition/MarkerDefinition.svelte | 21 +++++++++ .../EdgeRenderer/MarkerDefinition/index.ts | 2 + .../container/SvelteFlow/SvelteFlow.svelte | 12 +++-- .../src/lib/container/SvelteFlow/types.ts | 1 + .../lib/plugins/Background/Background.svelte | 4 +- packages/svelte/src/lib/store/index.ts | 9 +++- .../svelte/src/lib/store/initial-store.ts | 9 ++-- packages/svelte/src/lib/types/edges.ts | 8 ++++ packages/system/src/types/edges.ts | 4 ++ packages/utils/src/graph.ts | 18 -------- packages/utils/src/index.ts | 1 + packages/utils/src/marker.ts | 40 ++++++++++++++++ 22 files changed, 236 insertions(+), 60 deletions(-) create mode 100644 packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/Marker.svelte create mode 100644 packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte create mode 100644 packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/index.ts create mode 100644 packages/utils/src/marker.ts diff --git a/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx b/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx index 1ea6296c5..2bfdd15d0 100644 --- a/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx +++ b/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx @@ -1,15 +1,11 @@ import { memo, useCallback } from 'react'; -import type { EdgeMarker } from '@reactflow/system'; -import { getMarkerId } from '@reactflow/utils'; +import type { MarkerProps } from '@reactflow/system'; +import { createMarkerIds } from '@reactflow/utils'; import { useStore } from '../../hooks/useStore'; import { useMarkerSymbol } from './MarkerSymbols'; import type { ReactFlowState } from '../../types'; -type MarkerProps = EdgeMarker & { - id: string; -}; - type MarkerDefinitionsProps = { defaultColor: string; rfId?: string; @@ -51,22 +47,9 @@ const Marker = ({ const markerSelector = ({ defaultColor, rfId }: { defaultColor: string; rfId?: string }) => (s: ReactFlowState) => { - const ids: string[] = []; + const markers = createMarkerIds(s.edges, { id: rfId, defaultColor }); - return s.edges - .reduce((markers, edge) => { - [edge.markerStart, edge.markerEnd].forEach((marker) => { - if (marker && typeof marker === 'object') { - const markerId = getMarkerId(marker, rfId); - if (!ids.includes(markerId)) { - markers.push({ id: markerId, color: marker.color || defaultColor, ...marker }); - ids.push(markerId); - } - } - }); - return markers; - }, []) - .sort((a, b) => a.id.localeCompare(b.id)); + return markers; }; // when you have multiple flows on a page and you hide the first one, the other ones have no markers anymore diff --git a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte index 2bf450d1d..c684cfc56 100644 --- a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte @@ -4,14 +4,26 @@ type $$Props = BaseEdgeProps; + export let id: $$Props['id'] = undefined; export let path: $$Props['path'] = ''; export let label: $$Props['label'] = undefined; export let labelX: $$Props['labelX'] = undefined; export let labelY: $$Props['labelY'] = undefined; + export let markerStart: $$Props['markerStart'] = undefined; + export let markerEnd: $$Props['markerEnd'] = undefined; + export let style: $$Props['style'] = undefined; export let interactionWidth: $$Props['interactionWidth'] = 20; - + {#if interactionWidth} & { +export type BaseEdgeProps = Pick & { + id?: string; path: string; labelX?: number; labelY?: number; + markerStart?: string; + markerEnd?: string; }; diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index dae654ca9..ba8a0d1b9 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -1,6 +1,7 @@ - + + diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte index b43dd7895..f5093c54a 100644 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte @@ -16,4 +16,14 @@ }); - + diff --git a/packages/svelte/src/lib/components/edges/StepEdge.svelte b/packages/svelte/src/lib/components/edges/StepEdge.svelte index b765adcc7..c51d6bcbd 100644 --- a/packages/svelte/src/lib/components/edges/StepEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StepEdge.svelte @@ -17,4 +17,14 @@ }); - + diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte index a0123b678..8b095be93 100644 --- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -14,4 +14,15 @@ }); - + + diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index a60efbb8b..6c495dd9c 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -1,5 +1,6 @@ + + + {#if type === MarkerType.Arrow} + + {:else if type === MarkerType.ArrowClosed} + + {/if} + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte b/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte new file mode 100644 index 000000000..602d6b57c --- /dev/null +++ b/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte @@ -0,0 +1,21 @@ + + + + {#each $markers as marker(marker.id)} + + {/each} + \ No newline at end of file diff --git a/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/index.ts b/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/index.ts new file mode 100644 index 000000000..9e2cc390c --- /dev/null +++ b/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/index.ts @@ -0,0 +1,2 @@ +export { default as MarkerDefinition } from './MarkerDefinition.svelte'; +export { default as Marker } from './Marker.svelte'; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index e1cc77a91..35eb0247e 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -17,7 +17,7 @@ type $$Props = SvelteFlowProps; - export let id: $$Props['id'] = '1'; + export let id = '1'; export let fitView: $$Props['fitView'] = undefined; export let minZoom: $$Props['minZoom'] = undefined; export let maxZoom: $$Props['maxZoom'] = undefined; @@ -31,13 +31,14 @@ export let connectionRadius: $$Props['connectionRadius'] = undefined; export let connectionLineType: $$Props['connectionLineType'] = undefined; export let isValidConnection: $$Props['isValidConnection'] = undefined; + export let defaultMarkerColor = '#b1b1b7'; export let style: $$Props['style'] = undefined; let className: $$Props['class'] = undefined; export { className as class }; - let domNode: HTMLDivElement; - + + $: flowId = id; const store = useStore(); onMount(() => { @@ -53,12 +54,13 @@ $: { const updatableProps = { - id, + flowId, connectionLineType, connectionRadius, selectionMode, snapGrid, - isValidConnection + isValidConnection, + defaultMarkerColor }; Object.keys(updatableProps).forEach(prop => { diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 6526bd5d1..539de845b 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -32,6 +32,7 @@ export type SvelteFlowProps = DOMAttributes & { connectionRadius?: number; selectionMode?: SelectionMode; snapGrid?: SnapGrid; + defaultMarkerColor?: string; class?: string; style?: string; diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index 908d3f6de..4ef0c66b4 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -31,14 +31,14 @@ let className: $$Props['class'] = ''; export { className as class }; - const { transform, id } = useStore(); + const { transform, flowId } = useStore(); const patternColor = color || defaultColor[variant!]; const patternSize = size || defaultSize[variant!]; const isDots = variant === BackgroundVariant.Dots; const isCross = variant === BackgroundVariant.Cross; const gapXY: number[] = Array.isArray(gap!) ? gap! : [gap!, gap!]; - $: patternId = `background-pattern-${$id}`; + $: patternId = `background-pattern-${$flowId}`; $: scaledGap = [gapXY[0] * $transform[2] || 1, gapXY[1] * $transform[2] || 1]; $: scaledSize = patternSize * $transform[2]; $: patternDimensions = (isCross ? [scaledSize, scaledSize] : scaledGap) as [number, number]; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 273b6ffcd..3693a5180 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -1,5 +1,5 @@ import { getContext } from 'svelte'; -import { get } from 'svelte/store'; +import { derived, get } from 'svelte/store'; import { zoomIdentity } from 'd3-zoom'; import { type NodeDragItem, @@ -11,6 +11,7 @@ import { type CoordinateExtent } from '@reactflow/system'; import { + createMarkerIds, fitView as fitViewUtil, getD3Transition, getDimensions, @@ -314,6 +315,12 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { // derived state edgesLayouted: getEdgesLayouted(store), connectionPath: getConnectionPath(store), + markers: derived( + [store.edges, store.defaultMarkerColor, store.flowId], + ([edges, defaultColor, id]) => { + return createMarkerIds(edges, { defaultColor, id }); + } + ), // actions setNodeTypes, diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 31e37833b..a11d2a29c 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -7,7 +7,8 @@ import { ConnectionLineType, type SelectionRect, type Transform, - type SnapGrid + type SnapGrid, + type MarkerProps } from '@reactflow/system'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; @@ -49,7 +50,7 @@ export const initialEdgeTypes = { }; export const initialStoreState = { - id: writable(null), + flowId: writable(null), nodes: writable([]), edges: writable([]), edgesLayouted: readable([]), @@ -80,5 +81,7 @@ export const initialStoreState = { connection: writable(initConnectionData), connectionRadius: writable(25), connectionLineType: writable(ConnectionLineType.Bezier), - isValidConnection: writable(() => true) + isValidConnection: writable(() => true), + markers: readable([]), + defaultMarkerColor: writable('#b1b1b7') }; diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index a60f5f769..24f8af72c 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -47,11 +47,15 @@ export type EdgeLayouted = Omit & { targetPosition: Position; sourceHandleId?: string; targetHandleId?: string; + markerStart?: string; + markerEnd?: string; }; export type EdgeProps = Pick< EdgeLayouted, | 'id' + | 'data' + | 'style' | 'source' | 'target' | 'sourceX' @@ -64,6 +68,10 @@ export type EdgeProps = Pick< | 'selected' | 'label' | 'interactionWidth' + | 'markerStart' + | 'markerEnd' + | 'sourceHandleId' + | 'targetHandleId' >; export type EdgeTypes = Record>; diff --git a/packages/system/src/types/edges.ts b/packages/system/src/types/edges.ts index 6698ca528..3b9e4e294 100644 --- a/packages/system/src/types/edges.ts +++ b/packages/system/src/types/edges.ts @@ -57,3 +57,7 @@ export enum MarkerType { Arrow = 'arrow', ArrowClosed = 'arrowclosed', } + +export type MarkerProps = EdgeMarker & { + id: string; +}; diff --git a/packages/utils/src/graph.ts b/packages/utils/src/graph.ts index c8f608e6f..9f2bc2c74 100644 --- a/packages/utils/src/graph.ts +++ b/packages/utils/src/graph.ts @@ -5,7 +5,6 @@ import { boxToRect, clamp, devWarn, getBoundsOfBoxes, getOverlappingArea, rectTo import { errorMessages, type Connection, - type EdgeMarkerType, type Transform, type XYPosition, type Rect, @@ -54,23 +53,6 @@ export const getIncomersBase = `reactflow__edge-${source}${sourceHandle || ''}-${target}${targetHandle || ''}`; -export const getMarkerId = (marker: EdgeMarkerType | undefined, rfId?: string): string => { - if (typeof marker === 'undefined') { - return ''; - } - - if (typeof marker === 'string') { - return marker; - } - - const idPrefix = rfId ? `${rfId}__` : ''; - - return `${idPrefix}${Object.keys(marker) - .sort() - .map((key: string) => `${key}=${(marker as any)[key]}`) - .join('&')}`; -}; - const connectionExists = (edge: BaseEdge, edges: BaseEdge[]) => { return edges.some( (el) => diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 60a93bf61..d4a84150c 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,2 +1,3 @@ export * from './graph'; export * from './utils'; +export * from './marker'; diff --git a/packages/utils/src/marker.ts b/packages/utils/src/marker.ts new file mode 100644 index 000000000..cc13bf48f --- /dev/null +++ b/packages/utils/src/marker.ts @@ -0,0 +1,40 @@ +import type { BaseEdge, EdgeMarker, EdgeMarkerType, MarkerProps } from '@reactflow/system'; + +export function getMarkerId(marker: EdgeMarkerType | undefined, id?: string | null): string { + if (!marker) { + return ''; + } + + if (typeof marker === 'string') { + return marker; + } + + const idPrefix = id ? `${id}__` : ''; + + return `${idPrefix}${Object.keys(marker) + .sort() + .map((key) => `${key}=${marker[key as keyof EdgeMarker]}`) + .join('&')}`; +} + +export function createMarkerIds( + edges: BaseEdge[], + { id, defaultColor }: { id?: string | null; defaultColor?: string } +) { + const ids: string[] = []; + + return edges + .reduce((markers, edge) => { + [edge.markerStart, edge.markerEnd].forEach((marker) => { + if (marker && typeof marker === 'object') { + const markerId = getMarkerId(marker, id); + if (!ids.includes(markerId)) { + markers.push({ id: markerId, color: marker.color || defaultColor, ...marker }); + ids.push(markerId); + } + } + }); + return markers; + }, []) + .sort((a, b) => a.id.localeCompare(b.id)); +} From ba042fbcbb0e11dd08552427840856d75c8d13d9 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 May 2023 16:17:25 +0200 Subject: [PATCH 0063/1093] chore(svelte): adjust nodetypes type --- packages/svelte/src/lib/types/nodes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index 9eb55ac68..6c415b0cc 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -14,6 +14,6 @@ export type Node< style?: string; }; -export type NodeTypes = Record>>; +export type NodeTypes = Record>; export type DefaultNodeOptions = Partial>; From 5c7c586c79c0a3062b60849fe51f37c2618b964e Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 May 2023 16:19:50 +0200 Subject: [PATCH 0064/1093] chore(svelte): install d3 type packages --- packages/svelte/package.json | 3 +++ pnpm-lock.yaml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 9ab1fbbf0..aa9f3d45b 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -21,6 +21,9 @@ "@reactflow/system": "workspace:*", "@reactflow/utils": "workspace:*", "@svelte-put/shortcut": "^2.0.0", + "@types/d3-drag": "^3.0.1", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", "classcat": "^5.0.4", "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 43d46e7c8..77e59a1f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -346,6 +346,9 @@ importers: '@sveltejs/adapter-auto': ^2.0.0 '@sveltejs/kit': ^1.11.0 '@sveltejs/package': ^2.0.2 + '@types/d3-drag': ^3.0.1 + '@types/d3-selection': ^3.0.3 + '@types/d3-zoom': ^3.0.1 '@typescript-eslint/eslint-plugin': ^5.45.0 '@typescript-eslint/parser': ^5.45.0 classcat: ^5.0.4 @@ -369,6 +372,9 @@ importers: '@reactflow/system': link:../system '@reactflow/utils': link:../utils '@svelte-put/shortcut': registry.npmjs.org/@svelte-put/shortcut/2.0.0 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 classcat: registry.npmjs.org/classcat/5.0.4 d3-drag: registry.npmjs.org/d3-drag/3.0.0 d3-selection: registry.npmjs.org/d3-selection/3.0.0 From 56bcf2f6522d1965fa910aeeb5462b4b039773ff Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 16 May 2023 12:33:09 +0200 Subject: [PATCH 0065/1093] feat(svelte): add labelStyle prop for edges --- packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte | 5 ++++- packages/svelte/src/lib/components/BaseEdge/types.ts | 5 ++++- .../src/lib/components/EdgeWrapper/EdgeWrapper.svelte | 2 ++ packages/svelte/src/lib/components/edges/BezierEdge.svelte | 1 + .../svelte/src/lib/components/edges/SmoothStepEdge.svelte | 1 + packages/svelte/src/lib/components/edges/StepEdge.svelte | 1 + .../svelte/src/lib/components/edges/StraightEdge.svelte | 1 + packages/svelte/src/lib/types/edges.ts | 2 ++ packages/svelte/src/routes/edges/+page.svelte | 6 ++---- 9 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte index c684cfc56..0ea8a77dc 100644 --- a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte @@ -1,5 +1,5 @@ {label}
diff --git a/packages/svelte/src/lib/components/BaseEdge/types.ts b/packages/svelte/src/lib/components/BaseEdge/types.ts index 0941ccade..32ed066ba 100644 --- a/packages/svelte/src/lib/components/BaseEdge/types.ts +++ b/packages/svelte/src/lib/components/BaseEdge/types.ts @@ -1,6 +1,9 @@ import type { EdgeProps } from '$lib/types'; -export type BaseEdgeProps = Pick & { +export type BaseEdgeProps = Pick< + EdgeProps, + 'interactionWidth' | 'label' | 'labelStyle' | 'style' +> & { id?: string; path: string; labelX?: number; diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index ba8a0d1b9..2753c4aef 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -24,6 +24,7 @@ export let animated: $$Props['animated'] = false; export let selected: $$Props['selected'] = false; export let label: $$Props['label'] = undefined; + export let labelStyle: $$Props['labelStyle'] = undefined; export let markerStart: $$Props['markerStart'] = undefined; export let markerEnd: $$Props['markerEnd'] = undefined; export let sourceHandleId: $$Props['sourceHandleId'] = undefined; @@ -66,6 +67,7 @@ {animated} {selected} {label} + {labelStyle} {data} {style} {sourceHandleId} diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte index 780168b10..8bbd14648 100644 --- a/packages/svelte/src/lib/components/edges/BezierEdge.svelte +++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte @@ -22,6 +22,7 @@ {labelY} id={$$props.id} label={$$props.label} + labelStyle={$$props.labelStyle} markerStart={$$props.markerStart} markerEnd={$$props.markerEnd} interactionWidth={$$props.interactionWidth} diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte index f5093c54a..333c8a3cd 100644 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte @@ -22,6 +22,7 @@ {labelY} id={$$props.id} label={$$props.label} + labelStyle={$$props.labelStyle} markerStart={$$props.markerStart} markerEnd={$$props.markerEnd} interactionWidth={$$props.interactionWidth} diff --git a/packages/svelte/src/lib/components/edges/StepEdge.svelte b/packages/svelte/src/lib/components/edges/StepEdge.svelte index c51d6bcbd..3056d7d6f 100644 --- a/packages/svelte/src/lib/components/edges/StepEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StepEdge.svelte @@ -23,6 +23,7 @@ {labelY} id={$$props.id} label={$$props.label} + labelStyle={$$props.labelStyle} markerStart={$$props.markerStart} markerEnd={$$props.markerEnd} interactionWidth={$$props.interactionWidth} diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte index 8b095be93..bf8494189 100644 --- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -20,6 +20,7 @@ {labelY} id={$$props.id} label={$$props.label} + labelStyle={$$props.labelStyle} markerStart={$$props.markerStart} markerEnd={$$props.markerEnd} interactionWidth={$$props.interactionWidth} diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 24f8af72c..6a5ced4f5 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -12,6 +12,7 @@ import type { Node } from '$lib/types'; export type DefaultEdge = BaseEdge & { label?: string; + labelStyle?: string; style?: string; class?: string; sourceNode?: Node; @@ -67,6 +68,7 @@ export type EdgeProps = Pick< | 'animated' | 'selected' | 'label' + | 'labelStyle' | 'interactionWidth' | 'markerStart' | 'markerEnd' diff --git a/packages/svelte/src/routes/edges/+page.svelte b/packages/svelte/src/routes/edges/+page.svelte index e6eddc2b7..abd48eeca 100644 --- a/packages/svelte/src/routes/edges/+page.svelte +++ b/packages/svelte/src/routes/edges/+page.svelte @@ -101,9 +101,7 @@ source: '5', target: '7', label: 'label with styled bg', - //labelBgPadding: [8, 4], - // labelBgBorderRadius: 4, - // labelBgStyle: { fill: '#FFCC00', color: '#fff', fillOpacity: 0.7 }, + labelStyle: 'background: #FFCC00; color: #fff; opacity: 0.7', markerEnd: { type: MarkerType.ArrowClosed, }, @@ -125,7 +123,7 @@ source: '5', target: '6', label: 'hi', - // labelStyle: 'fill: red; font-weight: 700', + labelStyle: 'background: red; font-weight: 700; padding: 5px;', style: 'stroke: #ffcc0', markerEnd: { type: MarkerType.Arrow, From bb847b7a77fec6c635f9dc31c26d299cc0b772fe Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 17 May 2023 11:55:35 +0200 Subject: [PATCH 0066/1093] refactor(svelte): disable zoom buttons when min/max is reached --- .../src/lib/plugins/Controls/ControlButton.svelte | 12 ++++++++++++ .../svelte/src/lib/plugins/Controls/Controls.svelte | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte index b761a1f8f..d8260902c 100644 --- a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte +++ b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte @@ -31,9 +31,21 @@ padding: 5px; } + .svelte-flow__controls-button:hover { + background: #f4f4f4; + } + .svelte-flow__controls-button :global(svg) { width: 100%; max-width: 12px; max-height: 12px; } + + .svelte-flow__controls-button:disabled { + pointer-events: none; + } + + .svelte-flow__controls-button:disabled :global(svg) { + fill-opacity: 0.4; + } diff --git a/packages/svelte/src/lib/plugins/Controls/Controls.svelte b/packages/svelte/src/lib/plugins/Controls/Controls.svelte index 264649751..3501b156d 100644 --- a/packages/svelte/src/lib/plugins/Controls/Controls.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Controls.svelte @@ -17,9 +17,11 @@ export let showFitView: $$Props['showFitView'] = true; export let showInteractive: $$Props['showInteractive'] = true; - const { zoomIn, zoomOut, fitView } = useStore(); + const { zoomIn, zoomOut, fitView, transform, minZoom, maxZoom } = useStore(); const isInteractive = true; + $: minZoomReached = $transform[2] <= $minZoom; + $: maxZoomReached = $transform[2] >= $maxZoom; const onZoomInHandler = () => { zoomIn(); @@ -50,6 +52,7 @@ class="svelte-flow__controls-zoomin" title="zoom in" aria-label="zoom in" + disabled={maxZoomReached} > @@ -59,6 +62,7 @@ class="svelte-flow__controls-zoomout" title="zoom out" aria-label="zoom out" + disabled={minZoomReached} > From dd8292ce57010e23cd3175abfcee3749f423615b Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 17 May 2023 13:04:28 +0200 Subject: [PATCH 0067/1093] feat(svelte): make edges selectable --- packages/svelte/src/lib/actions/drag/utils.ts | 2 +- .../lib/components/BaseEdge/BaseEdge.svelte | 1 - .../components/EdgeWrapper/EdgeWrapper.svelte | 18 ++++++++++++++---- .../components/NodeWrapper/NodeWrapper.svelte | 6 +++--- .../src/lib/components/NodeWrapper/types.ts | 1 + .../container/NodeRenderer/NodeRenderer.svelte | 1 + .../svelte/src/lib/store/edges-layouted.ts | 1 + packages/svelte/src/lib/store/index.ts | 16 ++++++++++++++++ packages/svelte/src/lib/store/types.ts | 1 + .../svelte/src/routes/overview/+page.svelte | 6 ++++-- 10 files changed, 42 insertions(+), 11 deletions(-) diff --git a/packages/svelte/src/lib/actions/drag/utils.ts b/packages/svelte/src/lib/actions/drag/utils.ts index c470fb715..476da9d6e 100644 --- a/packages/svelte/src/lib/actions/drag/utils.ts +++ b/packages/svelte/src/lib/actions/drag/utils.ts @@ -108,7 +108,7 @@ export function calcNextPosition( ] : currentExtent; } else { - devWarn('005', errorMessages['005']()); + devWarn('005', errorMessages['error005']()); currentExtent = nodeExtent; } } else if (node.extent && node.parentNode) { diff --git a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte index 0ea8a77dc..0438ba050 100644 --- a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte @@ -14,7 +14,6 @@ export let markerEnd: $$Props['markerEnd'] = undefined; export let style: $$Props['style'] = undefined; export let interactionWidth: $$Props['interactionWidth'] = 20; - = $edgeTypes[type!] || BezierEdge; @@ -41,6 +42,10 @@ $: markerEndUrl = markerEnd ? `url(#${getMarkerId(markerEnd, $flowId)})` : undefined; function onClick() { + if (selectable) { + addSelectedEdges([id]); + } + const edge = $edges.find(e => e.id === id); dispatch('edge:click', edge); } @@ -50,6 +55,7 @@ @@ -83,13 +89,17 @@ cursor: pointer; } - .svelte-flow__edge :global(path) { + .svelte-flow__edge :global(.svelte-flow__edge-path) { stroke: #ccc; stroke-width: 1; fill: none; } - .animated :global(path) { + .selected :global(.svelte-flow__edge-path) { + stroke: #555; + } + + .animated :global(.svelte-flow__edge-path) { stroke-dasharray: 5; animation: dashdraw 0.5s linear infinite; } diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index d05be8245..96e48e3fa 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -15,6 +15,7 @@ export let data: NodeWrapperProps['data'] = {}; export let selected: NodeWrapperProps['selected'] = false; export let draggable: NodeWrapperProps['draggable'] = undefined; + export let selectable: NodeWrapperProps['selectable'] = undefined; export let connectable: NodeWrapperProps['connectable'] = true; export let dragging: boolean = false; export let resizeObserver: NodeWrapperProps['resizeObserver'] = null; @@ -36,13 +37,12 @@ const nodeTypeValid = !!$nodeTypes[type!]; if (!nodeTypeValid) { - console.warn('003', errorMessages['003'](type!)); + console.warn('003', errorMessages['error003'](type!)); type = 'default'; } const nodeComponent: typeof SvelteComponentTyped> = $nodeTypes[type!] || DefaultNode; - const isSelectable = true; const selectNodesOnDrag = false; const dispatch = createEventDispatcher(); @@ -63,7 +63,7 @@ } function onSelectNodeHandler(event: MouseEvent) { - if (isSelectable && (!selectNodesOnDrag || !draggable)) { + if (selectable && (!selectNodesOnDrag || !draggable)) { // this handler gets called within the drag start event when selectNodesOnDrag=true addSelectedNodes([id]); } diff --git a/packages/svelte/src/lib/components/NodeWrapper/types.ts b/packages/svelte/src/lib/components/NodeWrapper/types.ts index acd26836f..d65934270 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/types.ts +++ b/packages/svelte/src/lib/components/NodeWrapper/types.ts @@ -11,6 +11,7 @@ export type NodeWrapperProps = Pick< | 'dragging' | 'positionAbsolute' | 'selected' + | 'selectable' | 'style' | 'type' | 'width' diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index 270247b88..1f940958d 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -39,6 +39,7 @@ data={node.data} selected={node.selected} draggable={node.draggable || node.draggable === undefined} + selectable={node.selectable || node.selectable === undefined} connectable={node.connectable || node.connectable === undefined} positionAbsolute={node.positionAbsolute} positionOrigin={posOrigin} diff --git a/packages/svelte/src/lib/store/edges-layouted.ts b/packages/svelte/src/lib/store/edges-layouted.ts index f303b9467..f26a34493 100644 --- a/packages/svelte/src/lib/store/edges-layouted.ts +++ b/packages/svelte/src/lib/store/edges-layouted.ts @@ -45,6 +45,7 @@ export function getEdgesLayouted(store: SvelteFlowStoreState) { res.push({ ...edge, + selectable: edge.selectable || typeof edge.selectable === 'undefined', type: edgeType, sourceX, sourceY, diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 3693a5180..96b8dfe7f 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -251,6 +251,21 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { ); } + function addSelectedEdges(ids: string[]) { + if (get(store.multiselectionKeyPressed)) { + // @todo handle multiselection key + } + + store.edges.update((edges) => + edges.map((edge) => { + return { + ...edge, + selected: ids.includes(edge.id) + }; + }) + ); + } + function panBy(delta: XYPosition) { const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); const transform = get(store.transform); @@ -335,6 +350,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { setMaxZoom, resetSelectedElements, addSelectedNodes, + addSelectedEdges, panBy, updateConnection, cancelConnection, diff --git a/packages/svelte/src/lib/store/types.ts b/packages/svelte/src/lib/store/types.ts index 48d4edbb2..eff7e87bc 100644 --- a/packages/svelte/src/lib/store/types.ts +++ b/packages/svelte/src/lib/store/types.ts @@ -27,6 +27,7 @@ export type SvelteFlowStoreActions = { updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; resetSelectedElements: () => void; addSelectedNodes: (ids: string[]) => void; + addSelectedEdges: (ids: string[]) => void; panBy: (delta: XYPosition) => void; updateConnection: (connection: Partial) => void; cancelConnection: () => void; diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index 9095ef3dc..3207b2323 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -34,7 +34,8 @@ id: '2', type: 'default', data: { label: 'Node' }, - position: { x: 0, y: 150 } + position: { x: 0, y: 150 }, + selectable: false, }, { id: 'A', @@ -83,7 +84,8 @@ id: '1-3', type: 'smoothstep', source: '1', - target: '3' + target: '3', + selectable: false }, { id: '2-4', From fb712a513fe21707b28aaaee02b43aa0681771f7 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 17 May 2023 13:26:52 +0200 Subject: [PATCH 0068/1093] feat(react): add selectable option to edges --- packages/core/src/components/Edges/wrapEdge.tsx | 8 ++++---- packages/core/src/container/EdgeRenderer/index.tsx | 6 +++++- packages/core/src/types/edges.ts | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/core/src/components/Edges/wrapEdge.tsx b/packages/core/src/components/Edges/wrapEdge.tsx index 8424d10e0..e14af22a1 100644 --- a/packages/core/src/components/Edges/wrapEdge.tsx +++ b/packages/core/src/components/Edges/wrapEdge.tsx @@ -37,7 +37,7 @@ export default (EdgeComponent: ComponentType) => { targetY, sourcePosition, targetPosition, - elementsSelectable, + isSelectable, hidden, sourceHandleId, targetHandleId, @@ -73,7 +73,7 @@ export default (EdgeComponent: ComponentType) => { const onEdgeClick = (event: React.MouseEvent): void => { const { edges, addSelectedEdges } = store.getState(); - if (elementsSelectable) { + if (isSelectable) { store.setState({ nodesSelectionActive: false }); addSelectedEdges([id]); } @@ -137,10 +137,10 @@ export default (EdgeComponent: ComponentType) => { const onEdgeUpdaterMouseEnter = () => setUpdateHover(true); const onEdgeUpdaterMouseOut = () => setUpdateHover(false); - const inactive = !elementsSelectable && !onClick; + const inactive = !isSelectable && !onClick; const onKeyDown = (event: KeyboardEvent) => { - if (elementSelectionKeys.includes(event.key) && elementsSelectable) { + if (elementSelectionKeys.includes(event.key) && isSelectable) { const { unselectNodesAndEdges, addSelectedEdges, edges } = store.getState(); const unselect = event.key === 'Escape'; diff --git a/packages/core/src/container/EdgeRenderer/index.tsx b/packages/core/src/container/EdgeRenderer/index.tsx index 7febb5dae..37aba2d00 100644 --- a/packages/core/src/container/EdgeRenderer/index.tsx +++ b/packages/core/src/container/EdgeRenderer/index.tsx @@ -115,6 +115,10 @@ const EdgeRenderer = ({ const isUpdatable = typeof onEdgeUpdate !== 'undefined' && (edge.updatable || (edgesUpdatable && typeof edge.updatable === 'undefined')); + const isSelectable = !!( + edge.selectable || + (elementsSelectable && typeof edge.selectable === 'undefined') + ); if (!sourceHandle || !targetHandle) { onError?.('008', errorMessages['error008'](sourceHandle, edge)); @@ -160,7 +164,7 @@ const EdgeRenderer = ({ targetY={targetY} sourcePosition={sourcePosition} targetPosition={targetPosition} - elementsSelectable={elementsSelectable} + isSelectable={isSelectable} onEdgeUpdate={onEdgeUpdate} onContextMenu={onEdgeContextMenu} onMouseEnter={onEdgeMouseEnter} diff --git a/packages/core/src/types/edges.ts b/packages/core/src/types/edges.ts index e9bc25f5c..4e524f4ea 100644 --- a/packages/core/src/types/edges.ts +++ b/packages/core/src/types/edges.ts @@ -60,7 +60,6 @@ export type WrapEdgeProps = Omit, 'sourceHandle' | 'targetHandl targetY: number; sourcePosition: Position; targetPosition: Position; - elementsSelectable?: boolean; onEdgeUpdate?: OnEdgeUpdateFunc; onContextMenu?: EdgeMouseHandler; onMouseEnter?: EdgeMouseHandler; @@ -72,6 +71,7 @@ export type WrapEdgeProps = Omit, 'sourceHandle' | 'targetHandl rfId?: string; isFocusable: boolean; isUpdatable: EdgeUpdatable; + isSelectable: boolean; pathOptions?: BezierPathOptions | SmoothStepPathOptions; }; From ca4a6c20f9e5a2520414fe7e8b6f10748b842e6a Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 22 May 2023 12:24:35 +0200 Subject: [PATCH 0069/1093] feat(svelte): add nodesConnectable, nodesDraggable and elementsSelectable --- .../MarkerDefinition/MarkerDefinition.svelte | 11 +- .../NodeRenderer/NodeRenderer.svelte | 8 +- .../container/SvelteFlow/SvelteFlow.svelte | 8 +- .../src/lib/container/SvelteFlow/types.ts | 3 + .../src/lib/plugins/Controls/Controls.svelte | 13 +-- .../svelte/src/lib/store/edges-layouted.ts | 105 ++++++++++-------- packages/svelte/src/lib/store/index.ts | 4 +- .../svelte/src/lib/store/initial-store.ts | 3 + packages/svelte/src/lib/types/edges.ts | 1 + packages/system/src/types/edges.ts | 1 + 10 files changed, 83 insertions(+), 74 deletions(-) diff --git a/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte b/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte index 602d6b57c..26c539263 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/MarkerDefinition/MarkerDefinition.svelte @@ -7,15 +7,6 @@ {#each $markers as marker(marker.id)} - + {/each} \ No newline at end of file diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index 1f940958d..99694d655 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -6,7 +6,7 @@ import { NodeWrapper } from '$lib/components/NodeWrapper'; import { useStore } from '$lib/store'; - const { nodes, updateNodeDimensions } = useStore(); + const { nodes, nodesDraggable, nodesConnectable, elementsSelectable, updateNodeDimensions } = useStore(); const resizeObserver: ResizeObserver | null = typeof ResizeObserver === 'undefined' @@ -38,9 +38,9 @@ id={node.id} data={node.data} selected={node.selected} - draggable={node.draggable || node.draggable === undefined} - selectable={node.selectable || node.selectable === undefined} - connectable={node.connectable || node.connectable === undefined} + draggable={!!(node.draggable || ($nodesDraggable && typeof node.draggable === 'undefined'))} + selectable={!!(node.selectable || ($elementsSelectable && typeof node.selectable === 'undefined'))} + connectable={!!(node.connectable || ($nodesConnectable && typeof node.connectable === 'undefined'))} positionAbsolute={node.positionAbsolute} positionOrigin={posOrigin} isParent={!!node[internalsSymbol]?.isParent} diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 35eb0247e..c1a3131e7 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -26,6 +26,9 @@ export let edgeTypes: $$Props['edgeTypes'] = undefined; export let selectionKey: $$Props['selectionKey'] = undefined; export let selectionMode: $$Props['selectionMode'] = undefined; + export let nodesDraggable: $$Props['nodesDraggable'] = undefined; + export let nodesConnectable: $$Props['nodesConnectable'] = undefined; + export let elementsSelectable: $$Props['elementsSelectable'] = undefined; export let snapGrid: $$Props['snapGrid'] = undefined; export let deleteKey: $$Props['deleteKey'] = undefined; export let connectionRadius: $$Props['connectionRadius'] = undefined; @@ -60,7 +63,10 @@ selectionMode, snapGrid, isValidConnection, - defaultMarkerColor + defaultMarkerColor, + nodesDraggable, + nodesConnectable, + elementsSelectable, }; Object.keys(updatableProps).forEach(prop => { diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 539de845b..653faf486 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -33,6 +33,9 @@ export type SvelteFlowProps = DOMAttributes & { selectionMode?: SelectionMode; snapGrid?: SnapGrid; defaultMarkerColor?: string; + nodesDraggable?: boolean; + nodesConnectable?: boolean; + elementsSelectable?: boolean; class?: string; style?: string; diff --git a/packages/svelte/src/lib/plugins/Controls/Controls.svelte b/packages/svelte/src/lib/plugins/Controls/Controls.svelte index 3501b156d..c3d734501 100644 --- a/packages/svelte/src/lib/plugins/Controls/Controls.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Controls.svelte @@ -17,7 +17,9 @@ export let showFitView: $$Props['showFitView'] = true; export let showInteractive: $$Props['showInteractive'] = true; - const { zoomIn, zoomOut, fitView, transform, minZoom, maxZoom } = useStore(); + const { + zoomIn, zoomOut, fitView, transform, minZoom, maxZoom, nodesDraggable, nodesConnectable, elementsSelectable + } = useStore(); const isInteractive = true; $: minZoomReached = $transform[2] <= $minZoom; @@ -36,12 +38,9 @@ }; const onToggleInteractivity = () => { - // store.setState({ - // nodesDraggable: !isInteractive, - // nodesConnectable: !isInteractive, - // elementsSelectable: !isInteractive, - // }); - // onInteractiveChange?.(!isInteractive); + nodesDraggable.set(!isInteractive); + nodesConnectable.set(!isInteractive); + elementsSelectable.set(!isInteractive); }; diff --git a/packages/svelte/src/lib/store/edges-layouted.ts b/packages/svelte/src/lib/store/edges-layouted.ts index f26a34493..36db500d8 100644 --- a/packages/svelte/src/lib/store/edges-layouted.ts +++ b/packages/svelte/src/lib/store/edges-layouted.ts @@ -7,57 +7,64 @@ import type { EdgeLayouted } from '$lib/types'; import type { SvelteFlowStoreState } from './types'; export function getEdgesLayouted(store: SvelteFlowStoreState) { - return derived([store.edges, store.nodes], ([edges, nodes]) => { - return edges.reduce((res, edge) => { - const sourceNode = nodes.find((node) => node.id === edge.source); - const targetNode = nodes.find((node) => node.id === edge.target); - const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(sourceNode); - const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(targetNode); - - if (!sourceIsValid || !targetIsValid) { - return res; - } + return derived( + [store.edges, store.nodes, store.elementsSelectable], + ([edges, nodes, elementsSelectable]) => { + return edges.reduce((res, edge) => { + const sourceNode = nodes.find((node) => node.id === edge.source); + const targetNode = nodes.find((node) => node.id === edge.target); + const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(sourceNode); + const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(targetNode); + + if (!sourceIsValid || !targetIsValid) { + return res; + } + + const edgeType = edge.type || 'default'; + + const targetNodeHandles = targetHandleBounds!.target; + const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); + const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); + const sourcePosition = sourceHandle?.position || Position.Bottom; + const targetPosition = targetHandle?.position || Position.Top; + + if (!sourceHandle || !targetHandle) { + return res; + } + + const { sourceX, sourceY, targetX, targetY } = getEdgePositions( + sourceNodeRect, + sourceHandle, + sourcePosition, + targetNodeRect, + targetHandle, + targetPosition + ); - const edgeType = edge.type || 'default'; + // we nee to do this to match the types + const sourceHandleId = edge.sourceHandle; + const targetHandleId = edge.targetHandle; + const selectable = !!( + edge.selectable || + (elementsSelectable && typeof edge.selectable === 'undefined') + ); - const targetNodeHandles = targetHandleBounds!.target; - const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); - const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); - const sourcePosition = sourceHandle?.position || Position.Bottom; - const targetPosition = targetHandle?.position || Position.Top; + res.push({ + ...edge, + selectable, + type: edgeType, + sourceX, + sourceY, + targetX, + targetY, + sourcePosition, + targetPosition, + sourceHandleId, + targetHandleId + } as EdgeLayouted); - if (!sourceHandle || !targetHandle) { return res; - } - - const { sourceX, sourceY, targetX, targetY } = getEdgePositions( - sourceNodeRect, - sourceHandle, - sourcePosition, - targetNodeRect, - targetHandle, - targetPosition - ); - - // we nee to do this to match the types - const sourceHandleId = edge.sourceHandle; - const targetHandleId = edge.targetHandle; - - res.push({ - ...edge, - selectable: edge.selectable || typeof edge.selectable === 'undefined', - type: edgeType, - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - sourceHandleId, - targetHandleId - } as EdgeLayouted); - - return res; - }, []); - }); + }, []); + } + ); } diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 96b8dfe7f..c8cbdc3f7 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -332,9 +332,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { connectionPath: getConnectionPath(store), markers: derived( [store.edges, store.defaultMarkerColor, store.flowId], - ([edges, defaultColor, id]) => { - return createMarkerIds(edges, { defaultColor, id }); - } + ([edges, defaultColor, id]) => createMarkerIds(edges, { defaultColor, id }) ), // actions diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index a11d2a29c..79890fe3d 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -82,6 +82,9 @@ export const initialStoreState = { connectionRadius: writable(25), connectionLineType: writable(ConnectionLineType.Bezier), isValidConnection: writable(() => true), + nodesDraggable: writable(true), + nodesConnectable: writable(true), + elementsSelectable: writable(true), markers: readable([]), defaultMarkerColor: writable('#b1b1b7') }; diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 6a5ced4f5..411b5929e 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -67,6 +67,7 @@ export type EdgeProps = Pick< | 'targetPosition' | 'animated' | 'selected' + | 'selectable' | 'label' | 'labelStyle' | 'interactionWidth' diff --git a/packages/system/src/types/edges.ts b/packages/system/src/types/edges.ts index 3b9e4e294..b4e95a35c 100644 --- a/packages/system/src/types/edges.ts +++ b/packages/system/src/types/edges.ts @@ -9,6 +9,7 @@ export type BaseEdge = { animated?: boolean; hidden?: boolean; deletable?: boolean; + selectable?: boolean; data?: EdgeData; selected?: boolean; markerStart?: EdgeMarkerType; From d8ef041737781cc92997746d35ebfb9c2fc78c92 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 22 May 2023 15:54:19 +0200 Subject: [PATCH 0070/1093] refactor(react): use vanilla helpers for zoom and pan --- .../core/src/container/ZoomPane/index.tsx | 294 ++++----------- packages/core/src/store/initialState.ts | 2 +- packages/core/src/types/store.ts | 3 +- packages/svelte/src/lib/actions/zoom/index.ts | 121 +++++- .../svelte/src/lib/container/Pane/Pane.svelte | 8 +- .../container/SvelteFlow/SvelteFlow.svelte | 5 +- .../src/lib/container/SvelteFlow/types.ts | 9 +- .../svelte/src/lib/container/Zoom/Zoom.svelte | 29 +- .../svelte/src/lib/container/Zoom/types.ts | 8 + .../src/lib/plugins/Controls/Controls.svelte | 10 +- packages/system/src/types/general.ts | 3 +- packages/utils/src/index.ts | 1 + packages/utils/src/panzoom.ts | 352 ++++++++++++++++++ 13 files changed, 594 insertions(+), 251 deletions(-) create mode 100644 packages/svelte/src/lib/container/Zoom/types.ts create mode 100644 packages/utils/src/panzoom.ts diff --git a/packages/core/src/container/ZoomPane/index.tsx b/packages/core/src/container/ZoomPane/index.tsx index cfe79418b..4d8025a69 100644 --- a/packages/core/src/container/ZoomPane/index.tsx +++ b/packages/core/src/container/ZoomPane/index.tsx @@ -1,10 +1,17 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { useEffect, useRef } from 'react'; -import { zoom, zoomIdentity, type D3ZoomEvent } from 'd3-zoom'; -import { select, pointer } from 'd3-selection'; import { shallow } from 'zustand/shallow'; -import { clamp } from '@reactflow/utils'; -import { CoordinateExtent, PanOnScrollMode, type Viewport } from '@reactflow/system'; +import { + initPanZoom, + createPanOnScrollHandler, + createZoomOnScrollHandler, + createFilter, + createPanZoomStartHandler, + ZoomPanValues, + createPanZoomHandler, + createPanZoomEndHandler, +} from '@reactflow/utils'; +import { PanOnScrollMode, Transform } from '@reactflow/system'; import useKeyPress from '../../hooks/useKeyPress'; import useResizeHandler from '../../hooks/useResizeHandler'; @@ -23,20 +30,6 @@ type ZoomPaneProps = Omit< | 'selectionOnDrag' >; -const viewChanged = (prevViewport: Viewport, eventViewport: any): boolean => - prevViewport.x !== eventViewport.x || prevViewport.y !== eventViewport.y || prevViewport.zoom !== eventViewport.k; - -const eventToFlowTransform = (eventViewport: any): Viewport => ({ - x: eventViewport.x, - y: eventViewport.y, - zoom: eventViewport.k, -}); - -const isWrappedWithClass = (event: any, className: string | undefined) => event.target.closest(`.${className}`); - -const isRightClickPan = (panOnDrag: FlowRendererProps['panOnDrag'], usedButton: number) => - usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2); - const selector = (s: ReactFlowState) => ({ d3Zoom: s.d3Zoom, d3Selection: s.d3Selection, @@ -67,40 +60,36 @@ const ZoomPane = ({ noWheelClassName, noPanClassName, }: ZoomPaneProps) => { - const timerId = useRef>(); const store = useStoreApi(); - const isZoomingOrPanning = useRef(false); - const zoomedWithRightMouseButton = useRef(false); const zoomPane = useRef(null); - const prevTransform = useRef({ x: 0, y: 0, zoom: 0 }); const { d3Zoom, d3Selection, d3ZoomHandler, userSelectionActive } = useStore(selector, shallow); const zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode); - const mouseButton = useRef(0); + + const zoomPanValues = useRef({ + isZoomingOrPanning: false, + zoomedWithRightMouseButton: false, + prevTransform: { x: 0, y: 0, zoom: 0 }, + mouseButton: 0, + timerId: undefined, + }); useResizeHandler(zoomPane); useEffect(() => { if (zoomPane.current) { - const bbox = zoomPane.current.getBoundingClientRect(); - const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent); - const selection = select(zoomPane.current as Element).call(d3ZoomInstance); - const updatedTransform = zoomIdentity - .translate(defaultViewport.x, defaultViewport.y) - .scale(clamp(defaultViewport.zoom, minZoom, maxZoom)); - const extent: CoordinateExtent = [ - [0, 0], - [bbox.width, bbox.height], - ]; - - const constrainedTransform = d3ZoomInstance.constrain()(updatedTransform, extent, translateExtent); - d3ZoomInstance.transform(selection, constrainedTransform); + const { d3ZoomInstance, d3Selection, d3ZoomHandler, transform } = initPanZoom({ + domNode: zoomPane.current, + minZoom, + maxZoom, + translateExtent, + defaultViewport, + }); store.setState({ d3Zoom: d3ZoomInstance, - d3Selection: selection, - d3ZoomHandler: selection.on('wheel.zoom'), - // we need to pass transform because zoom handler is not registered when we set the initial transform - transform: [constrainedTransform.x, constrainedTransform.y, constrainedTransform.k], + d3Selection, + d3ZoomHandler, + transform, domNode: zoomPane.current.closest('.react-flow') as HTMLDivElement, }); } @@ -109,46 +98,22 @@ const ZoomPane = ({ useEffect(() => { if (d3Selection && d3Zoom) { if (panOnScroll && !zoomActivationKeyPressed && !userSelectionActive) { - d3Selection.on('wheel.zoom', (event: any) => { - if (isWrappedWithClass(event, noWheelClassName)) { - return false; - } - event.preventDefault(); - event.stopImmediatePropagation(); - - const currentZoom = d3Selection.property('__zoom').k || 1; - - if (event.ctrlKey && zoomOnPinch) { - const point = pointer(event); - // taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js - const pinchDelta = -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * 10; - const zoom = currentZoom * Math.pow(2, pinchDelta); - d3Zoom.scaleTo(d3Selection, zoom, point); - - return; - } - - // increase scroll speed in firefox - // firefox: deltaMode === 1; chrome: deltaMode === 0 - const deltaNormalize = event.deltaMode === 1 ? 20 : 1; - const deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize; - const deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize; - - d3Zoom.translateBy( - d3Selection, - -(deltaX / currentZoom) * panOnScrollSpeed, - -(deltaY / currentZoom) * panOnScrollSpeed - ); - }, { passive: false }); - } else if (typeof d3ZoomHandler !== 'undefined') { - d3Selection.on('wheel.zoom', function (event: any, d: any) { - if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) { - return null; - } - - event.preventDefault(); - d3ZoomHandler.call(this, event, d); - }, { passive: false }); + const panOnScrollHandler = createPanOnScrollHandler({ + noWheelClassName, + d3Selection, + d3Zoom, + panOnScrollMode, + panOnScrollSpeed, + zoomOnPinch, + }); + d3Selection.on('wheel.zoom', panOnScrollHandler, { passive: false }); + } else if (d3ZoomHandler !== null) { + const zoomOnScrollHandler = createZoomOnScrollHandler({ + noWheelClassName, + preventScrolling, + d3ZoomHandler, + }); + d3Selection.on('wheel.zoom', zoomOnScrollHandler, { passive: false }); } } }, [ @@ -166,162 +131,63 @@ const ZoomPane = ({ useEffect(() => { if (d3Zoom) { - d3Zoom.on('start', (event: D3ZoomEvent) => { - if (!event.sourceEvent) { - return null; - } - - // we need to remember it here, because it's always 0 in the "zoom" event - mouseButton.current = event.sourceEvent.button; - - const { onViewportChangeStart } = store.getState(); - isZoomingOrPanning.current = true; - - if (event.sourceEvent?.type === 'mousedown') { - store.setState({ paneDragging: true }); - } - - if (onMoveStart || onViewportChangeStart) { - const flowTransform = eventToFlowTransform(event.transform); - prevTransform.current = flowTransform; - - onViewportChangeStart?.(flowTransform); - onMoveStart?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); - } + const startHandler = createPanZoomStartHandler({ + zoomPanValues: zoomPanValues.current, + setDragging: (paneDragging: boolean) => store.setState({ paneDragging }), + onMoveStart, + onViewportChangeStart: store.getState().onViewportChangeStart, }); + d3Zoom.on('start', startHandler); } }, [d3Zoom, onMoveStart]); useEffect(() => { if (d3Zoom) { - if (userSelectionActive && !isZoomingOrPanning.current) { + if (userSelectionActive && !zoomPanValues.current.isZoomingOrPanning) { d3Zoom.on('zoom', null); } else if (!userSelectionActive) { - d3Zoom.on('zoom', (event: D3ZoomEvent) => { - const { onViewportChange } = store.getState(); - store.setState({ transform: [event.transform.x, event.transform.y, event.transform.k] }); - - zoomedWithRightMouseButton.current = !!( - onPaneContextMenu && isRightClickPan(panOnDrag, mouseButton.current ?? 0) - ); - - if (onMove || onViewportChange) { - const flowTransform = eventToFlowTransform(event.transform); - - onViewportChange?.(flowTransform); - onMove?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); - } + const panZoomHandler = createPanZoomHandler({ + zoomPanValues: zoomPanValues.current, + panOnDrag, + onPaneContextMenu: !!onPaneContextMenu, + onMove, + onViewportChange: store.getState().onViewportChange, + setTransform: (transform: Transform) => store.setState({ transform }), }); + d3Zoom.on('zoom', panZoomHandler); } } }, [userSelectionActive, d3Zoom, onMove, panOnDrag, onPaneContextMenu]); useEffect(() => { if (d3Zoom) { - d3Zoom.on('end', (event: D3ZoomEvent) => { - if (!event.sourceEvent) { - return null; - } - const { onViewportChangeEnd } = store.getState(); - - isZoomingOrPanning.current = false; - store.setState({ paneDragging: false }); - - if ( - onPaneContextMenu && - isRightClickPan(panOnDrag, mouseButton.current ?? 0) && - !zoomedWithRightMouseButton.current - ) { - onPaneContextMenu(event.sourceEvent); - } - zoomedWithRightMouseButton.current = false; - - if ((onMoveEnd || onViewportChangeEnd) && viewChanged(prevTransform.current, event.transform)) { - const flowTransform = eventToFlowTransform(event.transform); - prevTransform.current = flowTransform; - - clearTimeout(timerId.current); - timerId.current = setTimeout( - () => { - onViewportChangeEnd?.(flowTransform); - onMoveEnd?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); - }, - panOnScroll ? 150 : 0 - ); - } + const panZoomEndHandler = createPanZoomEndHandler({ + zoomPanValues: zoomPanValues.current, + panOnDrag, + panOnScroll, + onPaneContextMenu, + onMoveEnd, + onViewportChangeEnd: store.getState().onViewportChangeEnd, + setDragging: (paneDragging: boolean) => store.setState({ paneDragging }), }); + d3Zoom.on('end', panZoomEndHandler); } }, [d3Zoom, panOnScroll, panOnDrag, onMoveEnd, onPaneContextMenu]); useEffect(() => { if (d3Zoom) { - d3Zoom.filter((event: any) => { - const zoomScroll = zoomActivationKeyPressed || zoomOnScroll; - const pinchZoom = zoomOnPinch && event.ctrlKey; - - if ( - event.button === 1 && - event.type === 'mousedown' && - (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge')) - ) { - return true; - } - - // if all interactions are disabled, we prevent all zoom events - if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) { - return false; - } - - // during a selection we prevent all other interactions - if (userSelectionActive) { - return false; - } - - // if zoom on double click is disabled, we prevent the double click event - if (!zoomOnDoubleClick && event.type === 'dblclick') { - return false; - } - - // if the target element is inside an element with the nowheel class, we prevent zooming - if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { - return false; - } - - // if the target element is inside an element with the nopan class, we prevent panning - if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { - return false; - } - - if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { - return false; - } - - // when there is no scroll handling enabled, we prevent all wheel events - if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') { - return false; - } - - // if the pane is not movable, we prevent dragging it with mousestart or touchstart - if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) { - return false; - } - - // if the pane is only movable using allowed clicks - if ( - Array.isArray(panOnDrag) && - !panOnDrag.includes(event.button) && - (event.type === 'mousedown' || event.type === 'touchstart') - ) { - return false; - } - - // We only allow right clicks if pan on drag is set to right click - const buttonAllowed = - (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1; - - // default filter for d3-zoom - return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed; + const filter = createFilter({ + zoomActivationKeyPressed, + panOnDrag, + zoomOnScroll, + panOnScroll, + zoomOnDoubleClick, + zoomOnPinch, + userSelectionActive, + noPanClassName, + noWheelClassName, }); + d3Zoom.filter(filter); } }, [ userSelectionActive, diff --git a/packages/core/src/store/initialState.ts b/packages/core/src/store/initialState.ts index 87d9874c9..fb67730df 100644 --- a/packages/core/src/store/initialState.ts +++ b/packages/core/src/store/initialState.ts @@ -16,7 +16,7 @@ const initialState: ReactFlowStore = { hasDefaultEdges: false, d3Zoom: null, d3Selection: null, - d3ZoomHandler: undefined, + d3ZoomHandler: null, minZoom: 0.5, maxZoom: 2, translateExtent: infiniteExtent, diff --git a/packages/core/src/types/store.ts b/packages/core/src/types/store.ts index 500800842..712ca731c 100644 --- a/packages/core/src/types/store.ts +++ b/packages/core/src/types/store.ts @@ -16,6 +16,7 @@ import { ConnectingHandle, Transform, XYPosition, + D3ZoomHandler, } from '@reactflow/system'; import type { @@ -55,7 +56,7 @@ export type ReactFlowStore = { d3Zoom: D3ZoomInstance | null; d3Selection: D3SelectionInstance | null; - d3ZoomHandler: ((this: Element, event: any, d: unknown) => void) | undefined; + d3ZoomHandler: D3ZoomHandler | null; minZoom: number; maxZoom: number; translateExtent: CoordinateExtent; diff --git a/packages/svelte/src/lib/actions/zoom/index.ts b/packages/svelte/src/lib/actions/zoom/index.ts index ddfcc3cd9..828ffe4bf 100644 --- a/packages/svelte/src/lib/actions/zoom/index.ts +++ b/packages/svelte/src/lib/actions/zoom/index.ts @@ -2,12 +2,34 @@ import type { Writable } from 'svelte/store'; import { select } from 'd3-selection'; import { zoom as d3Zoom, zoomIdentity, type D3ZoomEvent } from 'd3-zoom'; -import type { D3SelectionInstance, D3ZoomInstance, Transform, Viewport } from '@reactflow/system'; +import type { + D3SelectionInstance, + D3ZoomInstance, + OnMove, + OnMoveEnd, + OnMoveStart, + Transform, + Viewport +} from '@reactflow/system'; import { clamp } from '@reactflow/utils'; const isWrappedWithClass = (event: any, className: string | undefined) => event.target.closest(`.${className}`); +const eventToFlowTransform = (eventViewport: any): Viewport => ({ + x: eventViewport.x, + y: eventViewport.y, + zoom: eventViewport.k +}); + +const isRightClickPan = (panOnDrag: FlowRendererProps['panOnDrag'], usedButton: number) => + usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2); + +const viewChanged = (prevViewport: Viewport, eventViewport: any): boolean => + prevViewport.x !== eventViewport.x || + prevViewport.y !== eventViewport.y || + prevViewport.zoom !== eventViewport.k; + function filter(event: any, params: ZoomParams): boolean { const zoomScroll = true; const pinchZoom = true; @@ -85,10 +107,15 @@ type ZoomParams = { minZoom: number; maxZoom: number; initialViewport: Viewport; + dragging: Writable; + onMoveStart?: OnMoveStart; + onMove?: OnMove; + onMoveEnd?: OnMoveEnd; }; export default function zoom(domNode: Element, params: ZoomParams) { - const { transform, d3, minZoom, maxZoom, initialViewport } = params; + const { d3, minZoom, maxZoom, initialViewport } = params; + const d3ZoomInstance = d3Zoom().scaleExtent([minZoom, maxZoom]); const selection = select(domNode).call(d3ZoomInstance); @@ -98,31 +125,93 @@ export default function zoom(domNode: Element, params: ZoomParams) { const d3ZoomHandler = selection.on('wheel.zoom'); - d3ZoomInstance.on('zoom', (event: D3ZoomEvent) => { - transform.set([event.transform.x, event.transform.y, event.transform.k]); - }); + let mouseButton = 0; + let isZoomingOrPanning = false; + let prevTransform: Viewport = { x: 0, y: 0, zoom: 0 }; + let zoomedWithRightMouseButton = false; + let timerId: any; + + function updateZoomHandling(_params: ZoomParams) { + const { transform, dragging, onMoveStart, onMove, onMoveEnd } = _params; + d3ZoomInstance.on('start', (event: D3ZoomEvent) => { + // we need to remember it here, because it's always 0 in the "zoom" event + mouseButton = event.sourceEvent?.button || 0; + + isZoomingOrPanning = true; + + if (event.sourceEvent?.type === 'mousedown') { + dragging.set(true); + } + + if (onMoveStart) { + const flowTransform = eventToFlowTransform(event.transform); + prevTransform = flowTransform; + + onMoveStart?.((event.sourceEvent as MouseEvent | TouchEvent) || null, flowTransform); + } + }); + + d3ZoomInstance.on('zoom', (event: D3ZoomEvent) => { + transform.set([event.transform.x, event.transform.y, event.transform.k]); + + if (onMove) { + const flowTransform = eventToFlowTransform(event.transform); + + onMove?.((event.sourceEvent as MouseEvent | TouchEvent) || null, flowTransform); + } + }); + + d3ZoomInstance.on('end', (event: D3ZoomEvent) => { + isZoomingOrPanning = false; + dragging.set(false); + + if ( + //onPaneContextMenu && + isRightClickPan(panOnDrag, mouseButton ?? 0) && + !zoomedWithRightMouseButton + ) { + // onPaneContextMenu(event.sourceEvent); + } + zoomedWithRightMouseButton = false; + + if (onMoveEnd && viewChanged(prevTransform, event.transform)) { + const flowTransform = eventToFlowTransform(event.transform); + prevTransform = flowTransform; + + clearTimeout(timerId); + timerId = setTimeout( + () => { + onMoveEnd?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); + }, + panOnScroll ? 150 : 0 + ); + } + }); + + selection.on('wheel.zoom', function (event: any, d: any) { + if (isWrappedWithClass(event, 'nowheel')) { + return null; + } + + event.preventDefault(); + d3ZoomHandler!.call(this, event, d); + }); + + d3ZoomInstance.filter((event: any) => filter(event, params)); + } d3ZoomInstance.transform(selection, updatedTransform); - selection.on('wheel.zoom', function (event: any, d: any) { - if (isWrappedWithClass(event, 'nowheel')) { - return null; - } - - event.preventDefault(); - d3ZoomHandler!.call(this, event, d); - }); + updateZoomHandling(params); d3.set({ zoom: d3ZoomInstance, selection }); - d3ZoomInstance.filter((event: any) => filter(event, params)); - return { update(params: ZoomParams) { - d3ZoomInstance.filter((event: any) => filter(event, params)); + updateZoomHandling(params); } }; } diff --git a/packages/svelte/src/lib/container/Pane/Pane.svelte b/packages/svelte/src/lib/container/Pane/Pane.svelte index e45247601..4c962d6a6 100644 --- a/packages/svelte/src/lib/container/Pane/Pane.svelte +++ b/packages/svelte/src/lib/container/Pane/Pane.svelte @@ -43,22 +43,20 @@ edges, transform, dragging, + elementsSelectable, selectionRect, selectionRectMode, selectionKeyPressed, + selectionMode, resetSelectedElements, - selectionMode } = useStore(); - // @todo take from props - const elementsSelectable = true; - let container: HTMLDivElement; let containerBounds: DOMRect | null = null; let selectedNodes: Node[] = []; $: isSelecting = $selectionKeyPressed; - $: hasActiveSelection = elementsSelectable && (isSelecting || $selectionRectMode === 'user'); + $: hasActiveSelection = $elementsSelectable && (isSelecting || $selectionRectMode === 'user'); function onClick(event: MouseEvent) { dispatch('pane:click', event); diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index c1a3131e7..fe52a9558 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -33,6 +33,9 @@ export let deleteKey: $$Props['deleteKey'] = undefined; export let connectionRadius: $$Props['connectionRadius'] = undefined; export let connectionLineType: $$Props['connectionLineType'] = undefined; + export let onMoveStart: $$Props['onMoveStart'] = undefined; + export let onMove: $$Props['onMove'] = undefined; + export let onMoveEnd: $$Props['onMoveEnd'] = undefined; export let isValidConnection: $$Props['isValidConnection'] = undefined; export let defaultMarkerColor = '#b1b1b7'; @@ -111,7 +114,7 @@ {...$$restProps} > - + diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 653faf486..30ab25661 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -6,7 +6,10 @@ import type { OnConnectStartParams, Viewport, SelectionMode, - SnapGrid + SnapGrid, + OnMoveStart, + OnMove, + OnMoveEnd } from '@reactflow/system'; import type { @@ -43,6 +46,10 @@ export type SvelteFlowProps = DOMAttributes & { connectionLineType?: ConnectionLineType; isValidConnection?: IsValidConnection; + onMoveStart?: OnMoveStart; + onMove?: OnMove; + onMoveEnd?: OnMoveEnd; + 'on:node:click'?: CustomEvent; 'on:node:mouseenter'?: CustomEvent; 'on:node:mousemove'?: CustomEvent; diff --git a/packages/svelte/src/lib/container/Zoom/Zoom.svelte b/packages/svelte/src/lib/container/Zoom/Zoom.svelte index 26fa014b3..9b6bd1019 100644 --- a/packages/svelte/src/lib/container/Zoom/Zoom.svelte +++ b/packages/svelte/src/lib/container/Zoom/Zoom.svelte @@ -1,18 +1,33 @@ - -
+
diff --git a/packages/svelte/src/lib/container/Zoom/types.ts b/packages/svelte/src/lib/container/Zoom/types.ts new file mode 100644 index 000000000..20c66483a --- /dev/null +++ b/packages/svelte/src/lib/container/Zoom/types.ts @@ -0,0 +1,8 @@ +import type { OnMove, OnMoveStart, OnMoveEnd, Viewport } from '@reactflow/system'; + +export type ZoomProps = { + initialViewport?: Viewport; + onMove?: OnMove; + onMoveStart?: OnMoveStart; + onMoveEnd?: OnMoveEnd; +}; diff --git a/packages/svelte/src/lib/plugins/Controls/Controls.svelte b/packages/svelte/src/lib/plugins/Controls/Controls.svelte index c3d734501..e9e7b79ca 100644 --- a/packages/svelte/src/lib/plugins/Controls/Controls.svelte +++ b/packages/svelte/src/lib/plugins/Controls/Controls.svelte @@ -21,7 +21,7 @@ zoomIn, zoomOut, fitView, transform, minZoom, maxZoom, nodesDraggable, nodesConnectable, elementsSelectable } = useStore(); - const isInteractive = true; + $: isInteractive = $nodesDraggable || $nodesConnectable || $elementsSelectable; $: minZoomReached = $transform[2] <= $minZoom; $: maxZoomReached = $transform[2] >= $maxZoom; @@ -38,9 +38,11 @@ }; const onToggleInteractivity = () => { - nodesDraggable.set(!isInteractive); - nodesConnectable.set(!isInteractive); - elementsSelectable.set(!isInteractive); + isInteractive = !isInteractive; + + nodesDraggable.set(isInteractive); + nodesConnectable.set(isInteractive); + elementsSelectable.set(isInteractive); }; diff --git a/packages/system/src/types/general.ts b/packages/system/src/types/general.ts index cebfbe768..7c5473dfa 100644 --- a/packages/system/src/types/general.ts +++ b/packages/system/src/types/general.ts @@ -7,7 +7,7 @@ import type { HandleType } from './handles'; export type Project = (position: XYPosition) => XYPosition; -export type OnMove = (event: MouseEvent | TouchEvent, viewport: Viewport) => void; +export type OnMove = (event: MouseEvent | TouchEvent | null, viewport: Viewport) => void; export type OnMoveStart = OnMove; export type OnMoveEnd = OnMove; @@ -93,6 +93,7 @@ export type OnViewportChange = (viewport: Viewport) => void; export type D3ZoomInstance = ZoomBehavior; export type D3SelectionInstance = D3Selection; +export type D3ZoomHandler = (this: Element, event: any, d: unknown) => void; export type UpdateNodeInternals = (nodeId: string) => void; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index d4a84150c..4f66d9a4f 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,3 +1,4 @@ export * from './graph'; export * from './utils'; export * from './marker'; +export * from './panzoom'; diff --git a/packages/utils/src/panzoom.ts b/packages/utils/src/panzoom.ts new file mode 100644 index 000000000..3e3088388 --- /dev/null +++ b/packages/utils/src/panzoom.ts @@ -0,0 +1,352 @@ +import { D3ZoomEvent, zoom, zoomIdentity } from 'd3-zoom'; +import { select, pointer } from 'd3-selection'; +import { + PanOnScrollMode, + type CoordinateExtent, + type Transform, + type Viewport, + D3ZoomInstance, + D3SelectionInstance, + D3ZoomHandler, + OnMoveStart, + OnMove, + OnMoveEnd, +} from '@reactflow/system'; + +import { clamp } from './utils'; + +const viewChanged = (prevViewport: Viewport, eventViewport: any): boolean => + prevViewport.x !== eventViewport.x || prevViewport.y !== eventViewport.y || prevViewport.zoom !== eventViewport.k; + +const eventToFlowTransform = (eventViewport: any): Viewport => ({ + x: eventViewport.x, + y: eventViewport.y, + zoom: eventViewport.k, +}); + +const isWrappedWithClass = (event: any, className: string | undefined) => event.target.closest(`.${className}`); + +const isRightClickPan = (panOnDrag: boolean | number[], usedButton: number) => + usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2); + +export type InitPanZoomParams = { + domNode: Element; + minZoom: number; + maxZoom: number; + defaultViewport: Viewport; + translateExtent: CoordinateExtent; +}; + +export function initPanZoom({ domNode, minZoom, maxZoom, translateExtent, defaultViewport }: InitPanZoomParams): { + d3ZoomInstance: D3ZoomInstance; + d3Selection: D3SelectionInstance; + d3ZoomHandler: D3ZoomHandler | null; + transform: Transform; +} { + const bbox = domNode.getBoundingClientRect(); + const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent); + const d3Selection = select(domNode).call(d3ZoomInstance); + const updatedTransform = zoomIdentity + .translate(defaultViewport.x, defaultViewport.y) + .scale(clamp(defaultViewport.zoom, minZoom, maxZoom)); + const extent: CoordinateExtent = [ + [0, 0], + [bbox.width, bbox.height], + ]; + + const constrainedTransform = d3ZoomInstance.constrain()(updatedTransform, extent, translateExtent); + d3ZoomInstance.transform(d3Selection, constrainedTransform); + const d3ZoomHandler = d3Selection.on('wheel.zoom') || null; + + return { + d3ZoomInstance, + d3Selection, + d3ZoomHandler, + // we need to pass transform because zoom handler is not registered when we set the initial transform + transform: [constrainedTransform.x, constrainedTransform.y, constrainedTransform.k], + }; +} + +type PanOnScrollParams = { + noWheelClassName: string; + d3Selection: D3SelectionInstance; + d3Zoom: D3ZoomInstance; + panOnScrollMode: PanOnScrollMode; + panOnScrollSpeed: number; + zoomOnPinch: boolean; +}; + +export function createPanOnScrollHandler({ + noWheelClassName, + d3Selection, + d3Zoom, + panOnScrollMode, + panOnScrollSpeed, + zoomOnPinch, +}: PanOnScrollParams) { + return (event: any) => { + if (isWrappedWithClass(event, noWheelClassName)) { + return false; + } + event.preventDefault(); + event.stopImmediatePropagation(); + + const currentZoom = d3Selection.property('__zoom').k || 1; + + if (event.ctrlKey && zoomOnPinch) { + const point = pointer(event); + // taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js + const pinchDelta = -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * 10; + const zoom = currentZoom * Math.pow(2, pinchDelta); + d3Zoom.scaleTo(d3Selection, zoom, point); + + return; + } + + // increase scroll speed in firefox + // firefox: deltaMode === 1; chrome: deltaMode === 0 + const deltaNormalize = event.deltaMode === 1 ? 20 : 1; + const deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize; + const deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize; + + d3Zoom.translateBy( + d3Selection, + -(deltaX / currentZoom) * panOnScrollSpeed, + -(deltaY / currentZoom) * panOnScrollSpeed + ); + }; +} + +type ZoomOnScrollParams = { + noWheelClassName: string; + preventScrolling: boolean; + d3ZoomHandler: D3ZoomHandler; +}; + +export function createZoomOnScrollHandler({ noWheelClassName, preventScrolling, d3ZoomHandler }: ZoomOnScrollParams) { + return function (this: Element, event: any, d: unknown) { + if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) { + return null; + } + + event.preventDefault(); + + d3ZoomHandler.call(this, event, d); + }; +} + +export type ZoomPanValues = { + isZoomingOrPanning: boolean; + zoomedWithRightMouseButton: boolean; + prevTransform: Viewport; + mouseButton: number; + timerId: ReturnType | undefined; +}; + +export type PanZoomStartParams = { + zoomPanValues: ZoomPanValues; + setDragging: (isDragging: boolean) => void; + onMoveStart?: OnMoveStart; + onViewportChangeStart?: (viewport: Viewport) => void; +}; + +export function createPanZoomStartHandler({ + zoomPanValues, + setDragging, + onMoveStart, + onViewportChangeStart, +}: PanZoomStartParams) { + return (event: D3ZoomEvent) => { + // we need to remember it here, because it's always 0 in the "zoom" event + zoomPanValues.mouseButton = event.sourceEvent?.button || 0; + + zoomPanValues.isZoomingOrPanning = true; + + if (event.sourceEvent?.type === 'mousedown') { + setDragging(true); + } + + if (onMoveStart || onViewportChangeStart) { + const flowTransform = eventToFlowTransform(event.transform); + zoomPanValues.prevTransform = flowTransform; + + onViewportChangeStart?.(flowTransform); + onMoveStart?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); + } + }; +} + +export type PanZoomParams = { + zoomPanValues: ZoomPanValues; + panOnDrag: boolean | number[]; + onPaneContextMenu: boolean; + setTransform: (transform: Transform) => void; + onMove?: OnMove; + onViewportChange?: (viewport: Viewport) => void; +}; + +export function createPanZoomHandler({ + zoomPanValues, + panOnDrag, + onPaneContextMenu, + setTransform, + onMove, + onViewportChange, +}: PanZoomParams) { + return (event: D3ZoomEvent) => { + zoomPanValues.zoomedWithRightMouseButton = !!( + onPaneContextMenu && isRightClickPan(panOnDrag, zoomPanValues.mouseButton ?? 0) + ); + + setTransform([event.transform.x, event.transform.y, event.transform.k]); + + if (onMove || onViewportChange) { + const flowTransform = eventToFlowTransform(event.transform); + + onViewportChange?.(flowTransform); + onMove?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); + } + }; +} + +export type PanZoomEndParams = { + zoomPanValues: ZoomPanValues; + panOnDrag: boolean | number[]; + panOnScroll: boolean; + setDragging: (isDragging: boolean) => void; + onMoveEnd?: OnMoveEnd; + onViewportChangeEnd?: (viewport: Viewport) => void; + onPaneContextMenu?: (event: any) => void; +}; + +export function createPanZoomEndHandler({ + zoomPanValues, + panOnDrag, + panOnScroll, + setDragging, + onMoveEnd, + onViewportChangeEnd, + onPaneContextMenu, +}: PanZoomEndParams) { + return (event: D3ZoomEvent) => { + zoomPanValues.isZoomingOrPanning = false; + + if ( + onPaneContextMenu && + isRightClickPan(panOnDrag, zoomPanValues.mouseButton ?? 0) && + !zoomPanValues.zoomedWithRightMouseButton && + event.sourceEvent + ) { + onPaneContextMenu(event.sourceEvent); + } + zoomPanValues.zoomedWithRightMouseButton = false; + + setDragging(false); + + if ((onMoveEnd || onViewportChangeEnd) && viewChanged(zoomPanValues.prevTransform, event.transform)) { + const flowTransform = eventToFlowTransform(event.transform); + zoomPanValues.prevTransform = flowTransform; + + clearTimeout(zoomPanValues.timerId); + zoomPanValues.timerId = setTimeout( + () => { + onViewportChangeEnd?.(flowTransform); + onMoveEnd?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); + }, + panOnScroll ? 150 : 0 + ); + } + }; +} + +type FilterParams = { + zoomActivationKeyPressed: boolean; + zoomOnScroll: boolean; + zoomOnPinch: boolean; + panOnDrag: boolean | number[]; + panOnScroll: boolean; + zoomOnDoubleClick: boolean; + userSelectionActive: boolean; + noWheelClassName: string; + noPanClassName: string; +}; + +export function createFilter({ + zoomActivationKeyPressed, + zoomOnScroll, + zoomOnPinch, + panOnDrag, + panOnScroll, + zoomOnDoubleClick, + userSelectionActive, + noWheelClassName, + noPanClassName, +}: FilterParams) { + return (event: any): boolean => { + const zoomScroll = zoomActivationKeyPressed || zoomOnScroll; + const pinchZoom = zoomOnPinch && event.ctrlKey; + + if ( + event.button === 1 && + event.type === 'mousedown' && + (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge')) + ) { + return true; + } + + // if all interactions are disabled, we prevent all zoom events + if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) { + return false; + } + + // during a selection we prevent all other interactions + if (userSelectionActive) { + return false; + } + + // if zoom on double click is disabled, we prevent the double click event + if (!zoomOnDoubleClick && event.type === 'dblclick') { + return false; + } + + // if the target element is inside an element with the nowheel class, we prevent zooming + if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { + return false; + } + + // if the target element is inside an element with the nopan class, we prevent panning + if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { + return false; + } + + if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { + return false; + } + + // when there is no scroll handling enabled, we prevent all wheel events + if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') { + return false; + } + + // if the pane is not movable, we prevent dragging it with mousestart or touchstart + if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) { + return false; + } + + // if the pane is only movable using allowed clicks + if ( + Array.isArray(panOnDrag) && + !panOnDrag.includes(event.button) && + (event.type === 'mousedown' || event.type === 'touchstart') + ) { + return false; + } + + // We only allow right clicks if pan on drag is set to right click + const buttonAllowed = + (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1; + + // default filter for d3-zoom + return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed; + }; +} From 1dab08f36e9df0e053d6374e94e76ad5012c7c5d Mon Sep 17 00:00:00 2001 From: Moritz Klack Date: Wed, 31 May 2023 15:55:36 +0200 Subject: [PATCH 0071/1093] feat(utils): add vanilla drag and panzoom (#3108) * refactor(panzoom): create vanilla helper * feat(svelte): add interaction example * refactor(panzoom): cleanup * Update function-runner.ts * refactor(panzoom): cleanup * refactor(panzoom): rename functions * feat(utils): add vanilla drag helper (#3107) * feat(utils): add vanilla drag helper * refactor(drag): cleanup * refactor(drag): cleanup * chore(packages): cleanup * refactor(panzoom): cleanup and simplify --- examples/vite-app/package.json | 4 +- package.json | 5 +- .../core/src/components/Nodes/wrapNode.tsx | 3 +- .../src/components/StoreUpdater/index.tsx | 12 + .../core/src/container/FlowRenderer/index.tsx | 6 - .../core/src/container/GraphView/index.tsx | 14 +- .../core/src/container/NodeRenderer/index.tsx | 2 - .../core/src/container/ReactFlow/index.tsx | 10 +- .../core/src/container/ZoomPane/index.tsx | 185 +- packages/core/src/hooks/useDrag.ts | 72 + packages/core/src/hooks/useDrag/index.ts | 250 -- packages/core/src/hooks/useDrag/utils.ts | 162 - .../core/src/hooks/useGetPointerPosition.ts | 31 - .../core/src/hooks/useUpdateNodePositions.ts | 16 +- packages/core/src/hooks/useViewportHelper.ts | 162 +- packages/core/src/index.ts | 1 - packages/core/src/store/index.ts | 40 +- packages/core/src/store/initialState.ts | 5 +- packages/core/src/types/component-props.ts | 2 +- packages/core/src/types/nodes.ts | 1 - packages/core/src/types/store.ts | 65 +- packages/minimap/src/MiniMap.tsx | 38 +- packages/node-resizer/package.json | 1 + packages/node-resizer/src/ResizeControl.tsx | 23 +- .../example-components/Header/Header.svelte | 1 + packages/svelte/src/lib/actions/drag/index.ts | 174 +- packages/svelte/src/lib/actions/drag/utils.ts | 144 - packages/svelte/src/lib/actions/zoom/index.ts | 235 +- .../NodeSelection/NodeSelection.svelte | 5 +- .../components/NodeWrapper/NodeWrapper.svelte | 5 +- .../svelte/src/lib/container/Pane/Pane.svelte | 6 +- .../container/SvelteFlow/SvelteFlow.svelte | 64 +- .../src/lib/container/SvelteFlow/types.ts | 12 +- .../svelte/src/lib/container/Zoom/Zoom.svelte | 44 +- .../svelte/src/lib/container/Zoom/types.ts | 11 +- .../svelte/src/lib/hooks/useSvelteFlow.ts | 43 +- packages/svelte/src/lib/store/index.ts | 93 +- .../svelte/src/lib/store/initial-store.ts | 16 +- packages/svelte/src/lib/store/types.ts | 14 +- .../src/routes/interaction/+page.svelte | 215 + .../svelte/src/routes/stress/+page.svelte | 5 +- packages/system/src/types/general.ts | 13 +- packages/system/src/types/index.ts | 1 + packages/system/src/types/nodes.ts | 4 + packages/system/src/types/panzoom.ts | 56 + packages/utils/package.json | 2 + packages/utils/src/graph.ts | 117 +- packages/utils/src/index.ts | 3 +- packages/utils/src/panzoom.ts | 352 -- packages/utils/src/xydrag/XYDrag.ts | 269 ++ packages/utils/src/xydrag/index.ts | 1 + packages/utils/src/xydrag/utils.ts | 94 + packages/utils/src/xypanzoom/XYPanZoom.ts | 222 + packages/utils/src/xypanzoom/eventhandler.ts | 192 + packages/utils/src/xypanzoom/filter.ts | 93 + packages/utils/src/xypanzoom/index.ts | 1 + packages/utils/src/xypanzoom/utils.ts | 22 + pnpm-lock.yaml | 3928 ++++++----------- tooling/rollup-config/package.json | 10 +- 59 files changed, 3261 insertions(+), 4316 deletions(-) create mode 100644 packages/core/src/hooks/useDrag.ts delete mode 100644 packages/core/src/hooks/useDrag/index.ts delete mode 100644 packages/core/src/hooks/useDrag/utils.ts delete mode 100644 packages/core/src/hooks/useGetPointerPosition.ts delete mode 100644 packages/svelte/src/lib/actions/drag/utils.ts create mode 100644 packages/svelte/src/routes/interaction/+page.svelte create mode 100644 packages/system/src/types/panzoom.ts delete mode 100644 packages/utils/src/panzoom.ts create mode 100644 packages/utils/src/xydrag/XYDrag.ts create mode 100644 packages/utils/src/xydrag/index.ts create mode 100644 packages/utils/src/xydrag/utils.ts create mode 100644 packages/utils/src/xypanzoom/XYPanZoom.ts create mode 100644 packages/utils/src/xypanzoom/eventhandler.ts create mode 100644 packages/utils/src/xypanzoom/filter.ts create mode 100644 packages/utils/src/xypanzoom/index.ts create mode 100644 packages/utils/src/xypanzoom/utils.ts diff --git a/examples/vite-app/package.json b/examples/vite-app/package.json index 5b5d4762c..ff8d4877d 100644 --- a/examples/vite-app/package.json +++ b/examples/vite-app/package.json @@ -29,11 +29,11 @@ "@types/dagre": "^0.7.48", "@types/react": "^18.0.17", "@types/react-dom": "^18.0.6", - "@vitejs/plugin-react": "^3.0.1", + "@vitejs/plugin-react": "4.0.0", "cypress": "^10.6.0", "cypress-real-events": "^1.7.1", "start-server-and-test": "^1.14.0", "typescript": "^4.9.4", - "vite": "^4.0.4" + "vite": "4.3.9" } } diff --git a/package.json b/package.json index 41934922b..c462e3cad 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "devDependencies": { "@changesets/changelog-github": "^0.4.7", "@changesets/cli": "^2.25.0", - "@preconstruct/cli": "^2.2.1", "@typescript-eslint/eslint-plugin": "latest", "@typescript-eslint/parser": "latest", "autoprefixer": "^10.4.8", @@ -37,8 +36,8 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "rimraf": "^3.0.2", - "rollup": "^3.19.1", - "turbo": "^1.8.3", + "rollup": "^3.23.0", + "turbo": "^1.10.0", "typescript": "^4.9.4" } } diff --git a/packages/core/src/components/Nodes/wrapNode.tsx b/packages/core/src/components/Nodes/wrapNode.tsx index 1b021170b..06abf386a 100644 --- a/packages/core/src/components/Nodes/wrapNode.tsx +++ b/packages/core/src/components/Nodes/wrapNode.tsx @@ -40,7 +40,6 @@ export default (NodeComponent: ComponentType) => { isSelectable, isConnectable, isFocusable, - selectNodesOnDrag, sourcePosition, targetPosition, hidden, @@ -69,6 +68,7 @@ export default (NodeComponent: ComponentType) => { const onContextMenuHandler = getMouseHandler(id, store.getState, onContextMenu); const onDoubleClickHandler = getMouseHandler(id, store.getState, onDoubleClick); const onSelectNodeHandler = (event: MouseEvent) => { + const { selectNodesOnDrag } = store.getState(); if (isSelectable && (!selectNodesOnDrag || !isDraggable)) { // this handler gets called within the drag start event when selectNodesOnDrag=true handleNodeClick({ @@ -154,7 +154,6 @@ export default (NodeComponent: ComponentType) => { handleSelector: dragHandle, nodeId: id, isSelectable, - selectNodesOnDrag, }); if (hidden) { diff --git a/packages/core/src/components/StoreUpdater/index.tsx b/packages/core/src/components/StoreUpdater/index.tsx index b472c3fa9..6833f4c71 100644 --- a/packages/core/src/components/StoreUpdater/index.tsx +++ b/packages/core/src/components/StoreUpdater/index.tsx @@ -44,6 +44,9 @@ type StoreUpdaterProps = Pick< | 'onSelectionDragStart' | 'onSelectionDrag' | 'onSelectionDragStop' + | 'onMove' + | 'onMoveStart' + | 'onMoveEnd' | 'noPanClassName' | 'nodeOrigin' | 'elevateNodesOnSelect' @@ -52,6 +55,7 @@ type StoreUpdaterProps = Pick< | 'onError' | 'connectionRadius' | 'isValidConnection' + | 'selectNodesOnDrag' > & { rfId: string }; const selector = (s: ReactFlowState) => ({ @@ -124,6 +128,9 @@ const StoreUpdater = ({ onSelectionDrag, onSelectionDragStart, onSelectionDragStop, + onMoveStart, + onMove, + onMoveEnd, noPanClassName, nodeOrigin, rfId, @@ -132,6 +139,7 @@ const StoreUpdater = ({ onError, connectionRadius, isValidConnection, + selectNodesOnDrag, }: StoreUpdaterProps) => { const { setNodes, @@ -183,6 +191,9 @@ const StoreUpdater = ({ useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState); useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState); useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState); + useDirectStoreUpdater('onMove', onMove, store.setState); + useDirectStoreUpdater('onMoveStart', onMoveStart, store.setState); + useDirectStoreUpdater('onMoveEnd', onMoveEnd, store.setState); useDirectStoreUpdater('noPanClassName', noPanClassName, store.setState); useDirectStoreUpdater('nodeOrigin', nodeOrigin, store.setState); useDirectStoreUpdater('rfId', rfId, store.setState); @@ -191,6 +202,7 @@ const StoreUpdater = ({ useDirectStoreUpdater('onError', onError, store.setState); useDirectStoreUpdater('connectionRadius', connectionRadius, store.setState); useDirectStoreUpdater('isValidConnection', isValidConnection, store.setState); + useDirectStoreUpdater('selectNodesOnDrag', selectNodesOnDrag, store.setState); useStoreUpdater(nodes, setNodes); useStoreUpdater(edges, setEdges); diff --git a/packages/core/src/container/FlowRenderer/index.tsx b/packages/core/src/container/FlowRenderer/index.tsx index 98e89613e..1267eba9e 100644 --- a/packages/core/src/container/FlowRenderer/index.tsx +++ b/packages/core/src/container/FlowRenderer/index.tsx @@ -38,9 +38,6 @@ const FlowRenderer = ({ onPaneContextMenu, onPaneScroll, deleteKeyCode, - onMove, - onMoveStart, - onMoveEnd, selectionKeyCode, selectionOnDrag, selectionMode, @@ -78,9 +75,6 @@ const FlowRenderer = ({ return ( & +export type GraphViewProps = Omit< + ReactFlowProps, + 'onSelectionChange' | 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes' | 'onMove' | 'onMoveStart' | 'onMoveEnd' +> & Required< Pick< ReactFlowProps, @@ -21,7 +24,6 @@ export type GraphViewProps = Omit { yPos={posY} xPosOrigin={posOrigin.x} yPosOrigin={posOrigin.y} - selectNodesOnDrag={props.selectNodesOnDrag} onClick={props.onNodeClick} onMouseEnter={props.onNodeMouseEnter} onMouseMove={props.onNodeMouseMove} diff --git a/packages/core/src/container/ReactFlow/index.tsx b/packages/core/src/container/ReactFlow/index.tsx index d395b3fb3..dd43c43c7 100644 --- a/packages/core/src/container/ReactFlow/index.tsx +++ b/packages/core/src/container/ReactFlow/index.tsx @@ -120,7 +120,7 @@ const ReactFlow = forwardRef( nodeOrigin = initNodeOrigin, edgesFocusable, edgesUpdatable, - elementsSelectable, + elementsSelectable = true, defaultViewport = initDefaultViewport, minZoom = 0.5, maxZoom = 2, @@ -192,9 +192,6 @@ const ReactFlow = forwardRef( ( panActivationKeyCode={panActivationKeyCode} zoomActivationKeyCode={zoomActivationKeyCode} onlyRenderVisibleElements={onlyRenderVisibleElements} - selectNodesOnDrag={selectNodesOnDrag} defaultViewport={defaultViewport} translateExtent={translateExtent} minZoom={minZoom} @@ -295,6 +291,9 @@ const ReactFlow = forwardRef( onSelectionDrag={onSelectionDrag} onSelectionDragStart={onSelectionDragStart} onSelectionDragStop={onSelectionDragStop} + onMove={onMove} + onMoveStart={onMoveStart} + onMoveEnd={onMoveEnd} noPanClassName={noPanClassName} nodeOrigin={nodeOrigin} rfId={rfId} @@ -303,6 +302,7 @@ const ReactFlow = forwardRef( onError={onError} connectionRadius={connectionRadius} isValidConnection={isValidConnection} + selectNodesOnDrag={selectNodesOnDrag} /> {children} diff --git a/packages/core/src/container/ZoomPane/index.tsx b/packages/core/src/container/ZoomPane/index.tsx index 4d8025a69..27f2888f4 100644 --- a/packages/core/src/container/ZoomPane/index.tsx +++ b/packages/core/src/container/ZoomPane/index.tsx @@ -1,17 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { useEffect, useRef } from 'react'; import { shallow } from 'zustand/shallow'; -import { - initPanZoom, - createPanOnScrollHandler, - createZoomOnScrollHandler, - createFilter, - createPanZoomStartHandler, - ZoomPanValues, - createPanZoomHandler, - createPanZoomEndHandler, -} from '@reactflow/utils'; -import { PanOnScrollMode, Transform } from '@reactflow/system'; +import { XYPanZoom } from '@reactflow/utils'; +import { PanOnScrollMode, type Transform, type PanZoomInstance } from '@reactflow/system'; import useKeyPress from '../../hooks/useKeyPress'; import useResizeHandler from '../../hooks/useResizeHandler'; @@ -31,16 +22,13 @@ type ZoomPaneProps = Omit< >; const selector = (s: ReactFlowState) => ({ - d3Zoom: s.d3Zoom, - d3Selection: s.d3Selection, - d3ZoomHandler: s.d3ZoomHandler, userSelectionActive: s.userSelectionActive, + onViewportChangeStart: s.onViewportChangeStart, + onViewportChange: s.onViewportChange, + onViewportChangeEnd: s.onViewportChangeEnd, }); const ZoomPane = ({ - onMove, - onMoveStart, - onMoveEnd, onPaneContextMenu, zoomOnScroll = true, zoomOnPinch = true, @@ -48,7 +36,6 @@ const ZoomPane = ({ panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, - elementsSelectable, panOnDrag = true, defaultViewport, translateExtent, @@ -62,143 +49,83 @@ const ZoomPane = ({ }: ZoomPaneProps) => { const store = useStoreApi(); const zoomPane = useRef(null); - const { d3Zoom, d3Selection, d3ZoomHandler, userSelectionActive } = useStore(selector, shallow); + const { userSelectionActive } = useStore(selector, shallow); const zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode); - - const zoomPanValues = useRef({ - isZoomingOrPanning: false, - zoomedWithRightMouseButton: false, - prevTransform: { x: 0, y: 0, zoom: 0 }, - mouseButton: 0, - timerId: undefined, - }); + const panZoom = useRef(); useResizeHandler(zoomPane); useEffect(() => { if (zoomPane.current) { - const { d3ZoomInstance, d3Selection, d3ZoomHandler, transform } = initPanZoom({ + panZoom.current = XYPanZoom({ domNode: zoomPane.current, minZoom, maxZoom, translateExtent, - defaultViewport, + viewport: defaultViewport, + onTransformChange: (transform: Transform) => store.setState({ transform }), + onDraggingChange: (paneDragging: boolean) => store.setState({ paneDragging }), + onPanZoomStart: (event, vp) => { + const { onViewportChangeStart, onMoveStart } = store.getState(); + onMoveStart?.(event, vp); + onViewportChangeStart?.(vp); + }, + onPanZoom: (event, vp) => { + const { onViewportChange, onMove } = store.getState(); + onMove?.(event, vp); + onViewportChange?.(vp); + }, + onPanZoomEnd: (event, vp) => { + const { onViewportChangeEnd, onMoveEnd } = store.getState(); + onMoveEnd?.(event, vp); + onViewportChangeEnd?.(vp); + }, }); + const { x, y, zoom } = panZoom.current.getViewport(); + store.setState({ - d3Zoom: d3ZoomInstance, - d3Selection, - d3ZoomHandler, - transform, + panZoom: panZoom.current, + transform: [x, y, zoom], domNode: zoomPane.current.closest('.react-flow') as HTMLDivElement, }); - } - }, []); - useEffect(() => { - if (d3Selection && d3Zoom) { - if (panOnScroll && !zoomActivationKeyPressed && !userSelectionActive) { - const panOnScrollHandler = createPanOnScrollHandler({ - noWheelClassName, - d3Selection, - d3Zoom, - panOnScrollMode, - panOnScrollSpeed, - zoomOnPinch, - }); - d3Selection.on('wheel.zoom', panOnScrollHandler, { passive: false }); - } else if (d3ZoomHandler !== null) { - const zoomOnScrollHandler = createZoomOnScrollHandler({ - noWheelClassName, - preventScrolling, - d3ZoomHandler, - }); - d3Selection.on('wheel.zoom', zoomOnScrollHandler, { passive: false }); - } + return () => { + panZoom.current?.destroy(); + }; } - }, [ - userSelectionActive, - panOnScroll, - panOnScrollMode, - d3Selection, - d3Zoom, - d3ZoomHandler, - zoomActivationKeyPressed, - zoomOnPinch, - preventScrolling, - noWheelClassName, - ]); - - useEffect(() => { - if (d3Zoom) { - const startHandler = createPanZoomStartHandler({ - zoomPanValues: zoomPanValues.current, - setDragging: (paneDragging: boolean) => store.setState({ paneDragging }), - onMoveStart, - onViewportChangeStart: store.getState().onViewportChangeStart, - }); - d3Zoom.on('start', startHandler); - } - }, [d3Zoom, onMoveStart]); - - useEffect(() => { - if (d3Zoom) { - if (userSelectionActive && !zoomPanValues.current.isZoomingOrPanning) { - d3Zoom.on('zoom', null); - } else if (!userSelectionActive) { - const panZoomHandler = createPanZoomHandler({ - zoomPanValues: zoomPanValues.current, - panOnDrag, - onPaneContextMenu: !!onPaneContextMenu, - onMove, - onViewportChange: store.getState().onViewportChange, - setTransform: (transform: Transform) => store.setState({ transform }), - }); - d3Zoom.on('zoom', panZoomHandler); - } - } - }, [userSelectionActive, d3Zoom, onMove, panOnDrag, onPaneContextMenu]); - - useEffect(() => { - if (d3Zoom) { - const panZoomEndHandler = createPanZoomEndHandler({ - zoomPanValues: zoomPanValues.current, - panOnDrag, - panOnScroll, - onPaneContextMenu, - onMoveEnd, - onViewportChangeEnd: store.getState().onViewportChangeEnd, - setDragging: (paneDragging: boolean) => store.setState({ paneDragging }), - }); - d3Zoom.on('end', panZoomEndHandler); - } - }, [d3Zoom, panOnScroll, panOnDrag, onMoveEnd, onPaneContextMenu]); + }, []); useEffect(() => { - if (d3Zoom) { - const filter = createFilter({ - zoomActivationKeyPressed, - panOnDrag, - zoomOnScroll, - panOnScroll, - zoomOnDoubleClick, - zoomOnPinch, - userSelectionActive, - noPanClassName, - noWheelClassName, - }); - d3Zoom.filter(filter); - } + panZoom.current?.update({ + onPaneContextMenu, + zoomOnScroll, + zoomOnPinch, + panOnScroll, + panOnScrollSpeed, + panOnScrollMode, + zoomOnDoubleClick, + panOnDrag, + zoomActivationKeyPressed, + preventScrolling, + noPanClassName, + userSelectionActive, + noWheelClassName, + }); }, [ - userSelectionActive, - d3Zoom, + onPaneContextMenu, zoomOnScroll, zoomOnPinch, panOnScroll, + panOnScrollSpeed, + panOnScrollMode, zoomOnDoubleClick, panOnDrag, - elementsSelectable, zoomActivationKeyPressed, + preventScrolling, + noPanClassName, + userSelectionActive, + noWheelClassName, ]); return ( diff --git a/packages/core/src/hooks/useDrag.ts b/packages/core/src/hooks/useDrag.ts new file mode 100644 index 000000000..49da1e2cb --- /dev/null +++ b/packages/core/src/hooks/useDrag.ts @@ -0,0 +1,72 @@ +import { useEffect, useRef, useState, type RefObject } from 'react'; +import { XYDrag, type XYDragInstance } from '@reactflow/utils'; + +import { handleNodeClick } from '../components/Nodes/utils'; +import { useStoreApi } from './useStore'; + +type UseDragParams = { + nodeRef: RefObject; + disabled?: boolean; + noDragClassName?: string; + handleSelector?: string; + nodeId?: string; + isSelectable?: boolean; +}; + +function useDrag({ nodeRef, disabled = false, noDragClassName, handleSelector, nodeId, isSelectable }: UseDragParams) { + const store = useStoreApi(); + const [dragging, setDragging] = useState(false); + const xyDrag = useRef(); + + useEffect(() => { + if (nodeRef?.current) { + xyDrag.current = XYDrag({ + domNode: nodeRef.current, + getStoreItems: () => { + const currentStore = store.getState(); + + return { + nodes: currentStore.getNodes(), + ...store.getState(), + }; + }, + onNodeClick: () => { + if (nodeId) { + handleNodeClick({ + id: nodeId, + store, + nodeRef: nodeRef as RefObject, + }); + } + }, + onDragStart: () => { + setDragging(true); + }, + onDragStop: () => { + setDragging(false); + }, + }); + } + }, []); + + useEffect(() => { + if (disabled) { + xyDrag.current?.destroy(); + } else { + xyDrag.current?.update({ + noDragClassName, + handleSelector, + domNode: nodeRef.current as Element, + isSelectable, + nodeId, + }); + return () => { + xyDrag.current?.destroy(); + }; + } + }, [noDragClassName, handleSelector, disabled, isSelectable, nodeRef, nodeId]); + + return dragging; +} + +export default useDrag; diff --git a/packages/core/src/hooks/useDrag/index.ts b/packages/core/src/hooks/useDrag/index.ts deleted file mode 100644 index 308083099..000000000 --- a/packages/core/src/hooks/useDrag/index.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { useEffect, useRef, useState, type RefObject, type MouseEvent } from 'react'; -import { drag } from 'd3-drag'; -import { select } from 'd3-selection'; -import { calcAutoPan, getEventPosition } from '@reactflow/utils'; -import type { NodeDragItem, UseDragEvent, XYPosition } from '@reactflow/system'; - -import { useStoreApi } from '../../hooks/useStore'; -import { getDragItems, getEventHandlerParams, hasSelector, calcNextPosition } from './utils'; -import { handleNodeClick } from '../../components/Nodes/utils'; -import useGetPointerPosition from '../useGetPointerPosition'; -import type { Node, SelectionDragHandler } from '../../types'; - -export type UseDragData = { dx: number; dy: number }; - -type UseDragParams = { - nodeRef: RefObject; - disabled?: boolean; - noDragClassName?: string; - handleSelector?: string; - nodeId?: string; - isSelectable?: boolean; - selectNodesOnDrag?: boolean; -}; - -function wrapSelectionDragFunc(selectionFunc?: SelectionDragHandler) { - return (event: MouseEvent, _: Node, nodes: Node[]) => selectionFunc?.(event, nodes); -} - -function useDrag({ - nodeRef, - disabled = false, - noDragClassName, - handleSelector, - nodeId, - isSelectable, - selectNodesOnDrag, -}: UseDragParams) { - const store = useStoreApi(); - const [dragging, setDragging] = useState(false); - const dragItems = useRef([]); - const lastPos = useRef<{ x: number | null; y: number | null }>({ x: null, y: null }); - const autoPanId = useRef(0); - const containerBounds = useRef(null); - const mousePosition = useRef<{ x: number; y: number }>({ x: 0, y: 0 }); - const dragEvent = useRef(null); - const autoPanStarted = useRef(false); - - const getPointerPosition = useGetPointerPosition(); - - useEffect(() => { - if (nodeRef?.current) { - const selection = select(nodeRef.current); - - const updateNodes = ({ x, y }: XYPosition) => { - const { - nodeInternals, - onNodeDrag, - onSelectionDrag, - updateNodePositions, - nodeExtent, - snapGrid, - snapToGrid, - nodeOrigin, - onError, - } = store.getState(); - - lastPos.current = { x, y }; - - let hasChange = false; - - dragItems.current = dragItems.current.map((n) => { - const nextPosition = { x: x - n.distance.x, y: y - n.distance.y }; - - if (snapToGrid) { - nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]); - nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]); - } - - const updatedPos = calcNextPosition(n, nextPosition, nodeInternals, nodeExtent, nodeOrigin, onError); - - // we want to make sure that we only fire a change event when there is a changes - hasChange = hasChange || n.position.x !== updatedPos.position.x || n.position.y !== updatedPos.position.y; - - n.position = updatedPos.position; - n.positionAbsolute = updatedPos.positionAbsolute; - - return n; - }); - - if (!hasChange) { - return; - } - - updateNodePositions(dragItems.current, true, true); - setDragging(true); - - const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag); - - if (onDrag && dragEvent.current) { - const [currentNode, nodes] = getEventHandlerParams({ - nodeId, - dragItems: dragItems.current, - nodeInternals, - }); - onDrag(dragEvent.current as MouseEvent, currentNode, nodes); - } - }; - - const autoPan = (): void => { - if (!containerBounds.current) { - return; - } - - const [xMovement, yMovement] = calcAutoPan(mousePosition.current, containerBounds.current); - - if (xMovement !== 0 || yMovement !== 0) { - const { transform, panBy } = store.getState(); - - lastPos.current.x = (lastPos.current.x ?? 0) - xMovement / transform[2]; - lastPos.current.y = (lastPos.current.y ?? 0) - yMovement / transform[2]; - - if (panBy({ x: xMovement, y: yMovement })) { - updateNodes(lastPos.current as XYPosition); - } - } - autoPanId.current = requestAnimationFrame(autoPan); - }; - - if (disabled) { - selection.on('.drag', null); - } else { - const dragHandler = drag() - .on('start', (event: UseDragEvent) => { - const { - nodeInternals, - multiSelectionActive, - domNode, - nodesDraggable, - unselectNodesAndEdges, - onNodeDragStart, - onSelectionDragStart, - } = store.getState(); - - const onStart = nodeId ? onNodeDragStart : wrapSelectionDragFunc(onSelectionDragStart); - - if (!selectNodesOnDrag && !multiSelectionActive && nodeId) { - if (!nodeInternals.get(nodeId)?.selected) { - // we need to reset selected nodes when selectNodesOnDrag=false - unselectNodesAndEdges(); - } - } - - if (nodeId && isSelectable && selectNodesOnDrag) { - handleNodeClick({ - id: nodeId, - store, - nodeRef: nodeRef as RefObject, - }); - } - - const pointerPos = getPointerPosition(event); - lastPos.current = pointerPos; - dragItems.current = getDragItems(nodeInternals, nodesDraggable, pointerPos, nodeId); - - if (onStart && dragItems.current) { - const [currentNode, nodes] = getEventHandlerParams({ - nodeId, - dragItems: dragItems.current, - nodeInternals, - }); - onStart(event.sourceEvent as MouseEvent, currentNode, nodes); - } - - containerBounds.current = domNode?.getBoundingClientRect() || null; - mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current!); - }) - .on('drag', (event: UseDragEvent) => { - const pointerPos = getPointerPosition(event); - const { autoPanOnNodeDrag } = store.getState(); - - if (!autoPanStarted.current && autoPanOnNodeDrag) { - autoPanStarted.current = true; - autoPan(); - } - - // skip events without movement - if ( - (lastPos.current.x !== pointerPos.xSnapped || lastPos.current.y !== pointerPos.ySnapped) && - dragItems.current - ) { - dragEvent.current = event.sourceEvent as MouseEvent; - mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current!); - - updateNodes(pointerPos); - } - }) - .on('end', (event: UseDragEvent) => { - setDragging(false); - autoPanStarted.current = false; - cancelAnimationFrame(autoPanId.current); - - if (dragItems.current) { - const { updateNodePositions, nodeInternals, onNodeDragStop, onSelectionDragStop } = store.getState(); - const onStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop); - - updateNodePositions(dragItems.current, false, false); - - if (onStop) { - const [currentNode, nodes] = getEventHandlerParams({ - nodeId, - dragItems: dragItems.current, - nodeInternals, - }); - onStop(event.sourceEvent as MouseEvent, currentNode, nodes); - } - } - }) - .filter((event: MouseEvent) => { - const target = event.target as HTMLDivElement; - const isDraggable = - !event.button && - (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) && - (!handleSelector || hasSelector(target, handleSelector, nodeRef)); - - return isDraggable; - }); - - selection.call(dragHandler); - - return () => { - selection.on('.drag', null); - }; - } - } - }, [ - nodeRef, - disabled, - noDragClassName, - handleSelector, - isSelectable, - store, - nodeId, - selectNodesOnDrag, - getPointerPosition, - ]); - - return dragging; -} - -export default useDrag; diff --git a/packages/core/src/hooks/useDrag/utils.ts b/packages/core/src/hooks/useDrag/utils.ts deleted file mode 100644 index 2e3e900e8..000000000 --- a/packages/core/src/hooks/useDrag/utils.ts +++ /dev/null @@ -1,162 +0,0 @@ -import type { RefObject } from 'react'; -import { - errorMessages, - type CoordinateExtent, - type NodeDragItem, - type NodeOrigin, - type OnError, - type XYPosition, -} from '@reactflow/system'; -import { clampPosition, isNumeric, getNodePositionWithOrigin } from '@reactflow/utils'; - -import type { Node, NodeInternals } from '../../types'; - -export function isParentSelected(node: Node, nodeInternals: NodeInternals): boolean { - if (!node.parentNode) { - return false; - } - - const parentNode = nodeInternals.get(node.parentNode); - - if (!parentNode) { - return false; - } - - if (parentNode.selected) { - return true; - } - - return isParentSelected(parentNode, nodeInternals); -} - -export function hasSelector(target: Element, selector: string, nodeRef: RefObject): boolean { - let current = target; - - do { - if (current?.matches(selector)) return true; - if (current === nodeRef.current) return false; - current = current.parentElement as Element; - } while (current); - - return false; -} - -// looks for all selected nodes and created a NodeDragItem for each of them -export function getDragItems( - nodeInternals: NodeInternals, - nodesDraggable: boolean, - mousePos: XYPosition, - nodeId?: string -): NodeDragItem[] { - return Array.from(nodeInternals.values()) - .filter( - (n) => - (n.selected || n.id === nodeId) && - (!n.parentNode || !isParentSelected(n, nodeInternals)) && - (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')) - ) - .map((n) => ({ - id: n.id, - position: n.position || { x: 0, y: 0 }, - positionAbsolute: n.positionAbsolute || { x: 0, y: 0 }, - distance: { - x: mousePos.x - (n.positionAbsolute?.x ?? 0), - y: mousePos.y - (n.positionAbsolute?.y ?? 0), - }, - delta: { - x: 0, - y: 0, - }, - extent: n.extent, - parentNode: n.parentNode, - width: n.width, - height: n.height, - origin: n.origin, - })); -} - -export function calcNextPosition( - node: NodeDragItem | Node, - nextPosition: XYPosition, - nodeInternals: NodeInternals, - nodeExtent?: CoordinateExtent, - nodeOrigin: NodeOrigin = [0, 0], - onError?: OnError -): { position: XYPosition; positionAbsolute: XYPosition } { - let currentExtent = node.extent || nodeExtent; - - if (node.extent === 'parent') { - if (node.parentNode && node.width && node.height) { - const parent = nodeInternals.get(node.parentNode); - const parentOrigin = parent?.origin || nodeOrigin; - const currNodeOrigin = node.origin || nodeOrigin; - - const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, parentOrigin).positionAbsolute; - currentExtent = - parent && isNumeric(parentX) && isNumeric(parentY) && isNumeric(parent.width) && isNumeric(parent.height) - ? [ - [parentX + node.width * currNodeOrigin[0], parentY + node.height * currNodeOrigin[1]], - [ - parentX + parent.width - node.width + node.width * currNodeOrigin[0], - parentY + parent.height - node.height + node.height * currNodeOrigin[1], - ], - ] - : currentExtent; - } else { - onError?.('005', errorMessages['error005']()); - - currentExtent = nodeExtent; - } - } else if (node.extent && node.parentNode) { - const parent = nodeInternals.get(node.parentNode); - const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, parent?.origin || nodeOrigin).positionAbsolute; - currentExtent = [ - [node.extent[0][0] + parentX, node.extent[0][1] + parentY], - [node.extent[1][0] + parentX, node.extent[1][1] + parentY], - ]; - } - - let parentPosition = { x: 0, y: 0 }; - - if (node.parentNode) { - const parentNode = nodeInternals.get(node.parentNode); - parentPosition = getNodePositionWithOrigin(parentNode, parentNode?.origin || nodeOrigin).positionAbsolute; - } - - const positionAbsolute = currentExtent - ? clampPosition(nextPosition, currentExtent as CoordinateExtent) - : nextPosition; - - return { - position: { - x: positionAbsolute.x - parentPosition.x, - y: positionAbsolute.y - parentPosition.y, - }, - positionAbsolute, - }; -} - -// returns two params: -// 1. the dragged node (or the first of the list, if we are dragging a node selection) -// 2. array of selected nodes (for multi selections) -export function getEventHandlerParams({ - nodeId, - dragItems, - nodeInternals, -}: { - nodeId?: string; - dragItems: NodeDragItem[]; - nodeInternals: NodeInternals; -}): [Node, Node[]] { - const extentedDragItems: Node[] = dragItems.map((n) => { - const node = nodeInternals.get(n.id)!; - - return { - ...node, - position: n.position, - positionAbsolute: n.positionAbsolute, - }; - }); - - return [nodeId ? extentedDragItems.find((n) => n.id === nodeId)! : extentedDragItems[0], extentedDragItems]; -} diff --git a/packages/core/src/hooks/useGetPointerPosition.ts b/packages/core/src/hooks/useGetPointerPosition.ts deleted file mode 100644 index 67fdab5b2..000000000 --- a/packages/core/src/hooks/useGetPointerPosition.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { useCallback } from 'react'; -import type { UseDragEvent } from '@reactflow/system'; - -import { useStoreApi } from './useStore'; - -function useGetPointerPosition() { - const store = useStoreApi(); - - // returns the pointer position projected to the RF coordinate system - const getPointerPosition = useCallback(({ sourceEvent }: UseDragEvent) => { - const { transform, snapGrid, snapToGrid } = store.getState(); - const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX; - const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY; - - const pointerPos = { - x: (x - transform[0]) / transform[2], - y: (y - transform[1]) / transform[2], - }; - - // we need the snapped position in order to be able to skip unnecessary drag events - return { - xSnapped: snapToGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x, - ySnapped: snapToGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y, - ...pointerPos, - }; - }, []); - - return getPointerPosition; -} - -export default useGetPointerPosition; diff --git a/packages/core/src/hooks/useUpdateNodePositions.ts b/packages/core/src/hooks/useUpdateNodePositions.ts index 0ab891573..70e1a523e 100644 --- a/packages/core/src/hooks/useUpdateNodePositions.ts +++ b/packages/core/src/hooks/useUpdateNodePositions.ts @@ -1,15 +1,16 @@ import { useCallback } from 'react'; +import { calcNextPosition } from '@reactflow/utils'; import { useStoreApi } from '../hooks/useStore'; -import { calcNextPosition } from './useDrag/utils'; function useUpdateNodePositions() { const store = useStoreApi(); const updatePositions = useCallback((params: { x: number; y: number; isShiftPressed: boolean }) => { - const { nodeInternals, nodeExtent, updateNodePositions, getNodes, snapToGrid, snapGrid, onError, nodesDraggable } = + const { nodeExtent, updateNodePositions, getNodes, snapToGrid, snapGrid, onError, nodesDraggable } = store.getState(); - const selectedNodes = getNodes().filter( + const nodes = getNodes(); + const selectedNodes = nodes.filter( (n) => n.selected && (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')) ); // by default a node moves 5px on each key press, or 20px if shift is pressed @@ -30,14 +31,7 @@ function useUpdateNodePositions() { nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]); } - const { positionAbsolute, position } = calcNextPosition( - n, - nextPosition, - nodeInternals, - nodeExtent, - undefined, - onError - ); + const { positionAbsolute, position } = calcNextPosition(n, nextPosition, nodes, nodeExtent, undefined, onError); n.position = position; n.positionAbsolute = positionAbsolute; diff --git a/packages/core/src/hooks/useViewportHelper.ts b/packages/core/src/hooks/useViewportHelper.ts index 07a5a2ba2..96d47471a 100644 --- a/packages/core/src/hooks/useViewportHelper.ts +++ b/packages/core/src/hooks/useViewportHelper.ts @@ -1,104 +1,94 @@ import { useMemo } from 'react'; -import { zoomIdentity } from 'd3-zoom'; -import { shallow } from 'zustand/shallow'; -import { pointToRendererPoint, getTransformForBounds, getD3Transition, fitView } from '@reactflow/utils'; +import { pointToRendererPoint, getTransformForBounds, fitView } from '@reactflow/utils'; import type { XYPosition } from '@reactflow/system'; import { useStoreApi, useStore } from '../hooks/useStore'; import type { ViewportHelperFunctions, ReactFlowState } from '../types'; -// eslint-disable-next-line @typescript-eslint/no-empty-function -const noop = () => {}; - -const initialViewportHelper: ViewportHelperFunctions = { - zoomIn: noop, - zoomOut: noop, - zoomTo: noop, - getZoom: () => 1, - setViewport: noop, - getViewport: () => ({ x: 0, y: 0, zoom: 1 }), - fitView: () => false, - setCenter: noop, - fitBounds: noop, - project: (position: XYPosition) => position, - viewportInitialized: false, -}; - -const selector = (s: ReactFlowState) => ({ - d3Zoom: s.d3Zoom, - d3Selection: s.d3Selection, -}); +const selector = (s: ReactFlowState) => !!s.panZoom; const useViewportHelper = (): ViewportHelperFunctions => { const store = useStoreApi(); - const { d3Zoom, d3Selection } = useStore(selector, shallow); + const panZoomInitialized = useStore(selector); const viewportHelperFunctions = useMemo(() => { - if (d3Selection && d3Zoom) { - return { - zoomIn: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2), - zoomOut: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2), - zoomTo: (zoomLevel, options) => d3Zoom.scaleTo(getD3Transition(d3Selection, options?.duration), zoomLevel), - getZoom: () => store.getState().transform[2], - setViewport: (transform, options) => { - const [x, y, zoom] = store.getState().transform; - const nextTransform = zoomIdentity - .translate(transform.x ?? x, transform.y ?? y) - .scale(transform.zoom ?? zoom); - d3Zoom.transform(getD3Transition(d3Selection, options?.duration), nextTransform); - }, - getViewport: () => { - const [x, y, zoom] = store.getState().transform; - return { x, y, zoom }; - }, - fitView: (options) => { - const { getNodes, width, height, nodeOrigin, minZoom, maxZoom, d3Selection, d3Zoom } = store.getState(); - const d3Initialized = d3Selection && d3Zoom; - - if (!d3Initialized) { - return false; - } + return { + zoomIn: (options) => store.getState().panZoom?.scaleBy(1.2, { duration: options?.duration }), + zoomOut: (options) => store.getState().panZoom?.scaleBy(1 / 1.2, { duration: options?.duration }), + zoomTo: (zoomLevel, options) => store.getState().panZoom?.scaleTo(zoomLevel, { duration: options?.duration }), + getZoom: () => store.getState().transform[2], + setViewport: (viewport, options) => { + const { + transform: [tX, tY, tZoom], + panZoom, + } = store.getState(); - return fitView( - { - nodes: getNodes(), - width, - height, - nodeOrigin, - minZoom, - maxZoom, - d3Selection, - d3Zoom, - }, - options - ); - }, - setCenter: (x, y, options) => { - const { width, height, maxZoom } = store.getState(); - const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : maxZoom; - const centerX = width / 2 - x * nextZoom; - const centerY = height / 2 - y * nextZoom; - const transform = zoomIdentity.translate(centerX, centerY).scale(nextZoom); + panZoom?.setViewport( + { + x: viewport.x ?? tX, + y: viewport.y ?? tY, + zoom: viewport.zoom ?? tZoom, + }, + { duration: options?.duration } + ); + }, + getViewport: () => { + const [x, y, zoom] = store.getState().transform; + return { x, y, zoom }; + }, + fitView: (options) => { + const { getNodes, width, height, nodeOrigin, minZoom, maxZoom, panZoom } = store.getState(); - d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform); - }, - fitBounds: (bounds, options) => { - const { width, height, minZoom, maxZoom } = store.getState(); - const [x, y, zoom] = getTransformForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? 0.1); - const transform = zoomIdentity.translate(x, y).scale(zoom); + return panZoom + ? fitView( + { + nodes: getNodes(), + width, + height, + nodeOrigin, + minZoom, + maxZoom, + panZoom, + }, + options + ) + : false; + }, + setCenter: (x, y, options) => { + const { width, height, maxZoom, panZoom } = store.getState(); + const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : maxZoom; + const centerX = width / 2 - x * nextZoom; + const centerY = height / 2 - y * nextZoom; - d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform); - }, - project: (position: XYPosition) => { - const { transform, snapToGrid, snapGrid } = store.getState(); - return pointToRendererPoint(position, transform, snapToGrid, snapGrid); - }, - viewportInitialized: true, - }; - } + panZoom?.setViewport( + { + x: centerX, + y: centerY, + zoom: nextZoom, + }, + { duration: options?.duration } + ); + }, + fitBounds: (bounds, options) => { + const { width, height, minZoom, maxZoom, panZoom } = store.getState(); + const [x, y, zoom] = getTransformForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? 0.1); - return initialViewportHelper; - }, [d3Zoom, d3Selection]); + panZoom?.setViewport( + { + x, + y, + zoom, + }, + { duration: options?.duration } + ); + }, + project: (position: XYPosition) => { + const { transform, snapToGrid, snapGrid } = store.getState(); + return pointToRendererPoint(position, transform, snapToGrid, snapGrid); + }, + viewportInitialized: panZoomInitialized, + }; + }, [panZoomInitialized]); return viewportHelperFunctions; }; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index a30ca2906..a48b55e86 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -22,7 +22,6 @@ export { useStore, useStoreApi } from './hooks/useStore'; export { default as useOnViewportChange, type UseOnViewportChangeOptions } from './hooks/useOnViewportChange'; export { default as useOnSelectionChange, type UseOnSelectionChangeOptions } from './hooks/useOnSelectionChange'; export { default as useNodesInitialized, type UseNodesInitializedOptions } from './hooks/useNodesInitialized'; -export { default as useGetPointerPosition } from './hooks/useGetPointerPosition'; export { useNodeId } from './contexts/NodeIdContext'; export * from '@reactflow/edge-utils'; export * from '@reactflow/system'; diff --git a/packages/core/src/store/index.ts b/packages/core/src/store/index.ts index 7942287fd..2c31ad3d3 100644 --- a/packages/core/src/store/index.ts +++ b/packages/core/src/store/index.ts @@ -1,5 +1,4 @@ import { createStore } from 'zustand'; -import { zoomIdentity } from 'd3-zoom'; import { clampPosition, getDimensions, fitView, getHandleBounds } from '@reactflow/utils'; import { internalsSymbol, @@ -62,8 +61,7 @@ const createRFStore = () => height, minZoom, maxZoom, - d3Selection, - d3Zoom, + panZoom, } = get(); const viewportNode = domNode?.querySelector('.react-flow__viewport'); @@ -115,15 +113,13 @@ const createRFStore = () => fitViewOnInitDone || (fitViewOnInit && !fitViewOnInitDone && - !!d3Zoom && - !!d3Selection && + !!panZoom && fitView( { nodes: Array.from(nodeInternals.values()), width, height, - d3Zoom, - d3Selection, + panZoom, minZoom, maxZoom, nodeOrigin, @@ -230,19 +226,19 @@ const createRFStore = () => }); }, setMinZoom: (minZoom: number) => { - const { d3Zoom, maxZoom } = get(); - d3Zoom?.scaleExtent([minZoom, maxZoom]); + const { panZoom, maxZoom } = get(); + panZoom?.setScaleExtent([minZoom, maxZoom]); set({ minZoom }); }, setMaxZoom: (maxZoom: number) => { - const { d3Zoom, minZoom } = get(); - d3Zoom?.scaleExtent([minZoom, maxZoom]); + const { panZoom, minZoom } = get(); + panZoom?.setScaleExtent([minZoom, maxZoom]); set({ maxZoom }); }, setTranslateExtent: (translateExtent: CoordinateExtent) => { - get().d3Zoom?.translateExtent(translateExtent); + get().panZoom?.setTranslateExtent(translateExtent); set({ translateExtent }); }, @@ -277,26 +273,28 @@ const createRFStore = () => }); }, panBy: (delta: XYPosition): boolean => { - const { transform, width, height, d3Zoom, d3Selection, translateExtent } = get(); + const { transform, width, height, panZoom, translateExtent } = get(); - if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) { + if (!panZoom || (!delta.x && !delta.y)) { return false; } - const nextTransform = zoomIdentity.translate(transform[0] + delta.x, transform[1] + delta.y).scale(transform[2]); - const extent: CoordinateExtent = [ [0, 0], [width, height], ]; - const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, translateExtent); - d3Zoom.transform(d3Selection, constrainedTransform); + const constrainedTransform = panZoom.setViewportConstrained( + { x: transform[0] + delta.x, y: transform[1] + delta.y, zoom: transform[2] }, + extent, + translateExtent + ); const transformChanged = - transform[0] !== constrainedTransform.x || - transform[1] !== constrainedTransform.y || - transform[2] !== constrainedTransform.k; + !!constrainedTransform && + (transform[0] !== constrainedTransform.x || + transform[1] !== constrainedTransform.y || + transform[2] !== constrainedTransform.k); return transformChanged; }, diff --git a/packages/core/src/store/initialState.ts b/packages/core/src/store/initialState.ts index fb67730df..28e0d4654 100644 --- a/packages/core/src/store/initialState.ts +++ b/packages/core/src/store/initialState.ts @@ -14,9 +14,7 @@ const initialState: ReactFlowStore = { onEdgesChange: null, hasDefaultNodes: false, hasDefaultEdges: false, - d3Zoom: null, - d3Selection: null, - d3ZoomHandler: null, + panZoom: null, minZoom: 0.5, maxZoom: 2, translateExtent: infiniteExtent, @@ -48,6 +46,7 @@ const initialState: ReactFlowStore = { fitViewOnInit: false, fitViewOnInitDone: false, fitViewOnInitOptions: undefined, + selectNodesOnDrag: true, multiSelectionActive: false, diff --git a/packages/core/src/types/component-props.ts b/packages/core/src/types/component-props.ts index a66cf966e..f8d05a208 100644 --- a/packages/core/src/types/component-props.ts +++ b/packages/core/src/types/component-props.ts @@ -88,7 +88,7 @@ export type ReactFlowProps = HTMLAttributes & { onSelectionChange?: OnSelectionChangeFunc; onPaneScroll?: (event?: WheelEvent) => void; onPaneClick?: (event: ReactMouseEvent) => void; - onPaneContextMenu?: (event: ReactMouseEvent) => void; + onPaneContextMenu?: (event: ReactMouseEvent | MouseEvent) => void; onPaneMouseEnter?: (event: ReactMouseEvent) => void; onPaneMouseMove?: (event: ReactMouseEvent) => void; onPaneMouseLeave?: (event: ReactMouseEvent) => void; diff --git a/packages/core/src/types/nodes.ts b/packages/core/src/types/nodes.ts index 9ecf93ab4..4f19ac31e 100644 --- a/packages/core/src/types/nodes.ts +++ b/packages/core/src/types/nodes.ts @@ -28,7 +28,6 @@ export type WrapNodeProps = Pick< isSelectable: boolean; isDraggable: boolean; isFocusable: boolean; - selectNodesOnDrag: boolean; onClick?: NodeMouseHandler; onDoubleClick?: NodeMouseHandler; onMouseEnter?: NodeMouseHandler; diff --git a/packages/core/src/types/store.ts b/packages/core/src/types/store.ts index 712ca731c..dbd7741d3 100644 --- a/packages/core/src/types/store.ts +++ b/packages/core/src/types/store.ts @@ -1,26 +1,29 @@ import { ConnectionMode, - ConnectionStatus, - CoordinateExtent, - D3SelectionInstance, - D3ZoomInstance, - HandleType, - NodeDimensionUpdate, - NodeDragItem, - NodeOrigin, - OnConnect, - OnError, - OnViewportChange, - SelectionRect, - SnapGrid, - ConnectingHandle, - Transform, - XYPosition, - D3ZoomHandler, + type ConnectionStatus, + type CoordinateExtent, + type HandleType, + type NodeDimensionUpdate, + type UpdateNodePositions, + type NodeOrigin, + type OnConnect, + type OnError, + type OnViewportChange, + type SelectionRect, + type SnapGrid, + type ConnectingHandle, + type Transform, + type XYPosition, + type PanZoomInstance, + type PanBy, + OnNodeDrag, + OnSelectionDrag, + OnMoveStart, + OnMove, + OnMoveEnd, } from '@reactflow/system'; import type { - NodeDragHandler, Edge, Node, NodeChange, @@ -29,7 +32,6 @@ import type { NodeInternals, OnConnectStart, OnConnectEnd, - SelectionDragHandler, DefaultEdgeOptions, FitViewOptions, OnNodesDelete, @@ -54,9 +56,7 @@ export type ReactFlowStore = { paneDragging: boolean; noPanClassName: string; - d3Zoom: D3ZoomInstance | null; - d3Selection: D3SelectionInstance | null; - d3ZoomHandler: D3ZoomHandler | null; + panZoom: PanZoomInstance | null; minZoom: number; maxZoom: number; translateExtent: CoordinateExtent; @@ -84,6 +84,7 @@ export type ReactFlowStore = { edgesUpdatable: boolean; elementsSelectable: boolean; elevateNodesOnSelect: boolean; + selectNodesOnDrag: boolean; multiSelectionActive: boolean; @@ -91,13 +92,17 @@ export type ReactFlowStore = { connectionEndHandle: ConnectingHandle | null; connectionClickStartHandle: ConnectingHandle | null; - onNodeDragStart?: NodeDragHandler; - onNodeDrag?: NodeDragHandler; - onNodeDragStop?: NodeDragHandler; + onNodeDragStart?: OnNodeDrag; + onNodeDrag?: OnNodeDrag; + onNodeDragStop?: OnNodeDrag; - onSelectionDragStart?: SelectionDragHandler; - onSelectionDrag?: SelectionDragHandler; - onSelectionDragStop?: SelectionDragHandler; + onSelectionDragStart?: OnSelectionDrag; + onSelectionDrag?: OnSelectionDrag; + onSelectionDragStop?: OnSelectionDrag; + + onMoveStart?: OnMoveStart; + onMove?: OnMove; + onMoveEnd?: OnMoveEnd; onConnect?: OnConnect; onConnectStart?: OnConnectStart; @@ -138,7 +143,7 @@ export type ReactFlowActions = { setEdges: (edges: Edge[]) => void; setDefaultNodesAndEdges: (nodes?: Node[], edges?: Edge[]) => void; updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; - updateNodePositions: (nodeDragItems: NodeDragItem[] | Node[], positionChanged: boolean, dragging: boolean) => void; + updateNodePositions: UpdateNodePositions; resetSelectedElements: () => void; unselectNodesAndEdges: (params?: UnselectNodesAndEdgesParams) => void; addSelectedNodes: (nodeIds: string[]) => void; @@ -150,7 +155,7 @@ export type ReactFlowActions = { cancelConnection: () => void; reset: () => void; triggerNodeChanges: (changes: NodeChange[]) => void; - panBy: (delta: XYPosition) => boolean; + panBy: PanBy; }; export type ReactFlowState = ReactFlowStore & ReactFlowActions; diff --git a/packages/minimap/src/MiniMap.tsx b/packages/minimap/src/MiniMap.tsx index 818777eef..dcefec439 100644 --- a/packages/minimap/src/MiniMap.tsx +++ b/packages/minimap/src/MiniMap.tsx @@ -1,11 +1,9 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { memo, useEffect, useRef } from 'react'; -import type { MouseEvent } from 'react'; +import { memo, useEffect, useRef, type MouseEvent } from 'react'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; -import { zoom, zoomIdentity } from 'd3-zoom'; -import type { D3ZoomEvent } from 'd3-zoom'; +import { type D3ZoomEvent, zoom } from 'd3-zoom'; import { select, pointer } from 'd3-selection'; import { useStore, @@ -15,8 +13,9 @@ import { useStoreApi, getNodePositionWithOrigin, CoordinateExtent, + type ReactFlowState, + type Rect, } from '@reactflow/core'; -import type { ReactFlowState, Rect } from '@reactflow/core'; import MiniMapNode from './MiniMapNode'; import type { MiniMapProps, GetMiniMapNodeAttribute } from './types'; @@ -68,7 +67,7 @@ function MiniMap({ zoomable = false, ariaLabel = 'React Flow mini map', inversePan = false, - zoomStep = 10 + zoomStep = 10, }: MiniMapProps) { const store = useStoreApi(); const svg = useRef(null); @@ -99,9 +98,9 @@ function MiniMap({ const selection = select(svg.current as Element); const zoomHandler = (event: D3ZoomEvent) => { - const { transform, d3Selection, d3Zoom } = store.getState(); + const { transform, panZoom } = store.getState(); - if (event.sourceEvent.type !== 'wheel' || !d3Selection || !d3Zoom) { + if (event.sourceEvent.type !== 'wheel' || !panZoom) { return; } @@ -109,15 +108,15 @@ function MiniMap({ -event.sourceEvent.deltaY * (event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) * zoomStep; - const zoom = transform[2] * Math.pow(2, pinchDelta); + const nextZoom = transform[2] * Math.pow(2, pinchDelta); - d3Zoom.scaleTo(d3Selection, zoom); + panZoom.scaleTo(nextZoom); }; const panHandler = (event: D3ZoomEvent) => { - const { transform, d3Selection, d3Zoom, translateExtent, width, height } = store.getState(); + const { transform, panZoom, translateExtent, width, height } = store.getState(); - if (event.sourceEvent.type !== 'mousemove' || !d3Selection || !d3Zoom) { + if (event.sourceEvent.type !== 'mousemove' || !panZoom) { return; } @@ -132,10 +131,15 @@ function MiniMap({ [width, height], ]; - const nextTransform = zoomIdentity.translate(position.x, position.y).scale(transform[2]); - const constrainedTransform = d3Zoom.constrain()(nextTransform, extent, translateExtent); - - d3Zoom.transform(d3Selection, constrainedTransform); + panZoom.setViewportConstrained( + { + x: position.x, + y: position.y, + zoom: transform[2], + }, + extent, + translateExtent + ); }; const zoomAndPanHandler = zoom() @@ -144,7 +148,7 @@ function MiniMap({ // @ts-ignore .on('zoom.wheel', zoomable ? zoomHandler : null); - selection.call(zoomAndPanHandler); + selection.call(zoomAndPanHandler, {}); return () => { selection.on('zoom', null); diff --git a/packages/node-resizer/package.json b/packages/node-resizer/package.json index b40e0ead1..9c6d779e4 100644 --- a/packages/node-resizer/package.json +++ b/packages/node-resizer/package.json @@ -39,6 +39,7 @@ }, "dependencies": { "@reactflow/core": "workspace:^11.6.0", + "@reactflow/utils": "workspace:*", "classcat": "^5.0.4", "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", diff --git a/packages/node-resizer/src/ResizeControl.tsx b/packages/node-resizer/src/ResizeControl.tsx index 6757b2a31..715186058 100644 --- a/packages/node-resizer/src/ResizeControl.tsx +++ b/packages/node-resizer/src/ResizeControl.tsx @@ -2,15 +2,8 @@ import { useRef, useEffect, memo } from 'react'; import cc from 'classcat'; import { drag } from 'd3-drag'; import { select } from 'd3-selection'; -import { - useStoreApi, - useGetPointerPosition, - NodeChange, - NodeDimensionChange, - useNodeId, - NodePositionChange, - clamp, -} from '@reactflow/core'; +import { getPointerPosition } from '@reactflow/utils'; +import { useStoreApi, NodeChange, NodeDimensionChange, useNodeId, NodePositionChange, clamp } from '@reactflow/core'; import { ResizeDragEvent, ResizeControlProps, ResizeControlLineProps, ResizeControlVariant } from './types'; import { getDirection } from './utils'; @@ -48,7 +41,6 @@ function ResizeControl({ const resizeControlRef = useRef(null); const startValues = useRef(initStartValues); const prevValues = useRef(initPrevValues); - const getPointerPosition = useGetPointerPosition(); const defaultPosition = variant === ResizeControlVariant.Line ? 'right' : 'bottom-right'; const controlPosition = position ?? defaultPosition; @@ -66,8 +58,9 @@ function ResizeControl({ const dragHandler = drag() .on('start', (event: ResizeDragEvent) => { - const node = store.getState().nodeInternals.get(id); - const { xSnapped, ySnapped } = getPointerPosition(event); + const { nodeInternals, transform, snapGrid, snapToGrid } = store.getState(); + const node = nodeInternals.get(id); + const { xSnapped, ySnapped } = getPointerPosition(event.sourceEvent, { transform, snapGrid, snapToGrid }); prevValues.current = { width: node?.width ?? 0, @@ -86,8 +79,8 @@ function ResizeControl({ onResizeStart?.(event, { ...prevValues.current }); }) .on('drag', (event: ResizeDragEvent) => { - const { nodeInternals, triggerNodeChanges } = store.getState(); - const { xSnapped, ySnapped } = getPointerPosition(event); + const { nodeInternals, transform, snapGrid, snapToGrid, triggerNodeChanges } = store.getState(); + const { xSnapped, ySnapped } = getPointerPosition(event.sourceEvent, { transform, snapGrid, snapToGrid }); const node = nodeInternals.get(id); if (node) { @@ -221,7 +214,7 @@ function ResizeControl({ return () => { selection.on('.drag', null); }; - }, [id, controlPosition, minWidth, minHeight, maxWidth, maxHeight, keepAspectRatio, getPointerPosition]); + }, [id, controlPosition, minWidth, minHeight, maxWidth, maxHeight, keepAspectRatio]); const positionClassNames = controlPosition.split('-'); const colorStyleProp = variant === ResizeControlVariant.Line ? 'borderColor' : 'backgroundColor'; diff --git a/packages/svelte/src/example-components/Header/Header.svelte b/packages/svelte/src/example-components/Header/Header.svelte index 39f8a8785..f8a65431f 100644 --- a/packages/svelte/src/example-components/Header/Header.svelte +++ b/packages/svelte/src/example-components/Header/Header.svelte @@ -5,6 +5,7 @@ 'customnode', 'drag-n-drop', 'edges', + 'interaction', 'overview', 'stress', 'subflows', diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 851557530..0dd06d256 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -1,136 +1,70 @@ import { get } from 'svelte/store'; -import { drag as d3Drag, type D3DragEvent, type SubjectPosition } from 'd3-drag'; -import { select } from 'd3-selection'; -import type { XYPosition, CoordinateExtent } from '@reactflow/system'; +import { XYDrag } from '@reactflow/utils'; -import { getDragItems, hasSelector, calcNextPosition } from './utils'; import type { SvelteFlowStore } from '$lib/store/types'; -export type UseDragData = { dx: number; dy: number }; -export type UseDragEvent = D3DragEvent; -export type NodeDragItem = { - id: string; - position: XYPosition; - positionAbsolute: XYPosition; - // distance from the mouse cursor to the node when start dragging - distance: XYPosition; - width?: number | null; - height?: number | null; - extent?: 'parent' | CoordinateExtent; - parentNode?: string; - dragging?: boolean; -}; - type UseDragParams = { + store: SvelteFlowStore; + disabled?: boolean; + noDragClassName?: string; handleSelector?: string; nodeId?: string; - updateNodePositions: (dragItems: NodeDragItem[], d: boolean, p: boolean) => void; - nodes: SvelteFlowStore['nodes']; - transform: SvelteFlowStore['transform']; - snapGrid: SvelteFlowStore['snapGrid']; + isSelectable?: boolean; }; -export default function drag( - nodeRef: Element, - { - handleSelector, - nodeId, - updateNodePositions, - nodes, - transform: transformStore, - snapGrid: snapGridStore - }: UseDragParams -) { - let dragging = false; - let dragItems: NodeDragItem[] = []; - let lastPos: { x: number | null; y: number | null } = { x: null, y: null }; - - const selection = select(nodeRef); - - const getPointerPosition = ({ sourceEvent }: UseDragEvent) => { - const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX; - const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY; - const transform = get(transformStore); - const snapGrid = get(snapGridStore); - - const pointerPos = { - x: (x - transform[0]) / transform[2], - y: (y - transform[1]) / transform[2] - }; - - // we need the snapped position in order to be able to skip unnecessary drag events - return { - xSnapped: snapGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x, - ySnapped: snapGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y, - ...pointerPos - }; - }; - - const updateNodes = ({ x, y }: XYPosition) => { - let hasChange = false; - const snapGrid = get(snapGridStore); - - dragItems = dragItems.map((n) => { - const nextPosition = { x: x - n.distance.x, y: y - n.distance.y }; - - if (snapGrid) { - nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]); - nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]); - } - - const updatedPos = calcNextPosition(n, nextPosition, get(nodes)); - - // we want to make sure that we only fire a change event when there is a changes - hasChange = - hasChange || - n.position.x !== updatedPos.position.x || - n.position.y !== updatedPos.position.y; - - n.position = updatedPos.position; - n.positionAbsolute = updatedPos.positionAbsolute; - - return n; - }); +export default function drag(domNode: Element, params: UseDragParams) { + const dragInstance = XYDrag({ + domNode, + getStoreItems: () => { + const { store } = params; + const snapGrid = get(store.snapGrid); + + return { + nodes: get(store.nodes), + edges: get(store.edges), + nodeExtent: get(store.nodeExtent), + snapGrid: snapGrid ? snapGrid : [0, 0], + snapToGrid: !!snapGrid, + nodeOrigin: [0, 0], + multiSelectionActive: false, + domNode: get(store.domNode), + transform: get(store.transform), + autoPanOnNodeDrag: get(store.autoPanOnNodeDrag), + nodesDraggable: get(store.nodesDraggable), + selectNodesOnDrag: get(store.selectNodesOnDrag), + unselectNodesAndEdges: store.unselectNodesAndEdges, + updateNodePositions: store.updateNodePositions, + panBy: store.panBy + }; + }, + onNodeClick: () => { + console.log('node click'); + } + }); - if (!hasChange) { + function updateDrag(domNode: Element, params: UseDragParams) { + if (params.disabled) { + dragInstance.destroy(); return; } - updateNodePositions(dragItems, true, true); - dragging = true; - }; - - const dragHandler = d3Drag() - .on('start', (event: UseDragEvent) => { - const pointerPos = getPointerPosition(event); - lastPos = pointerPos; - dragItems = getDragItems(get(nodes), pointerPos, nodeId); - }) - .on('drag', (event: UseDragEvent) => { - const pointerPos = getPointerPosition(event); - - // skip events without movement - if ((lastPos.x !== pointerPos.xSnapped || lastPos.y !== pointerPos.ySnapped) && dragItems) { - lastPos = pointerPos; - updateNodes(pointerPos); - } - }) - .on('end', (event: UseDragEvent) => { - dragging = false; - - if (dragItems) { - updateNodePositions(dragItems, false, false); - } - }) - .filter((event: MouseEvent) => { - const target = event.target as HTMLDivElement; - const isDraggable = - !event.button && - !hasSelector(target, '.nodrag', nodeRef) && - (!handleSelector || hasSelector(target, handleSelector, nodeRef)); - - return isDraggable; + dragInstance.update({ + domNode, + noDragClassName: params.noDragClassName, + handleSelector: params.handleSelector, + nodeId: params.nodeId, + isSelectable: params.isSelectable }); + } - selection.call(dragHandler); + updateDrag(domNode, params); + + return { + update(params: UseDragParams) { + updateDrag(domNode, params); + }, + destroy() { + dragInstance.destroy(); + } + }; } diff --git a/packages/svelte/src/lib/actions/drag/utils.ts b/packages/svelte/src/lib/actions/drag/utils.ts deleted file mode 100644 index 476da9d6e..000000000 --- a/packages/svelte/src/lib/actions/drag/utils.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { - errorMessages, - type CoordinateExtent, - type NodeDragItem, - type NodeOrigin, - type XYPosition -} from '@reactflow/system'; -import { clampPosition, devWarn, getNodePositionWithOrigin, isNumeric } from '@reactflow/utils'; - -import type { Node } from '$lib/types'; - -export function isParentSelected(node: Node, nodes: Node[]): boolean { - if (!node.parentNode) { - return false; - } - - const parentNode = nodes.find((n) => n.id === node.parentNode); - - if (!parentNode) { - return false; - } - - if (parentNode.selected) { - return true; - } - - return isParentSelected(parentNode, nodes); -} - -export function hasSelector(target: Element, selector: string, domNode: Element): boolean { - let current = target; - - do { - if (current?.matches(selector)) return true; - if (current === domNode) return false; - current = current.parentElement as Element; - } while (current); - - return false; -} - -// looks for all selected nodes and created a NodeDragItem for each of them -export function getDragItems(nodes: Node[], mousePos: XYPosition, nodeId?: string): NodeDragItem[] { - return nodes - .filter( - (n) => - (n.selected || n.id === nodeId) && - (n.draggable || n.draggable === undefined) && - (!n.parentNode || !isParentSelected(n, nodes)) - ) - .map((n) => ({ - id: n.id, - position: n.position ? { ...n.position } : { x: 0, y: 0 }, - positionAbsolute: n.positionAbsolute ? { ...n.positionAbsolute } : { x: 0, y: 0 }, - distance: { - x: mousePos.x - (n.positionAbsolute?.x ?? 0), - y: mousePos.y - (n.positionAbsolute?.y ?? 0) - }, - delta: { - x: 0, - y: 0 - }, - extent: n.extent, - parentNode: n.parentNode, - width: n.width, - height: n.height - })); -} - -export function calcNextPosition( - node: NodeDragItem | Node, - nextPosition: XYPosition, - nodes: Node[], - nodeExtent?: CoordinateExtent -): { position: XYPosition; positionAbsolute: XYPosition } { - let currentExtent = node.extent || nodeExtent; - - if (node.extent === 'parent') { - if (node.parentNode && node.width && node.height) { - const parent = nodes.find((n) => n.id === node.parentNode); - const parentOrigin = parent?.origin || [0, 0]; - const nodeOrigin = node.origin || [0, 0]; - const { x: parentX, y: parentY } = getNodePositionWithOrigin( - parent, - parentOrigin - ).positionAbsolute; - console.log({ - parentX, - parentY, - parentW: parent?.width, - parentH: parent?.height, - nodeW: node.width, - nodeH: node.height, - parentOrigin: parentOrigin[0] - }); - currentExtent = - parent && - isNumeric(parentX) && - isNumeric(parentY) && - isNumeric(parent.width) && - isNumeric(parent.height) - ? [ - [parentX + node.width * nodeOrigin[0], parentY + node.height * nodeOrigin[1]], - [ - parentX + parent.width - node.width + node.width * nodeOrigin[0], - parentY + parent.height - node.height + node.height * nodeOrigin[1] - ] - ] - : currentExtent; - } else { - devWarn('005', errorMessages['error005']()); - currentExtent = nodeExtent; - } - } else if (node.extent && node.parentNode) { - const parent = nodes.find((n) => n.id === node.parentNode); - const { x: parentX, y: parentY } = getNodePositionWithOrigin( - parent, - parent?.origin || [0, 0] - ).positionAbsolute; - currentExtent = [ - [node.extent[0][0] + parentX, node.extent[0][1] + parentY], - [node.extent[1][0] + parentX, node.extent[1][1] + parentY] - ]; - } - - let parentPosition = { x: 0, y: 0 }; - - if (node.parentNode) { - const parent = nodes.find((n) => n.id === node.parentNode); - parentPosition = getNodePositionWithOrigin(parent, parent?.origin || [0, 0]).positionAbsolute; - } - - const positionAbsolute = currentExtent - ? clampPosition(nextPosition, currentExtent as CoordinateExtent) - : nextPosition; - - return { - position: { - x: positionAbsolute.x - parentPosition.x, - y: positionAbsolute.y - parentPosition.y - }, - positionAbsolute - }; -} diff --git a/packages/svelte/src/lib/actions/zoom/index.ts b/packages/svelte/src/lib/actions/zoom/index.ts index 828ffe4bf..ebd1f9bb6 100644 --- a/packages/svelte/src/lib/actions/zoom/index.ts +++ b/packages/svelte/src/lib/actions/zoom/index.ts @@ -1,217 +1,62 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ import type { Writable } from 'svelte/store'; -import { select } from 'd3-selection'; -import { zoom as d3Zoom, zoomIdentity, type D3ZoomEvent } from 'd3-zoom'; import type { - D3SelectionInstance, - D3ZoomInstance, - OnMove, - OnMoveEnd, - OnMoveStart, + CoordinateExtent, + OnPanZoom, + PanOnScrollMode, + PanZoomInstance, Transform, Viewport } from '@reactflow/system'; -import { clamp } from '@reactflow/utils'; - -const isWrappedWithClass = (event: any, className: string | undefined) => - event.target.closest(`.${className}`); - -const eventToFlowTransform = (eventViewport: any): Viewport => ({ - x: eventViewport.x, - y: eventViewport.y, - zoom: eventViewport.k -}); - -const isRightClickPan = (panOnDrag: FlowRendererProps['panOnDrag'], usedButton: number) => - usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2); - -const viewChanged = (prevViewport: Viewport, eventViewport: any): boolean => - prevViewport.x !== eventViewport.x || - prevViewport.y !== eventViewport.y || - prevViewport.zoom !== eventViewport.k; - -function filter(event: any, params: ZoomParams): boolean { - const zoomScroll = true; - const pinchZoom = true; - - if ( - event.button === 1 && - event.type === 'mousedown' && - (isWrappedWithClass(event, 'svelte-flow__node') || - isWrappedWithClass(event, 'svelte-flow__edge')) - ) { - return true; - } - - // if all interactions are disabled, we prevent all zoom events - // if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) { - // return false; - // } - // // during a selection we prevent all other interactions - if (params.selecting) { - return false; - } - - // // if zoom on double click is disabled, we prevent the double click event - // if (!zoomOnDoubleClick && event.type === 'dblclick') { - // return false; - // } - - // // if the target element is inside an element with the nowheel class, we prevent zooming - // if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { - // return false; - // } - - // // if the target element is inside an element with the nopan class, we prevent panning - if (isWrappedWithClass(event, 'nopan') && event.type !== 'wheel') { - return false; - } - - // if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { - // return false; - // } - - // // when there is no scroll handling enabled, we prevent all wheel events - // if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') { - // return false; - // } - - // // if the pane is not movable, we prevent dragging it with mousestart or touchstart - // if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) { - // return false; - // } - - // // if the pane is only movable using allowed clicks - // if ( - // Array.isArray(panOnDrag) && - // !panOnDrag.includes(event.button) && - // (event.type === 'mousedown' || event.type === 'touchstart') - // ) { - // return false; - // } - - // // We only allow right clicks if pan on drag is set to right click - // const buttonAllowed = - // (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || - // !event.button || - // event.button <= 1; - - // default filter for d3-zoom - return ((!event.ctrlKey || event.type === 'wheel') && !event.button) || event.button <= 1; -} +import { XYPanZoom } from '@reactflow/utils'; type ZoomParams = { transform: Writable; - selecting: boolean; - d3: Writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>; minZoom: number; maxZoom: number; initialViewport: Viewport; dragging: Writable; - onMoveStart?: OnMoveStart; - onMove?: OnMove; - onMoveEnd?: OnMoveEnd; + onPanZoomStart?: OnPanZoom; + onPanZoom?: OnPanZoom; + onPanZoomEnd?: OnPanZoom; + onPaneContextMenu?: (event: MouseEvent) => void; + translateExtent: CoordinateExtent; + panZoom: Writable; + zoomOnScroll: boolean; + zoomOnPinch: boolean; + zoomOnDoubleClick: boolean; + panOnScroll: boolean; + panOnDrag: boolean | number[]; + panOnScrollSpeed: number; + panOnScrollMode: PanOnScrollMode; + zoomActivationKeyPressed: boolean; + preventScrolling: boolean; + noPanClassName: string; + noWheelClassName: string; + userSelectionActive: boolean; }; export default function zoom(domNode: Element, params: ZoomParams) { - const { d3, minZoom, maxZoom, initialViewport } = params; - - const d3ZoomInstance = d3Zoom().scaleExtent([minZoom, maxZoom]); - const selection = select(domNode).call(d3ZoomInstance); - - const updatedTransform = zoomIdentity - .translate(initialViewport.x, initialViewport.y) - .scale(clamp(initialViewport.zoom, minZoom, maxZoom)); - - const d3ZoomHandler = selection.on('wheel.zoom'); - - let mouseButton = 0; - let isZoomingOrPanning = false; - let prevTransform: Viewport = { x: 0, y: 0, zoom: 0 }; - let zoomedWithRightMouseButton = false; - let timerId: any; - - function updateZoomHandling(_params: ZoomParams) { - const { transform, dragging, onMoveStart, onMove, onMoveEnd } = _params; - d3ZoomInstance.on('start', (event: D3ZoomEvent) => { - // we need to remember it here, because it's always 0 in the "zoom" event - mouseButton = event.sourceEvent?.button || 0; - - isZoomingOrPanning = true; - - if (event.sourceEvent?.type === 'mousedown') { - dragging.set(true); - } - - if (onMoveStart) { - const flowTransform = eventToFlowTransform(event.transform); - prevTransform = flowTransform; - - onMoveStart?.((event.sourceEvent as MouseEvent | TouchEvent) || null, flowTransform); - } - }); - - d3ZoomInstance.on('zoom', (event: D3ZoomEvent) => { - transform.set([event.transform.x, event.transform.y, event.transform.k]); - - if (onMove) { - const flowTransform = eventToFlowTransform(event.transform); - - onMove?.((event.sourceEvent as MouseEvent | TouchEvent) || null, flowTransform); - } - }); - - d3ZoomInstance.on('end', (event: D3ZoomEvent) => { - isZoomingOrPanning = false; - dragging.set(false); - - if ( - //onPaneContextMenu && - isRightClickPan(panOnDrag, mouseButton ?? 0) && - !zoomedWithRightMouseButton - ) { - // onPaneContextMenu(event.sourceEvent); - } - zoomedWithRightMouseButton = false; - - if (onMoveEnd && viewChanged(prevTransform, event.transform)) { - const flowTransform = eventToFlowTransform(event.transform); - prevTransform = flowTransform; - - clearTimeout(timerId); - timerId = setTimeout( - () => { - onMoveEnd?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); - }, - panOnScroll ? 150 : 0 - ); - } - }); - - selection.on('wheel.zoom', function (event: any, d: any) { - if (isWrappedWithClass(event, 'nowheel')) { - return null; - } - - event.preventDefault(); - d3ZoomHandler!.call(this, event, d); - }); - - d3ZoomInstance.filter((event: any) => filter(event, params)); - } - - d3ZoomInstance.transform(selection, updatedTransform); - - updateZoomHandling(params); - - d3.set({ - zoom: d3ZoomInstance, - selection + const { panZoom, minZoom, maxZoom, initialViewport, transform, dragging, translateExtent } = + params; + + const panZoomInstance = XYPanZoom({ + domNode, + minZoom, + maxZoom, + translateExtent, + viewport: initialViewport, + onTransformChange: transform.set, + onDraggingChange: dragging.set }); + const { x, y, zoom } = panZoomInstance.getViewport(); + transform.set([x, y, zoom]); + panZoom.set(panZoomInstance); + + panZoomInstance.update(params); return { update(params: ZoomParams) { - updateZoomHandling(params); + panZoomInstance.update(params); } }; } diff --git a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte index 6c7396d36..bdb88bf8e 100644 --- a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte @@ -5,7 +5,8 @@ import { Selection } from '$lib/components/Selection'; import drag from '$lib/actions/drag'; - const { selectionRectMode, nodes, transform, snapGrid, updateNodePositions } = useStore(); + const store = useStore(); + const { selectionRectMode, nodes } = store; $: selectedNodes = $nodes.filter((n) => n.selected); $: rect = getRectOfNodes(selectedNodes); @@ -15,7 +16,7 @@
import { onMount } from 'svelte'; import cc from 'classcat'; + import { PanOnScrollMode, type CoordinateExtent, type Viewport } from '@reactflow/system'; import { Zoom } from '$lib/container/Zoom'; import { Pane } from '$lib/container/Pane'; - import { Viewport } from '$lib/container/Viewport'; + import { Viewport as ViewportComponent } from '$lib/container/Viewport'; import { NodeRenderer } from '$lib/container/NodeRenderer'; import { EdgeRenderer } from '$lib/container/EdgeRenderer'; import { UserSelection } from '$lib/components/UserSelection'; @@ -14,6 +15,7 @@ import { Attribution } from '$lib/components/Attribution'; import { useStore } from '$lib/store'; import type { SvelteFlowProps } from './types'; + import type { EdgeTypes, NodeTypes } from '$lib/types'; type $$Props = SvelteFlowProps; @@ -21,7 +23,7 @@ export let fitView: $$Props['fitView'] = undefined; export let minZoom: $$Props['minZoom'] = undefined; export let maxZoom: $$Props['maxZoom'] = undefined; - export let initialViewport: $$Props['initialViewport'] = undefined; + export let initialViewport: Viewport = { x:0, y: 0, zoom: 1 }; export let nodeTypes: $$Props['nodeTypes'] = undefined; export let edgeTypes: $$Props['edgeTypes'] = undefined; export let selectionKey: $$Props['selectionKey'] = undefined; @@ -37,6 +39,15 @@ export let onMove: $$Props['onMove'] = undefined; export let onMoveEnd: $$Props['onMoveEnd'] = undefined; export let isValidConnection: $$Props['isValidConnection'] = undefined; + export let translateExtent: $$Props['translateExtent'] = undefined; + export let panOnScrollMode: PanOnScrollMode = PanOnScrollMode.Free; + export let preventScrolling: boolean = true; + export let zoomOnScroll: boolean = true; + export let zoomOnDoubleClick: boolean = true; + export let zoomOnPinch: boolean = true; + export let panOnScroll: boolean = false; + export let panOnDrag: boolean | number[] = true; + export let defaultMarkerColor = '#b1b1b7'; export let style: $$Props['style'] = undefined; @@ -53,6 +64,15 @@ store.height.set(height); store.domNode.set(domNode); + updateStore({ + nodeTypes, + edgeTypes, + minZoom, + maxZoom, + translateExtent, + fitView + }); + return () => { store.reset(); } @@ -81,7 +101,14 @@ }) } - $: { + function updateStore({ nodeTypes, edgeTypes, minZoom, maxZoom, translateExtent, fitView }: { + nodeTypes?: NodeTypes, + edgeTypes?: EdgeTypes, + minZoom?: number, + maxZoom?: number, + translateExtent?: CoordinateExtent, + fitView?: boolean + }) { if (nodeTypes !== undefined) { store.setNodeTypes(nodeTypes); } @@ -98,10 +125,23 @@ store.setMaxZoom(maxZoom); } + if (translateExtent !== undefined) { + store.setTranslateExtent(translateExtent) + } + if (fitView !== undefined) { store.fitViewOnInit.set(fitView); } } + + $: updateStore({ + nodeTypes, + edgeTypes, + minZoom, + maxZoom, + translateExtent, + fitView + })
- + - +
@@ -130,7 +182,7 @@ on:connect:end /> - + diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 30ab25661..ed078da9b 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -9,7 +9,9 @@ import type { SnapGrid, OnMoveStart, OnMove, - OnMoveEnd + OnMoveEnd, + CoordinateExtent, + PanOnScrollMode } from '@reactflow/system'; import type { @@ -39,6 +41,14 @@ export type SvelteFlowProps = DOMAttributes & { nodesDraggable?: boolean; nodesConnectable?: boolean; elementsSelectable?: boolean; + translateExtent?: CoordinateExtent; + panOnScrollMode?: PanOnScrollMode; + preventScrolling?: boolean; + zoomOnScroll?: boolean; + zoomOnDoubleClick?: boolean; + zoomOnPinch?: boolean; + panOnScroll?: boolean; + panOnDrag?: boolean | number[]; class?: string; style?: string; diff --git a/packages/svelte/src/lib/container/Zoom/Zoom.svelte b/packages/svelte/src/lib/container/Zoom/Zoom.svelte index 9b6bd1019..e8d9893ce 100644 --- a/packages/svelte/src/lib/container/Zoom/Zoom.svelte +++ b/packages/svelte/src/lib/container/Zoom/Zoom.svelte @@ -1,32 +1,60 @@
diff --git a/packages/svelte/src/lib/container/Zoom/types.ts b/packages/svelte/src/lib/container/Zoom/types.ts index 20c66483a..f4cc524c9 100644 --- a/packages/svelte/src/lib/container/Zoom/types.ts +++ b/packages/svelte/src/lib/container/Zoom/types.ts @@ -1,8 +1,15 @@ -import type { OnMove, OnMoveStart, OnMoveEnd, Viewport } from '@reactflow/system'; +import type { OnMoveStart, OnMove, OnMoveEnd, PanOnScrollMode, Viewport } from '@reactflow/system'; export type ZoomProps = { - initialViewport?: Viewport; + initialViewport: Viewport; + panOnScrollMode: PanOnScrollMode; onMove?: OnMove; onMoveStart?: OnMoveStart; onMoveEnd?: OnMoveEnd; + preventScrolling: boolean; + zoomOnScroll: boolean; + zoomOnDoubleClick: boolean; + zoomOnPinch: boolean; + panOnScroll: boolean; + panOnDrag: boolean | number[]; }; diff --git a/packages/svelte/src/lib/hooks/useSvelteFlow.ts b/packages/svelte/src/lib/hooks/useSvelteFlow.ts index d24c299f6..ed4e9f1cf 100644 --- a/packages/svelte/src/lib/hooks/useSvelteFlow.ts +++ b/packages/svelte/src/lib/hooks/useSvelteFlow.ts @@ -7,12 +7,11 @@ import type { XYPosition, ZoomInOut } from '@reactflow/system'; -import { zoomIdentity } from 'd3-zoom'; +import { pointToRendererPoint } from '@reactflow/utils'; import { useStore } from '$lib/store'; import type { FitViewOptions } from '$lib/types'; import type { SvelteFlowStore } from '$lib/store/types'; -import { getD3Transition, pointToRendererPoint } from '@reactflow/utils'; export function useSvelteFlow(): { zoomIn: ZoomInOut; @@ -38,7 +37,7 @@ export function useSvelteFlow(): { width, height, maxZoom, - d3, + panZoom, nodes, edges } = useStore(); @@ -62,23 +61,20 @@ export function useSvelteFlow(): { zoomIn, zoomOut, setZoom: (zoomLevel, options) => { - const { zoom, selection } = get(d3); - - if (zoom && selection) { - zoom.scaleTo(getD3Transition(selection, options?.duration), zoomLevel); - } + get(panZoom)?.scaleTo(zoomLevel, { duration: options?.duration }); }, getZoom: () => get(transform)[2], setViewport: (viewport, options) => { const [x, y, zoom] = get(transform); - const { zoom: d3Zoom, selection } = get(d3); - if (d3Zoom && selection) { - const nextTransform = zoomIdentity - .translate(viewport.x ?? x, viewport.y ?? y) - .scale(viewport.zoom ?? zoom); - d3Zoom.transform(getD3Transition(selection, options?.duration), nextTransform); - } + get(panZoom)?.setViewport( + { + x: viewport.x ?? x, + y: viewport.y ?? y, + zoom: viewport.zoom ?? zoom + }, + { duration: options?.duration } + ); }, getViewport: () => { const [x, y, zoom] = get(transform); @@ -88,16 +84,17 @@ export function useSvelteFlow(): { const _width = get(width); const _height = get(height); const _maxZoom = get(maxZoom); - const { zoom, selection } = get(d3); - if (zoom && selection) { - const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : _maxZoom; - const centerX = _width / 2 - x * nextZoom; - const centerY = _height / 2 - y * nextZoom; - const transform = zoomIdentity.translate(centerX, centerY).scale(nextZoom); + const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : _maxZoom; - zoom.transform(getD3Transition(selection, options?.duration), transform); - } + get(panZoom)?.setViewport( + { + x: _width / 2 - x * nextZoom, + y: _height / 2 - y * nextZoom, + zoom: nextZoom + }, + { duration: options?.duration } + ); }, fitView, project: (position: XYPosition) => { diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index c8cbdc3f7..838deab32 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -1,8 +1,7 @@ import { getContext } from 'svelte'; import { derived, get } from 'svelte/store'; -import { zoomIdentity } from 'd3-zoom'; import { - type NodeDragItem, + type UpdateNodePositions, type NodeDimensionUpdate, internalsSymbol, type ViewportHelperFunctionOptions, @@ -13,10 +12,10 @@ import { import { createMarkerIds, fitView as fitViewUtil, - getD3Transition, getDimensions, getElementsToRemove, - getHandleBounds + getHandleBounds, + infiniteExtent } from '@reactflow/utils'; import { addEdge as addEdgeUtil } from '$lib/utils'; @@ -60,7 +59,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { store.edges.set(addEdgeUtil(edgeParams, edges)); } - function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) { + const updateNodePositions: UpdateNodePositions = (nodeDragItems, dragging = false) => { store.nodes.update((nds) => { return nds.map((n) => { const nodeDragItem = nodeDragItems.find((ndi) => ndi.id === n.id); @@ -77,7 +76,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { return n; }); }); - } + }; function updateNodeDimensions(updates: NodeDimensionUpdate[]) { const viewportNode = document?.querySelector('.svelte-flow__viewport'); @@ -123,21 +122,21 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { return node; }); - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + const panZoom = get(store.panZoom); const fitViewOnInitDone = get(store.fitViewOnInitDone) || - (get(store.fitViewOnInit) && !!d3Zoom && !!d3Selection && fitView({ nodes: nextNodes })); + (get(store.fitViewOnInit) && !!panZoom && fitView({ nodes: nextNodes })); store.fitViewOnInitDone.set(fitViewOnInitDone); store.nodes.set(nextNodes); } function zoomBy(factor: number, options?: ViewportHelperFunctionOptions) { - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + const panZoom = get(store.panZoom); - if (d3Zoom && d3Selection) { - d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), factor); + if (panZoom) { + panZoom.scaleBy(factor, options); } } @@ -150,28 +149,36 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { } function setMinZoom(minZoom: number) { - const d3Zoom = get(store.d3).zoom; - - if (d3Zoom) { - d3Zoom?.scaleExtent([minZoom, get(store.maxZoom)]); + const panZoom = get(store.panZoom); + if (panZoom) { + panZoom.setScaleExtent([minZoom, get(store.maxZoom)]); store.minZoom.set(minZoom); } } function setMaxZoom(maxZoom: number) { - const d3Zoom = get(store.d3).zoom; - if (d3Zoom) { - d3Zoom?.scaleExtent([get(store.minZoom), maxZoom]); + const panZoom = get(store.panZoom); + if (panZoom) { + panZoom.setScaleExtent([get(store.minZoom), maxZoom]); store.maxZoom.set(maxZoom); } } + function setTranslateExtent(extent: CoordinateExtent) { + const panZoom = get(store.panZoom); + + if (panZoom) { + panZoom.setTranslateExtent(extent); + store.translateExtent.set(extent); + } + } + function fitView(options?: FitViewOptions) { - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + const panZoom = get(store.panZoom); - if (!d3Zoom || !d3Selection) { + if (!panZoom) { return false; } @@ -184,8 +191,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { height: get(store.height), minZoom: 0.2, maxZoom: 2, - d3Selection, - d3Zoom, + panZoom, nodeOrigin: [0, 0] }, {} @@ -203,7 +209,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { return item; } - function resetSelectedElements() { + function unselectNodesAndEdges() { store.nodes.update((ns) => ns.map(resetSelectedItem)); store.edges.update((es) => es.map(resetSelectedItem)); } @@ -267,29 +273,35 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { } function panBy(delta: XYPosition) { - const { zoom: d3Zoom, selection: d3Selection } = get(store.d3); + const panZoom = get(store.panZoom); const transform = get(store.transform); const width = get(store.width); const height = get(store.height); - if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) { - return; + if (!panZoom || (!delta.x && !delta.y)) { + return false; } - const nextTransform = zoomIdentity - .translate(transform[0] + delta.x, transform[1] + delta.y) - .scale(transform[2]); + const nextViewport = panZoom.setViewportConstrained( + { + x: transform[0] + delta.x, + y: transform[1] + delta.y, + zoom: transform[2] + }, + [ + [0, 0], + [width, height] + ], + infiniteExtent + ); - const extent: CoordinateExtent = [ - [0, 0], - [width, height] - ]; + const transformChanged = + !!nextViewport && + (nextViewport.x !== transform[0] || + nextViewport.y !== transform[1] || + nextViewport.k !== transform[2]); - const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, [ - [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY], - [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY] - ]); - d3Zoom.transform(d3Selection, constrainedTransform); + return transformChanged; } function updateConnection(connectionUpdate: Partial | null) { @@ -319,7 +331,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { store.snapGrid.set(null); store.isValidConnection.set(() => true); - resetSelectedElements(); + unselectNodesAndEdges(); cancelConnection(); } @@ -346,7 +358,8 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { fitView, setMinZoom, setMaxZoom, - resetSelectedElements, + setTranslateExtent, + unselectNodesAndEdges, addSelectedNodes, addSelectedEdges, panBy, diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 79890fe3d..9dd586e57 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -1,14 +1,14 @@ import { readable, writable } from 'svelte/store'; import { SelectionMode, - type D3ZoomInstance, - type D3SelectionInstance, ConnectionMode, ConnectionLineType, type SelectionRect, type Transform, type SnapGrid, - type MarkerProps + type MarkerProps, + type PanZoomInstance, + type CoordinateExtent } from '@reactflow/system'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; @@ -27,6 +27,7 @@ import type { Node, IsValidConnection } from '$lib/types'; +import { infiniteExtent } from '@reactflow/utils'; export const initConnectionData = { nodeId: null, @@ -58,12 +59,12 @@ export const initialStoreState = { width: writable(500), minZoom: writable(0.5), maxZoom: writable(2), + nodeExtent: writable(infiniteExtent), + translateExtent: writable(infiniteExtent), + autoPanOnNodeDrag: writable(true), fitViewOnInit: writable(false), fitViewOnInitDone: writable(false), - d3: writable<{ zoom: D3ZoomInstance | null; selection: D3SelectionInstance | null }>({ - zoom: null, - selection: null - }), + panZoom: writable(null), snapGrid: writable(null), dragging: writable(false), selectionRect: writable(null), @@ -85,6 +86,7 @@ export const initialStoreState = { nodesDraggable: writable(true), nodesConnectable: writable(true), elementsSelectable: writable(true), + selectNodesOnDrag: writable(true), markers: readable([]), defaultMarkerColor: writable('#b1b1b7') }; diff --git a/packages/svelte/src/lib/store/types.ts b/packages/svelte/src/lib/store/types.ts index eff7e87bc..76bfb6db2 100644 --- a/packages/svelte/src/lib/store/types.ts +++ b/packages/svelte/src/lib/store/types.ts @@ -3,7 +3,8 @@ import type { XYPosition, ViewportHelperFunctionOptions, Connection, - NodeDragItem + UpdateNodePositions, + CoordinateExtent } from '@reactflow/system'; import type { initialStoreState } from './initial-store'; @@ -18,17 +19,14 @@ export type SvelteFlowStoreActions = { zoomOut: (options?: ViewportHelperFunctionOptions) => void; setMinZoom: (minZoom: number) => void; setMaxZoom: (maxZoom: number) => void; + setTranslateExtent: (extent: CoordinateExtent) => void; fitView: (options?: FitViewOptions) => boolean; - updateNodePositions: ( - nodeDragItems: NodeDragItem[], - positionChanged?: boolean, - dragging?: boolean - ) => void; + updateNodePositions: UpdateNodePositions; updateNodeDimensions: (updates: NodeDimensionUpdate[]) => void; - resetSelectedElements: () => void; + unselectNodesAndEdges: () => void; addSelectedNodes: (ids: string[]) => void; addSelectedEdges: (ids: string[]) => void; - panBy: (delta: XYPosition) => void; + panBy: (delta: XYPosition) => boolean; updateConnection: (connection: Partial) => void; cancelConnection: () => void; reset(): void; diff --git a/packages/svelte/src/routes/interaction/+page.svelte b/packages/svelte/src/routes/interaction/+page.svelte new file mode 100644 index 000000000..34f0be844 --- /dev/null +++ b/packages/svelte/src/routes/interaction/+page.svelte @@ -0,0 +1,215 @@ + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
\ No newline at end of file diff --git a/packages/svelte/src/routes/stress/+page.svelte b/packages/svelte/src/routes/stress/+page.svelte index ea5dd931b..68585a832 100644 --- a/packages/svelte/src/routes/stress/+page.svelte +++ b/packages/svelte/src/routes/stress/+page.svelte @@ -11,8 +11,8 @@ type Edge } from '../../lib/index'; - const yNodes = 10; - const xNodes = 10; + const yNodes = 20; + const xNodes = 20; const nodeItems: Node[] = []; const edgeItems: Edge[] = []; @@ -55,6 +55,7 @@ > diff --git a/packages/system/src/types/general.ts b/packages/system/src/types/general.ts index 7c5473dfa..0b1412c94 100644 --- a/packages/system/src/types/general.ts +++ b/packages/system/src/types/general.ts @@ -2,8 +2,9 @@ import type { D3DragEvent, Selection as D3Selection, SubjectPosition, ZoomBehavior } from 'd3'; import type { XYPosition, Rect } from './utils'; -import type { BaseNode, NodeOrigin } from './nodes'; +import type { BaseNode, NodeDragItem, NodeOrigin } from './nodes'; import type { HandleType } from './handles'; +import { PanZoomInstance } from './panzoom'; export type Project = (position: XYPosition) => XYPosition; @@ -39,8 +40,7 @@ export type FitViewParamsBase = { nodes: NodeType[]; width: number; height: number; - d3Zoom: D3ZoomInstance; - d3Selection: D3SelectionInstance; + panZoom: PanZoomInstance; minZoom: number; maxZoom: number; nodeOrigin?: NodeOrigin; @@ -117,3 +117,10 @@ export type SelectionRect = Rect & { }; export type OnError = (id: string, message: string) => void; + +export type UpdateNodePositions = ( + dragItems: NodeDragItem[] | BaseNode[], + positionChanged?: boolean, + dragging?: boolean +) => void; +export type PanBy = (delta: XYPosition) => boolean; diff --git a/packages/system/src/types/index.ts b/packages/system/src/types/index.ts index 0ab95b33e..421a8531a 100644 --- a/packages/system/src/types/index.ts +++ b/packages/system/src/types/index.ts @@ -3,3 +3,4 @@ export * from './nodes'; export * from './edges'; export * from './handles'; export * from './utils'; +export * from './panzoom'; diff --git a/packages/system/src/types/nodes.ts b/packages/system/src/types/nodes.ts index ce096014f..5dc6d4fee 100644 --- a/packages/system/src/types/nodes.ts +++ b/packages/system/src/types/nodes.ts @@ -84,3 +84,7 @@ export type NodeDragItem = { }; export type NodeOrigin = [number, number]; + +export type OnNodeDrag = (event: MouseEvent, node: BaseNode, nodes: BaseNode[]) => void; + +export type OnSelectionDrag = (event: MouseEvent, nodes: BaseNode[]) => void; diff --git a/packages/system/src/types/panzoom.ts b/packages/system/src/types/panzoom.ts new file mode 100644 index 000000000..77df4d76d --- /dev/null +++ b/packages/system/src/types/panzoom.ts @@ -0,0 +1,56 @@ +import { ZoomTransform } from 'd3-zoom'; +import { CoordinateExtent, PanOnScrollMode, Transform, Viewport } from './'; + +export type OnDraggingChange = (dragging: boolean) => void; +export type OnTransformChange = (transform: Transform) => void; + +export type PanZoomParams = { + domNode: Element; + minZoom: number; + maxZoom: number; + viewport: Viewport; + translateExtent: CoordinateExtent; + onTransformChange: OnTransformChange; + onDraggingChange: OnDraggingChange; + onPanZoomStart?: OnPanZoom; + onPanZoom?: OnPanZoom; + onPanZoomEnd?: OnPanZoom; +}; + +export type PanZoomTransformOptions = { + duration?: number; +}; + +export type OnPanZoom = (event: MouseEvent | TouchEvent | null, viewport: Viewport) => void; + +export type PanZoomUpdateOptions = { + noWheelClassName: string; + noPanClassName: string; + onPaneContextMenu?: (event: MouseEvent) => void; + preventScrolling: boolean; + panOnScroll: boolean; + panOnDrag: boolean | number[]; + panOnScrollMode: PanOnScrollMode; + panOnScrollSpeed: number; + userSelectionActive: boolean; + zoomOnPinch: boolean; + zoomOnScroll: boolean; + zoomOnDoubleClick: boolean; + zoomActivationKeyPressed: boolean; +}; + +export type PanZoomInstance = { + update: (params: PanZoomUpdateOptions) => void; + destroy: () => void; + getViewport: () => Viewport; + setViewport: (viewport: Viewport, options?: PanZoomTransformOptions) => ZoomTransform | undefined; + setViewportConstrained: ( + viewport: Viewport, + extent: CoordinateExtent, + translateExtent: CoordinateExtent + ) => ZoomTransform | undefined; + setScaleExtent: (scaleExtent: [number, number]) => void; + setTranslateExtent: (translateExtent: CoordinateExtent) => void; + scaleTo: (scale: number, options?: PanZoomTransformOptions) => void; + scaleBy: (factor: number, options?: PanZoomTransformOptions) => void; +}; diff --git a/packages/utils/package.json b/packages/utils/package.json index 684ef096c..93c703280 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -41,6 +41,8 @@ "@types/d3-drag": "^3.0.1", "@types/d3-selection": "^3.0.3", "@types/d3-zoom": "^3.0.1", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0" }, "devDependencies": { diff --git a/packages/utils/src/graph.ts b/packages/utils/src/graph.ts index 9f2bc2c74..5d279bdc2 100644 --- a/packages/utils/src/graph.ts +++ b/packages/utils/src/graph.ts @@ -1,7 +1,14 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { zoomIdentity } from 'd3-zoom'; - -import { boxToRect, clamp, devWarn, getBoundsOfBoxes, getOverlappingArea, rectToBox } from './utils'; +import { + boxToRect, + clamp, + clampPosition, + devWarn, + getBoundsOfBoxes, + getOverlappingArea, + isNumeric, + rectToBox, +} from './utils'; import { errorMessages, type Connection, @@ -13,7 +20,10 @@ import { type BaseEdge, type FitViewParamsBase, type FitViewOptionsBase, - type D3SelectionInstance, + SnapGrid, + NodeDragItem, + CoordinateExtent, + OnError, } from '@reactflow/system'; export const isEdgeBase = ( @@ -293,12 +303,8 @@ export const getTransformForBounds = ( return [x, y, clampedZoom]; }; -export const getD3Transition = (selection: D3SelectionInstance, duration = 0) => { - return selection.transition().duration(duration); -}; - export function fitView, Options extends FitViewOptionsBase>( - { nodes, width, height, d3Zoom, d3Selection, minZoom, maxZoom, nodeOrigin = [0, 0] }: Params, + { nodes, width, height, panZoom, minZoom, maxZoom, nodeOrigin = [0, 0] }: Params, options?: Options ) { const filteredNodes = nodes.filter((n) => { @@ -325,16 +331,97 @@ export function fitView, Options exte options?.padding ?? 0.1 ); - const nextTransform = zoomIdentity.translate(x, y).scale(zoom); + panZoom.setViewport({ x, y, zoom }, { duration: options?.duration }); + + return true; + } + + return false; +} + +export type GetPointerPositionParams = { + transform: Transform; + snapGrid?: SnapGrid; + snapToGrid?: boolean; +}; + +export function getPointerPosition( + event: MouseEvent | TouchEvent, + { snapGrid = [0, 0], snapToGrid = false, transform }: GetPointerPositionParams +): XYPosition & { xSnapped: number; ySnapped: number } { + const x = 'touches' in event ? event.touches[0].clientX : event.clientX; + const y = 'touches' in event ? event.touches[0].clientY : event.clientY; + + const pointerPos = { + x: (x - transform[0]) / transform[2], + y: (y - transform[1]) / transform[2], + }; - if (typeof options?.duration === 'number' && options.duration > 0) { - d3Zoom.transform(getD3Transition(d3Selection, options.duration), nextTransform); + // we need the snapped position in order to be able to skip unnecessary drag events + return { + xSnapped: snapToGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x, + ySnapped: snapToGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y, + ...pointerPos, + }; +} + +export function calcNextPosition( + node: NodeDragItem | NodeType, + nextPosition: XYPosition, + nodes: NodeType[], + nodeExtent?: CoordinateExtent, + nodeOrigin: NodeOrigin = [0, 0], + onError?: OnError +): { position: XYPosition; positionAbsolute: XYPosition } { + let currentExtent = node.extent || nodeExtent; + + if (node.extent === 'parent') { + if (node.parentNode && node.width && node.height) { + const parent = nodes.find((n) => n.id === node.parentNode); + const parentOrigin = parent?.origin || nodeOrigin; + const currNodeOrigin = node.origin || nodeOrigin; + + const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, parentOrigin).positionAbsolute; + currentExtent = + parent && isNumeric(parentX) && isNumeric(parentY) && isNumeric(parent.width) && isNumeric(parent.height) + ? [ + [parentX + node.width * currNodeOrigin[0], parentY + node.height * currNodeOrigin[1]], + [ + parentX + parent.width - node.width + node.width * currNodeOrigin[0], + parentY + parent.height - node.height + node.height * currNodeOrigin[1], + ], + ] + : currentExtent; } else { - d3Zoom.transform(d3Selection, nextTransform); + onError?.('005', errorMessages['error005']()); + + currentExtent = nodeExtent; } + } else if (node.extent && node.parentNode) { + const parent = nodes.find((n) => n.id === node.parentNode); + const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, parent?.origin || nodeOrigin).positionAbsolute; + currentExtent = [ + [node.extent[0][0] + parentX, node.extent[0][1] + parentY], + [node.extent[1][0] + parentX, node.extent[1][1] + parentY], + ]; + } - return true; + let parentPosition = { x: 0, y: 0 }; + + if (node.parentNode) { + const parentNode = nodes.find((n) => n.id === node.parentNode); + parentPosition = getNodePositionWithOrigin(parentNode, parentNode?.origin || nodeOrigin).positionAbsolute; } - return false; + const positionAbsolute = currentExtent + ? clampPosition(nextPosition, currentExtent as CoordinateExtent) + : nextPosition; + + return { + position: { + x: positionAbsolute.x - parentPosition.x, + y: positionAbsolute.y - parentPosition.y, + }, + positionAbsolute, + }; } diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 4f66d9a4f..6cccc3ded 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,4 +1,5 @@ export * from './graph'; export * from './utils'; export * from './marker'; -export * from './panzoom'; +export * from './xypanzoom'; +export * from './xydrag'; diff --git a/packages/utils/src/panzoom.ts b/packages/utils/src/panzoom.ts deleted file mode 100644 index 3e3088388..000000000 --- a/packages/utils/src/panzoom.ts +++ /dev/null @@ -1,352 +0,0 @@ -import { D3ZoomEvent, zoom, zoomIdentity } from 'd3-zoom'; -import { select, pointer } from 'd3-selection'; -import { - PanOnScrollMode, - type CoordinateExtent, - type Transform, - type Viewport, - D3ZoomInstance, - D3SelectionInstance, - D3ZoomHandler, - OnMoveStart, - OnMove, - OnMoveEnd, -} from '@reactflow/system'; - -import { clamp } from './utils'; - -const viewChanged = (prevViewport: Viewport, eventViewport: any): boolean => - prevViewport.x !== eventViewport.x || prevViewport.y !== eventViewport.y || prevViewport.zoom !== eventViewport.k; - -const eventToFlowTransform = (eventViewport: any): Viewport => ({ - x: eventViewport.x, - y: eventViewport.y, - zoom: eventViewport.k, -}); - -const isWrappedWithClass = (event: any, className: string | undefined) => event.target.closest(`.${className}`); - -const isRightClickPan = (panOnDrag: boolean | number[], usedButton: number) => - usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2); - -export type InitPanZoomParams = { - domNode: Element; - minZoom: number; - maxZoom: number; - defaultViewport: Viewport; - translateExtent: CoordinateExtent; -}; - -export function initPanZoom({ domNode, minZoom, maxZoom, translateExtent, defaultViewport }: InitPanZoomParams): { - d3ZoomInstance: D3ZoomInstance; - d3Selection: D3SelectionInstance; - d3ZoomHandler: D3ZoomHandler | null; - transform: Transform; -} { - const bbox = domNode.getBoundingClientRect(); - const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent); - const d3Selection = select(domNode).call(d3ZoomInstance); - const updatedTransform = zoomIdentity - .translate(defaultViewport.x, defaultViewport.y) - .scale(clamp(defaultViewport.zoom, minZoom, maxZoom)); - const extent: CoordinateExtent = [ - [0, 0], - [bbox.width, bbox.height], - ]; - - const constrainedTransform = d3ZoomInstance.constrain()(updatedTransform, extent, translateExtent); - d3ZoomInstance.transform(d3Selection, constrainedTransform); - const d3ZoomHandler = d3Selection.on('wheel.zoom') || null; - - return { - d3ZoomInstance, - d3Selection, - d3ZoomHandler, - // we need to pass transform because zoom handler is not registered when we set the initial transform - transform: [constrainedTransform.x, constrainedTransform.y, constrainedTransform.k], - }; -} - -type PanOnScrollParams = { - noWheelClassName: string; - d3Selection: D3SelectionInstance; - d3Zoom: D3ZoomInstance; - panOnScrollMode: PanOnScrollMode; - panOnScrollSpeed: number; - zoomOnPinch: boolean; -}; - -export function createPanOnScrollHandler({ - noWheelClassName, - d3Selection, - d3Zoom, - panOnScrollMode, - panOnScrollSpeed, - zoomOnPinch, -}: PanOnScrollParams) { - return (event: any) => { - if (isWrappedWithClass(event, noWheelClassName)) { - return false; - } - event.preventDefault(); - event.stopImmediatePropagation(); - - const currentZoom = d3Selection.property('__zoom').k || 1; - - if (event.ctrlKey && zoomOnPinch) { - const point = pointer(event); - // taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js - const pinchDelta = -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * 10; - const zoom = currentZoom * Math.pow(2, pinchDelta); - d3Zoom.scaleTo(d3Selection, zoom, point); - - return; - } - - // increase scroll speed in firefox - // firefox: deltaMode === 1; chrome: deltaMode === 0 - const deltaNormalize = event.deltaMode === 1 ? 20 : 1; - const deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize; - const deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize; - - d3Zoom.translateBy( - d3Selection, - -(deltaX / currentZoom) * panOnScrollSpeed, - -(deltaY / currentZoom) * panOnScrollSpeed - ); - }; -} - -type ZoomOnScrollParams = { - noWheelClassName: string; - preventScrolling: boolean; - d3ZoomHandler: D3ZoomHandler; -}; - -export function createZoomOnScrollHandler({ noWheelClassName, preventScrolling, d3ZoomHandler }: ZoomOnScrollParams) { - return function (this: Element, event: any, d: unknown) { - if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) { - return null; - } - - event.preventDefault(); - - d3ZoomHandler.call(this, event, d); - }; -} - -export type ZoomPanValues = { - isZoomingOrPanning: boolean; - zoomedWithRightMouseButton: boolean; - prevTransform: Viewport; - mouseButton: number; - timerId: ReturnType | undefined; -}; - -export type PanZoomStartParams = { - zoomPanValues: ZoomPanValues; - setDragging: (isDragging: boolean) => void; - onMoveStart?: OnMoveStart; - onViewportChangeStart?: (viewport: Viewport) => void; -}; - -export function createPanZoomStartHandler({ - zoomPanValues, - setDragging, - onMoveStart, - onViewportChangeStart, -}: PanZoomStartParams) { - return (event: D3ZoomEvent) => { - // we need to remember it here, because it's always 0 in the "zoom" event - zoomPanValues.mouseButton = event.sourceEvent?.button || 0; - - zoomPanValues.isZoomingOrPanning = true; - - if (event.sourceEvent?.type === 'mousedown') { - setDragging(true); - } - - if (onMoveStart || onViewportChangeStart) { - const flowTransform = eventToFlowTransform(event.transform); - zoomPanValues.prevTransform = flowTransform; - - onViewportChangeStart?.(flowTransform); - onMoveStart?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); - } - }; -} - -export type PanZoomParams = { - zoomPanValues: ZoomPanValues; - panOnDrag: boolean | number[]; - onPaneContextMenu: boolean; - setTransform: (transform: Transform) => void; - onMove?: OnMove; - onViewportChange?: (viewport: Viewport) => void; -}; - -export function createPanZoomHandler({ - zoomPanValues, - panOnDrag, - onPaneContextMenu, - setTransform, - onMove, - onViewportChange, -}: PanZoomParams) { - return (event: D3ZoomEvent) => { - zoomPanValues.zoomedWithRightMouseButton = !!( - onPaneContextMenu && isRightClickPan(panOnDrag, zoomPanValues.mouseButton ?? 0) - ); - - setTransform([event.transform.x, event.transform.y, event.transform.k]); - - if (onMove || onViewportChange) { - const flowTransform = eventToFlowTransform(event.transform); - - onViewportChange?.(flowTransform); - onMove?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); - } - }; -} - -export type PanZoomEndParams = { - zoomPanValues: ZoomPanValues; - panOnDrag: boolean | number[]; - panOnScroll: boolean; - setDragging: (isDragging: boolean) => void; - onMoveEnd?: OnMoveEnd; - onViewportChangeEnd?: (viewport: Viewport) => void; - onPaneContextMenu?: (event: any) => void; -}; - -export function createPanZoomEndHandler({ - zoomPanValues, - panOnDrag, - panOnScroll, - setDragging, - onMoveEnd, - onViewportChangeEnd, - onPaneContextMenu, -}: PanZoomEndParams) { - return (event: D3ZoomEvent) => { - zoomPanValues.isZoomingOrPanning = false; - - if ( - onPaneContextMenu && - isRightClickPan(panOnDrag, zoomPanValues.mouseButton ?? 0) && - !zoomPanValues.zoomedWithRightMouseButton && - event.sourceEvent - ) { - onPaneContextMenu(event.sourceEvent); - } - zoomPanValues.zoomedWithRightMouseButton = false; - - setDragging(false); - - if ((onMoveEnd || onViewportChangeEnd) && viewChanged(zoomPanValues.prevTransform, event.transform)) { - const flowTransform = eventToFlowTransform(event.transform); - zoomPanValues.prevTransform = flowTransform; - - clearTimeout(zoomPanValues.timerId); - zoomPanValues.timerId = setTimeout( - () => { - onViewportChangeEnd?.(flowTransform); - onMoveEnd?.(event.sourceEvent as MouseEvent | TouchEvent, flowTransform); - }, - panOnScroll ? 150 : 0 - ); - } - }; -} - -type FilterParams = { - zoomActivationKeyPressed: boolean; - zoomOnScroll: boolean; - zoomOnPinch: boolean; - panOnDrag: boolean | number[]; - panOnScroll: boolean; - zoomOnDoubleClick: boolean; - userSelectionActive: boolean; - noWheelClassName: string; - noPanClassName: string; -}; - -export function createFilter({ - zoomActivationKeyPressed, - zoomOnScroll, - zoomOnPinch, - panOnDrag, - panOnScroll, - zoomOnDoubleClick, - userSelectionActive, - noWheelClassName, - noPanClassName, -}: FilterParams) { - return (event: any): boolean => { - const zoomScroll = zoomActivationKeyPressed || zoomOnScroll; - const pinchZoom = zoomOnPinch && event.ctrlKey; - - if ( - event.button === 1 && - event.type === 'mousedown' && - (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge')) - ) { - return true; - } - - // if all interactions are disabled, we prevent all zoom events - if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) { - return false; - } - - // during a selection we prevent all other interactions - if (userSelectionActive) { - return false; - } - - // if zoom on double click is disabled, we prevent the double click event - if (!zoomOnDoubleClick && event.type === 'dblclick') { - return false; - } - - // if the target element is inside an element with the nowheel class, we prevent zooming - if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { - return false; - } - - // if the target element is inside an element with the nopan class, we prevent panning - if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { - return false; - } - - if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { - return false; - } - - // when there is no scroll handling enabled, we prevent all wheel events - if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') { - return false; - } - - // if the pane is not movable, we prevent dragging it with mousestart or touchstart - if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) { - return false; - } - - // if the pane is only movable using allowed clicks - if ( - Array.isArray(panOnDrag) && - !panOnDrag.includes(event.button) && - (event.type === 'mousedown' || event.type === 'touchstart') - ) { - return false; - } - - // We only allow right clicks if pan on drag is set to right click - const buttonAllowed = - (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1; - - // default filter for d3-zoom - return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed; - }; -} diff --git a/packages/utils/src/xydrag/XYDrag.ts b/packages/utils/src/xydrag/XYDrag.ts new file mode 100644 index 000000000..3a4bccb0e --- /dev/null +++ b/packages/utils/src/xydrag/XYDrag.ts @@ -0,0 +1,269 @@ +import { drag } from 'd3-drag'; +import { select } from 'd3-selection'; +import type { + BaseNode, + NodeDragItem, + UseDragEvent, + XYPosition, + BaseEdge, + CoordinateExtent, + NodeOrigin, + OnError, + SnapGrid, + Transform, + PanBy, + OnNodeDrag, + OnSelectionDrag, + UpdateNodePositions, +} from '@reactflow/system'; + +import { calcAutoPan, getEventPosition, getPointerPosition, calcNextPosition } from '../'; +import { getDragItems, getEventHandlerParams, hasSelector, wrapSelectionDragFunc } from './utils'; + +export type OnDrag = (event: MouseEvent, dragItems: NodeDragItem[], node: BaseNode, nodes: BaseNode[]) => void; + +type StoreItems = { + nodes: BaseNode[]; + edges: BaseEdge[]; + nodeExtent: CoordinateExtent; + snapGrid: SnapGrid; + snapToGrid: boolean; + nodeOrigin: NodeOrigin; + multiSelectionActive: boolean; + domNode?: Element | null; + transform: Transform; + autoPanOnNodeDrag: boolean; + nodesDraggable: boolean; + selectNodesOnDrag: boolean; + panBy: PanBy; + unselectNodesAndEdges: () => void; + onError?: OnError; + onNodeDragStart?: OnNodeDrag; + onNodeDrag?: OnNodeDrag; + onNodeDragStop?: OnNodeDrag; + onSelectionDragStart?: OnSelectionDrag; + onSelectionDrag?: OnSelectionDrag; + onSelectionDragStop?: OnSelectionDrag; + updateNodePositions: UpdateNodePositions; +}; + +export type XYDragParams = { + domNode: Element; + getStoreItems: () => StoreItems; + onDragStart?: OnDrag; + onDrag?: OnDrag; + onDragStop?: OnDrag; + onNodeClick?: () => void; +}; + +export type XYDragInstance = { + update: (params: DragUpdateParams) => void; + destroy: () => void; +}; + +export type DragUpdateParams = { + noDragClassName?: string; + handleSelector?: string; + isSelectable?: boolean; + nodeId?: string; + domNode: Element; +}; + +export function XYDrag({ + domNode, + onNodeClick, + getStoreItems, + onDragStart, + onDrag, + onDragStop, +}: XYDragParams): XYDragInstance { + let lastPos: { x: number | null; y: number | null } = { x: null, y: null }; + let autoPanId = 0; + let dragItems: NodeDragItem[] = []; + let autoPanStarted = false; + let mousePosition: XYPosition = { x: 0, y: 0 }; + let dragEvent: MouseEvent | null = null; + let containerBounds: DOMRect | null = null; + + const d3Selection = select(domNode); + + // public functions + function update({ noDragClassName, handleSelector, domNode, isSelectable, nodeId }: DragUpdateParams) { + function updateNodes({ x, y }: XYPosition) { + const { + nodes, + nodeExtent, + snapGrid, + snapToGrid, + nodeOrigin, + onNodeDrag, + onSelectionDrag, + onError, + updateNodePositions, + } = getStoreItems(); + + lastPos = { x, y }; + + let hasChange = false; + + dragItems = dragItems.map((n) => { + const nextPosition = { x: x - n.distance.x, y: y - n.distance.y }; + + if (snapToGrid) { + nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]); + nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]); + } + + const updatedPos = calcNextPosition(n, nextPosition, nodes, nodeExtent, nodeOrigin, onError); + + // we want to make sure that we only fire a change event when there is a changes + hasChange = hasChange || n.position.x !== updatedPos.position.x || n.position.y !== updatedPos.position.y; + + n.position = updatedPos.position; + n.positionAbsolute = updatedPos.positionAbsolute; + + return n; + }); + + if (!hasChange) { + return; + } + + updateNodePositions(dragItems, true, true); + const onNodeOrSelectionDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag); + + if (dragEvent) { + const [currentNode, currentNodes] = getEventHandlerParams({ + nodeId, + dragItems, + nodes, + }); + onDrag?.(dragEvent as MouseEvent, dragItems, currentNode, currentNodes); + onNodeOrSelectionDrag?.(dragEvent as MouseEvent, currentNode, currentNodes); + } + } + + function autoPan() { + if (!containerBounds) { + return; + } + + const [xMovement, yMovement] = calcAutoPan(mousePosition, containerBounds); + + if (xMovement !== 0 || yMovement !== 0) { + const { transform, panBy } = getStoreItems(); + + lastPos.x = (lastPos.x ?? 0) - xMovement / transform[2]; + lastPos.y = (lastPos.y ?? 0) - yMovement / transform[2]; + + if (panBy({ x: xMovement, y: yMovement })) { + updateNodes(lastPos as XYPosition); + } + } + autoPanId = requestAnimationFrame(autoPan); + } + + const d3DragInstance = drag() + .on('start', (event: UseDragEvent) => { + const { + nodes, + multiSelectionActive, + domNode, + nodesDraggable, + transform, + snapGrid, + snapToGrid, + onNodeDragStart, + onSelectionDragStart, + unselectNodesAndEdges, + selectNodesOnDrag, + } = getStoreItems(); + + if (!selectNodesOnDrag && !multiSelectionActive && nodeId) { + if (!nodes.find((n) => n.id === nodeId)?.selected) { + // we need to reset selected nodes when selectNodesOnDrag=false + unselectNodesAndEdges(); + } + } + + if (isSelectable && selectNodesOnDrag) { + onNodeClick?.(); + } + + const pointerPos = getPointerPosition(event.sourceEvent, { transform, snapGrid, snapToGrid }); + lastPos = pointerPos; + dragItems = getDragItems(nodes, nodesDraggable, pointerPos, nodeId); + + const onNodeOrSelectionDragStart = nodeId ? onNodeDragStart : wrapSelectionDragFunc(onSelectionDragStart); + + if (dragItems) { + const [currentNode, currentNodes] = getEventHandlerParams({ + nodeId, + dragItems, + nodes, + }); + onDragStart?.(event.sourceEvent as MouseEvent, dragItems, currentNode, currentNodes); + onNodeOrSelectionDragStart?.(event.sourceEvent as MouseEvent, currentNode, currentNodes); + } + + containerBounds = domNode?.getBoundingClientRect() || null; + mousePosition = getEventPosition(event.sourceEvent, containerBounds!); + }) + .on('drag', (event: UseDragEvent) => { + const { autoPanOnNodeDrag, transform, snapGrid, snapToGrid } = getStoreItems(); + const pointerPos = getPointerPosition(event.sourceEvent, { transform, snapGrid, snapToGrid }); + + if (!autoPanStarted && autoPanOnNodeDrag) { + autoPanStarted = true; + autoPan(); + } + + // skip events without movement + if ((lastPos.x !== pointerPos.xSnapped || lastPos.y !== pointerPos.ySnapped) && dragItems) { + dragEvent = event.sourceEvent as MouseEvent; + mousePosition = getEventPosition(event.sourceEvent, containerBounds!); + + updateNodes(pointerPos); + } + }) + .on('end', (event: UseDragEvent) => { + autoPanStarted = false; + cancelAnimationFrame(autoPanId); + + if (dragItems) { + const { nodes, updateNodePositions, onNodeDragStop, onSelectionDragStop } = getStoreItems(); + const onNodeOrSelectionDragStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop); + + updateNodePositions(dragItems, false, false); + + const [currentNode, currentNodes] = getEventHandlerParams({ + nodeId, + dragItems, + nodes, + }); + onDragStop?.(event.sourceEvent as MouseEvent, dragItems, currentNode, currentNodes); + onNodeOrSelectionDragStop?.(event.sourceEvent as MouseEvent, currentNode, currentNodes); + } + }) + .filter((event: MouseEvent) => { + const target = event.target as HTMLDivElement; + const isDraggable = + !event.button && + (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, domNode)) && + (!handleSelector || hasSelector(target, handleSelector, domNode)); + + return isDraggable; + }); + + d3Selection.call(d3DragInstance); + } + + function destroy() { + d3Selection.on('.drag', null); + } + + return { + update, + destroy, + }; +} diff --git a/packages/utils/src/xydrag/index.ts b/packages/utils/src/xydrag/index.ts new file mode 100644 index 000000000..ff19dcd00 --- /dev/null +++ b/packages/utils/src/xydrag/index.ts @@ -0,0 +1 @@ +export * from './XYDrag'; diff --git a/packages/utils/src/xydrag/utils.ts b/packages/utils/src/xydrag/utils.ts new file mode 100644 index 000000000..e1be15d7b --- /dev/null +++ b/packages/utils/src/xydrag/utils.ts @@ -0,0 +1,94 @@ +import { type NodeDragItem, type XYPosition, BaseNode } from '@reactflow/system'; + +export function wrapSelectionDragFunc(selectionFunc?: (event: MouseEvent, nodes: BaseNode[]) => void) { + return (event: MouseEvent, _: BaseNode, nodes: BaseNode[]) => selectionFunc?.(event, nodes); +} + +export function isParentSelected(node: NodeType, nodes: NodeType[]): boolean { + if (!node.parentNode) { + return false; + } + + const parentNode = nodes.find((node) => node.id === node.parentNode); + + if (!parentNode) { + return false; + } + + if (parentNode.selected) { + return true; + } + + return isParentSelected(parentNode, nodes); +} + +export function hasSelector(target: Element, selector: string, domNode: Element): boolean { + let current = target; + + do { + if (current?.matches(selector)) return true; + if (current === domNode) return false; + current = current.parentElement as Element; + } while (current); + + return false; +} + +// looks for all selected nodes and created a NodeDragItem for each of them +export function getDragItems( + nodes: NodeType[], + nodesDraggable: boolean, + mousePos: XYPosition, + nodeId?: string +): NodeDragItem[] { + return nodes + .filter( + (n) => + (n.selected || n.id === nodeId) && + (!n.parentNode || !isParentSelected(n, nodes)) && + (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')) + ) + .map((n) => ({ + id: n.id, + position: n.position || { x: 0, y: 0 }, + positionAbsolute: n.positionAbsolute || { x: 0, y: 0 }, + distance: { + x: mousePos.x - (n.positionAbsolute?.x ?? 0), + y: mousePos.y - (n.positionAbsolute?.y ?? 0), + }, + delta: { + x: 0, + y: 0, + }, + extent: n.extent, + parentNode: n.parentNode, + width: n.width, + height: n.height, + origin: n.origin, + })); +} + +// returns two params: +// 1. the dragged node (or the first of the list, if we are dragging a node selection) +// 2. array of selected nodes (for multi selections) +export function getEventHandlerParams({ + nodeId, + dragItems, + nodes, +}: { + nodeId?: string; + dragItems: NodeDragItem[]; + nodes: NodeType[]; +}): [NodeType, NodeType[]] { + const extentedDragItems: NodeType[] = dragItems.map((n) => { + const node = nodes.find((node) => node.id === n.id)!; + + return { + ...node, + position: n.position, + positionAbsolute: n.positionAbsolute, + }; + }); + + return [nodeId ? extentedDragItems.find((n) => n.id === nodeId)! : extentedDragItems[0], extentedDragItems]; +} diff --git a/packages/utils/src/xypanzoom/XYPanZoom.ts b/packages/utils/src/xypanzoom/XYPanZoom.ts new file mode 100644 index 000000000..73e01ae41 --- /dev/null +++ b/packages/utils/src/xypanzoom/XYPanZoom.ts @@ -0,0 +1,222 @@ +import { type ZoomTransform, zoom, zoomTransform } from 'd3-zoom'; +import { select } from 'd3-selection'; +import { + type CoordinateExtent, + type Viewport, + PanZoomTransformOptions, + PanZoomUpdateOptions, + PanZoomParams, + PanZoomInstance, +} from '@reactflow/system'; + +import { clamp } from '../utils'; +import { getD3Transition, viewportToTransform } from './utils'; +import { + createPanOnScrollHandler, + createPanZoomEndHandler, + createPanZoomHandler, + createPanZoomStartHandler, + createZoomOnScrollHandler, +} from './eventhandler'; +import { createFilter } from './filter'; + +export type ZoomPanValues = { + isZoomingOrPanning: boolean; + usedRightMouseButton: boolean; + prevViewport: Viewport; + mouseButton: number; + timerId: ReturnType | undefined; +}; + +export function XYPanZoom({ + domNode, + minZoom, + maxZoom, + translateExtent, + viewport, + onPanZoom, + onPanZoomStart, + onPanZoomEnd, + onTransformChange, + onDraggingChange, +}: PanZoomParams): PanZoomInstance { + const zoomPanValues: ZoomPanValues = { + isZoomingOrPanning: false, + usedRightMouseButton: false, + prevViewport: { x: 0, y: 0, zoom: 0 }, + mouseButton: 0, + timerId: undefined, + }; + const bbox = domNode.getBoundingClientRect(); + const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent); + const d3Selection = select(domNode).call(d3ZoomInstance); + + setViewportConstrained( + { + x: viewport.x, + y: viewport.y, + zoom: clamp(viewport.zoom, minZoom, maxZoom), + }, + [ + [0, 0], + [bbox.width, bbox.height], + ], + translateExtent + ); + + const d3ZoomHandler = d3Selection.on('wheel.zoom')!; + + function setTransform(transform: ZoomTransform, options?: PanZoomTransformOptions) { + if (d3Selection) { + d3ZoomInstance?.transform(getD3Transition(d3Selection, options?.duration), transform); + } + } + + // public functions + function update({ + noWheelClassName, + noPanClassName, + onPaneContextMenu, + userSelectionActive, + panOnScroll, + panOnDrag, + panOnScrollMode, + panOnScrollSpeed, + preventScrolling, + zoomOnPinch, + zoomOnScroll, + zoomOnDoubleClick, + zoomActivationKeyPressed, + }: PanZoomUpdateOptions) { + if (userSelectionActive && !zoomPanValues.isZoomingOrPanning) { + destroy(); + } + + const isPanOnScroll = panOnScroll && !zoomActivationKeyPressed && !userSelectionActive; + + const wheelHandler = isPanOnScroll + ? createPanOnScrollHandler({ + noWheelClassName, + d3Selection, + d3Zoom: d3ZoomInstance, + panOnScrollMode, + panOnScrollSpeed, + zoomOnPinch, + }) + : createZoomOnScrollHandler({ + noWheelClassName, + preventScrolling, + d3ZoomHandler, + }); + + d3Selection.on('wheel.zoom', wheelHandler, { passive: false }); + + if (!userSelectionActive) { + // pan zoom start + const startHandler = createPanZoomStartHandler({ + zoomPanValues, + onDraggingChange, + onPanZoomStart, + }); + d3ZoomInstance.on('start', startHandler); + + // pan zoom + const panZoomHandler = createPanZoomHandler({ + zoomPanValues, + panOnDrag, + onPaneContextMenu: !!onPaneContextMenu, + onPanZoom, + onTransformChange, + }); + d3ZoomInstance.on('zoom', panZoomHandler); + + // pan zoom end + const panZoomEndHandler = createPanZoomEndHandler({ + zoomPanValues, + panOnDrag, + panOnScroll, + onPaneContextMenu, + onPanZoomEnd, + onDraggingChange, + }); + d3ZoomInstance.on('end', panZoomEndHandler); + } + + const filter = createFilter({ + zoomActivationKeyPressed, + panOnDrag, + zoomOnScroll, + panOnScroll, + zoomOnDoubleClick, + zoomOnPinch, + userSelectionActive, + noPanClassName, + noWheelClassName, + }); + d3ZoomInstance.filter(filter); + } + + function destroy() { + d3ZoomInstance.on('zoom', null); + } + + function setViewportConstrained( + viewport: Viewport, + extent: CoordinateExtent, + translateExtent: CoordinateExtent + ): ZoomTransform | undefined { + const nextTransform = viewportToTransform(viewport); + const contrainedTransform = d3ZoomInstance?.constrain()(nextTransform, extent, translateExtent); + + if (contrainedTransform) { + setTransform(contrainedTransform); + } + + return contrainedTransform; + } + + function setViewport(viewport: Viewport, options?: PanZoomTransformOptions) { + const nextTransform = viewportToTransform(viewport); + + setTransform(nextTransform, options); + + return nextTransform; + } + + function getViewport(): Viewport { + const transform = d3Selection ? zoomTransform(d3Selection.node() as Element) : { x: 0, y: 0, k: 1 }; + return { x: transform.x, y: transform.y, zoom: transform.k }; + } + + function scaleTo(zoom: number, options?: PanZoomTransformOptions) { + if (d3Selection) { + d3ZoomInstance?.scaleTo(getD3Transition(d3Selection, options?.duration), zoom); + } + } + + function scaleBy(factor: number, options?: PanZoomTransformOptions) { + if (d3Selection) { + d3ZoomInstance?.scaleBy(getD3Transition(d3Selection, options?.duration), factor); + } + } + + function setScaleExtent(scaleExtent: [number, number]) { + d3ZoomInstance?.scaleExtent(scaleExtent); + } + + function setTranslateExtent(translateExtent: CoordinateExtent) { + d3ZoomInstance?.translateExtent(translateExtent); + } + + return { + update, + destroy, + setViewport, + setViewportConstrained, + getViewport, + scaleTo, + scaleBy, + setScaleExtent, + setTranslateExtent, + }; +} diff --git a/packages/utils/src/xypanzoom/eventhandler.ts b/packages/utils/src/xypanzoom/eventhandler.ts new file mode 100644 index 000000000..972526cce --- /dev/null +++ b/packages/utils/src/xypanzoom/eventhandler.ts @@ -0,0 +1,192 @@ +import type { D3ZoomEvent } from 'd3-zoom'; +import { pointer } from 'd3-selection'; +import { + PanOnScrollMode, + D3SelectionInstance, + D3ZoomHandler, + D3ZoomInstance, + OnPanZoom, + Viewport, + OnDraggingChange, + OnTransformChange, +} from '@reactflow/system'; + +import { isRightClickPan, isWrappedWithClass, transformToViewport, viewChanged } from './utils'; + +export type ZoomPanValues = { + isZoomingOrPanning: boolean; + usedRightMouseButton: boolean; + prevViewport: Viewport; + mouseButton: number; + timerId: ReturnType | undefined; +}; + +export type PanOnScrollParams = { + noWheelClassName: string; + d3Selection: D3SelectionInstance; + d3Zoom: D3ZoomInstance; + panOnScrollMode: PanOnScrollMode; + panOnScrollSpeed: number; + zoomOnPinch: boolean; +}; + +export type ZoomOnScrollParams = { + noWheelClassName: string; + preventScrolling: boolean; + d3ZoomHandler: D3ZoomHandler; +}; + +export type PanZoomStartParams = { + zoomPanValues: ZoomPanValues; + onDraggingChange: OnDraggingChange; + onPanZoomStart?: OnPanZoom; +}; + +export type PanZoomParams = { + zoomPanValues: ZoomPanValues; + panOnDrag: boolean | number[]; + onPaneContextMenu: boolean; + onTransformChange: OnTransformChange; + onPanZoom?: OnPanZoom; +}; + +export type PanZoomEndParams = { + zoomPanValues: ZoomPanValues; + panOnDrag: boolean | number[]; + panOnScroll: boolean; + onDraggingChange: (isDragging: boolean) => void; + onPanZoomEnd?: OnPanZoom; + onPaneContextMenu?: (event: any) => void; +}; + +export function createPanOnScrollHandler({ + noWheelClassName, + d3Selection, + d3Zoom, + panOnScrollMode, + panOnScrollSpeed, + zoomOnPinch, +}: PanOnScrollParams) { + return (event: any) => { + if (isWrappedWithClass(event, noWheelClassName)) { + return false; + } + event.preventDefault(); + event.stopImmediatePropagation(); + + const currentZoom = d3Selection.property('__zoom').k || 1; + + if (event.ctrlKey && zoomOnPinch) { + const point = pointer(event); + // taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js + const pinchDelta = -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * 10; + const zoom = currentZoom * Math.pow(2, pinchDelta); + d3Zoom.scaleTo(d3Selection, zoom, point); + + return; + } + + // increase scroll speed in firefox + // firefox: deltaMode === 1; chrome: deltaMode === 0 + const deltaNormalize = event.deltaMode === 1 ? 20 : 1; + const deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize; + const deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize; + + d3Zoom.translateBy( + d3Selection, + -(deltaX / currentZoom) * panOnScrollSpeed, + -(deltaY / currentZoom) * panOnScrollSpeed + ); + }; +} + +export function createZoomOnScrollHandler({ noWheelClassName, preventScrolling, d3ZoomHandler }: ZoomOnScrollParams) { + return function (this: Element, event: any, d: unknown) { + if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) { + return null; + } + + event.preventDefault(); + + d3ZoomHandler.call(this, event, d); + }; +} + +export function createPanZoomStartHandler({ zoomPanValues, onDraggingChange, onPanZoomStart }: PanZoomStartParams) { + return (event: D3ZoomEvent) => { + // we need to remember it here, because it's always 0 in the "zoom" event + zoomPanValues.mouseButton = event.sourceEvent?.button || 0; + + zoomPanValues.isZoomingOrPanning = true; + + if (event.sourceEvent?.type === 'mousedown') { + onDraggingChange(true); + } + + if (onPanZoomStart) { + const viewport = transformToViewport(event.transform); + zoomPanValues.prevViewport = viewport; + + onPanZoomStart?.(event.sourceEvent as MouseEvent | TouchEvent, viewport); + } + }; +} + +export function createPanZoomHandler({ + zoomPanValues, + panOnDrag, + onPaneContextMenu, + onTransformChange, + onPanZoom, +}: PanZoomParams) { + return (event: D3ZoomEvent) => { + zoomPanValues.usedRightMouseButton = !!( + onPaneContextMenu && isRightClickPan(panOnDrag, zoomPanValues.mouseButton ?? 0) + ); + + onTransformChange([event.transform.x, event.transform.y, event.transform.k]); + + if (onPanZoom) { + onPanZoom?.(event.sourceEvent as MouseEvent | TouchEvent, transformToViewport(event.transform)); + } + }; +} + +export function createPanZoomEndHandler({ + zoomPanValues, + panOnDrag, + panOnScroll, + onDraggingChange, + onPanZoomEnd, + onPaneContextMenu, +}: PanZoomEndParams) { + return (event: D3ZoomEvent) => { + zoomPanValues.isZoomingOrPanning = false; + + if ( + onPaneContextMenu && + isRightClickPan(panOnDrag, zoomPanValues.mouseButton ?? 0) && + !zoomPanValues.usedRightMouseButton && + event.sourceEvent + ) { + onPaneContextMenu(event.sourceEvent); + } + zoomPanValues.usedRightMouseButton = false; + + onDraggingChange(false); + + if (onPanZoomEnd && viewChanged(zoomPanValues.prevViewport, event.transform)) { + const viewport = transformToViewport(event.transform); + zoomPanValues.prevViewport = viewport; + + clearTimeout(zoomPanValues.timerId); + zoomPanValues.timerId = setTimeout( + () => { + onPanZoomEnd?.(event.sourceEvent as MouseEvent | TouchEvent, viewport); + }, + // we need a setTimeout for panOnScroll to supress multiple end events fired during scroll + panOnScroll ? 150 : 0 + ); + } + }; +} diff --git a/packages/utils/src/xypanzoom/filter.ts b/packages/utils/src/xypanzoom/filter.ts new file mode 100644 index 000000000..e4ed190a8 --- /dev/null +++ b/packages/utils/src/xypanzoom/filter.ts @@ -0,0 +1,93 @@ +import { isWrappedWithClass } from './utils'; + +export type FilterParams = { + zoomActivationKeyPressed: boolean; + zoomOnScroll: boolean; + zoomOnPinch: boolean; + panOnDrag: boolean | number[]; + panOnScroll: boolean; + zoomOnDoubleClick: boolean; + userSelectionActive: boolean; + noWheelClassName: string; + noPanClassName: string; +}; + +export function createFilter({ + zoomActivationKeyPressed, + zoomOnScroll, + zoomOnPinch, + panOnDrag, + panOnScroll, + zoomOnDoubleClick, + userSelectionActive, + noWheelClassName, + noPanClassName, +}: FilterParams) { + return (event: any): boolean => { + const zoomScroll = zoomActivationKeyPressed || zoomOnScroll; + const pinchZoom = zoomOnPinch && event.ctrlKey; + + if ( + event.button === 1 && + event.type === 'mousedown' && + (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge')) + ) { + return true; + } + + // if all interactions are disabled, we prevent all zoom events + if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) { + return false; + } + + // during a selection we prevent all other interactions + if (userSelectionActive) { + return false; + } + + // if zoom on double click is disabled, we prevent the double click event + if (!zoomOnDoubleClick && event.type === 'dblclick') { + return false; + } + + // if the target element is inside an element with the nowheel class, we prevent zooming + if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') { + return false; + } + + // if the target element is inside an element with the nopan class, we prevent panning + if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { + return false; + } + + if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') { + return false; + } + + // when there is no scroll handling enabled, we prevent all wheel events + if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') { + return false; + } + + // if the pane is not movable, we prevent dragging it with mousestart or touchstart + if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) { + return false; + } + + // if the pane is only movable using allowed clicks + if ( + Array.isArray(panOnDrag) && + !panOnDrag.includes(event.button) && + (event.type === 'mousedown' || event.type === 'touchstart') + ) { + return false; + } + + // We only allow right clicks if pan on drag is set to right click + const buttonAllowed = + (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1; + + // default filter for d3-zoom + return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed; + }; +} diff --git a/packages/utils/src/xypanzoom/index.ts b/packages/utils/src/xypanzoom/index.ts new file mode 100644 index 000000000..b31c62252 --- /dev/null +++ b/packages/utils/src/xypanzoom/index.ts @@ -0,0 +1 @@ +export * from './XYPanZoom'; diff --git a/packages/utils/src/xypanzoom/utils.ts b/packages/utils/src/xypanzoom/utils.ts new file mode 100644 index 000000000..b5f6e1a9a --- /dev/null +++ b/packages/utils/src/xypanzoom/utils.ts @@ -0,0 +1,22 @@ +import { type D3SelectionInstance, type Viewport } from '@reactflow/system'; +import { type ZoomTransform, zoomIdentity } from 'd3-zoom'; + +export const viewChanged = (prevViewport: Viewport, eventViewport: any): boolean => + prevViewport.x !== eventViewport.x || prevViewport.y !== eventViewport.y || prevViewport.zoom !== eventViewport.k; + +export const transformToViewport = (transform: ZoomTransform): Viewport => ({ + x: transform.x, + y: transform.y, + zoom: transform.k, +}); + +export const viewportToTransform = ({ x, y, zoom }: Viewport): ZoomTransform => + zoomIdentity.translate(x, y).scale(zoom); + +export const isWrappedWithClass = (event: any, className: string | undefined) => event.target.closest(`.${className}`); + +export const isRightClickPan = (panOnDrag: boolean | number[], usedButton: number) => + usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2); + +export const getD3Transition = (selection: D3SelectionInstance, duration = 0) => + typeof duration === 'number' && duration > 0 ? selection.transition().duration(duration) : selection; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7fc11999b..dd7531eb6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,6 @@ importers: specifiers: '@changesets/changelog-github': ^0.4.7 '@changesets/cli': ^2.25.0 - '@preconstruct/cli': ^2.2.1 '@typescript-eslint/eslint-plugin': latest '@typescript-eslint/parser': latest autoprefixer: ^10.4.8 @@ -25,34 +24,33 @@ importers: react: ^18.2.0 react-dom: ^18.2.0 rimraf: ^3.0.2 - rollup: ^3.19.1 - turbo: ^1.8.3 + rollup: ^3.23.0 + turbo: ^1.10.0 typescript: ^4.9.4 devDependencies: - '@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.7 - '@changesets/cli': registry.npmjs.org/@changesets/cli/2.25.0 - '@preconstruct/cli': registry.npmjs.org/@preconstruct/cli/2.2.1 - '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.57.0_mc6km5pjrfw7q236yimvgyb62m - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.57.0_id2eilsndvzhjjktb64trvy3gu - autoprefixer: registry.npmjs.org/autoprefixer/10.4.9_postcss@8.4.21 + '@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.8 + '@changesets/cli': registry.npmjs.org/@changesets/cli/2.26.1 + '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.8_rq7lqmsq2hhtq366qgvop5zziy + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.59.8_5ujgynla27k2qkzlnkldjwsutm + autoprefixer: registry.npmjs.org/autoprefixer/10.4.14_postcss@8.4.24 concurrently: registry.npmjs.org/concurrently/7.6.0 - cypress: registry.npmjs.org/cypress/10.7.0 - eslint: registry.npmjs.org/eslint/8.23.1 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.23.1 - eslint-plugin-prettier: registry.npmjs.org/eslint-plugin-prettier/4.2.1_cabrci5exjdaojcvd6xoxgeowu - eslint-plugin-react: registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.23.1 - postcss: registry.npmjs.org/postcss/8.4.21 - postcss-cli: registry.npmjs.org/postcss-cli/10.1.0_postcss@8.4.21 - postcss-combine-duplicated-selectors: registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3_postcss@8.4.21 - postcss-import: registry.npmjs.org/postcss-import/15.1.0_postcss@8.4.21 - postcss-nested: registry.npmjs.org/postcss-nested/6.0.0_postcss@8.4.21 - prettier: registry.npmjs.org/prettier/2.7.1 + cypress: registry.npmjs.org/cypress/10.11.0 + eslint: registry.npmjs.org/eslint/8.41.0 + eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.41.0 + eslint-plugin-prettier: registry.npmjs.org/eslint-plugin-prettier/4.2.1_xcqkel4mpum3npntysob2xmn54 + eslint-plugin-react: registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.41.0 + postcss: registry.npmjs.org/postcss/8.4.24 + postcss-cli: registry.npmjs.org/postcss-cli/10.1.0_postcss@8.4.24 + postcss-combine-duplicated-selectors: registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3_postcss@8.4.24 + postcss-import: registry.npmjs.org/postcss-import/15.1.0_postcss@8.4.24 + postcss-nested: registry.npmjs.org/postcss-nested/6.0.1_postcss@8.4.24 + prettier: registry.npmjs.org/prettier/2.8.8 react: registry.npmjs.org/react/18.2.0 react-dom: registry.npmjs.org/react-dom/18.2.0_react@18.2.0 rimraf: registry.npmjs.org/rimraf/3.0.2 - rollup: registry.npmjs.org/rollup/3.20.2 - turbo: registry.npmjs.org/turbo/1.8.6 - typescript: registry.npmjs.org/typescript/4.9.4 + rollup: registry.npmjs.org/rollup/3.23.0 + turbo: registry.npmjs.org/turbo/1.10.0 + typescript: registry.npmjs.org/typescript/4.9.5 examples/vite-app: specifiers: @@ -61,7 +59,7 @@ importers: '@types/dagre': ^0.7.48 '@types/react': ^18.0.17 '@types/react-dom': ^18.0.6 - '@vitejs/plugin-react': ^3.0.1 + '@vitejs/plugin-react': 4.0.0 classcat: ^5.0.3 cypress: ^10.6.0 cypress-real-events: ^1.7.1 @@ -73,7 +71,7 @@ importers: reactflow: workspace:* start-server-and-test: ^1.14.0 typescript: ^4.9.4 - vite: ^4.0.4 + vite: 4.3.9 zustand: ^4.3.1 dependencies: '@reactflow/node-resizer': link:../../packages/node-resizer @@ -82,20 +80,20 @@ importers: localforage: registry.npmjs.org/localforage/1.10.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-dom: registry.npmjs.org/react-router-dom/6.3.0_biqbaboplfbrettd7655fr4n2y + react-router-dom: registry.npmjs.org/react-router-dom/6.11.2_biqbaboplfbrettd7655fr4n2y reactflow: link:../../packages/reactflow - zustand: registry.npmjs.org/zustand/4.3.1_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 devDependencies: '@cypress/skip-test': registry.npmjs.org/@cypress/skip-test/2.6.1 '@types/dagre': registry.npmjs.org/@types/dagre/0.7.48 - '@types/react': registry.npmjs.org/@types/react/18.0.19 - '@types/react-dom': registry.npmjs.org/@types/react-dom/18.0.6 - '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react/3.0.1_vite@4.0.4 - cypress: registry.npmjs.org/cypress/10.7.0 - cypress-real-events: registry.npmjs.org/cypress-real-events/1.7.1_cypress@10.7.0 - start-server-and-test: registry.npmjs.org/start-server-and-test/1.14.0 - typescript: registry.npmjs.org/typescript/4.9.4 - vite: registry.npmjs.org/vite/4.0.4 + '@types/react': registry.npmjs.org/@types/react/18.2.7 + '@types/react-dom': registry.npmjs.org/@types/react-dom/18.2.4 + '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react/4.0.0_vite@4.3.9 + cypress: registry.npmjs.org/cypress/10.11.0 + cypress-real-events: registry.npmjs.org/cypress-real-events/1.8.1_cypress@10.11.0 + start-server-and-test: registry.npmjs.org/start-server-and-test/1.15.4 + typescript: registry.npmjs.org/typescript/4.9.5 + vite: registry.npmjs.org/vite/4.3.9 packages/background: specifiers: @@ -112,15 +110,15 @@ importers: dependencies: '@reactflow/core': link:../core classcat: registry.npmjs.org/classcat/5.0.4 - zustand: registry.npmjs.org/zustand/4.3.1_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 packages/controls: specifiers: @@ -136,14 +134,14 @@ importers: dependencies: '@reactflow/core': link:../core classcat: registry.npmjs.org/classcat/5.0.4 - zustand: registry.npmjs.org/zustand/4.3.1 + zustand: registry.npmjs.org/zustand/4.3.8 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 - typescript: registry.npmjs.org/typescript/4.9.4 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 + typescript: registry.npmjs.org/typescript/4.9.5 packages/core: specifiers: @@ -172,23 +170,23 @@ importers: '@reactflow/system': link:../system '@reactflow/utils': link:../utils '@types/d3': registry.npmjs.org/@types/d3/7.4.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 classcat: registry.npmjs.org/classcat/5.0.4 d3-drag: registry.npmjs.org/d3-drag/3.0.0 d3-selection: registry.npmjs.org/d3-selection/3.0.0 d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 - zustand: registry.npmjs.org/zustand/4.3.6_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 - '@types/react-dom': registry.npmjs.org/@types/react-dom/18.0.6 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 + '@types/react-dom': registry.npmjs.org/@types/react-dom/18.2.4 react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 packages/edge-utils: specifiers: @@ -207,11 +205,11 @@ importers: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 - '@types/react-dom': registry.npmjs.org/@types/react-dom/18.0.6 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 + '@types/react-dom': registry.npmjs.org/@types/react-dom/18.2.4 react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 packages/minimap: specifiers: @@ -231,20 +229,20 @@ importers: zustand: ^4.3.1 dependencies: '@reactflow/core': link:../core - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 classcat: registry.npmjs.org/classcat/5.0.4 d3-selection: registry.npmjs.org/d3-selection/3.0.0 d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 - zustand: registry.npmjs.org/zustand/4.3.1_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 packages/node-resizer: specifiers: @@ -252,6 +250,7 @@ importers: '@reactflow/eslint-config': workspace:* '@reactflow/rollup-config': workspace:* '@reactflow/tsconfig': workspace:* + '@reactflow/utils': workspace:* '@types/d3-drag': ^3.0.1 '@types/d3-selection': ^3.0.3 '@types/node': ^18.7.16 @@ -265,21 +264,22 @@ importers: zustand: ^4.3.1 dependencies: '@reactflow/core': link:../core + '@reactflow/utils': link:../utils classcat: registry.npmjs.org/classcat/5.0.4 d3-drag: registry.npmjs.org/d3-drag/3.0.0 d3-selection: registry.npmjs.org/d3-selection/3.0.0 - zustand: registry.npmjs.org/zustand/4.3.1_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 - '@types/react-dom': registry.npmjs.org/@types/react-dom/18.0.6 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 + '@types/react-dom': registry.npmjs.org/@types/react-dom/18.2.4 react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 packages/node-toolbar: specifiers: @@ -297,16 +297,16 @@ importers: dependencies: '@reactflow/core': link:../core classcat: registry.npmjs.org/classcat/5.0.4 - zustand: registry.npmjs.org/zustand/4.3.1_react@18.2.0 + zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 - '@types/react-dom': registry.npmjs.org/@types/react-dom/18.0.6 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 + '@types/react-dom': registry.npmjs.org/@types/react-dom/18.2.4 react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 packages/reactflow: specifiers: @@ -334,10 +334,10 @@ importers: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - '@types/react': registry.npmjs.org/@types/react/18.0.19 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/react': registry.npmjs.org/@types/react/18.2.7 react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 packages/svelte: specifiers: @@ -374,9 +374,9 @@ importers: '@reactflow/system': link:../system '@reactflow/utils': link:../utils '@svelte-put/shortcut': registry.npmjs.org/@svelte-put/shortcut/2.0.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 classcat: registry.npmjs.org/classcat/5.0.4 d3-drag: registry.npmjs.org/d3-drag/3.0.0 d3-selection: registry.npmjs.org/d3-selection/3.0.0 @@ -384,21 +384,21 @@ importers: react: registry.npmjs.org/react/18.2.0 react-dom: registry.npmjs.org/react-dom/18.2.0_react@18.2.0 devDependencies: - '@sveltejs/adapter-auto': registry.npmjs.org/@sveltejs/adapter-auto/2.0.0_@sveltejs+kit@1.14.0 - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.14.0_svelte@3.57.0+vite@4.2.1 - '@sveltejs/package': registry.npmjs.org/@sveltejs/package/2.0.2_44zspxpepvug6mo2qrfwkj3taq - '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.57.0_6qulbt3drjdrf5p7ia5xubmhay - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.57.0_zjoiagdsdpivymr5idw66lxttq - eslint: registry.npmjs.org/eslint/8.36.0 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.36.0 - eslint-plugin-svelte3: registry.npmjs.org/eslint-plugin-svelte3/4.0.0_wzem237sbvnwe7n34ytc5phasy - prettier: registry.npmjs.org/prettier/2.8.7 - prettier-plugin-svelte: registry.npmjs.org/prettier-plugin-svelte/2.10.0_5ir2xprf4ygk6mygilwnltaw3a - svelte: registry.npmjs.org/svelte/3.57.0 - svelte-check: registry.npmjs.org/svelte-check/3.1.4_svelte@3.57.0 - tslib: registry.npmjs.org/tslib/2.4.1 - typescript: registry.npmjs.org/typescript/4.9.4 - vite: registry.npmjs.org/vite/4.2.1 + '@sveltejs/adapter-auto': registry.npmjs.org/@sveltejs/adapter-auto/2.1.0_@sveltejs+kit@1.20.0 + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.20.0_svelte@3.59.1+vite@4.3.9 + '@sveltejs/package': registry.npmjs.org/@sveltejs/package/2.0.2_cnumnonbjyr4j6qimrlvyofpny + '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.8_rq7lqmsq2hhtq366qgvop5zziy + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.59.8_5ujgynla27k2qkzlnkldjwsutm + eslint: registry.npmjs.org/eslint/8.41.0 + eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.41.0 + eslint-plugin-svelte3: registry.npmjs.org/eslint-plugin-svelte3/4.0.0_2rgspgo736k3nkqykgvv2sinmy + prettier: registry.npmjs.org/prettier/2.8.8 + prettier-plugin-svelte: registry.npmjs.org/prettier-plugin-svelte/2.10.1_blbg2s7pis747igzn3ilcyh5ou + svelte: registry.npmjs.org/svelte/3.59.1 + svelte-check: registry.npmjs.org/svelte-check/3.4.3_svelte@3.59.1 + tslib: registry.npmjs.org/tslib/2.5.2 + typescript: registry.npmjs.org/typescript/4.9.5 + vite: registry.npmjs.org/vite/4.3.9 packages/system: specifiers: @@ -413,15 +413,15 @@ importers: typescript: ^4.9.4 dependencies: '@types/d3': registry.npmjs.org/@types/d3/7.4.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - typescript: registry.npmjs.org/typescript/4.9.4 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + typescript: registry.npmjs.org/typescript/4.9.5 packages/utils: specifiers: @@ -434,21 +434,25 @@ importers: '@types/d3-selection': ^3.0.3 '@types/d3-zoom': ^3.0.1 '@types/node': ^18.7.16 + d3-drag: ^3.0.0 + d3-selection: ^3.0.0 d3-zoom: ^3.0.0 typescript: ^4.9.4 dependencies: '@reactflow/system': link:../system '@types/d3': registry.npmjs.org/@types/d3/7.4.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 + d3-drag: registry.npmjs.org/d3-drag/3.0.0 + d3-selection: registry.npmjs.org/d3-selection/3.0.0 d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 devDependencies: '@reactflow/eslint-config': link:../../tooling/eslint-config '@reactflow/rollup-config': link:../../tooling/rollup-config '@reactflow/tsconfig': link:../../tooling/tsconfig - '@types/node': registry.npmjs.org/@types/node/18.7.16 - typescript: registry.npmjs.org/typescript/4.9.4 + '@types/node': registry.npmjs.org/@types/node/18.16.16 + typescript: registry.npmjs.org/typescript/4.9.5 tooling/eslint-config: specifiers: @@ -457,110 +461,78 @@ importers: eslint-config-turbo: latest eslint-plugin-react: latest devDependencies: - eslint: registry.npmjs.org/eslint/8.23.1 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.23.1 - eslint-config-turbo: registry.npmjs.org/eslint-config-turbo/1.8.6_eslint@8.23.1 - eslint-plugin-react: registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.23.1 + eslint: registry.npmjs.org/eslint/8.41.0 + eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.41.0 + eslint-config-turbo: registry.npmjs.org/eslint-config-turbo/1.10.0_eslint@8.41.0 + eslint-plugin-react: registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.41.0 tooling/rollup-config: specifiers: - '@rollup/plugin-commonjs': ^24.0.1 - '@rollup/plugin-node-resolve': ^15.0.1 + '@rollup/plugin-commonjs': ^25.0.0 + '@rollup/plugin-node-resolve': ^15.1.0 '@rollup/plugin-replace': ^5.0.2 - '@rollup/plugin-terser': ^0.4.0 - '@rollup/plugin-typescript': ^11.0.0 - rollup: ^3.19.1 + '@rollup/plugin-terser': ^0.4.3 + '@rollup/plugin-typescript': 11.0.0 + rollup: ^3.23.0 rollup-plugin-peer-deps-external: ^2.2.4 typescript: ^4.9.4 devDependencies: - '@rollup/plugin-commonjs': registry.npmjs.org/@rollup/plugin-commonjs/24.0.1_rollup@3.20.2 - '@rollup/plugin-node-resolve': registry.npmjs.org/@rollup/plugin-node-resolve/15.0.1_rollup@3.20.2 - '@rollup/plugin-replace': registry.npmjs.org/@rollup/plugin-replace/5.0.2_rollup@3.20.2 - '@rollup/plugin-terser': registry.npmjs.org/@rollup/plugin-terser/0.4.0_rollup@3.20.2 - '@rollup/plugin-typescript': registry.npmjs.org/@rollup/plugin-typescript/11.0.0_63smgertf5ywa7mevokngp24n4 - rollup: registry.npmjs.org/rollup/3.20.2 - rollup-plugin-peer-deps-external: registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4_rollup@3.20.2 - typescript: registry.npmjs.org/typescript/4.9.4 + '@rollup/plugin-commonjs': registry.npmjs.org/@rollup/plugin-commonjs/25.0.0_rollup@3.23.0 + '@rollup/plugin-node-resolve': registry.npmjs.org/@rollup/plugin-node-resolve/15.1.0_rollup@3.23.0 + '@rollup/plugin-replace': registry.npmjs.org/@rollup/plugin-replace/5.0.2_rollup@3.23.0 + '@rollup/plugin-terser': registry.npmjs.org/@rollup/plugin-terser/0.4.3_rollup@3.23.0 + '@rollup/plugin-typescript': registry.npmjs.org/@rollup/plugin-typescript/11.0.0_aleiognpck4hfurcdcjnvgqbb4 + rollup: registry.npmjs.org/rollup/3.23.0 + rollup-plugin-peer-deps-external: registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4_rollup@3.23.0 + typescript: registry.npmjs.org/typescript/4.9.5 tooling/tsconfig: specifiers: {} packages: - registry.npmjs.org/@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz} + registry.npmjs.org/@ampproject/remapping/2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz} name: '@ampproject/remapping' - version: 2.2.0 + version: 2.2.1 engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.1.1 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.17 + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.3 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 dev: true - registry.npmjs.org/@babel/code-frame/7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz} + registry.npmjs.org/@babel/code-frame/7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz} name: '@babel/code-frame' - version: 7.18.6 + version: 7.21.4 engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': registry.npmjs.org/@babel/highlight/7.18.6 dev: true - registry.npmjs.org/@babel/compat-data/7.19.0: - resolution: {integrity: sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz} - name: '@babel/compat-data' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dev: true - - registry.npmjs.org/@babel/compat-data/7.20.10: - resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz} + registry.npmjs.org/@babel/compat-data/7.22.3: + resolution: {integrity: sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz} name: '@babel/compat-data' - version: 7.20.10 - engines: {node: '>=6.9.0'} - dev: true - - registry.npmjs.org/@babel/core/7.19.0: - resolution: {integrity: sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz} - name: '@babel/core' - version: 7.19.0 + version: 7.22.3 engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping/2.2.0 - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/generator': registry.npmjs.org/@babel/generator/7.19.0 - '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets/7.19.0_@babel+core@7.19.0 - '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms/7.19.0 - '@babel/helpers': registry.npmjs.org/@babel/helpers/7.19.0 - '@babel/parser': registry.npmjs.org/@babel/parser/7.19.0 - '@babel/template': registry.npmjs.org/@babel/template/7.18.10 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.19.0 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - convert-source-map: registry.npmjs.org/convert-source-map/1.8.0 - debug: registry.npmjs.org/debug/4.3.4 - gensync: registry.npmjs.org/gensync/1.0.0-beta.2 - json5: registry.npmjs.org/json5/2.2.1 - semver: registry.npmjs.org/semver/6.3.0 - transitivePeerDependencies: - - supports-color dev: true - registry.npmjs.org/@babel/core/7.20.12: - resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz} + registry.npmjs.org/@babel/core/7.22.1: + resolution: {integrity: sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz} name: '@babel/core' - version: 7.20.12 + version: 7.22.1 engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping/2.2.0 - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/generator': registry.npmjs.org/@babel/generator/7.20.7 - '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12 - '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms/7.20.11 - '@babel/helpers': registry.npmjs.org/@babel/helpers/7.20.7 - '@babel/parser': registry.npmjs.org/@babel/parser/7.20.7 - '@babel/template': registry.npmjs.org/@babel/template/7.20.7 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.20.12 - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 + '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping/2.2.1 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.21.4 + '@babel/generator': registry.npmjs.org/@babel/generator/7.22.3 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets/7.22.1_@babel+core@7.22.1 + '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms/7.22.1 + '@babel/helpers': registry.npmjs.org/@babel/helpers/7.22.3 + '@babel/parser': registry.npmjs.org/@babel/parser/7.22.4 + '@babel/template': registry.npmjs.org/@babel/template/7.21.9 + '@babel/traverse': registry.npmjs.org/@babel/traverse/7.22.4 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 convert-source-map: registry.npmjs.org/convert-source-map/1.9.0 debug: registry.npmjs.org/debug/4.3.4 gensync: registry.npmjs.org/gensync/1.0.0-beta.2 @@ -570,76 +542,50 @@ packages: - supports-color dev: true - registry.npmjs.org/@babel/generator/7.19.0: - resolution: {integrity: sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz} - name: '@babel/generator' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.2 - jsesc: registry.npmjs.org/jsesc/2.5.2 - dev: true - - registry.npmjs.org/@babel/generator/7.20.7: - resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz} + registry.npmjs.org/@babel/generator/7.22.3: + resolution: {integrity: sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz} name: '@babel/generator' - version: 7.20.7 + version: 7.22.3 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.2 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.3 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 jsesc: registry.npmjs.org/jsesc/2.5.2 dev: true - registry.npmjs.org/@babel/helper-compilation-targets/7.19.0_@babel+core@7.19.0: - resolution: {integrity: sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz} - id: registry.npmjs.org/@babel/helper-compilation-targets/7.19.0 - name: '@babel/helper-compilation-targets' - version: 7.19.0 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': registry.npmjs.org/@babel/compat-data/7.19.0 - '@babel/core': registry.npmjs.org/@babel/core/7.19.0 - '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option/7.18.6 - browserslist: registry.npmjs.org/browserslist/4.21.3 - semver: registry.npmjs.org/semver/6.3.0 - dev: true - - registry.npmjs.org/@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz} - id: registry.npmjs.org/@babel/helper-compilation-targets/7.20.7 + registry.npmjs.org/@babel/helper-compilation-targets/7.22.1_@babel+core@7.22.1: + resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz} + id: registry.npmjs.org/@babel/helper-compilation-targets/7.22.1 name: '@babel/helper-compilation-targets' - version: 7.20.7 + version: 7.22.1 engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': registry.npmjs.org/@babel/compat-data/7.20.10 - '@babel/core': registry.npmjs.org/@babel/core/7.20.12 - '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option/7.18.6 - browserslist: registry.npmjs.org/browserslist/4.21.4 + '@babel/compat-data': registry.npmjs.org/@babel/compat-data/7.22.3 + '@babel/core': registry.npmjs.org/@babel/core/7.22.1 + '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option/7.21.0 + browserslist: registry.npmjs.org/browserslist/4.21.7 lru-cache: registry.npmjs.org/lru-cache/5.1.1 semver: registry.npmjs.org/semver/6.3.0 dev: true - registry.npmjs.org/@babel/helper-environment-visitor/7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz} + registry.npmjs.org/@babel/helper-environment-visitor/7.22.1: + resolution: {integrity: sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz} name: '@babel/helper-environment-visitor' - version: 7.18.9 + version: 7.22.1 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz} + registry.npmjs.org/@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz} name: '@babel/helper-function-name' - version: 7.19.0 + version: 7.21.0 engines: {node: '>=6.9.0'} dependencies: - '@babel/template': registry.npmjs.org/@babel/template/7.20.7 - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 + '@babel/template': registry.npmjs.org/@babel/template/7.21.9 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 dev: true registry.npmjs.org/@babel/helper-hoist-variables/7.18.6: @@ -648,84 +594,50 @@ packages: version: 7.18.6 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 dev: true - registry.npmjs.org/@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz} + registry.npmjs.org/@babel/helper-module-imports/7.21.4: + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz} name: '@babel/helper-module-imports' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 - dev: true - - registry.npmjs.org/@babel/helper-module-transforms/7.19.0: - resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz} - name: '@babel/helper-module-transforms' - version: 7.19.0 + version: 7.21.4 engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.18.9 - '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports/7.18.6 - '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access/7.18.6 - '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6 - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 - '@babel/template': registry.npmjs.org/@babel/template/7.18.10 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.19.0 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - transitivePeerDependencies: - - supports-color + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 dev: true - registry.npmjs.org/@babel/helper-module-transforms/7.20.11: - resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz} + registry.npmjs.org/@babel/helper-module-transforms/7.22.1: + resolution: {integrity: sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz} name: '@babel/helper-module-transforms' - version: 7.20.11 + version: 7.22.1 engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.18.9 - '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports/7.18.6 - '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access/7.20.2 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.22.1 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports/7.21.4 + '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access/7.21.5 '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6 '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 - '@babel/template': registry.npmjs.org/@babel/template/7.20.7 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.20.12 - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 + '@babel/template': registry.npmjs.org/@babel/template/7.21.9 + '@babel/traverse': registry.npmjs.org/@babel/traverse/7.22.4 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@babel/helper-plugin-utils/7.19.0: - resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz} - name: '@babel/helper-plugin-utils' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dev: true - - registry.npmjs.org/@babel/helper-plugin-utils/7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz} + registry.npmjs.org/@babel/helper-plugin-utils/7.21.5: + resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz} name: '@babel/helper-plugin-utils' - version: 7.20.2 - engines: {node: '>=6.9.0'} - dev: true - - registry.npmjs.org/@babel/helper-simple-access/7.18.6: - resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz} - name: '@babel/helper-simple-access' - version: 7.18.6 + version: 7.21.5 engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 dev: true - registry.npmjs.org/@babel/helper-simple-access/7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz} + registry.npmjs.org/@babel/helper-simple-access/7.21.5: + resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz} name: '@babel/helper-simple-access' - version: 7.20.2 + version: 7.21.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 dev: true registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6: @@ -734,20 +646,13 @@ packages: version: 7.18.6 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 - dev: true - - registry.npmjs.org/@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz} - name: '@babel/helper-string-parser' - version: 7.18.10 - engines: {node: '>=6.9.0'} + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 dev: true - registry.npmjs.org/@babel/helper-string-parser/7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz} + registry.npmjs.org/@babel/helper-string-parser/7.21.5: + resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz} name: '@babel/helper-string-parser' - version: 7.19.4 + version: 7.21.5 engines: {node: '>=6.9.0'} dev: true @@ -758,35 +663,22 @@ packages: engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz} + registry.npmjs.org/@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz} name: '@babel/helper-validator-option' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dev: true - - registry.npmjs.org/@babel/helpers/7.19.0: - resolution: {integrity: sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz} - name: '@babel/helpers' - version: 7.19.0 + version: 7.21.0 engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': registry.npmjs.org/@babel/template/7.18.10 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.19.0 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - transitivePeerDependencies: - - supports-color dev: true - registry.npmjs.org/@babel/helpers/7.20.7: - resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz} + registry.npmjs.org/@babel/helpers/7.22.3: + resolution: {integrity: sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz} name: '@babel/helpers' - version: 7.20.7 + version: 7.22.3 engines: {node: '>=6.9.0'} dependencies: - '@babel/template': registry.npmjs.org/@babel/template/7.20.7 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.20.12 - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 + '@babel/template': registry.npmjs.org/@babel/template/7.21.9 + '@babel/traverse': registry.npmjs.org/@babel/traverse/7.22.4 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 transitivePeerDependencies: - supports-color dev: true @@ -802,58 +694,30 @@ packages: js-tokens: registry.npmjs.org/js-tokens/4.0.0 dev: true - registry.npmjs.org/@babel/parser/7.19.0: - resolution: {integrity: sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz} - name: '@babel/parser' - version: 7.19.0 - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - dev: true - - registry.npmjs.org/@babel/parser/7.20.7: - resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz} + registry.npmjs.org/@babel/parser/7.22.4: + resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz} name: '@babel/parser' - version: 7.20.7 + version: 7.22.4 engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 - dev: true - - registry.npmjs.org/@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.19.0: - resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz} - id: registry.npmjs.org/@babel/plugin-transform-modules-commonjs/7.18.6 - name: '@babel/plugin-transform-modules-commonjs' - version: 7.18.6 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.19.0 - '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms/7.19.0 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.19.0 - '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access/7.18.6 - babel-plugin-dynamic-import-node: registry.npmjs.org/babel-plugin-dynamic-import-node/2.3.3 - transitivePeerDependencies: - - supports-color + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 dev: true - registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz} - id: registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.18.6 + registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.21.0_@babel+core@7.22.1: + resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz} + id: registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.21.0 name: '@babel/plugin-transform-react-jsx-self' - version: 7.18.6 + version: 7.21.0 engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.20.12 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.20.2 + '@babel/core': registry.npmjs.org/@babel/core/7.22.1 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.21.5 dev: true - registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.20.12: + registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.22.1: resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz} id: registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.19.6 name: '@babel/plugin-transform-react-jsx-source' @@ -862,175 +726,134 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.20.12 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.20.2 + '@babel/core': registry.npmjs.org/@babel/core/7.22.1 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.21.5 dev: true - registry.npmjs.org/@babel/runtime/7.19.0: - resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz} + registry.npmjs.org/@babel/runtime/7.22.3: + resolution: {integrity: sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz} name: '@babel/runtime' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: registry.npmjs.org/regenerator-runtime/0.13.9 - - registry.npmjs.org/@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz} - name: '@babel/template' - version: 7.18.10 + version: 7.22.3 engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/parser': registry.npmjs.org/@babel/parser/7.19.0 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 + regenerator-runtime: registry.npmjs.org/regenerator-runtime/0.13.11 dev: true - registry.npmjs.org/@babel/template/7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz} + registry.npmjs.org/@babel/template/7.21.9: + resolution: {integrity: sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz} name: '@babel/template' - version: 7.20.7 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/parser': registry.npmjs.org/@babel/parser/7.20.7 - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 - dev: true - - registry.npmjs.org/@babel/traverse/7.19.0: - resolution: {integrity: sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz} - name: '@babel/traverse' - version: 7.19.0 + version: 7.21.9 engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/generator': registry.npmjs.org/@babel/generator/7.19.0 - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.18.9 - '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name/7.19.0 - '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables/7.18.6 - '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6 - '@babel/parser': registry.npmjs.org/@babel/parser/7.19.0 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - debug: registry.npmjs.org/debug/4.3.4 - globals: registry.npmjs.org/globals/11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.21.4 + '@babel/parser': registry.npmjs.org/@babel/parser/7.22.4 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 dev: true - registry.npmjs.org/@babel/traverse/7.20.12: - resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz} + registry.npmjs.org/@babel/traverse/7.22.4: + resolution: {integrity: sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz} name: '@babel/traverse' - version: 7.20.12 + version: 7.22.4 engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/generator': registry.npmjs.org/@babel/generator/7.20.7 - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.18.9 - '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name/7.19.0 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.21.4 + '@babel/generator': registry.npmjs.org/@babel/generator/7.22.3 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.22.1 + '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name/7.21.0 '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables/7.18.6 '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6 - '@babel/parser': registry.npmjs.org/@babel/parser/7.20.7 - '@babel/types': registry.npmjs.org/@babel/types/7.20.7 + '@babel/parser': registry.npmjs.org/@babel/parser/7.22.4 + '@babel/types': registry.npmjs.org/@babel/types/7.22.4 debug: registry.npmjs.org/debug/4.3.4 globals: registry.npmjs.org/globals/11.12.0 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@babel/types/7.19.0: - resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz} - name: '@babel/types' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser/7.18.10 - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 - to-fast-properties: registry.npmjs.org/to-fast-properties/2.0.0 - dev: true - - registry.npmjs.org/@babel/types/7.20.7: - resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz} + registry.npmjs.org/@babel/types/7.22.4: + resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz} name: '@babel/types' - version: 7.20.7 + version: 7.22.4 engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser/7.19.4 + '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser/7.21.5 '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 to-fast-properties: registry.npmjs.org/to-fast-properties/2.0.0 dev: true - registry.npmjs.org/@changesets/apply-release-plan/6.1.1: - resolution: {integrity: sha512-LaQiP/Wf0zMVR0HNrLQAjz3rsNsr0d/RlnP6Ef4oi8VafOwnY1EoWdK4kssuUJGgNgDyHpomS50dm8CU3D7k7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.1.1.tgz} + registry.npmjs.org/@changesets/apply-release-plan/6.1.3: + resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.1.3.tgz} name: '@changesets/apply-release-plan' - version: 6.1.1 + version: 6.1.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 - '@changesets/config': registry.npmjs.org/@changesets/config/2.2.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 + '@changesets/config': registry.npmjs.org/@changesets/config/2.3.0 '@changesets/get-version-range-type': registry.npmjs.org/@changesets/get-version-range-type/0.3.2 - '@changesets/git': registry.npmjs.org/@changesets/git/1.5.0 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/git': registry.npmjs.org/@changesets/git/2.0.0 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 detect-indent: registry.npmjs.org/detect-indent/6.1.0 fs-extra: registry.npmjs.org/fs-extra/7.0.1 lodash.startcase: registry.npmjs.org/lodash.startcase/4.4.0 outdent: registry.npmjs.org/outdent/0.5.0 - prettier: registry.npmjs.org/prettier/2.8.7 + prettier: registry.npmjs.org/prettier/2.8.8 resolve-from: registry.npmjs.org/resolve-from/5.0.0 semver: registry.npmjs.org/semver/5.7.1 dev: true - registry.npmjs.org/@changesets/assemble-release-plan/5.2.2: - resolution: {integrity: sha512-B1qxErQd85AeZgZFZw2bDKyOfdXHhG+X5S+W3Da2yCem8l/pRy4G/S7iOpEcMwg6lH8q2ZhgbZZwZ817D+aLuQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.2.tgz} + registry.npmjs.org/@changesets/assemble-release-plan/5.2.3: + resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.3.tgz} name: '@changesets/assemble-release-plan' - version: 5.2.2 + version: 5.2.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.4 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.5 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 semver: registry.npmjs.org/semver/5.7.1 dev: true - registry.npmjs.org/@changesets/changelog-git/0.1.13: - resolution: {integrity: sha512-zvJ50Q+EUALzeawAxax6nF2WIcSsC5PwbuLeWkckS8ulWnuPYx8Fn/Sjd3rF46OzeKA8t30loYYV6TIzp4DIdg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.13.tgz} + registry.npmjs.org/@changesets/changelog-git/0.1.14: + resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.14.tgz} name: '@changesets/changelog-git' - version: 0.1.13 + version: 0.1.14 dependencies: - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 dev: true - registry.npmjs.org/@changesets/changelog-github/0.4.7: - resolution: {integrity: sha512-UUG5sKwShs5ha1GFnayUpZNcDGWoY7F5XxhOEHS62sDPOtoHQZsG3j1nC5RxZ3M1URHA321cwVZHeXgu99Y3ew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.4.7.tgz} + registry.npmjs.org/@changesets/changelog-github/0.4.8: + resolution: {integrity: sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.4.8.tgz} name: '@changesets/changelog-github' - version: 0.4.7 + version: 0.4.8 dependencies: - '@changesets/get-github-info': registry.npmjs.org/@changesets/get-github-info/0.5.1 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/get-github-info': registry.npmjs.org/@changesets/get-github-info/0.5.2 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 dotenv: registry.npmjs.org/dotenv/8.6.0 transitivePeerDependencies: - encoding dev: true - registry.npmjs.org/@changesets/cli/2.25.0: - resolution: {integrity: sha512-Svu5KD2enurVHGEEzCRlaojrHjVYgF9srmMP9VQSy9c1TspX6C9lDPpulsSNIjYY9BuU/oiWpjBgR7RI9eQiAA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/cli/-/cli-2.25.0.tgz} + registry.npmjs.org/@changesets/cli/2.26.1: + resolution: {integrity: sha512-XnTa+b51vt057fyAudvDKGB0Sh72xutQZNAdXkCqPBKO2zvs2yYZx5hFZj1u9cbtpwM6Sxtcr02/FQJfZOzemQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/cli/-/cli-2.26.1.tgz} name: '@changesets/cli' - version: 2.25.0 + version: 2.26.1 hasBin: true dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 - '@changesets/apply-release-plan': registry.npmjs.org/@changesets/apply-release-plan/6.1.1 - '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan/5.2.2 - '@changesets/changelog-git': registry.npmjs.org/@changesets/changelog-git/0.1.13 - '@changesets/config': registry.npmjs.org/@changesets/config/2.2.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 + '@changesets/apply-release-plan': registry.npmjs.org/@changesets/apply-release-plan/6.1.3 + '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan/5.2.3 + '@changesets/changelog-git': registry.npmjs.org/@changesets/changelog-git/0.1.14 + '@changesets/config': registry.npmjs.org/@changesets/config/2.3.0 '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.4 - '@changesets/get-release-plan': registry.npmjs.org/@changesets/get-release-plan/3.0.15 - '@changesets/git': registry.npmjs.org/@changesets/git/1.5.0 + '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.5 + '@changesets/get-release-plan': registry.npmjs.org/@changesets/get-release-plan/3.0.16 + '@changesets/git': registry.npmjs.org/@changesets/git/2.0.0 '@changesets/logger': registry.npmjs.org/@changesets/logger/0.0.5 - '@changesets/pre': registry.npmjs.org/@changesets/pre/1.0.13 - '@changesets/read': registry.npmjs.org/@changesets/read/0.5.8 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 - '@changesets/write': registry.npmjs.org/@changesets/write/0.2.1 + '@changesets/pre': registry.npmjs.org/@changesets/pre/1.0.14 + '@changesets/read': registry.npmjs.org/@changesets/read/0.5.9 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 + '@changesets/write': registry.npmjs.org/@changesets/write/0.2.3 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 '@types/is-ci': registry.npmjs.org/@types/is-ci/3.0.0 '@types/semver': registry.npmjs.org/@types/semver/6.2.3 @@ -1049,18 +872,18 @@ packages: semver: registry.npmjs.org/semver/5.7.1 spawndamnit: registry.npmjs.org/spawndamnit/2.0.0 term-size: registry.npmjs.org/term-size/2.2.1 - tty-table: registry.npmjs.org/tty-table/4.1.6 + tty-table: registry.npmjs.org/tty-table/4.2.1 dev: true - registry.npmjs.org/@changesets/config/2.2.0: - resolution: {integrity: sha512-GGaokp3nm5FEDk/Fv2PCRcQCOxGKKPRZ7prcMqxEr7VSsG75MnChQE8plaW1k6V8L2bJE+jZWiRm19LbnproOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/config/-/config-2.2.0.tgz} + registry.npmjs.org/@changesets/config/2.3.0: + resolution: {integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/config/-/config-2.3.0.tgz} name: '@changesets/config' - version: 2.2.0 + version: 2.3.0 dependencies: '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.4 + '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.5 '@changesets/logger': registry.npmjs.org/@changesets/logger/0.0.5 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 fs-extra: registry.npmjs.org/fs-extra/7.0.1 micromatch: registry.npmjs.org/micromatch/4.0.5 @@ -1074,40 +897,40 @@ packages: extendable-error: registry.npmjs.org/extendable-error/0.1.7 dev: true - registry.npmjs.org/@changesets/get-dependents-graph/1.3.4: - resolution: {integrity: sha512-+C4AOrrFY146ydrgKOo5vTZfj7vetNu1tWshOID+UjPUU9afYGDXI8yLnAeib1ffeBXV3TuGVcyphKpJ3cKe+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.4.tgz} + registry.npmjs.org/@changesets/get-dependents-graph/1.3.5: + resolution: {integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.5.tgz} name: '@changesets/get-dependents-graph' - version: 1.3.4 + version: 1.3.5 dependencies: - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 chalk: registry.npmjs.org/chalk/2.4.2 fs-extra: registry.npmjs.org/fs-extra/7.0.1 semver: registry.npmjs.org/semver/5.7.1 dev: true - registry.npmjs.org/@changesets/get-github-info/0.5.1: - resolution: {integrity: sha512-w2yl3AuG+hFuEEmT6j1zDlg7GQLM/J2UxTmk0uJBMdRqHni4zXGe/vUlPfLom5KfX3cRfHc0hzGvloDPjWFNZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.5.1.tgz} + registry.npmjs.org/@changesets/get-github-info/0.5.2: + resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.5.2.tgz} name: '@changesets/get-github-info' - version: 0.5.1 + version: 0.5.2 dependencies: dataloader: registry.npmjs.org/dataloader/1.4.0 - node-fetch: registry.npmjs.org/node-fetch/2.6.7 + node-fetch: registry.npmjs.org/node-fetch/2.6.11 transitivePeerDependencies: - encoding dev: true - registry.npmjs.org/@changesets/get-release-plan/3.0.15: - resolution: {integrity: sha512-W1tFwxE178/en+zSj/Nqbc3mvz88mcdqUMJhRzN1jDYqN3QI4ifVaRF9mcWUU+KI0gyYEtYR65tour690PqTcA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.15.tgz} + registry.npmjs.org/@changesets/get-release-plan/3.0.16: + resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.16.tgz} name: '@changesets/get-release-plan' - version: 3.0.15 - dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 - '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan/5.2.2 - '@changesets/config': registry.npmjs.org/@changesets/config/2.2.0 - '@changesets/pre': registry.npmjs.org/@changesets/pre/1.0.13 - '@changesets/read': registry.npmjs.org/@changesets/read/0.5.8 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + version: 3.0.16 + dependencies: + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 + '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan/5.2.3 + '@changesets/config': registry.npmjs.org/@changesets/config/2.3.0 + '@changesets/pre': registry.npmjs.org/@changesets/pre/1.0.14 + '@changesets/read': registry.npmjs.org/@changesets/read/0.5.9 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 dev: true @@ -1117,16 +940,17 @@ packages: version: 0.3.2 dev: true - registry.npmjs.org/@changesets/git/1.5.0: - resolution: {integrity: sha512-Xo8AT2G7rQJSwV87c8PwMm6BAc98BnufRMsML7m7Iw8Or18WFvFmxqG5aOL5PBvhgq9KrKvaeIBNIymracSuHg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/git/-/git-1.5.0.tgz} + registry.npmjs.org/@changesets/git/2.0.0: + resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/git/-/git-2.0.0.tgz} name: '@changesets/git' - version: 1.5.0 + version: 2.0.0 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 is-subdir: registry.npmjs.org/is-subdir/1.2.0 + micromatch: registry.npmjs.org/micromatch/4.0.5 spawndamnit: registry.npmjs.org/spawndamnit/2.0.0 dev: true @@ -1138,37 +962,37 @@ packages: chalk: registry.npmjs.org/chalk/2.4.2 dev: true - registry.npmjs.org/@changesets/parse/0.3.15: - resolution: {integrity: sha512-3eDVqVuBtp63i+BxEWHPFj2P1s3syk0PTrk2d94W9JD30iG+OER0Y6n65TeLlY8T2yB9Fvj6Ev5Gg0+cKe/ZUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/parse/-/parse-0.3.15.tgz} + registry.npmjs.org/@changesets/parse/0.3.16: + resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/parse/-/parse-0.3.16.tgz} name: '@changesets/parse' - version: 0.3.15 + version: 0.3.16 dependencies: - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 js-yaml: registry.npmjs.org/js-yaml/3.14.1 dev: true - registry.npmjs.org/@changesets/pre/1.0.13: - resolution: {integrity: sha512-jrZc766+kGZHDukjKhpBXhBJjVQMied4Fu076y9guY1D3H622NOw8AQaLV3oQsDtKBTrT2AUFjt9Z2Y9Qx+GfA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/pre/-/pre-1.0.13.tgz} + registry.npmjs.org/@changesets/pre/1.0.14: + resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/pre/-/pre-1.0.14.tgz} name: '@changesets/pre' - version: 1.0.13 + version: 1.0.14 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 fs-extra: registry.npmjs.org/fs-extra/7.0.1 dev: true - registry.npmjs.org/@changesets/read/0.5.8: - resolution: {integrity: sha512-eYaNfxemgX7f7ELC58e7yqQICW5FB7V+bd1lKt7g57mxUrTveYME+JPaBPpYx02nP53XI6CQp6YxnR9NfmFPKw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/read/-/read-0.5.8.tgz} + registry.npmjs.org/@changesets/read/0.5.9: + resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/read/-/read-0.5.9.tgz} name: '@changesets/read' - version: 0.5.8 + version: 0.5.9 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 - '@changesets/git': registry.npmjs.org/@changesets/git/1.5.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 + '@changesets/git': registry.npmjs.org/@changesets/git/2.0.0 '@changesets/logger': registry.npmjs.org/@changesets/logger/0.0.5 - '@changesets/parse': registry.npmjs.org/@changesets/parse/0.3.15 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@changesets/parse': registry.npmjs.org/@changesets/parse/0.3.16 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 chalk: registry.npmjs.org/chalk/2.4.2 fs-extra: registry.npmjs.org/fs-extra/7.0.1 p-filter: registry.npmjs.org/p-filter/2.1.0 @@ -1180,22 +1004,22 @@ packages: version: 4.1.0 dev: true - registry.npmjs.org/@changesets/types/5.2.0: - resolution: {integrity: sha512-km/66KOqJC+eicZXsm2oq8A8bVTSpkZJ60iPV/Nl5Z5c7p9kk8xxh6XGRTlnludHldxOOfudhnDN2qPxtHmXzA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/types/-/types-5.2.0.tgz} + registry.npmjs.org/@changesets/types/5.2.1: + resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/types/-/types-5.2.1.tgz} name: '@changesets/types' - version: 5.2.0 + version: 5.2.1 dev: true - registry.npmjs.org/@changesets/write/0.2.1: - resolution: {integrity: sha512-KUd49nt2fnYdGixIqTi1yVE1nAoZYUMdtB3jBfp77IMqjZ65hrmZE5HdccDlTeClZN0420ffpnfET3zzeY8pdw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/write/-/write-0.2.1.tgz} + registry.npmjs.org/@changesets/write/0.2.3: + resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/write/-/write-0.2.3.tgz} name: '@changesets/write' - version: 0.2.1 + version: 0.2.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 + '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 fs-extra: registry.npmjs.org/fs-extra/7.0.1 human-id: registry.npmjs.org/human-id/1.0.2 - prettier: registry.npmjs.org/prettier/2.8.7 + prettier: registry.npmjs.org/prettier/2.8.8 dev: true registry.npmjs.org/@colors/colors/1.5.0: @@ -1207,14 +1031,14 @@ packages: dev: true optional: true - registry.npmjs.org/@cypress/request/2.88.10: - resolution: {integrity: sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz} + registry.npmjs.org/@cypress/request/2.88.11: + resolution: {integrity: sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz} name: '@cypress/request' - version: 2.88.10 + version: 2.88.11 engines: {node: '>= 6'} dependencies: aws-sign2: registry.npmjs.org/aws-sign2/0.7.0 - aws4: registry.npmjs.org/aws4/1.11.0 + aws4: registry.npmjs.org/aws4/1.12.0 caseless: registry.npmjs.org/caseless/0.12.0 combined-stream: registry.npmjs.org/combined-stream/1.0.8 extend: registry.npmjs.org/extend/3.0.2 @@ -1226,7 +1050,7 @@ packages: json-stringify-safe: registry.npmjs.org/json-stringify-safe/5.0.1 mime-types: registry.npmjs.org/mime-types/2.1.35 performance-now: registry.npmjs.org/performance-now/2.1.0 - qs: registry.npmjs.org/qs/6.5.3 + qs: registry.npmjs.org/qs/6.10.4 safe-buffer: registry.npmjs.org/safe-buffer/5.2.1 tough-cookie: registry.npmjs.org/tough-cookie/2.5.0 tunnel-agent: registry.npmjs.org/tunnel-agent/0.6.0 @@ -1251,21 +1075,10 @@ packages: - supports-color dev: true - registry.npmjs.org/@esbuild/android-arm/0.16.16: - resolution: {integrity: sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz} - name: '@esbuild/android-arm' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/android-arm/0.17.14: - resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.14.tgz} + registry.npmjs.org/@esbuild/android-arm/0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz} name: '@esbuild/android-arm' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1273,21 +1086,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/android-arm64/0.16.16: - resolution: {integrity: sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz} - name: '@esbuild/android-arm64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/android-arm64/0.17.14: - resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.14.tgz} + registry.npmjs.org/@esbuild/android-arm64/0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz} name: '@esbuild/android-arm64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1295,21 +1097,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/android-x64/0.16.16: - resolution: {integrity: sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz} - name: '@esbuild/android-x64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/android-x64/0.17.14: - resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.14.tgz} + registry.npmjs.org/@esbuild/android-x64/0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz} name: '@esbuild/android-x64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1317,21 +1108,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/darwin-arm64/0.16.16: - resolution: {integrity: sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz} - name: '@esbuild/darwin-arm64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/darwin-arm64/0.17.14: - resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.14.tgz} + registry.npmjs.org/@esbuild/darwin-arm64/0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz} name: '@esbuild/darwin-arm64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1339,21 +1119,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/darwin-x64/0.16.16: - resolution: {integrity: sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz} - name: '@esbuild/darwin-x64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/darwin-x64/0.17.14: - resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.14.tgz} + registry.npmjs.org/@esbuild/darwin-x64/0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz} name: '@esbuild/darwin-x64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1361,21 +1130,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/freebsd-arm64/0.16.16: - resolution: {integrity: sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz} - name: '@esbuild/freebsd-arm64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/freebsd-arm64/0.17.14: - resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.14.tgz} + registry.npmjs.org/@esbuild/freebsd-arm64/0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz} name: '@esbuild/freebsd-arm64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1383,21 +1141,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/freebsd-x64/0.16.16: - resolution: {integrity: sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz} - name: '@esbuild/freebsd-x64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/freebsd-x64/0.17.14: - resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.14.tgz} + registry.npmjs.org/@esbuild/freebsd-x64/0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz} name: '@esbuild/freebsd-x64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1405,21 +1152,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-arm/0.16.16: - resolution: {integrity: sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz} - name: '@esbuild/linux-arm' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-arm/0.17.14: - resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-arm/0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz} name: '@esbuild/linux-arm' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1427,21 +1163,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-arm64/0.16.16: - resolution: {integrity: sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz} - name: '@esbuild/linux-arm64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-arm64/0.17.14: - resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-arm64/0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz} name: '@esbuild/linux-arm64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1449,21 +1174,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-ia32/0.16.16: - resolution: {integrity: sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz} - name: '@esbuild/linux-ia32' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-ia32/0.17.14: - resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-ia32/0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz} name: '@esbuild/linux-ia32' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1471,21 +1185,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-loong64/0.16.16: - resolution: {integrity: sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz} - name: '@esbuild/linux-loong64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-loong64/0.17.14: - resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-loong64/0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz} name: '@esbuild/linux-loong64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1493,21 +1196,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-mips64el/0.16.16: - resolution: {integrity: sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz} - name: '@esbuild/linux-mips64el' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-mips64el/0.17.14: - resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-mips64el/0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz} name: '@esbuild/linux-mips64el' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1515,21 +1207,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-ppc64/0.16.16: - resolution: {integrity: sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz} - name: '@esbuild/linux-ppc64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-ppc64/0.17.14: - resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-ppc64/0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz} name: '@esbuild/linux-ppc64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1537,21 +1218,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-riscv64/0.16.16: - resolution: {integrity: sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz} - name: '@esbuild/linux-riscv64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-riscv64/0.17.14: - resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-riscv64/0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz} name: '@esbuild/linux-riscv64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1559,21 +1229,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-s390x/0.16.16: - resolution: {integrity: sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz} - name: '@esbuild/linux-s390x' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/linux-s390x/0.17.14: - resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.14.tgz} + registry.npmjs.org/@esbuild/linux-s390x/0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz} name: '@esbuild/linux-s390x' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1581,10 +1240,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-x64/0.16.16: - resolution: {integrity: sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz} + registry.npmjs.org/@esbuild/linux-x64/0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz} name: '@esbuild/linux-x64' - version: 0.16.16 + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1592,120 +1251,54 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-x64/0.17.14: - resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.14.tgz} - name: '@esbuild/linux-x64' - version: 0.17.14 + registry.npmjs.org/@esbuild/netbsd-x64/0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz} + name: '@esbuild/netbsd-x64' + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] - os: [linux] + os: [netbsd] requiresBuild: true dev: true optional: true - registry.npmjs.org/@esbuild/netbsd-x64/0.16.16: - resolution: {integrity: sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz} - name: '@esbuild/netbsd-x64' - version: 0.16.16 + registry.npmjs.org/@esbuild/openbsd-x64/0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz} + name: '@esbuild/openbsd-x64' + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] - os: [netbsd] + os: [openbsd] requiresBuild: true dev: true optional: true - registry.npmjs.org/@esbuild/netbsd-x64/0.17.14: - resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.14.tgz} - name: '@esbuild/netbsd-x64' - version: 0.17.14 + registry.npmjs.org/@esbuild/sunos-x64/0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz} + name: '@esbuild/sunos-x64' + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] - os: [netbsd] + os: [sunos] requiresBuild: true dev: true optional: true - registry.npmjs.org/@esbuild/openbsd-x64/0.16.16: - resolution: {integrity: sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz} - name: '@esbuild/openbsd-x64' - version: 0.16.16 + registry.npmjs.org/@esbuild/win32-arm64/0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz} + name: '@esbuild/win32-arm64' + version: 0.17.19 engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] + cpu: [arm64] + os: [win32] requiresBuild: true dev: true optional: true - registry.npmjs.org/@esbuild/openbsd-x64/0.17.14: - resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.14.tgz} - name: '@esbuild/openbsd-x64' - version: 0.17.14 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/sunos-x64/0.16.16: - resolution: {integrity: sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz} - name: '@esbuild/sunos-x64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/sunos-x64/0.17.14: - resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.14.tgz} - name: '@esbuild/sunos-x64' - version: 0.17.14 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/win32-arm64/0.16.16: - resolution: {integrity: sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz} - name: '@esbuild/win32-arm64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/win32-arm64/0.17.14: - resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.14.tgz} - name: '@esbuild/win32-arm64' - version: 0.17.14 - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/win32-ia32/0.16.16: - resolution: {integrity: sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz} - name: '@esbuild/win32-ia32' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/win32-ia32/0.17.14: - resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.14.tgz} + registry.npmjs.org/@esbuild/win32-ia32/0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz} name: '@esbuild/win32-ia32' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1713,21 +1306,10 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/win32-x64/0.16.16: - resolution: {integrity: sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz} - name: '@esbuild/win32-x64' - version: 0.16.16 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmjs.org/@esbuild/win32-x64/0.17.14: - resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.14.tgz} + registry.npmjs.org/@esbuild/win32-x64/0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz} name: '@esbuild/win32-x64' - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1735,67 +1317,35 @@ packages: dev: true optional: true - registry.npmjs.org/@eslint-community/eslint-utils/4.2.0_eslint@8.23.1: - resolution: {integrity: sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz} - id: registry.npmjs.org/@eslint-community/eslint-utils/4.2.0 - name: '@eslint-community/eslint-utils' - version: 4.2.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.23.1 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 - dev: true - - registry.npmjs.org/@eslint-community/eslint-utils/4.2.0_eslint@8.36.0: - resolution: {integrity: sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz} - id: registry.npmjs.org/@eslint-community/eslint-utils/4.2.0 + registry.npmjs.org/@eslint-community/eslint-utils/4.4.0_eslint@8.41.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.2.0 + 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.36.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 + eslint: registry.npmjs.org/eslint/8.41.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 dev: true - registry.npmjs.org/@eslint-community/regexpp/4.4.0: - resolution: {integrity: sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz} + registry.npmjs.org/@eslint-community/regexpp/4.5.1: + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz} name: '@eslint-community/regexpp' - version: 4.4.0 + version: 4.5.1 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - registry.npmjs.org/@eslint/eslintrc/1.3.2: - resolution: {integrity: sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz} - name: '@eslint/eslintrc' - version: 1.3.2 - 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 - espree: registry.npmjs.org/espree/9.4.0 - globals: registry.npmjs.org/globals/13.17.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/eslintrc/2.0.1: - resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz} + registry.npmjs.org/@eslint/eslintrc/2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz} name: '@eslint/eslintrc' - version: 2.0.1 + version: 2.0.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 - espree: registry.npmjs.org/espree/9.5.0 + espree: registry.npmjs.org/espree/9.5.2 globals: registry.npmjs.org/globals/13.20.0 ignore: registry.npmjs.org/ignore/5.2.4 import-fresh: registry.npmjs.org/import-fresh/3.3.0 @@ -1806,10 +1356,10 @@ packages: - supports-color dev: true - registry.npmjs.org/@eslint/js/8.36.0: - resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz} + registry.npmjs.org/@eslint/js/8.41.0: + resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz} name: '@eslint/js' - version: 8.36.0 + version: 8.41.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1827,19 +1377,6 @@ packages: '@hapi/hoek': registry.npmjs.org/@hapi/hoek/9.3.0 dev: true - registry.npmjs.org/@humanwhocodes/config-array/0.10.4: - resolution: {integrity: sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz} - name: '@humanwhocodes/config-array' - version: 0.10.4 - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': registry.npmjs.org/@humanwhocodes/object-schema/1.2.1 - debug: registry.npmjs.org/debug/4.3.4 - minimatch: registry.npmjs.org/minimatch/3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@humanwhocodes/config-array/0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz} name: '@humanwhocodes/config-array' @@ -1853,12 +1390,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/1.0.2: - resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz} - name: '@humanwhocodes/gitignore-to-minimatch' - version: 1.0.2 - dev: true - registry.npmjs.org/@humanwhocodes/module-importer/1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} name: '@humanwhocodes/module-importer' @@ -1872,25 +1403,15 @@ packages: version: 1.2.1 dev: true - registry.npmjs.org/@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz} - name: '@jridgewell/gen-mapping' - version: 0.1.1 - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': registry.npmjs.org/@jridgewell/set-array/1.1.2 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 - dev: true - - registry.npmjs.org/@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz} + registry.npmjs.org/@jridgewell/gen-mapping/0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz} name: '@jridgewell/gen-mapping' - version: 0.3.2 + version: 0.3.3 engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': registry.npmjs.org/@jridgewell/set-array/1.1.2 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.17 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 dev: true registry.npmjs.org/@jridgewell/resolve-uri/3.1.0: @@ -1907,13 +1428,13 @@ packages: engines: {node: '>=6.0.0'} dev: true - registry.npmjs.org/@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz} + registry.npmjs.org/@jridgewell/source-map/0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz} name: '@jridgewell/source-map' - version: 0.3.2 + version: 0.3.3 dependencies: - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.2 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.17 + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.3 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 dev: true registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14: @@ -1922,10 +1443,16 @@ packages: version: 1.4.14 dev: true - registry.npmjs.org/@jridgewell/trace-mapping/0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz} + registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz} + name: '@jridgewell/sourcemap-codec' + version: 1.4.15 + dev: true + + registry.npmjs.org/@jridgewell/trace-mapping/0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz} name: '@jridgewell/trace-mapping' - version: 0.3.17 + version: 0.3.18 dependencies: '@jridgewell/resolve-uri': registry.npmjs.org/@jridgewell/resolve-uri/3.1.0 '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 @@ -1936,7 +1463,7 @@ packages: name: '@manypkg/find-root' version: 1.1.0 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 '@types/node': registry.npmjs.org/@types/node/12.20.55 find-up: registry.npmjs.org/find-up/4.1.0 fs-extra: registry.npmjs.org/fs-extra/8.1.0 @@ -1947,7 +1474,7 @@ packages: name: '@manypkg/get-packages' version: 1.1.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 '@changesets/types': registry.npmjs.org/@changesets/types/4.1.0 '@manypkg/find-root': registry.npmjs.org/@manypkg/find-root/1.1.0 fs-extra: registry.npmjs.org/fs-extra/8.1.0 @@ -1988,103 +1515,18 @@ packages: version: 1.0.0-next.21 dev: true - registry.npmjs.org/@preconstruct/cli/2.2.1: - resolution: {integrity: sha512-G+sUV9o8l6Ds/82qJZYTXkCsVqPXLuD+bv+nVQeo3OL+eqzO/uAiBBFVp0DMcBJiyQYeU9nb+V8q22/PPaepDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@preconstruct/cli/-/cli-2.2.1.tgz} - name: '@preconstruct/cli' - version: 2.2.1 - hasBin: true - dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/core': registry.npmjs.org/@babel/core/7.19.0 - '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports/7.18.6 - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.19.0 - '@preconstruct/hook': registry.npmjs.org/@preconstruct/hook/0.4.0 - '@rollup/plugin-alias': registry.npmjs.org/@rollup/plugin-alias/3.1.9_rollup@2.79.1 - '@rollup/plugin-commonjs': registry.npmjs.org/@rollup/plugin-commonjs/15.1.0_rollup@2.79.1 - '@rollup/plugin-json': registry.npmjs.org/@rollup/plugin-json/4.1.0_rollup@2.79.1 - '@rollup/plugin-node-resolve': registry.npmjs.org/@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1 - '@rollup/plugin-replace': registry.npmjs.org/@rollup/plugin-replace/2.4.2_rollup@2.79.1 - builtin-modules: registry.npmjs.org/builtin-modules/3.3.0 - chalk: registry.npmjs.org/chalk/4.1.2 - dataloader: registry.npmjs.org/dataloader/2.1.0 - detect-indent: registry.npmjs.org/detect-indent/6.1.0 - enquirer: registry.npmjs.org/enquirer/2.3.6 - estree-walker: registry.npmjs.org/estree-walker/2.0.2 - fast-deep-equal: registry.npmjs.org/fast-deep-equal/2.0.1 - fast-glob: registry.npmjs.org/fast-glob/3.2.12 - fs-extra: registry.npmjs.org/fs-extra/9.1.0 - is-ci: registry.npmjs.org/is-ci/2.0.0 - is-reference: registry.npmjs.org/is-reference/1.2.1 - jest-worker: registry.npmjs.org/jest-worker/26.6.2 - magic-string: registry.npmjs.org/magic-string/0.25.9 - meow: registry.npmjs.org/meow/7.1.1 - ms: registry.npmjs.org/ms/2.1.3 - normalize-path: registry.npmjs.org/normalize-path/3.0.0 - npm-packlist: registry.npmjs.org/npm-packlist/2.2.2 - p-limit: registry.npmjs.org/p-limit/3.1.0 - parse-glob: registry.npmjs.org/parse-glob/3.0.4 - parse-json: registry.npmjs.org/parse-json/5.2.0 - quick-lru: registry.npmjs.org/quick-lru/5.1.1 - resolve: registry.npmjs.org/resolve/1.22.1 - resolve-from: registry.npmjs.org/resolve-from/5.0.0 - rollup: registry.npmjs.org/rollup/2.79.1 - semver: registry.npmjs.org/semver/7.3.7 - terser: registry.npmjs.org/terser/5.15.0 - v8-compile-cache: registry.npmjs.org/v8-compile-cache/2.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/@preconstruct/hook/0.4.0: - resolution: {integrity: sha512-a7mrlPTM3tAFJyz43qb4pPVpUx8j8TzZBFsNFqcKcE/sEakNXRlQAuCT4RGZRf9dQiiUnBahzSIWawU4rENl+Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@preconstruct/hook/-/hook-0.4.0.tgz} - name: '@preconstruct/hook' - version: 0.4.0 - dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.19.0 - '@babel/plugin-transform-modules-commonjs': registry.npmjs.org/@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.19.0 - pirates: registry.npmjs.org/pirates/4.0.5 - source-map-support: registry.npmjs.org/source-map-support/0.5.21 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/@rollup/plugin-alias/3.1.9_rollup@2.79.1: - resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz} - id: registry.npmjs.org/@rollup/plugin-alias/3.1.9 - name: '@rollup/plugin-alias' - version: 3.1.9 - engines: {node: '>=8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - rollup: registry.npmjs.org/rollup/2.79.1 - slash: registry.npmjs.org/slash/3.0.0 - dev: true - - registry.npmjs.org/@rollup/plugin-commonjs/15.1.0_rollup@2.79.1: - resolution: {integrity: sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz} - id: registry.npmjs.org/@rollup/plugin-commonjs/15.1.0 - name: '@rollup/plugin-commonjs' - version: 15.1.0 - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^2.22.0 - dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/3.1.0_rollup@2.79.1 - commondir: registry.npmjs.org/commondir/1.0.1 - estree-walker: registry.npmjs.org/estree-walker/2.0.2 - glob: registry.npmjs.org/glob/7.2.3 - is-reference: registry.npmjs.org/is-reference/1.2.1 - magic-string: registry.npmjs.org/magic-string/0.25.9 - resolve: registry.npmjs.org/resolve/1.22.1 - rollup: registry.npmjs.org/rollup/2.79.1 - dev: true + registry.npmjs.org/@remix-run/router/1.6.2: + resolution: {integrity: sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz} + name: '@remix-run/router' + version: 1.6.2 + engines: {node: '>=14'} + dev: false - registry.npmjs.org/@rollup/plugin-commonjs/24.0.1_rollup@3.20.2: - resolution: {integrity: sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz} - id: registry.npmjs.org/@rollup/plugin-commonjs/24.0.1 + 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 name: '@rollup/plugin-commonjs' - version: 24.0.1 + version: 25.0.0 engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0 @@ -2092,50 +1534,20 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.20.2 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.23.0 commondir: registry.npmjs.org/commondir/1.0.1 estree-walker: registry.npmjs.org/estree-walker/2.0.2 - glob: registry.npmjs.org/glob/8.0.3 + glob: registry.npmjs.org/glob/8.1.0 is-reference: registry.npmjs.org/is-reference/1.2.1 magic-string: registry.npmjs.org/magic-string/0.27.0 - rollup: registry.npmjs.org/rollup/3.20.2 + rollup: registry.npmjs.org/rollup/3.23.0 dev: true - registry.npmjs.org/@rollup/plugin-json/4.1.0_rollup@2.79.1: - resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz} - id: registry.npmjs.org/@rollup/plugin-json/4.1.0 - name: '@rollup/plugin-json' - version: 4.1.0 - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/3.1.0_rollup@2.79.1 - rollup: registry.npmjs.org/rollup/2.79.1 - dev: true - - registry.npmjs.org/@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1: - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz} - id: registry.npmjs.org/@rollup/plugin-node-resolve/11.2.1 + registry.npmjs.org/@rollup/plugin-node-resolve/15.1.0_rollup@3.23.0: + resolution: {integrity: sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz} + id: registry.npmjs.org/@rollup/plugin-node-resolve/15.1.0 name: '@rollup/plugin-node-resolve' - version: 11.2.1 - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/3.1.0_rollup@2.79.1 - '@types/resolve': registry.npmjs.org/@types/resolve/1.17.1 - builtin-modules: registry.npmjs.org/builtin-modules/3.3.0 - deepmerge: registry.npmjs.org/deepmerge/4.2.2 - is-module: registry.npmjs.org/is-module/1.0.0 - resolve: registry.npmjs.org/resolve/1.22.1 - rollup: registry.npmjs.org/rollup/2.79.1 - dev: true - - registry.npmjs.org/@rollup/plugin-node-resolve/15.0.1_rollup@3.20.2: - resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz} - id: registry.npmjs.org/@rollup/plugin-node-resolve/15.0.1 - name: '@rollup/plugin-node-resolve' - version: 15.0.1 + version: 15.1.0 engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0 @@ -2143,29 +1555,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.20.2 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.23.0 '@types/resolve': registry.npmjs.org/@types/resolve/1.20.2 - deepmerge: registry.npmjs.org/deepmerge/4.2.2 - is-builtin-module: registry.npmjs.org/is-builtin-module/3.2.0 + deepmerge: registry.npmjs.org/deepmerge/4.3.1 + is-builtin-module: registry.npmjs.org/is-builtin-module/3.2.1 is-module: registry.npmjs.org/is-module/1.0.0 - resolve: registry.npmjs.org/resolve/1.22.1 - rollup: registry.npmjs.org/rollup/3.20.2 - dev: true - - registry.npmjs.org/@rollup/plugin-replace/2.4.2_rollup@2.79.1: - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz} - id: registry.npmjs.org/@rollup/plugin-replace/2.4.2 - name: '@rollup/plugin-replace' - version: 2.4.2 - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/3.1.0_rollup@2.79.1 - magic-string: registry.npmjs.org/magic-string/0.25.9 - rollup: registry.npmjs.org/rollup/2.79.1 + resolve: registry.npmjs.org/resolve/1.22.2 + rollup: registry.npmjs.org/rollup/3.23.0 dev: true - registry.npmjs.org/@rollup/plugin-replace/5.0.2_rollup@3.20.2: + registry.npmjs.org/@rollup/plugin-replace/5.0.2_rollup@3.23.0: resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz} id: registry.npmjs.org/@rollup/plugin-replace/5.0.2 name: '@rollup/plugin-replace' @@ -2177,16 +1576,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.20.2 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.23.0 magic-string: registry.npmjs.org/magic-string/0.27.0 - rollup: registry.npmjs.org/rollup/3.20.2 + rollup: registry.npmjs.org/rollup/3.23.0 dev: true - registry.npmjs.org/@rollup/plugin-terser/0.4.0_rollup@3.20.2: - resolution: {integrity: sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz} - id: registry.npmjs.org/@rollup/plugin-terser/0.4.0 + registry.npmjs.org/@rollup/plugin-terser/0.4.3_rollup@3.23.0: + resolution: {integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.3.tgz} + id: registry.npmjs.org/@rollup/plugin-terser/0.4.3 name: '@rollup/plugin-terser' - version: 0.4.0 + version: 0.4.3 engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.x || ^3.x @@ -2194,13 +1593,13 @@ packages: rollup: optional: true dependencies: - rollup: registry.npmjs.org/rollup/3.20.2 - serialize-javascript: registry.npmjs.org/serialize-javascript/6.0.0 - smob: registry.npmjs.org/smob/0.0.6 - terser: registry.npmjs.org/terser/5.16.1 + rollup: registry.npmjs.org/rollup/3.23.0 + serialize-javascript: registry.npmjs.org/serialize-javascript/6.0.1 + smob: registry.npmjs.org/smob/1.4.0 + terser: registry.npmjs.org/terser/5.17.6 dev: true - registry.npmjs.org/@rollup/plugin-typescript/11.0.0_63smgertf5ywa7mevokngp24n4: + registry.npmjs.org/@rollup/plugin-typescript/11.0.0_aleiognpck4hfurcdcjnvgqbb4: resolution: {integrity: sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz} id: registry.npmjs.org/@rollup/plugin-typescript/11.0.0 name: '@rollup/plugin-typescript' @@ -2216,28 +1615,13 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.20.2 - resolve: registry.npmjs.org/resolve/1.22.1 - rollup: registry.npmjs.org/rollup/3.20.2 - typescript: registry.npmjs.org/typescript/4.9.4 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.23.0 + resolve: registry.npmjs.org/resolve/1.22.2 + rollup: registry.npmjs.org/rollup/3.23.0 + typescript: registry.npmjs.org/typescript/4.9.5 dev: true - registry.npmjs.org/@rollup/pluginutils/3.1.0_rollup@2.79.1: - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz} - id: registry.npmjs.org/@rollup/pluginutils/3.1.0 - name: '@rollup/pluginutils' - version: 3.1.0 - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': registry.npmjs.org/@types/estree/0.0.39 - estree-walker: registry.npmjs.org/estree-walker/1.0.1 - picomatch: registry.npmjs.org/picomatch/2.3.1 - rollup: registry.npmjs.org/rollup/2.79.1 - dev: true - - registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.20.2: + registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.23.0: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz} id: registry.npmjs.org/@rollup/pluginutils/5.0.2 name: '@rollup/pluginutils' @@ -2249,10 +1633,10 @@ packages: rollup: optional: true dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.0 + '@types/estree': registry.npmjs.org/@types/estree/1.0.1 estree-walker: registry.npmjs.org/estree-walker/2.0.2 picomatch: registry.npmjs.org/picomatch/2.3.1 - rollup: registry.npmjs.org/rollup/3.20.2 + rollup: registry.npmjs.org/rollup/3.23.0 dev: true registry.npmjs.org/@sideway/address/4.1.4: @@ -2263,10 +1647,10 @@ packages: '@hapi/hoek': registry.npmjs.org/@hapi/hoek/9.3.0 dev: true - registry.npmjs.org/@sideway/formula/3.0.0: - resolution: {integrity: sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz} + registry.npmjs.org/@sideway/formula/3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz} name: '@sideway/formula' - version: 3.0.0 + version: 3.0.1 dev: true registry.npmjs.org/@sideway/pinpoint/2.0.0: @@ -2281,50 +1665,50 @@ packages: version: 2.0.0 dev: false - registry.npmjs.org/@sveltejs/adapter-auto/2.0.0_@sveltejs+kit@1.14.0: - resolution: {integrity: sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.0.0.tgz} - id: registry.npmjs.org/@sveltejs/adapter-auto/2.0.0 + registry.npmjs.org/@sveltejs/adapter-auto/2.1.0_@sveltejs+kit@1.20.0: + resolution: {integrity: sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz} + id: registry.npmjs.org/@sveltejs/adapter-auto/2.1.0 name: '@sveltejs/adapter-auto' - version: 2.0.0 + version: 2.1.0 peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.14.0_svelte@3.57.0+vite@4.2.1 - import-meta-resolve: registry.npmjs.org/import-meta-resolve/2.2.2 + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.20.0_svelte@3.59.1+vite@4.3.9 + import-meta-resolve: registry.npmjs.org/import-meta-resolve/3.0.0 dev: true - registry.npmjs.org/@sveltejs/kit/1.14.0_svelte@3.57.0+vite@4.2.1: - resolution: {integrity: sha512-4e/cZT0z4IppEkqNvMrurGz6VE1gScukFU7XqwTL/yrGJGXHqS9D7RvsOcE1hASsgrMu6w/fKTIhxT5oN0K1Jw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.14.0.tgz} - id: registry.npmjs.org/@sveltejs/kit/1.14.0 + registry.npmjs.org/@sveltejs/kit/1.20.0_svelte@3.59.1+vite@4.3.9: + resolution: {integrity: sha512-2ZW14afgcCQBk3BN8+FWUUCIZg+TKeDFuOMUpDNllTa6sKZ+YQNpxhsrt9abaZohPGsGGOYmk5fzy8D8MHVNBw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.0.tgz} + id: registry.npmjs.org/@sveltejs/kit/1.20.0 name: '@sveltejs/kit' - version: 1.14.0 + version: 1.20.0 engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true peerDependencies: - svelte: ^3.54.0 + 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.0.3_svelte@3.57.0+vite@4.2.1 + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1_svelte@3.59.1+vite@4.3.9 '@types/cookie': registry.npmjs.org/@types/cookie/0.5.1 cookie: registry.npmjs.org/cookie/0.5.0 - devalue: registry.npmjs.org/devalue/4.3.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.0 mime: registry.npmjs.org/mime/3.0.0 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.2 - svelte: registry.npmjs.org/svelte/3.57.0 + sirv: registry.npmjs.org/sirv/2.0.3 + svelte: registry.npmjs.org/svelte/3.59.1 tiny-glob: registry.npmjs.org/tiny-glob/0.2.9 - undici: registry.npmjs.org/undici/5.21.0 - vite: registry.npmjs.org/vite/4.2.1 + undici: registry.npmjs.org/undici/5.22.1 + vite: registry.npmjs.org/vite/4.3.9 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@sveltejs/package/2.0.2_44zspxpepvug6mo2qrfwkj3taq: + registry.npmjs.org/@sveltejs/package/2.0.2_cnumnonbjyr4j6qimrlvyofpny: resolution: {integrity: sha512-cCOCcO8yMHnhHyaR51nQtvKZ3o/vSU9UYI1EXLT1j2CKNPMuH1/g6JNwKcNNrtQGwwquudc69ZeYy8D/TDNwEw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/package/-/package-2.0.2.tgz} id: registry.npmjs.org/@sveltejs/package/2.0.2 name: '@sveltejs/package' @@ -2337,30 +1721,50 @@ packages: chokidar: registry.npmjs.org/chokidar/3.5.3 kleur: registry.npmjs.org/kleur/4.1.5 sade: registry.npmjs.org/sade/1.8.1 - svelte: registry.npmjs.org/svelte/3.57.0 - svelte2tsx: registry.npmjs.org/svelte2tsx/0.6.10_44zspxpepvug6mo2qrfwkj3taq + svelte: registry.npmjs.org/svelte/3.59.1 + svelte2tsx: registry.npmjs.org/svelte2tsx/0.6.15_cnumnonbjyr4j6qimrlvyofpny transitivePeerDependencies: - typescript dev: true - registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.3_svelte@3.57.0+vite@4.2.1: - resolution: {integrity: sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.3.tgz} - id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.0.3 + registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.2_qiij5gx4uovhfqjpd2vh63pzyq: + resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz} + id: registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.2 + name: '@sveltejs/vite-plugin-svelte-inspector' + version: 1.0.2 + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^2.2.0 + 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.1_svelte@3.59.1+vite@4.3.9 + debug: registry.npmjs.org/debug/4.3.4 + svelte: registry.npmjs.org/svelte/3.59.1 + vite: registry.npmjs.org/vite/4.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1_svelte@3.59.1+vite@4.3.9: + resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz} + id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1 name: '@sveltejs/vite-plugin-svelte' - version: 2.0.3 + version: 2.4.1 engines: {node: ^14.18.0 || >= 16} peerDependencies: - svelte: ^3.54.0 + svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: + '@sveltejs/vite-plugin-svelte-inspector': registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.2_qiij5gx4uovhfqjpd2vh63pzyq debug: registry.npmjs.org/debug/4.3.4 deepmerge: registry.npmjs.org/deepmerge/4.3.1 kleur: registry.npmjs.org/kleur/4.1.5 - magic-string: registry.npmjs.org/magic-string/0.29.0 - svelte: registry.npmjs.org/svelte/3.57.0 - svelte-hmr: registry.npmjs.org/svelte-hmr/0.15.1_svelte@3.57.0 - vite: registry.npmjs.org/vite/4.2.1 - vitefu: registry.npmjs.org/vitefu/0.2.4_vite@4.2.1 + magic-string: registry.npmjs.org/magic-string/0.30.0 + svelte: registry.npmjs.org/svelte/3.59.1 + svelte-hmr: registry.npmjs.org/svelte-hmr/0.15.2_svelte@3.59.1 + vite: registry.npmjs.org/vite/4.3.9 + vitefu: registry.npmjs.org/vitefu/0.2.4_vite@4.3.9 transitivePeerDependencies: - supports-color dev: true @@ -2371,32 +1775,32 @@ packages: version: 0.5.1 dev: true - registry.npmjs.org/@types/d3-array/3.0.3: - resolution: {integrity: sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.3.tgz} + registry.npmjs.org/@types/d3-array/3.0.5: + resolution: {integrity: sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz} name: '@types/d3-array' - version: 3.0.3 + version: 3.0.5 dev: false - registry.npmjs.org/@types/d3-axis/3.0.1: - resolution: {integrity: sha512-zji/iIbdd49g9WN0aIsGcwcTBUkgLsCSwB+uH+LPVDAiKWENMtI3cJEWt+7/YYwelMoZmbBfzA3qCdrZ2XFNnw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.1.tgz} + registry.npmjs.org/@types/d3-axis/3.0.2: + resolution: {integrity: sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz} name: '@types/d3-axis' - version: 3.0.1 + version: 3.0.2 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 dev: false - registry.npmjs.org/@types/d3-brush/3.0.1: - resolution: {integrity: sha512-B532DozsiTuQMHu2YChdZU0qsFJSio3Q6jmBYGYNp3gMDzBmuFFgPt9qKA4VYuLZMp4qc6eX7IUFUEsvHiXZAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.1.tgz} + registry.npmjs.org/@types/d3-brush/3.0.2: + resolution: {integrity: sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz} name: '@types/d3-brush' - version: 3.0.1 + version: 3.0.2 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 dev: false - registry.npmjs.org/@types/d3-chord/3.0.1: - resolution: {integrity: sha512-eQfcxIHrg7V++W8Qxn6QkqBNBokyhdWSAS73AbkbMzvLQmVVBviknoz2SRS/ZJdIOmhcmmdCRE/NFOm28Z1AMw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.1.tgz} + registry.npmjs.org/@types/d3-chord/3.0.2: + resolution: {integrity: sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz} name: '@types/d3-chord' - version: 3.0.1 + version: 3.0.2 dev: false registry.npmjs.org/@types/d3-color/3.1.0: @@ -2405,12 +1809,12 @@ packages: version: 3.1.0 dev: false - registry.npmjs.org/@types/d3-contour/3.0.1: - resolution: {integrity: sha512-C3zfBrhHZvrpAAK3YXqLWVAGo87A4SvJ83Q/zVJ8rFWJdKejUnDYaWZPkA8K84kb2vDA/g90LTQAz7etXcgoQQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.1.tgz} + registry.npmjs.org/@types/d3-contour/3.0.2: + resolution: {integrity: sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz} name: '@types/d3-contour' - version: 3.0.1 + version: 3.0.2 dependencies: - '@types/d3-array': registry.npmjs.org/@types/d3-array/3.0.3 + '@types/d3-array': registry.npmjs.org/@types/d3-array/3.0.5 '@types/geojson': registry.npmjs.org/@types/geojson/7946.0.10 dev: false @@ -2420,23 +1824,23 @@ packages: version: 6.0.1 dev: false - registry.npmjs.org/@types/d3-dispatch/3.0.1: - resolution: {integrity: sha512-NhxMn3bAkqhjoxabVJWKryhnZXXYYVQxaBnbANu0O94+O/nX9qSjrA1P1jbAQJxJf+VC72TxDX/YJcKue5bRqw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.1.tgz} + registry.npmjs.org/@types/d3-dispatch/3.0.2: + resolution: {integrity: sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz} name: '@types/d3-dispatch' - version: 3.0.1 + version: 3.0.2 dev: false - registry.npmjs.org/@types/d3-drag/3.0.1: - resolution: {integrity: sha512-o1Va7bLwwk6h03+nSM8dpaGEYnoIG19P0lKqlic8Un36ymh9NSkNFX1yiXMKNMx8rJ0Kfnn2eovuFaL6Jvj0zA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.1.tgz} + registry.npmjs.org/@types/d3-drag/3.0.2: + resolution: {integrity: sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz} name: '@types/d3-drag' - version: 3.0.1 + version: 3.0.2 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 - registry.npmjs.org/@types/d3-dsv/3.0.0: - resolution: {integrity: sha512-o0/7RlMl9p5n6FQDptuJVMxDf/7EDEv2SYEO/CwdG2tr1hTfUVi0Iavkk2ax+VpaQ/1jVhpnj5rq1nj8vwhn2A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.0.tgz} + registry.npmjs.org/@types/d3-dsv/3.0.1: + resolution: {integrity: sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz} name: '@types/d3-dsv' - version: 3.0.0 + version: 3.0.1 dev: false registry.npmjs.org/@types/d3-ease/3.0.0: @@ -2445,18 +1849,18 @@ packages: version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-fetch/3.0.1: - resolution: {integrity: sha512-toZJNOwrOIqz7Oh6Q7l2zkaNfXkfR7mFSJvGvlD/Ciq/+SQ39d5gynHJZ/0fjt83ec3WL7+u3ssqIijQtBISsw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.1.tgz} + registry.npmjs.org/@types/d3-fetch/3.0.2: + resolution: {integrity: sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz} name: '@types/d3-fetch' - version: 3.0.1 + version: 3.0.2 dependencies: - '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv/3.0.0 + '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv/3.0.1 dev: false - registry.npmjs.org/@types/d3-force/3.0.3: - resolution: {integrity: sha512-z8GteGVfkWJMKsx6hwC3SiTSLspL98VNpmvLpEFJQpZPq6xpA1I8HNBDNSpukfK0Vb0l64zGFhzunLgEAcBWSA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.3.tgz} + registry.npmjs.org/@types/d3-force/3.0.4: + resolution: {integrity: sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz} name: '@types/d3-force' - version: 3.0.3 + version: 3.0.4 dev: false registry.npmjs.org/@types/d3-format/3.0.1: @@ -2465,18 +1869,18 @@ packages: version: 3.0.1 dev: false - registry.npmjs.org/@types/d3-geo/3.0.2: - resolution: {integrity: sha512-DbqK7MLYA8LpyHQfv6Klz0426bQEf7bRTvhMy44sNGVyZoWn//B0c+Qbeg8Osi2Obdc9BLLXYAKpyWege2/7LQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.2.tgz} + registry.npmjs.org/@types/d3-geo/3.0.3: + resolution: {integrity: sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz} name: '@types/d3-geo' - version: 3.0.2 + version: 3.0.3 dependencies: '@types/geojson': registry.npmjs.org/@types/geojson/7946.0.10 dev: false - registry.npmjs.org/@types/d3-hierarchy/3.1.0: - resolution: {integrity: sha512-g+sey7qrCa3UbsQlMZZBOHROkFqx7KZKvUpRzI/tAp/8erZWpYq7FgNKvYwebi2LaEiVs1klhUfd3WCThxmmWQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.0.tgz} + registry.npmjs.org/@types/d3-hierarchy/3.1.2: + resolution: {integrity: sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz} name: '@types/d3-hierarchy' - version: 3.1.0 + version: 3.1.2 dev: false registry.npmjs.org/@types/d3-interpolate/3.0.1: @@ -2517,23 +1921,23 @@ packages: version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-scale/4.0.2: - resolution: {integrity: sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.2.tgz} + registry.npmjs.org/@types/d3-scale/4.0.3: + resolution: {integrity: sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz} name: '@types/d3-scale' - version: 4.0.2 + version: 4.0.3 dependencies: '@types/d3-time': registry.npmjs.org/@types/d3-time/3.0.0 dev: false - registry.npmjs.org/@types/d3-selection/3.0.3: - resolution: {integrity: sha512-Mw5cf6nlW1MlefpD9zrshZ+DAWL4IQ5LnWfRheW6xwsdaWOb6IRRu2H7XPAQcyXEx1D7XQWgdoKR83ui1/HlEA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.3.tgz} + registry.npmjs.org/@types/d3-selection/3.0.5: + resolution: {integrity: sha512-xCB0z3Hi8eFIqyja3vW8iV01+OHGYR2di/+e+AiOcXIOrY82lcvWW8Ke1DYE/EUVMsBl4Db9RppSBS3X1U6J0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.5.tgz} name: '@types/d3-selection' - version: 3.0.3 + version: 3.0.5 - registry.npmjs.org/@types/d3-shape/3.1.0: - resolution: {integrity: sha512-jYIYxFFA9vrJ8Hd4Se83YI6XF+gzDL1aC5DCsldai4XYYiVNdhtpGbA/GM6iyQ8ayhSp3a148LY34hy7A4TxZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.0.tgz} + registry.npmjs.org/@types/d3-shape/3.1.1: + resolution: {integrity: sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz} name: '@types/d3-shape' - version: 3.1.0 + version: 3.1.1 dependencies: '@types/d3-path': registry.npmjs.org/@types/d3-path/3.0.0 dev: false @@ -2556,21 +1960,21 @@ packages: version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-transition/3.0.2: - resolution: {integrity: sha512-jo5o/Rf+/u6uerJ/963Dc39NI16FQzqwOc54bwvksGAdVfvDrqDpVeq95bEvPtBwLCVZutAEyAtmSyEMxN7vxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.2.tgz} + registry.npmjs.org/@types/d3-transition/3.0.3: + resolution: {integrity: sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz} name: '@types/d3-transition' - version: 3.0.2 + version: 3.0.3 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 dev: false - registry.npmjs.org/@types/d3-zoom/3.0.1: - resolution: {integrity: sha512-7s5L9TjfqIYQmQQEUcpMAcBOahem7TRoSO/+Gkz02GbMVuULiZzjF2BOdw291dbO2aNon4m2OdFsRGaCq2caLQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.1.tgz} + registry.npmjs.org/@types/d3-zoom/3.0.3: + resolution: {integrity: sha512-OWk1yYIIWcZ07+igN6BeoG6rqhnJ/pYe+R1qWFM2DtW49zsoSjgb9G5xB0ZXA8hh2jAzey1XuRmMSoXdKw8MDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.3.tgz} name: '@types/d3-zoom' - version: 3.0.1 + version: 3.0.3 dependencies: '@types/d3-interpolate': registry.npmjs.org/@types/d3-interpolate/3.0.1 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 dev: false registry.npmjs.org/@types/d3/7.4.0: @@ -2578,36 +1982,36 @@ packages: name: '@types/d3' version: 7.4.0 dependencies: - '@types/d3-array': registry.npmjs.org/@types/d3-array/3.0.3 - '@types/d3-axis': registry.npmjs.org/@types/d3-axis/3.0.1 - '@types/d3-brush': registry.npmjs.org/@types/d3-brush/3.0.1 - '@types/d3-chord': registry.npmjs.org/@types/d3-chord/3.0.1 + '@types/d3-array': registry.npmjs.org/@types/d3-array/3.0.5 + '@types/d3-axis': registry.npmjs.org/@types/d3-axis/3.0.2 + '@types/d3-brush': registry.npmjs.org/@types/d3-brush/3.0.2 + '@types/d3-chord': registry.npmjs.org/@types/d3-chord/3.0.2 '@types/d3-color': registry.npmjs.org/@types/d3-color/3.1.0 - '@types/d3-contour': registry.npmjs.org/@types/d3-contour/3.0.1 + '@types/d3-contour': registry.npmjs.org/@types/d3-contour/3.0.2 '@types/d3-delaunay': registry.npmjs.org/@types/d3-delaunay/6.0.1 - '@types/d3-dispatch': registry.npmjs.org/@types/d3-dispatch/3.0.1 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.1 - '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv/3.0.0 + '@types/d3-dispatch': registry.npmjs.org/@types/d3-dispatch/3.0.2 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 + '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv/3.0.1 '@types/d3-ease': registry.npmjs.org/@types/d3-ease/3.0.0 - '@types/d3-fetch': registry.npmjs.org/@types/d3-fetch/3.0.1 - '@types/d3-force': registry.npmjs.org/@types/d3-force/3.0.3 + '@types/d3-fetch': registry.npmjs.org/@types/d3-fetch/3.0.2 + '@types/d3-force': registry.npmjs.org/@types/d3-force/3.0.4 '@types/d3-format': registry.npmjs.org/@types/d3-format/3.0.1 - '@types/d3-geo': registry.npmjs.org/@types/d3-geo/3.0.2 - '@types/d3-hierarchy': registry.npmjs.org/@types/d3-hierarchy/3.1.0 + '@types/d3-geo': registry.npmjs.org/@types/d3-geo/3.0.3 + '@types/d3-hierarchy': registry.npmjs.org/@types/d3-hierarchy/3.1.2 '@types/d3-interpolate': registry.npmjs.org/@types/d3-interpolate/3.0.1 '@types/d3-path': registry.npmjs.org/@types/d3-path/3.0.0 '@types/d3-polygon': registry.npmjs.org/@types/d3-polygon/3.0.0 '@types/d3-quadtree': registry.npmjs.org/@types/d3-quadtree/3.0.2 '@types/d3-random': registry.npmjs.org/@types/d3-random/3.0.1 - '@types/d3-scale': registry.npmjs.org/@types/d3-scale/4.0.2 + '@types/d3-scale': registry.npmjs.org/@types/d3-scale/4.0.3 '@types/d3-scale-chromatic': registry.npmjs.org/@types/d3-scale-chromatic/3.0.0 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.3 - '@types/d3-shape': registry.npmjs.org/@types/d3-shape/3.1.0 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-shape': registry.npmjs.org/@types/d3-shape/3.1.1 '@types/d3-time': registry.npmjs.org/@types/d3-time/3.0.0 '@types/d3-time-format': registry.npmjs.org/@types/d3-time-format/4.0.0 '@types/d3-timer': registry.npmjs.org/@types/d3-timer/3.0.0 - '@types/d3-transition': registry.npmjs.org/@types/d3-transition/3.0.2 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.1 + '@types/d3-transition': registry.npmjs.org/@types/d3-transition/3.0.3 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 dev: false registry.npmjs.org/@types/dagre/0.7.48: @@ -2616,16 +2020,10 @@ packages: version: 0.7.48 dev: true - registry.npmjs.org/@types/estree/0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz} - name: '@types/estree' - version: 0.0.39 - dev: true - - registry.npmjs.org/@types/estree/1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz} + registry.npmjs.org/@types/estree/1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz} name: '@types/estree' - version: 1.0.0 + version: 1.0.1 dev: true registry.npmjs.org/@types/geojson/7946.0.10: @@ -2639,13 +2037,13 @@ packages: name: '@types/is-ci' version: 3.0.0 dependencies: - ci-info: registry.npmjs.org/ci-info/3.4.0 + ci-info: registry.npmjs.org/ci-info/3.8.0 dev: true - registry.npmjs.org/@types/json-schema/7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz} + registry.npmjs.org/@types/json-schema/7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz} name: '@types/json-schema' - version: 7.0.11 + version: 7.0.12 dev: true registry.npmjs.org/@types/minimist/1.2.2: @@ -2660,16 +2058,16 @@ packages: version: 12.20.55 dev: true - registry.npmjs.org/@types/node/14.18.28: - resolution: {integrity: sha512-CK2fnrQlIgKlCV3N2kM+Gznb5USlwA1KFX3rJVHmgVk6NJxFPuQ86pAcvKnu37IA4BGlSRz7sEE1lHL1aLZ/eQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-14.18.28.tgz} + registry.npmjs.org/@types/node/14.18.48: + resolution: {integrity: sha512-iL0PIMwejpmuVHgfibHpfDwOdsbmB50wr21X71VnF5d7SsBF7WK+ZvP/SCcFm7Iwb9iiYSap9rlrdhToNAWdxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-14.18.48.tgz} name: '@types/node' - version: 14.18.28 + version: 14.18.48 dev: true - registry.npmjs.org/@types/node/18.7.16: - resolution: {integrity: sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-18.7.16.tgz} + registry.npmjs.org/@types/node/18.16.16: + resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz} name: '@types/node' - version: 18.7.16 + version: 18.16.16 dev: true registry.npmjs.org/@types/normalize-package-data/2.4.1: @@ -2690,30 +2088,22 @@ packages: version: 2.0.6 dev: true - registry.npmjs.org/@types/react-dom/18.0.6: - resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz} + registry.npmjs.org/@types/react-dom/18.2.4: + resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz} name: '@types/react-dom' - version: 18.0.6 + version: 18.2.4 dependencies: - '@types/react': registry.npmjs.org/@types/react/18.0.19 + '@types/react': registry.npmjs.org/@types/react/18.2.7 dev: true - registry.npmjs.org/@types/react/18.0.19: - resolution: {integrity: sha512-BDc3Q+4Q3zsn7k9xZrKfjWyJsSlEDMs38gD1qp2eDazLCdcPqAT+vq1ND+Z8AGel/UiwzNUk8ptpywgNQcJ1MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react/-/react-18.0.19.tgz} + registry.npmjs.org/@types/react/18.2.7: + resolution: {integrity: sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz} name: '@types/react' - version: 18.0.19 + version: 18.2.7 dependencies: '@types/prop-types': registry.npmjs.org/@types/prop-types/15.7.5 - '@types/scheduler': registry.npmjs.org/@types/scheduler/0.16.2 - csstype: registry.npmjs.org/csstype/3.1.0 - dev: true - - registry.npmjs.org/@types/resolve/1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz} - name: '@types/resolve' - version: 1.17.1 - dependencies: - '@types/node': registry.npmjs.org/@types/node/18.7.16 + '@types/scheduler': registry.npmjs.org/@types/scheduler/0.16.3 + csstype: registry.npmjs.org/csstype/3.1.2 dev: true registry.npmjs.org/@types/resolve/1.20.2: @@ -2722,10 +2112,10 @@ packages: version: 1.20.2 dev: true - registry.npmjs.org/@types/scheduler/0.16.2: - resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz} + registry.npmjs.org/@types/scheduler/0.16.3: + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz} name: '@types/scheduler' - version: 0.16.2 + version: 0.16.3 dev: true registry.npmjs.org/@types/semver/6.2.3: @@ -2734,10 +2124,10 @@ packages: version: 6.2.3 dev: true - registry.npmjs.org/@types/semver/7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz} + registry.npmjs.org/@types/semver/7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz} name: '@types/semver' - version: 7.3.13 + version: 7.5.0 dev: true registry.npmjs.org/@types/sinonjs__fake-timers/8.1.1: @@ -2758,46 +2148,15 @@ packages: version: 2.10.0 requiresBuild: true dependencies: - '@types/node': registry.npmjs.org/@types/node/18.7.16 + '@types/node': registry.npmjs.org/@types/node/14.18.48 dev: true optional: true - registry.npmjs.org/@typescript-eslint/eslint-plugin/5.57.0_6qulbt3drjdrf5p7ia5xubmhay: - resolution: {integrity: sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.57.0 - name: '@typescript-eslint/eslint-plugin' - version: 5.57.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.4.0 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.57.0_zjoiagdsdpivymr5idw66lxttq - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.57.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.57.0_zjoiagdsdpivymr5idw66lxttq - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.57.0_zjoiagdsdpivymr5idw66lxttq - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.36.0 - grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 - ignore: registry.npmjs.org/ignore/5.2.4 - natural-compare-lite: registry.npmjs.org/natural-compare-lite/1.4.0 - semver: registry.npmjs.org/semver/7.3.8 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 - typescript: registry.npmjs.org/typescript/4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/@typescript-eslint/eslint-plugin/5.57.0_mc6km5pjrfw7q236yimvgyb62m: - resolution: {integrity: sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.57.0 + registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.8_rq7lqmsq2hhtq366qgvop5zziy: + resolution: {integrity: sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.8 name: '@typescript-eslint/eslint-plugin' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -2807,51 +2166,28 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.4.0 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.57.0_id2eilsndvzhjjktb64trvy3gu - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.57.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.57.0_id2eilsndvzhjjktb64trvy3gu - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.57.0_id2eilsndvzhjjktb64trvy3gu + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.5.1 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.59.8_5ujgynla27k2qkzlnkldjwsutm + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.59.8 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.59.8_5ujgynla27k2qkzlnkldjwsutm + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.59.8_5ujgynla27k2qkzlnkldjwsutm debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.23.1 + eslint: registry.npmjs.org/eslint/8.41.0 grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 ignore: registry.npmjs.org/ignore/5.2.4 natural-compare-lite: registry.npmjs.org/natural-compare-lite/1.4.0 - semver: registry.npmjs.org/semver/7.3.8 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 - typescript: registry.npmjs.org/typescript/4.9.4 - transitivePeerDependencies: - - supports-color - dev: true - - registry.npmjs.org/@typescript-eslint/parser/5.57.0_id2eilsndvzhjjktb64trvy3gu: - resolution: {integrity: sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/5.57.0 - name: '@typescript-eslint/parser' - version: 5.57.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.57.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.57.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0_typescript@4.9.4 - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.23.1 - typescript: registry.npmjs.org/typescript/4.9.4 + semver: registry.npmjs.org/semver/7.5.1 + tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.5 + typescript: registry.npmjs.org/typescript/4.9.5 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/parser/5.57.0_zjoiagdsdpivymr5idw66lxttq: - resolution: {integrity: sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/5.57.0 + registry.npmjs.org/@typescript-eslint/parser/5.59.8_5ujgynla27k2qkzlnkldjwsutm: + resolution: {integrity: sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/5.59.8 name: '@typescript-eslint/parser' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2860,54 +2196,31 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.57.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.57.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0_typescript@4.9.4 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.59.8 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5 debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.36.0 - typescript: registry.npmjs.org/typescript/4.9.4 + eslint: registry.npmjs.org/eslint/8.41.0 + typescript: registry.npmjs.org/typescript/4.9.5 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/scope-manager/5.57.0: - resolution: {integrity: sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.0.tgz} + registry.npmjs.org/@typescript-eslint/scope-manager/5.59.8: + resolution: {integrity: sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz} name: '@typescript-eslint/scope-manager' - version: 5.57.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.57.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.57.0 - dev: true - - registry.npmjs.org/@typescript-eslint/type-utils/5.57.0_id2eilsndvzhjjktb64trvy3gu: - resolution: {integrity: sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/5.57.0 - name: '@typescript-eslint/type-utils' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0_typescript@4.9.4 - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.57.0_id2eilsndvzhjjktb64trvy3gu - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.23.1 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 - typescript: registry.npmjs.org/typescript/4.9.4 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.8 dev: true - registry.npmjs.org/@typescript-eslint/type-utils/5.57.0_zjoiagdsdpivymr5idw66lxttq: - resolution: {integrity: sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/5.57.0 + registry.npmjs.org/@typescript-eslint/type-utils/5.59.8_5ujgynla27k2qkzlnkldjwsutm: + resolution: {integrity: sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/5.59.8 name: '@typescript-eslint/type-utils' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -2916,28 +2229,28 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0_typescript@4.9.4 - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.57.0_zjoiagdsdpivymr5idw66lxttq + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5 + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.59.8_5ujgynla27k2qkzlnkldjwsutm debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.36.0 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 - typescript: registry.npmjs.org/typescript/4.9.4 + eslint: registry.npmjs.org/eslint/8.41.0 + tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.5 + typescript: registry.npmjs.org/typescript/4.9.5 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/types/5.57.0: - resolution: {integrity: sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.0.tgz} + registry.npmjs.org/@typescript-eslint/types/5.59.8: + resolution: {integrity: sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz} name: '@typescript-eslint/types' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0_typescript@4.9.4: - resolution: {integrity: sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0 + registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5: + resolution: {integrity: sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8 name: '@typescript-eslint/typescript-estree' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2945,94 +2258,70 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.57.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.57.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.8 debug: registry.npmjs.org/debug/4.3.4 globby: registry.npmjs.org/globby/11.1.0 is-glob: registry.npmjs.org/is-glob/4.0.3 - semver: registry.npmjs.org/semver/7.3.8 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4 - typescript: registry.npmjs.org/typescript/4.9.4 + semver: registry.npmjs.org/semver/7.5.1 + tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.5 + typescript: registry.npmjs.org/typescript/4.9.5 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/utils/5.57.0_id2eilsndvzhjjktb64trvy3gu: - resolution: {integrity: sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/5.57.0 + registry.npmjs.org/@typescript-eslint/utils/5.59.8_5ujgynla27k2qkzlnkldjwsutm: + resolution: {integrity: sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/5.59.8 name: '@typescript-eslint/utils' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils/4.2.0_eslint@8.23.1 - '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11 - '@types/semver': registry.npmjs.org/@types/semver/7.3.13 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.57.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.57.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0_typescript@4.9.4 - eslint: registry.npmjs.org/eslint/8.23.1 + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils/4.4.0_eslint@8.41.0 + '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.12 + '@types/semver': registry.npmjs.org/@types/semver/7.5.0 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.59.8 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5 + eslint: registry.npmjs.org/eslint/8.41.0 eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 - semver: registry.npmjs.org/semver/7.3.8 + semver: registry.npmjs.org/semver/7.5.1 transitivePeerDependencies: - supports-color - typescript dev: true - registry.npmjs.org/@typescript-eslint/utils/5.57.0_zjoiagdsdpivymr5idw66lxttq: - resolution: {integrity: sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.0.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/5.57.0 - name: '@typescript-eslint/utils' - version: 5.57.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-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils/4.2.0_eslint@8.36.0 - '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11 - '@types/semver': registry.npmjs.org/@types/semver/7.3.13 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.57.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.57.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.57.0_typescript@4.9.4 - eslint: registry.npmjs.org/eslint/8.36.0 - eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 - semver: registry.npmjs.org/semver/7.3.8 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - registry.npmjs.org/@typescript-eslint/visitor-keys/5.57.0: - resolution: {integrity: sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.0.tgz} + registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.8: + resolution: {integrity: sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz} name: '@typescript-eslint/visitor-keys' - version: 5.57.0 + version: 5.59.8 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.57.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 dev: true - registry.npmjs.org/@vitejs/plugin-react/3.0.1_vite@4.0.4: - resolution: {integrity: sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz} - id: registry.npmjs.org/@vitejs/plugin-react/3.0.1 + registry.npmjs.org/@vitejs/plugin-react/4.0.0_vite@4.3.9: + resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz} + id: registry.npmjs.org/@vitejs/plugin-react/4.0.0 name: '@vitejs/plugin-react' - version: 3.0.1 + version: 4.0.0 engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.0.0 + vite: ^4.2.0 dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.20.12 - '@babel/plugin-transform-react-jsx-self': registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.20.12 - magic-string: registry.npmjs.org/magic-string/0.27.0 + '@babel/core': registry.npmjs.org/@babel/core/7.22.1 + '@babel/plugin-transform-react-jsx-self': registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.21.0_@babel+core@7.22.1 + '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.22.1 react-refresh: registry.npmjs.org/react-refresh/0.14.0 - vite: registry.npmjs.org/vite/4.0.4 + vite: registry.npmjs.org/vite/4.3.9 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/acorn-jsx/5.3.2_acorn@8.8.0: + registry.npmjs.org/acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} id: registry.npmjs.org/acorn-jsx/5.3.2 name: acorn-jsx @@ -3040,13 +2329,13 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: registry.npmjs.org/acorn/8.8.0 + acorn: registry.npmjs.org/acorn/8.8.2 dev: true - registry.npmjs.org/acorn/8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz} + registry.npmjs.org/acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz} name: acorn - version: 8.8.0 + version: 8.8.2 engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -3129,6 +2418,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 @@ -3143,6 +2438,15 @@ packages: version: 2.0.1 dev: true + registry.npmjs.org/array-buffer-byte-length/1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz} + name: array-buffer-byte-length + version: 1.0.0 + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + is-array-buffer: registry.npmjs.org/is-array-buffer/3.0.2 + dev: true + registry.npmjs.org/array-includes/3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz} name: array-includes @@ -3150,9 +2454,9 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 is-string: registry.npmjs.org/is-string/1.0.7 dev: true @@ -3163,15 +2467,15 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/array.prototype.flat/1.3.0: - resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz} + registry.npmjs.org/array.prototype.flat/1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz} name: array.prototype.flat - version: 1.3.0 + version: 1.3.1 engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 es-shim-unscopables: registry.npmjs.org/es-shim-unscopables/1.0.0 dev: true @@ -3182,8 +2486,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 es-shim-unscopables: registry.npmjs.org/es-shim-unscopables/1.0.0 dev: true @@ -3193,10 +2497,10 @@ packages: version: 1.1.1 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 es-shim-unscopables: registry.npmjs.org/es-shim-unscopables/1.0.0 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 dev: true registry.npmjs.org/arrify/1.0.1: @@ -3247,22 +2551,22 @@ packages: engines: {node: '>= 4.0.0'} dev: true - registry.npmjs.org/autoprefixer/10.4.9_postcss@8.4.21: - resolution: {integrity: sha512-Uu67eduPEmOeA0vyJby5ghu1AAELCCNSsLAjK+lz6kYzNM5sqnBO36MqfsjhPjQF/BaJM5U/UuFYyl7PavY/wQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.9.tgz} - id: registry.npmjs.org/autoprefixer/10.4.9 + registry.npmjs.org/autoprefixer/10.4.14_postcss@8.4.24: + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz} + id: registry.npmjs.org/autoprefixer/10.4.14 name: autoprefixer - version: 10.4.9 + version: 10.4.14 engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: registry.npmjs.org/browserslist/4.21.3 - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001397 + browserslist: registry.npmjs.org/browserslist/4.21.7 + caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001492 fraction.js: registry.npmjs.org/fraction.js/4.2.0 normalize-range: registry.npmjs.org/normalize-range/0.1.2 picocolors: registry.npmjs.org/picocolors/1.0.0 - postcss: registry.npmjs.org/postcss/8.4.21 + postcss: registry.npmjs.org/postcss/8.4.24 postcss-value-parser: registry.npmjs.org/postcss-value-parser/4.2.0 dev: true @@ -3279,31 +2583,24 @@ packages: version: 0.7.0 dev: true - registry.npmjs.org/aws4/1.11.0: - resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz} + registry.npmjs.org/aws4/1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz} name: aws4 - version: 1.11.0 + 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.1_debug@4.3.2 + follow-redirects: registry.npmjs.org/follow-redirects/1.15.2_debug@4.3.4 + form-data: registry.npmjs.org/form-data/4.0.0 transitivePeerDependencies: - debug dev: true - registry.npmjs.org/babel-plugin-dynamic-import-node/2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz} - name: babel-plugin-dynamic-import-node - version: 2.3.3 - dependencies: - object.assign: registry.npmjs.org/object.assign/4.1.4 - dev: true - registry.npmjs.org/balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} name: balanced-match @@ -3378,38 +2675,25 @@ packages: fill-range: registry.npmjs.org/fill-range/7.0.1 dev: true - registry.npmjs.org/breakword/1.0.5: - resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/breakword/-/breakword-1.0.5.tgz} + registry.npmjs.org/breakword/1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/breakword/-/breakword-1.0.6.tgz} name: breakword - version: 1.0.5 + version: 1.0.6 dependencies: wcwidth: registry.npmjs.org/wcwidth/1.0.1 dev: true - registry.npmjs.org/browserslist/4.21.3: - resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz} - name: browserslist - version: 4.21.3 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001397 - electron-to-chromium: registry.npmjs.org/electron-to-chromium/1.4.247 - node-releases: registry.npmjs.org/node-releases/2.0.6 - update-browserslist-db: registry.npmjs.org/update-browserslist-db/1.0.7_browserslist@4.21.3 - dev: true - - registry.npmjs.org/browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz} + registry.npmjs.org/browserslist/4.21.7: + resolution: {integrity: sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz} name: browserslist - version: 4.21.4 + version: 4.21.7 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001442 - electron-to-chromium: registry.npmjs.org/electron-to-chromium/1.4.284 - node-releases: registry.npmjs.org/node-releases/2.0.8 - update-browserslist-db: registry.npmjs.org/update-browserslist-db/1.0.10_browserslist@4.21.4 + caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001492 + electron-to-chromium: registry.npmjs.org/electron-to-chromium/1.4.414 + node-releases: registry.npmjs.org/node-releases/2.0.12 + update-browserslist-db: registry.npmjs.org/update-browserslist-db/1.0.11_browserslist@4.21.7 dev: true registry.npmjs.org/buffer-crc32/0.2.13: @@ -3462,7 +2746,7 @@ packages: version: 1.0.2 dependencies: function-bind: registry.npmjs.org/function-bind/1.1.1 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 dev: true registry.npmjs.org/callsites/3.1.0: @@ -3490,16 +2774,10 @@ packages: engines: {node: '>=6'} dev: true - registry.npmjs.org/caniuse-lite/1.0.30001397: - resolution: {integrity: sha512-SW9N2TbCdLf0eiNDRrrQXx2sOkaakNZbCjgNpPyMJJbiOrU5QzMIrXOVMRM1myBXTD5iTkdrtU/EguCrBocHlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001397.tgz} - name: caniuse-lite - version: 1.0.30001397 - dev: true - - registry.npmjs.org/caniuse-lite/1.0.30001442: - resolution: {integrity: sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz} + registry.npmjs.org/caniuse-lite/1.0.30001492: + resolution: {integrity: sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz} name: caniuse-lite - version: 1.0.30001442 + version: 1.0.30001492 dev: true registry.npmjs.org/caseless/0.12.0: @@ -3559,16 +2837,11 @@ packages: fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true - registry.npmjs.org/ci-info/2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz} - name: ci-info - version: 2.0.0 - dev: true - - registry.npmjs.org/ci-info/3.4.0: - resolution: {integrity: sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz} + registry.npmjs.org/ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz} name: ci-info - version: 3.4.0 + version: 3.8.0 + engines: {node: '>=8'} dev: true registry.npmjs.org/classcat/5.0.4: @@ -3593,10 +2866,10 @@ packages: restore-cursor: registry.npmjs.org/restore-cursor/3.1.0 dev: true - registry.npmjs.org/cli-table3/0.6.2: - resolution: {integrity: sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz} + registry.npmjs.org/cli-table3/0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz} name: cli-table3 - version: 0.6.2 + version: 0.6.3 engines: {node: 10.* || >= 12.*} dependencies: string-width: registry.npmjs.org/string-width/4.2.3 @@ -3624,16 +2897,6 @@ packages: wrap-ansi: registry.npmjs.org/wrap-ansi/6.2.0 dev: true - registry.npmjs.org/cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz} - name: cliui - version: 7.0.4 - dependencies: - string-width: registry.npmjs.org/string-width/4.2.3 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - wrap-ansi: registry.npmjs.org/wrap-ansi/7.0.0 - dev: true - registry.npmjs.org/cliui/8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz} name: cliui @@ -3681,10 +2944,10 @@ packages: version: 1.1.4 dev: true - registry.npmjs.org/colorette/2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz} + registry.npmjs.org/colorette/2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz} name: colorette - version: 2.0.19 + version: 2.0.20 dev: true registry.npmjs.org/combined-stream/1.0.8: @@ -3736,22 +2999,14 @@ packages: hasBin: true dependencies: chalk: registry.npmjs.org/chalk/4.1.2 - date-fns: registry.npmjs.org/date-fns/2.29.3 + date-fns: registry.npmjs.org/date-fns/2.30.0 lodash: registry.npmjs.org/lodash/4.17.21 - rxjs: registry.npmjs.org/rxjs/7.8.0 - shell-quote: registry.npmjs.org/shell-quote/1.7.4 + rxjs: registry.npmjs.org/rxjs/7.8.1 + shell-quote: registry.npmjs.org/shell-quote/1.8.1 spawn-command: registry.npmjs.org/spawn-command/0.0.2-1 supports-color: registry.npmjs.org/supports-color/8.1.1 tree-kill: registry.npmjs.org/tree-kill/1.2.2 - yargs: registry.npmjs.org/yargs/17.6.2 - dev: true - - registry.npmjs.org/convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz} - name: convert-source-map - version: 1.8.0 - dependencies: - safe-buffer: registry.npmjs.org/safe-buffer/5.1.2 + yargs: registry.npmjs.org/yargs/17.7.2 dev: true registry.npmjs.org/convert-source-map/1.9.0: @@ -3802,10 +3057,10 @@ packages: hasBin: true dev: true - registry.npmjs.org/csstype/3.1.0: - resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz} + registry.npmjs.org/csstype/3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz} name: csstype - version: 3.1.0 + version: 3.1.2 dev: true registry.npmjs.org/csv-generate/3.4.3: @@ -3838,28 +3093,28 @@ packages: stream-transform: registry.npmjs.org/stream-transform/2.1.3 dev: true - registry.npmjs.org/cypress-real-events/1.7.1_cypress@10.7.0: - resolution: {integrity: sha512-/Bg15RgJ0SYsuXc6lPqH08x19z6j2vmhWN4wXfJqm3z8BTAFiK2MvipZPzxT8Z0jJP0q7kuniWrLIvz/i/8lCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress-real-events/-/cypress-real-events-1.7.1.tgz} - id: registry.npmjs.org/cypress-real-events/1.7.1 + registry.npmjs.org/cypress-real-events/1.8.1_cypress@10.11.0: + resolution: {integrity: sha512-8fFnA8EzS3EVbAmpSEUf3A8yZCmfU3IPOSGUDVFCdE1ke1gYL1A+gvXXV6HKUbTPRuvKKt2vpaMbUwYLpDRswQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress-real-events/-/cypress-real-events-1.8.1.tgz} + id: registry.npmjs.org/cypress-real-events/1.8.1 name: cypress-real-events - version: 1.7.1 + version: 1.8.1 peerDependencies: - cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x + cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x || ^11.x || ^12.x dependencies: - cypress: registry.npmjs.org/cypress/10.7.0 + cypress: registry.npmjs.org/cypress/10.11.0 dev: true - registry.npmjs.org/cypress/10.7.0: - resolution: {integrity: sha512-gTFvjrUoBnqPPOu9Vl5SBHuFlzx/Wxg/ZXIz2H4lzoOLFelKeF7mbwYUOzgzgF0oieU2WhJAestQdkgwJMMTvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress/-/cypress-10.7.0.tgz} + registry.npmjs.org/cypress/10.11.0: + resolution: {integrity: sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz} name: cypress - version: 10.7.0 + version: 10.11.0 engines: {node: '>=12.0.0'} hasBin: true requiresBuild: true dependencies: - '@cypress/request': registry.npmjs.org/@cypress/request/2.88.10 + '@cypress/request': registry.npmjs.org/@cypress/request/2.88.11 '@cypress/xvfb': registry.npmjs.org/@cypress/xvfb/1.2.4_supports-color@8.1.1 - '@types/node': registry.npmjs.org/@types/node/14.18.28 + '@types/node': registry.npmjs.org/@types/node/14.18.48 '@types/sinonjs__fake-timers': registry.npmjs.org/@types/sinonjs__fake-timers/8.1.1 '@types/sizzle': registry.npmjs.org/@types/sizzle/2.3.3 arch: registry.npmjs.org/arch/2.2.0 @@ -3870,13 +3125,13 @@ packages: chalk: registry.npmjs.org/chalk/4.1.2 check-more-types: registry.npmjs.org/check-more-types/2.24.0 cli-cursor: registry.npmjs.org/cli-cursor/3.1.0 - cli-table3: registry.npmjs.org/cli-table3/0.6.2 + cli-table3: registry.npmjs.org/cli-table3/0.6.3 commander: registry.npmjs.org/commander/5.1.0 common-tags: registry.npmjs.org/common-tags/1.8.2 - dayjs: registry.npmjs.org/dayjs/1.11.5 + dayjs: registry.npmjs.org/dayjs/1.11.7 debug: registry.npmjs.org/debug/4.3.4_supports-color@8.1.1 enquirer: registry.npmjs.org/enquirer/2.3.6 - eventemitter2: registry.npmjs.org/eventemitter2/6.4.8 + eventemitter2: registry.npmjs.org/eventemitter2/6.4.7 execa: registry.npmjs.org/execa/4.1.0 executable: registry.npmjs.org/executable/4.1.1 extract-zip: registry.npmjs.org/extract-zip/2.0.1_supports-color@8.1.1 @@ -3889,12 +3144,12 @@ packages: listr2: registry.npmjs.org/listr2/3.14.0_enquirer@2.3.6 lodash: registry.npmjs.org/lodash/4.17.21 log-symbols: registry.npmjs.org/log-symbols/4.1.0 - minimist: registry.npmjs.org/minimist/1.2.6 + minimist: registry.npmjs.org/minimist/1.2.8 ospath: registry.npmjs.org/ospath/1.2.2 pretty-bytes: registry.npmjs.org/pretty-bytes/5.6.0 proxy-from-env: registry.npmjs.org/proxy-from-env/1.0.0 request-progress: registry.npmjs.org/request-progress/3.0.0 - semver: registry.npmjs.org/semver/7.3.7 + semver: registry.npmjs.org/semver/7.5.1 supports-color: registry.npmjs.org/supports-color/8.1.1 tmp: registry.npmjs.org/tmp/0.2.1 untildify: registry.npmjs.org/untildify/4.0.0 @@ -4009,23 +3264,19 @@ packages: version: 1.4.0 dev: true - registry.npmjs.org/dataloader/2.1.0: - resolution: {integrity: sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz} - name: dataloader - version: 2.1.0 - dev: true - - registry.npmjs.org/date-fns/2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz} + registry.npmjs.org/date-fns/2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz} name: date-fns - version: 2.29.3 + version: 2.30.0 engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.3 dev: true - registry.npmjs.org/dayjs/1.11.5: - resolution: {integrity: sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz} + registry.npmjs.org/dayjs/1.11.7: + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz} name: dayjs - version: 1.11.5 + version: 1.11.7 dev: true registry.npmjs.org/debug/3.2.7_supports-color@8.1.1: @@ -4043,20 +3294,6 @@ packages: supports-color: registry.npmjs.org/supports-color/8.1.1 dev: true - 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: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-4.3.4.tgz} name: debug @@ -4087,10 +3324,10 @@ packages: supports-color: registry.npmjs.org/supports-color/8.1.1 dev: true - registry.npmjs.org/decamelize-keys/1.1.0: - resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz} + registry.npmjs.org/decamelize-keys/1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz} name: decamelize-keys - version: 1.1.0 + version: 1.1.1 engines: {node: '>=0.10.0'} dependencies: decamelize: registry.npmjs.org/decamelize/1.2.0 @@ -4116,13 +3353,6 @@ packages: version: 0.1.4 dev: true - registry.npmjs.org/deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz} - name: deepmerge - version: 4.2.2 - engines: {node: '>=0.10.0'} - dev: true - registry.npmjs.org/deepmerge/4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz} name: deepmerge @@ -4130,18 +3360,18 @@ packages: engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/defaults/1.0.3: - resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz} + registry.npmjs.org/defaults/1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz} name: defaults - version: 1.0.3 + version: 1.0.4 dependencies: clone: registry.npmjs.org/clone/1.0.4 dev: true - registry.npmjs.org/define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz} + registry.npmjs.org/define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz} name: define-properties - version: 1.1.4 + version: 1.2.0 engines: {node: '>= 0.4'} dependencies: has-property-descriptors: registry.npmjs.org/has-property-descriptors/1.0.0 @@ -4169,10 +3399,10 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/devalue/4.3.0: - resolution: {integrity: sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz} + registry.npmjs.org/devalue/4.3.2: + resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz} name: devalue - version: 4.3.0 + version: 4.3.2 dev: true registry.npmjs.org/dir-glob/3.0.1: @@ -4224,16 +3454,10 @@ packages: safer-buffer: registry.npmjs.org/safer-buffer/2.1.2 dev: true - registry.npmjs.org/electron-to-chromium/1.4.247: - resolution: {integrity: sha512-FLs6R4FQE+1JHM0hh3sfdxnYjKvJpHZyhQDjc2qFq/xFvmmRt/TATNToZhrcGUFzpF2XjeiuozrA8lI0PZmYYw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.247.tgz} - name: electron-to-chromium - version: 1.4.247 - dev: true - - registry.npmjs.org/electron-to-chromium/1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz} + registry.npmjs.org/electron-to-chromium/1.4.414: + resolution: {integrity: sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz} name: electron-to-chromium - version: 1.4.284 + version: 1.4.414 dev: true registry.npmjs.org/emoji-regex/8.0.0: @@ -4267,19 +3491,19 @@ packages: is-arrayish: registry.npmjs.org/is-arrayish/0.2.1 dev: true - registry.npmjs.org/es-abstract/1.21.1: - resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz} + registry.npmjs.org/es-abstract/1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz} name: es-abstract - version: 1.21.1 + version: 1.21.2 engines: {node: '>= 0.4'} dependencies: + array-buffer-byte-length: registry.npmjs.org/array-buffer-byte-length/1.0.0 available-typed-arrays: registry.npmjs.org/available-typed-arrays/1.0.5 call-bind: registry.npmjs.org/call-bind/1.0.2 es-set-tostringtag: registry.npmjs.org/es-set-tostringtag/2.0.1 es-to-primitive: registry.npmjs.org/es-to-primitive/1.2.1 - function-bind: registry.npmjs.org/function-bind/1.1.1 function.prototype.name: registry.npmjs.org/function.prototype.name/1.1.5 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 get-symbol-description: registry.npmjs.org/get-symbol-description/1.0.0 globalthis: registry.npmjs.org/globalthis/1.0.3 gopd: registry.npmjs.org/gopd/1.0.1 @@ -4287,8 +3511,8 @@ packages: has-property-descriptors: registry.npmjs.org/has-property-descriptors/1.0.0 has-proto: registry.npmjs.org/has-proto/1.0.1 has-symbols: registry.npmjs.org/has-symbols/1.0.3 - internal-slot: registry.npmjs.org/internal-slot/1.0.4 - is-array-buffer: registry.npmjs.org/is-array-buffer/3.0.1 + internal-slot: registry.npmjs.org/internal-slot/1.0.5 + is-array-buffer: registry.npmjs.org/is-array-buffer/3.0.2 is-callable: registry.npmjs.org/is-callable/1.2.7 is-negative-zero: registry.npmjs.org/is-negative-zero/2.0.2 is-regex: registry.npmjs.org/is-regex/1.1.4 @@ -4296,11 +3520,12 @@ packages: is-string: registry.npmjs.org/is-string/1.0.7 is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 is-weakref: registry.npmjs.org/is-weakref/1.0.2 - object-inspect: registry.npmjs.org/object-inspect/1.12.2 + object-inspect: registry.npmjs.org/object-inspect/1.12.3 object-keys: registry.npmjs.org/object-keys/1.1.1 object.assign: registry.npmjs.org/object.assign/4.1.4 - regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags/1.4.3 + regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags/1.5.0 safe-regex-test: registry.npmjs.org/safe-regex-test/1.0.0 + string.prototype.trim: registry.npmjs.org/string.prototype.trim/1.2.7 string.prototype.trimend: registry.npmjs.org/string.prototype.trimend/1.0.6 string.prototype.trimstart: registry.npmjs.org/string.prototype.trimstart/1.0.6 typed-array-length: registry.npmjs.org/typed-array-length/1.0.4 @@ -4314,7 +3539,7 @@ packages: version: 2.0.1 engines: {node: '>= 0.4'} dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 has: registry.npmjs.org/has/1.0.3 has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 dev: true @@ -4344,68 +3569,36 @@ packages: version: 3.3.1 dev: true - registry.npmjs.org/esbuild/0.16.16: - resolution: {integrity: sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz} - name: esbuild - version: 0.16.16 - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': registry.npmjs.org/@esbuild/android-arm/0.16.16 - '@esbuild/android-arm64': registry.npmjs.org/@esbuild/android-arm64/0.16.16 - '@esbuild/android-x64': registry.npmjs.org/@esbuild/android-x64/0.16.16 - '@esbuild/darwin-arm64': registry.npmjs.org/@esbuild/darwin-arm64/0.16.16 - '@esbuild/darwin-x64': registry.npmjs.org/@esbuild/darwin-x64/0.16.16 - '@esbuild/freebsd-arm64': registry.npmjs.org/@esbuild/freebsd-arm64/0.16.16 - '@esbuild/freebsd-x64': registry.npmjs.org/@esbuild/freebsd-x64/0.16.16 - '@esbuild/linux-arm': registry.npmjs.org/@esbuild/linux-arm/0.16.16 - '@esbuild/linux-arm64': registry.npmjs.org/@esbuild/linux-arm64/0.16.16 - '@esbuild/linux-ia32': registry.npmjs.org/@esbuild/linux-ia32/0.16.16 - '@esbuild/linux-loong64': registry.npmjs.org/@esbuild/linux-loong64/0.16.16 - '@esbuild/linux-mips64el': registry.npmjs.org/@esbuild/linux-mips64el/0.16.16 - '@esbuild/linux-ppc64': registry.npmjs.org/@esbuild/linux-ppc64/0.16.16 - '@esbuild/linux-riscv64': registry.npmjs.org/@esbuild/linux-riscv64/0.16.16 - '@esbuild/linux-s390x': registry.npmjs.org/@esbuild/linux-s390x/0.16.16 - '@esbuild/linux-x64': registry.npmjs.org/@esbuild/linux-x64/0.16.16 - '@esbuild/netbsd-x64': registry.npmjs.org/@esbuild/netbsd-x64/0.16.16 - '@esbuild/openbsd-x64': registry.npmjs.org/@esbuild/openbsd-x64/0.16.16 - '@esbuild/sunos-x64': registry.npmjs.org/@esbuild/sunos-x64/0.16.16 - '@esbuild/win32-arm64': registry.npmjs.org/@esbuild/win32-arm64/0.16.16 - '@esbuild/win32-ia32': registry.npmjs.org/@esbuild/win32-ia32/0.16.16 - '@esbuild/win32-x64': registry.npmjs.org/@esbuild/win32-x64/0.16.16 - dev: true - - registry.npmjs.org/esbuild/0.17.14: - resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.17.14.tgz} + registry.npmjs.org/esbuild/0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz} name: esbuild - version: 0.17.14 + version: 0.17.19 engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmjs.org/@esbuild/android-arm/0.17.14 - '@esbuild/android-arm64': registry.npmjs.org/@esbuild/android-arm64/0.17.14 - '@esbuild/android-x64': registry.npmjs.org/@esbuild/android-x64/0.17.14 - '@esbuild/darwin-arm64': registry.npmjs.org/@esbuild/darwin-arm64/0.17.14 - '@esbuild/darwin-x64': registry.npmjs.org/@esbuild/darwin-x64/0.17.14 - '@esbuild/freebsd-arm64': registry.npmjs.org/@esbuild/freebsd-arm64/0.17.14 - '@esbuild/freebsd-x64': registry.npmjs.org/@esbuild/freebsd-x64/0.17.14 - '@esbuild/linux-arm': registry.npmjs.org/@esbuild/linux-arm/0.17.14 - '@esbuild/linux-arm64': registry.npmjs.org/@esbuild/linux-arm64/0.17.14 - '@esbuild/linux-ia32': registry.npmjs.org/@esbuild/linux-ia32/0.17.14 - '@esbuild/linux-loong64': registry.npmjs.org/@esbuild/linux-loong64/0.17.14 - '@esbuild/linux-mips64el': registry.npmjs.org/@esbuild/linux-mips64el/0.17.14 - '@esbuild/linux-ppc64': registry.npmjs.org/@esbuild/linux-ppc64/0.17.14 - '@esbuild/linux-riscv64': registry.npmjs.org/@esbuild/linux-riscv64/0.17.14 - '@esbuild/linux-s390x': registry.npmjs.org/@esbuild/linux-s390x/0.17.14 - '@esbuild/linux-x64': registry.npmjs.org/@esbuild/linux-x64/0.17.14 - '@esbuild/netbsd-x64': registry.npmjs.org/@esbuild/netbsd-x64/0.17.14 - '@esbuild/openbsd-x64': registry.npmjs.org/@esbuild/openbsd-x64/0.17.14 - '@esbuild/sunos-x64': registry.npmjs.org/@esbuild/sunos-x64/0.17.14 - '@esbuild/win32-arm64': registry.npmjs.org/@esbuild/win32-arm64/0.17.14 - '@esbuild/win32-ia32': registry.npmjs.org/@esbuild/win32-ia32/0.17.14 - '@esbuild/win32-x64': registry.npmjs.org/@esbuild/win32-x64/0.17.14 + '@esbuild/android-arm': registry.npmjs.org/@esbuild/android-arm/0.17.19 + '@esbuild/android-arm64': registry.npmjs.org/@esbuild/android-arm64/0.17.19 + '@esbuild/android-x64': registry.npmjs.org/@esbuild/android-x64/0.17.19 + '@esbuild/darwin-arm64': registry.npmjs.org/@esbuild/darwin-arm64/0.17.19 + '@esbuild/darwin-x64': registry.npmjs.org/@esbuild/darwin-x64/0.17.19 + '@esbuild/freebsd-arm64': registry.npmjs.org/@esbuild/freebsd-arm64/0.17.19 + '@esbuild/freebsd-x64': registry.npmjs.org/@esbuild/freebsd-x64/0.17.19 + '@esbuild/linux-arm': registry.npmjs.org/@esbuild/linux-arm/0.17.19 + '@esbuild/linux-arm64': registry.npmjs.org/@esbuild/linux-arm64/0.17.19 + '@esbuild/linux-ia32': registry.npmjs.org/@esbuild/linux-ia32/0.17.19 + '@esbuild/linux-loong64': registry.npmjs.org/@esbuild/linux-loong64/0.17.19 + '@esbuild/linux-mips64el': registry.npmjs.org/@esbuild/linux-mips64el/0.17.19 + '@esbuild/linux-ppc64': registry.npmjs.org/@esbuild/linux-ppc64/0.17.19 + '@esbuild/linux-riscv64': registry.npmjs.org/@esbuild/linux-riscv64/0.17.19 + '@esbuild/linux-s390x': registry.npmjs.org/@esbuild/linux-s390x/0.17.19 + '@esbuild/linux-x64': registry.npmjs.org/@esbuild/linux-x64/0.17.19 + '@esbuild/netbsd-x64': registry.npmjs.org/@esbuild/netbsd-x64/0.17.19 + '@esbuild/openbsd-x64': registry.npmjs.org/@esbuild/openbsd-x64/0.17.19 + '@esbuild/sunos-x64': registry.npmjs.org/@esbuild/sunos-x64/0.17.19 + '@esbuild/win32-arm64': registry.npmjs.org/@esbuild/win32-arm64/0.17.19 + '@esbuild/win32-ia32': registry.npmjs.org/@esbuild/win32-ia32/0.17.19 + '@esbuild/win32-x64': registry.npmjs.org/@esbuild/win32-x64/0.17.19 dev: true registry.npmjs.org/escalade/3.1.1: @@ -4429,43 +3622,31 @@ packages: engines: {node: '>=10'} dev: true - registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.23.1: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz} - id: registry.npmjs.org/eslint-config-prettier/8.5.0 - name: eslint-config-prettier - version: 8.5.0 - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: registry.npmjs.org/eslint/8.23.1 - dev: true - - registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.36.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz} - id: registry.npmjs.org/eslint-config-prettier/8.5.0 + registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.41.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 name: eslint-config-prettier - version: 8.5.0 + version: 8.8.0 hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: registry.npmjs.org/eslint/8.36.0 + eslint: registry.npmjs.org/eslint/8.41.0 dev: true - registry.npmjs.org/eslint-config-turbo/1.8.6_eslint@8.23.1: - resolution: {integrity: sha512-LSMqrHmFeQcYRuBnzrzw+B2bJ3+o8wxPkRwfK0Y+SSLsq2F/niRJ2kqB8j4uOSCfxybHHpFEB2CgUpQiiyfeoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.8.6.tgz} - id: registry.npmjs.org/eslint-config-turbo/1.8.6 + registry.npmjs.org/eslint-config-turbo/1.10.0_eslint@8.41.0: + resolution: {integrity: sha512-iJsjoOb0vjnpV65rL+SAOIgbOluEibFqo/ke4UzXA9bi13cNJOT9k6FCQA7RXBHwChz+6BzYq5ZyoE3WcUg+0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.0.tgz} + id: registry.npmjs.org/eslint-config-turbo/1.10.0 name: eslint-config-turbo - version: 1.8.6 + version: 1.10.0 peerDependencies: eslint: '>6.6.0' dependencies: - eslint: registry.npmjs.org/eslint/8.23.1 - eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo/1.8.6_eslint@8.23.1 + eslint: registry.npmjs.org/eslint/8.41.0 + eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo/1.10.0_eslint@8.41.0 dev: true - registry.npmjs.org/eslint-plugin-prettier/4.2.1_cabrci5exjdaojcvd6xoxgeowu: + registry.npmjs.org/eslint-plugin-prettier/4.2.1_xcqkel4mpum3npntysob2xmn54: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz} id: registry.npmjs.org/eslint-plugin-prettier/4.2.1 name: eslint-plugin-prettier @@ -4479,13 +3660,13 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: registry.npmjs.org/eslint/8.23.1 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.5.0_eslint@8.23.1 - prettier: registry.npmjs.org/prettier/2.7.1 + eslint: registry.npmjs.org/eslint/8.41.0 + eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.41.0 + prettier: registry.npmjs.org/prettier/2.8.8 prettier-linter-helpers: registry.npmjs.org/prettier-linter-helpers/1.0.0 dev: true - registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.23.1: + registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.41.0: resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz} id: registry.npmjs.org/eslint-plugin-react/7.32.2 name: eslint-plugin-react @@ -4498,7 +3679,7 @@ packages: array.prototype.flatmap: registry.npmjs.org/array.prototype.flatmap/1.3.1 array.prototype.tosorted: registry.npmjs.org/array.prototype.tosorted/1.1.1 doctrine: registry.npmjs.org/doctrine/2.1.0 - eslint: registry.npmjs.org/eslint/8.23.1 + eslint: registry.npmjs.org/eslint/8.41.0 estraverse: registry.npmjs.org/estraverse/5.3.0 jsx-ast-utils: registry.npmjs.org/jsx-ast-utils/3.3.3 minimatch: registry.npmjs.org/minimatch/3.1.2 @@ -4512,7 +3693,7 @@ packages: string.prototype.matchall: registry.npmjs.org/string.prototype.matchall/4.0.8 dev: true - registry.npmjs.org/eslint-plugin-svelte3/4.0.0_wzem237sbvnwe7n34ytc5phasy: + registry.npmjs.org/eslint-plugin-svelte3/4.0.0_2rgspgo736k3nkqykgvv2sinmy: resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz} id: registry.npmjs.org/eslint-plugin-svelte3/4.0.0 name: eslint-plugin-svelte3 @@ -4521,19 +3702,19 @@ packages: eslint: '>=8.0.0' svelte: ^3.2.0 dependencies: - eslint: registry.npmjs.org/eslint/8.36.0 - svelte: registry.npmjs.org/svelte/3.57.0 + eslint: registry.npmjs.org/eslint/8.41.0 + svelte: registry.npmjs.org/svelte/3.59.1 dev: true - registry.npmjs.org/eslint-plugin-turbo/1.8.6_eslint@8.23.1: - resolution: {integrity: sha512-LieXzur+4XtIsLst8GdupTMhvGn2ebFetG3AVErh2jHBy1EobPHbatjcdNZQMy5EsdG35axQVB8KFF3jo4u+OQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.8.6.tgz} - id: registry.npmjs.org/eslint-plugin-turbo/1.8.6 + registry.npmjs.org/eslint-plugin-turbo/1.10.0_eslint@8.41.0: + resolution: {integrity: sha512-7eDeOjZDx/GcrZj4XYX1puaxsDtm6FE53qlbb4JyJhhkKC8OVYTJHTpu8kSmFTNsVoIgDFo/SEUIMwKHLYRM3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.0.tgz} + id: registry.npmjs.org/eslint-plugin-turbo/1.10.0 name: eslint-plugin-turbo - version: 1.8.6 + version: 1.10.0 peerDependencies: eslint: '>6.6.0' dependencies: - eslint: registry.npmjs.org/eslint/8.23.1 + eslint: registry.npmjs.org/eslint/8.41.0 dev: true registry.npmjs.org/eslint-scope/5.1.1: @@ -4546,104 +3727,34 @@ packages: estraverse: registry.npmjs.org/estraverse/4.3.0 dev: true - registry.npmjs.org/eslint-scope/7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz} + registry.npmjs.org/eslint-scope/7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz} name: eslint-scope - version: 7.1.1 + version: 7.2.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: registry.npmjs.org/esrecurse/4.3.0 estraverse: registry.npmjs.org/estraverse/5.3.0 dev: true - registry.npmjs.org/eslint-utils/3.0.0_eslint@8.23.1: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz} - id: registry.npmjs.org/eslint-utils/3.0.0 - name: eslint-utils - version: 3.0.0 - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: registry.npmjs.org/eslint/8.23.1 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/2.1.0 - dev: true - - registry.npmjs.org/eslint-visitor-keys/2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz} - name: eslint-visitor-keys - version: 2.1.0 - engines: {node: '>=10'} - dev: true - - registry.npmjs.org/eslint-visitor-keys/3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz} + registry.npmjs.org/eslint-visitor-keys/3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz} name: eslint-visitor-keys - version: 3.3.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - registry.npmjs.org/eslint/8.23.1: - resolution: {integrity: sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz} - name: eslint - version: 8.23.1 + version: 3.4.1 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc/1.3.2 - '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array/0.10.4 - '@humanwhocodes/gitignore-to-minimatch': registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/1.0.2 - '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer/1.0.1 - 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 - 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.1.1 - eslint-utils: registry.npmjs.org/eslint-utils/3.0.0_eslint@8.23.1 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 - espree: registry.npmjs.org/espree/9.4.0 - esquery: registry.npmjs.org/esquery/1.4.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.17.0 - globby: registry.npmjs.org/globby/11.1.0 - grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 - ignore: registry.npmjs.org/ignore/5.2.0 - import-fresh: registry.npmjs.org/import-fresh/3.3.0 - imurmurhash: registry.npmjs.org/imurmurhash/0.1.4 - is-glob: registry.npmjs.org/is-glob/4.0.3 - js-sdsl: registry.npmjs.org/js-sdsl/4.1.4 - 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.1 - regexpp: registry.npmjs.org/regexpp/3.2.0 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - strip-json-comments: registry.npmjs.org/strip-json-comments/3.1.1 - text-table: registry.npmjs.org/text-table/0.2.0 - transitivePeerDependencies: - - supports-color dev: true - registry.npmjs.org/eslint/8.36.0: - resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz} + registry.npmjs.org/eslint/8.41.0: + resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz} name: eslint - version: 8.36.0 + version: 8.41.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.2.0_eslint@8.36.0 - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.4.0 - '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc/2.0.1 - '@eslint/js': registry.npmjs.org/@eslint/js/8.36.0 + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils/4.4.0_eslint@8.41.0 + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.5.1 + '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc/2.0.3 + '@eslint/js': registry.npmjs.org/@eslint/js/8.41.0 '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array/0.11.8 '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer/1.0.1 '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk/1.2.8 @@ -4653,9 +3764,9 @@ packages: debug: registry.npmjs.org/debug/4.3.4 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.1.1 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 - espree: registry.npmjs.org/espree/9.5.0 + eslint-scope: registry.npmjs.org/eslint-scope/7.2.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 + espree: registry.npmjs.org/espree/9.5.2 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 @@ -4663,13 +3774,12 @@ packages: 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.20.0 - grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 + graphemer: registry.npmjs.org/graphemer/1.4.0 ignore: registry.npmjs.org/ignore/5.2.4 import-fresh: registry.npmjs.org/import-fresh/3.3.0 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-sdsl: registry.npmjs.org/js-sdsl/4.1.4 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 @@ -4690,26 +3800,15 @@ packages: version: 1.0.0 dev: true - registry.npmjs.org/espree/9.4.0: - resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/espree/-/espree-9.4.0.tgz} - name: espree - version: 9.4.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: registry.npmjs.org/acorn/8.8.0 - acorn-jsx: registry.npmjs.org/acorn-jsx/5.3.2_acorn@8.8.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 - dev: true - - registry.npmjs.org/espree/9.5.0: - resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/espree/-/espree-9.5.0.tgz} + registry.npmjs.org/espree/9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/espree/-/espree-9.5.2.tgz} name: espree - version: 9.5.0 + version: 9.5.2 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: registry.npmjs.org/acorn/8.8.0 - acorn-jsx: registry.npmjs.org/acorn-jsx/5.3.2_acorn@8.8.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0 + acorn: registry.npmjs.org/acorn/8.8.2 + acorn-jsx: registry.npmjs.org/acorn-jsx/5.3.2_acorn@8.8.2 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 dev: true registry.npmjs.org/esprima/4.0.1: @@ -4720,15 +3819,6 @@ packages: hasBin: true dev: true - registry.npmjs.org/esquery/1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz} - name: esquery - version: 1.4.0 - engines: {node: '>=0.10'} - dependencies: - estraverse: registry.npmjs.org/estraverse/5.3.0 - dev: true - registry.npmjs.org/esquery/1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz} name: esquery @@ -4761,12 +3851,6 @@ packages: engines: {node: '>=4.0'} dev: true - registry.npmjs.org/estree-walker/1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz} - name: estree-walker - version: 1.0.1 - dev: true - registry.npmjs.org/estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz} name: estree-walker @@ -4794,10 +3878,10 @@ packages: through: registry.npmjs.org/through/2.3.8 dev: true - registry.npmjs.org/eventemitter2/6.4.8: - resolution: {integrity: sha512-pAJurPyD+Nj/pfz8m0usKF1RW0E9gfY4Dfdem2l6jZbqcZlK8SP93qUMCv9V9FgOn+GSZEW6qeaglpf/vQ9D5A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.8.tgz} + registry.npmjs.org/eventemitter2/6.4.7: + resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz} name: eventemitter2 - version: 6.4.8 + version: 6.4.7 dev: true registry.npmjs.org/execa/4.1.0: @@ -4890,22 +3974,16 @@ packages: engines: {'0': node >=0.6.0} dev: true - registry.npmjs.org/fast-deep-equal/2.0.1: - resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz} - name: fast-deep-equal - version: 2.0.1 - dev: true - registry.npmjs.org/fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} name: fast-deep-equal version: 3.1.3 dev: true - registry.npmjs.org/fast-diff/1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz} + registry.npmjs.org/fast-diff/1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz} name: fast-diff - version: 1.2.0 + version: 1.3.0 dev: true registry.npmjs.org/fast-glob/3.2.12: @@ -5021,11 +4099,11 @@ packages: version: 3.2.7 dev: true - registry.npmjs.org/follow-redirects/1.15.1_debug@4.3.2: - resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz} - id: registry.npmjs.org/follow-redirects/1.15.1 + registry.npmjs.org/follow-redirects/1.15.2_debug@4.3.4: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz} + id: registry.npmjs.org/follow-redirects/1.15.2 name: follow-redirects - version: 1.15.1 + version: 1.15.2 engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -5033,7 +4111,7 @@ packages: debug: optional: true dependencies: - debug: registry.npmjs.org/debug/4.3.2 + debug: registry.npmjs.org/debug/4.3.4 dev: true registry.npmjs.org/for-each/0.3.3: @@ -5061,6 +4139,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.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz} name: fraction.js @@ -5073,13 +4162,13 @@ packages: version: 0.1.7 dev: true - registry.npmjs.org/fs-extra/11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz} + registry.npmjs.org/fs-extra/11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz} name: fs-extra - version: 11.1.0 + version: 11.1.1 engines: {node: '>=14.14'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + 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 dev: true @@ -5090,7 +4179,7 @@ packages: version: 7.0.1 engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 jsonfile: registry.npmjs.org/jsonfile/4.0.0 universalify: registry.npmjs.org/universalify/0.1.2 dev: true @@ -5101,7 +4190,7 @@ packages: version: 8.1.0 engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 jsonfile: registry.npmjs.org/jsonfile/4.0.0 universalify: registry.npmjs.org/universalify/0.1.2 dev: true @@ -5113,7 +4202,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: registry.npmjs.org/at-least-node/1.0.0 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + 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 dev: true @@ -5147,8 +4236,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 functions-have-names: registry.npmjs.org/functions-have-names/1.2.3 dev: true @@ -5172,13 +4261,14 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - registry.npmjs.org/get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz} + registry.npmjs.org/get-intrinsic/1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz} name: get-intrinsic - version: 1.1.3 + version: 1.2.1 dependencies: function-bind: registry.npmjs.org/function-bind/1.1.1 has: registry.npmjs.org/has/1.0.3 + has-proto: registry.npmjs.org/has-proto/1.0.1 has-symbols: registry.npmjs.org/has-symbols/1.0.3 dev: true @@ -5212,7 +4302,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 dev: true registry.npmjs.org/getos/3.2.1: @@ -5231,24 +4321,6 @@ packages: assert-plus: registry.npmjs.org/assert-plus/1.0.0 dev: true - registry.npmjs.org/glob-base/0.3.0: - resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz} - name: glob-base - version: 0.3.0 - engines: {node: '>=0.10.0'} - dependencies: - glob-parent: registry.npmjs.org/glob-parent/2.0.0 - is-glob: registry.npmjs.org/is-glob/2.0.1 - dev: true - - registry.npmjs.org/glob-parent/2.0.0: - resolution: {integrity: sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz} - name: glob-parent - version: 2.0.0 - dependencies: - is-glob: registry.npmjs.org/is-glob/2.0.1 - dev: true - registry.npmjs.org/glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz} name: glob-parent @@ -5280,23 +4352,23 @@ packages: path-is-absolute: registry.npmjs.org/path-is-absolute/1.0.1 dev: true - registry.npmjs.org/glob/8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob/-/glob-8.0.3.tgz} + registry.npmjs.org/glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob/-/glob-8.1.0.tgz} name: glob - version: 8.0.3 + version: 8.1.0 engines: {node: '>=12'} 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/5.1.2 + minimatch: registry.npmjs.org/minimatch/5.1.6 once: registry.npmjs.org/once/1.4.0 dev: true - registry.npmjs.org/global-dirs/3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz} + registry.npmjs.org/global-dirs/3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz} name: global-dirs - version: 3.0.0 + version: 3.0.1 engines: {node: '>=10'} dependencies: ini: registry.npmjs.org/ini/2.0.0 @@ -5309,15 +4381,6 @@ packages: engines: {node: '>=4'} dev: true - registry.npmjs.org/globals/13.17.0: - resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globals/-/globals-13.17.0.tgz} - name: globals - version: 13.17.0 - engines: {node: '>=8'} - dependencies: - type-fest: registry.npmjs.org/type-fest/0.20.2 - dev: true - registry.npmjs.org/globals/13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globals/-/globals-13.20.0.tgz} name: globals @@ -5333,7 +4396,7 @@ packages: version: 1.0.3 engines: {node: '>= 0.4'} dependencies: - define-properties: registry.npmjs.org/define-properties/1.1.4 + define-properties: registry.npmjs.org/define-properties/1.2.0 dev: true registry.npmjs.org/globalyzer/0.1.0: @@ -5356,10 +4419,10 @@ packages: slash: registry.npmjs.org/slash/3.0.0 dev: true - registry.npmjs.org/globby/13.1.3: - resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globby/-/globby-13.1.3.tgz} + registry.npmjs.org/globby/13.1.4: + resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globby/-/globby-13.1.4.tgz} name: globby - version: 13.1.3 + version: 13.1.4 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: registry.npmjs.org/dir-glob/3.0.1 @@ -5380,13 +4443,13 @@ packages: name: gopd version: 1.0.1 dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 dev: true - registry.npmjs.org/graceful-fs/4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz} + registry.npmjs.org/graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz} name: graceful-fs - version: 4.2.10 + version: 4.2.11 dev: true registry.npmjs.org/grapheme-splitter/1.0.4: @@ -5395,6 +4458,12 @@ packages: version: 1.0.4 dev: true + registry.npmjs.org/graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz} + name: graphemer + version: 1.4.0 + dev: true + registry.npmjs.org/graphlib/2.1.8: resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz} name: graphlib @@ -5435,7 +4504,7 @@ packages: name: has-property-descriptors version: 1.0.0 dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 dev: true registry.npmjs.org/has-proto/1.0.1: @@ -5470,14 +4539,6 @@ packages: function-bind: registry.npmjs.org/function-bind/1.1.1 dev: true - 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.19.0 - 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 @@ -5530,21 +4591,6 @@ packages: version: 1.2.1 dev: true - registry.npmjs.org/ignore-walk/3.0.4: - resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz} - name: ignore-walk - version: 3.0.4 - dependencies: - minimatch: registry.npmjs.org/minimatch/3.1.2 - dev: true - - registry.npmjs.org/ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz} - name: ignore - version: 5.2.0 - engines: {node: '>= 4'} - dev: true - registry.npmjs.org/ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz} name: ignore @@ -5568,10 +4614,10 @@ packages: resolve-from: registry.npmjs.org/resolve-from/4.0.0 dev: true - registry.npmjs.org/import-meta-resolve/2.2.2: - resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz} + registry.npmjs.org/import-meta-resolve/3.0.0: + 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: 2.2.2 + version: 3.0.0 dev: true registry.npmjs.org/imurmurhash/0.1.4: @@ -5610,24 +4656,24 @@ packages: engines: {node: '>=10'} dev: true - registry.npmjs.org/internal-slot/1.0.4: - resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz} + registry.npmjs.org/internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz} name: internal-slot - version: 1.0.4 + version: 1.0.5 engines: {node: '>= 0.4'} dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 has: registry.npmjs.org/has/1.0.3 side-channel: registry.npmjs.org/side-channel/1.0.4 dev: true - registry.npmjs.org/is-array-buffer/3.0.1: - resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz} + registry.npmjs.org/is-array-buffer/3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz} name: is-array-buffer - version: 3.0.1 + version: 3.0.2 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 dev: true @@ -5664,10 +4710,10 @@ packages: has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 dev: true - registry.npmjs.org/is-builtin-module/3.2.0: - resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz} + registry.npmjs.org/is-builtin-module/3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz} name: is-builtin-module - version: 3.2.0 + version: 3.2.1 engines: {node: '>=6'} dependencies: builtin-modules: registry.npmjs.org/builtin-modules/3.3.0 @@ -5680,28 +4726,19 @@ packages: engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/is-ci/2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz} - name: is-ci - version: 2.0.0 - hasBin: true - dependencies: - ci-info: registry.npmjs.org/ci-info/2.0.0 - dev: true - registry.npmjs.org/is-ci/3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz} name: is-ci version: 3.0.1 hasBin: true dependencies: - ci-info: registry.npmjs.org/ci-info/3.4.0 + ci-info: registry.npmjs.org/ci-info/3.8.0 dev: true - registry.npmjs.org/is-core-module/2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz} + registry.npmjs.org/is-core-module/2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz} name: is-core-module - version: 2.11.0 + version: 2.12.1 dependencies: has: registry.npmjs.org/has/1.0.3 dev: true @@ -5715,20 +4752,6 @@ packages: has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 dev: true - registry.npmjs.org/is-dotfile/1.0.3: - resolution: {integrity: sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz} - name: is-dotfile - version: 1.0.3 - engines: {node: '>=0.10.0'} - dev: true - - registry.npmjs.org/is-extglob/1.0.0: - resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz} - name: is-extglob - version: 1.0.0 - engines: {node: '>=0.10.0'} - dev: true - registry.npmjs.org/is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz} name: is-extglob @@ -5743,15 +4766,6 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/is-glob/2.0.1: - resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz} - name: is-glob - version: 2.0.1 - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: registry.npmjs.org/is-extglob/1.0.0 - dev: true - registry.npmjs.org/is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} name: is-glob @@ -5767,7 +4781,7 @@ packages: version: 0.4.0 engines: {node: '>=10'} dependencies: - global-dirs: registry.npmjs.org/global-dirs/3.0.0 + global-dirs: registry.npmjs.org/global-dirs/3.0.1 is-path-inside: registry.npmjs.org/is-path-inside/3.0.3 dev: true @@ -5819,7 +4833,7 @@ packages: name: is-reference version: 1.2.1 dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.0 + '@types/estree': registry.npmjs.org/@types/estree/1.0.1 dev: true registry.npmjs.org/is-regex/1.1.4: @@ -5927,35 +4941,18 @@ packages: version: 0.1.2 dev: true - registry.npmjs.org/jest-worker/26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz} - name: jest-worker - version: 26.6.2 - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': registry.npmjs.org/@types/node/18.7.16 - merge-stream: registry.npmjs.org/merge-stream/2.0.0 - supports-color: registry.npmjs.org/supports-color/7.2.0 - dev: true - - registry.npmjs.org/joi/17.6.0: - resolution: {integrity: sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/joi/-/joi-17.6.0.tgz} + registry.npmjs.org/joi/17.9.2: + resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/joi/-/joi-17.9.2.tgz} name: joi - version: 17.6.0 + version: 17.9.2 dependencies: '@hapi/hoek': registry.npmjs.org/@hapi/hoek/9.3.0 '@hapi/topo': registry.npmjs.org/@hapi/topo/5.1.0 '@sideway/address': registry.npmjs.org/@sideway/address/4.1.4 - '@sideway/formula': registry.npmjs.org/@sideway/formula/3.0.0 + '@sideway/formula': registry.npmjs.org/@sideway/formula/3.0.1 '@sideway/pinpoint': registry.npmjs.org/@sideway/pinpoint/2.0.0 dev: true - registry.npmjs.org/js-sdsl/4.1.4: - resolution: {integrity: sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz} - name: js-sdsl - version: 4.1.4 - dev: true - registry.npmjs.org/js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz} name: js-tokens @@ -6024,14 +5021,6 @@ packages: version: 5.0.1 dev: true - registry.npmjs.org/json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json5/-/json5-2.2.1.tgz} - name: json5 - version: 2.2.1 - engines: {node: '>=6'} - hasBin: true - 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 @@ -6045,7 +5034,7 @@ packages: name: jsonfile version: 4.0.0 optionalDependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 dev: true registry.npmjs.org/jsonfile/6.1.0: @@ -6055,7 +5044,7 @@ packages: dependencies: universalify: registry.npmjs.org/universalify/2.0.0 optionalDependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 dev: true registry.npmjs.org/jsprim/2.0.2: @@ -6119,10 +5108,10 @@ packages: immediate: registry.npmjs.org/immediate/3.0.6 dev: false - registry.npmjs.org/lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz} + registry.npmjs.org/lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} name: lilconfig - version: 2.0.6 + version: 2.1.0 engines: {node: '>=10'} dev: true @@ -6145,12 +5134,12 @@ packages: optional: true dependencies: cli-truncate: registry.npmjs.org/cli-truncate/2.1.0 - colorette: registry.npmjs.org/colorette/2.0.19 + colorette: registry.npmjs.org/colorette/2.0.20 enquirer: registry.npmjs.org/enquirer/2.3.6 log-update: registry.npmjs.org/log-update/4.0.0 p-map: registry.npmjs.org/p-map/4.0.0 rfdc: registry.npmjs.org/rfdc/1.3.0 - rxjs: registry.npmjs.org/rxjs/7.8.0 + rxjs: registry.npmjs.org/rxjs/7.8.1 through: registry.npmjs.org/through/2.3.8 wrap-ansi: registry.npmjs.org/wrap-ansi/7.0.0 dev: true @@ -6161,7 +5150,7 @@ packages: version: 0.2.0 engines: {node: '>=6'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 js-yaml: registry.npmjs.org/js-yaml/3.14.1 pify: registry.npmjs.org/pify/4.0.1 strip-bom: registry.npmjs.org/strip-bom/3.0.0 @@ -6251,7 +5240,7 @@ packages: name: lower-case version: 2.0.2 dependencies: - tslib: registry.npmjs.org/tslib/2.4.1 + tslib: registry.npmjs.org/tslib/2.5.2 dev: true registry.npmjs.org/lru-cache/4.1.5: @@ -6280,30 +5269,13 @@ packages: yallist: registry.npmjs.org/yallist/4.0.0 dev: true - registry.npmjs.org/magic-string/0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz} - name: magic-string - version: 0.25.9 - dependencies: - sourcemap-codec: registry.npmjs.org/sourcemap-codec/1.4.8 - dev: true - registry.npmjs.org/magic-string/0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz} name: magic-string version: 0.27.0 engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 - dev: true - - registry.npmjs.org/magic-string/0.29.0: - resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.29.0.tgz} - name: magic-string - version: 0.29.0 - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 dev: true registry.npmjs.org/magic-string/0.30.0: @@ -6312,7 +5284,7 @@ packages: version: 0.30.0 engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 dev: true registry.npmjs.org/map-obj/1.0.1: @@ -6343,26 +5315,7 @@ packages: dependencies: '@types/minimist': registry.npmjs.org/@types/minimist/1.2.2 camelcase-keys: registry.npmjs.org/camelcase-keys/6.2.2 - decamelize-keys: registry.npmjs.org/decamelize-keys/1.1.0 - hard-rejection: registry.npmjs.org/hard-rejection/2.1.0 - minimist-options: registry.npmjs.org/minimist-options/4.1.0 - normalize-package-data: registry.npmjs.org/normalize-package-data/2.5.0 - read-pkg-up: registry.npmjs.org/read-pkg-up/7.0.1 - redent: registry.npmjs.org/redent/3.0.0 - trim-newlines: registry.npmjs.org/trim-newlines/3.0.1 - type-fest: registry.npmjs.org/type-fest/0.13.1 - yargs-parser: registry.npmjs.org/yargs-parser/18.1.3 - dev: true - - registry.npmjs.org/meow/7.1.1: - resolution: {integrity: sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/meow/-/meow-7.1.1.tgz} - name: meow - version: 7.1.1 - engines: {node: '>=10'} - dependencies: - '@types/minimist': registry.npmjs.org/@types/minimist/1.2.2 - camelcase-keys: registry.npmjs.org/camelcase-keys/6.2.2 - decamelize-keys: registry.npmjs.org/decamelize-keys/1.1.0 + decamelize-keys: registry.npmjs.org/decamelize-keys/1.1.1 hard-rejection: registry.npmjs.org/hard-rejection/2.1.0 minimist-options: registry.npmjs.org/minimist-options/4.1.0 normalize-package-data: registry.npmjs.org/normalize-package-data/2.5.0 @@ -6442,10 +5395,10 @@ packages: brace-expansion: registry.npmjs.org/brace-expansion/1.1.11 dev: true - registry.npmjs.org/minimatch/5.1.2: - resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz} + registry.npmjs.org/minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz} name: minimatch - version: 5.1.2 + version: 5.1.6 engines: {node: '>=10'} dependencies: brace-expansion: registry.npmjs.org/brace-expansion/2.0.1 @@ -6462,16 +5415,16 @@ packages: kind-of: registry.npmjs.org/kind-of/6.0.3 dev: true - registry.npmjs.org/minimist/1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz} + registry.npmjs.org/minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz} name: minimist - version: 1.2.6 + version: 1.2.8 dev: true - registry.npmjs.org/mixme/0.5.4: - resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mixme/-/mixme-0.5.4.tgz} + registry.npmjs.org/mixme/0.5.9: + resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mixme/-/mixme-0.5.9.tgz} name: mixme - version: 0.5.4 + version: 0.5.9 engines: {node: '>= 8.0.0'} dev: true @@ -6481,7 +5434,7 @@ packages: version: 0.5.6 hasBin: true dependencies: - minimist: registry.npmjs.org/minimist/1.2.6 + minimist: registry.npmjs.org/minimist/1.2.8 dev: true registry.npmjs.org/mri/1.2.0: @@ -6510,10 +5463,10 @@ packages: version: 2.1.3 dev: true - registry.npmjs.org/nanoid/3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz} + registry.npmjs.org/nanoid/3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz} name: nanoid - version: 3.3.4 + version: 3.3.6 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -6536,13 +5489,13 @@ packages: version: 3.0.4 dependencies: lower-case: registry.npmjs.org/lower-case/2.0.2 - tslib: registry.npmjs.org/tslib/2.4.1 + tslib: registry.npmjs.org/tslib/2.5.2 dev: true - registry.npmjs.org/node-fetch/2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz} + registry.npmjs.org/node-fetch/2.6.11: + resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz} name: node-fetch - version: 2.6.7 + version: 2.6.11 engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -6553,16 +5506,10 @@ packages: whatwg-url: registry.npmjs.org/whatwg-url/5.0.0 dev: true - registry.npmjs.org/node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz} - name: node-releases - version: 2.0.6 - dev: true - - registry.npmjs.org/node-releases/2.0.8: - resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz} + registry.npmjs.org/node-releases/2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz} name: node-releases - version: 2.0.8 + version: 2.0.12 dev: true registry.npmjs.org/normalize-package-data/2.5.0: @@ -6571,7 +5518,7 @@ packages: version: 2.5.0 dependencies: hosted-git-info: registry.npmjs.org/hosted-git-info/2.8.9 - resolve: registry.npmjs.org/resolve/1.22.1 + resolve: registry.npmjs.org/resolve/1.22.2 semver: registry.npmjs.org/semver/5.7.1 validate-npm-package-license: registry.npmjs.org/validate-npm-package-license/3.0.4 dev: true @@ -6590,33 +5537,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/npm-bundled/1.1.2: - resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz} - name: npm-bundled - version: 1.1.2 - dependencies: - npm-normalize-package-bin: registry.npmjs.org/npm-normalize-package-bin/1.0.1 - dev: true - - registry.npmjs.org/npm-normalize-package-bin/1.0.1: - resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz} - name: npm-normalize-package-bin - version: 1.0.1 - dev: true - - registry.npmjs.org/npm-packlist/2.2.2: - resolution: {integrity: sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz} - name: npm-packlist - version: 2.2.2 - engines: {node: '>=10'} - hasBin: true - dependencies: - glob: registry.npmjs.org/glob/7.2.3 - ignore-walk: registry.npmjs.org/ignore-walk/3.0.4 - npm-bundled: registry.npmjs.org/npm-bundled/1.1.2 - npm-normalize-package-bin: registry.npmjs.org/npm-normalize-package-bin/1.0.1 - dev: true - registry.npmjs.org/npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz} name: npm-run-path @@ -6633,10 +5553,10 @@ packages: engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz} + registry.npmjs.org/object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz} name: object-inspect - version: 1.12.2 + version: 1.12.3 dev: true registry.npmjs.org/object-keys/1.1.1: @@ -6653,7 +5573,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 + define-properties: registry.npmjs.org/define-properties/1.2.0 has-symbols: registry.npmjs.org/has-symbols/1.0.3 object-keys: registry.npmjs.org/object-keys/1.1.1 dev: true @@ -6665,8 +5585,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 dev: true registry.npmjs.org/object.fromentries/2.0.6: @@ -6676,8 +5596,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 dev: true registry.npmjs.org/object.hasown/1.1.2: @@ -6685,8 +5605,8 @@ packages: name: object.hasown version: 1.1.2 dependencies: - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 dev: true registry.npmjs.org/object.values/1.1.6: @@ -6696,8 +5616,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 dev: true registry.npmjs.org/once/1.4.0: @@ -6827,25 +5747,13 @@ packages: callsites: registry.npmjs.org/callsites/3.1.0 dev: true - registry.npmjs.org/parse-glob/3.0.4: - resolution: {integrity: sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz} - name: parse-glob - version: 3.0.4 - engines: {node: '>=0.10.0'} - dependencies: - glob-base: registry.npmjs.org/glob-base/0.3.0 - is-dotfile: registry.npmjs.org/is-dotfile/1.0.3 - is-extglob: registry.npmjs.org/is-extglob/1.0.0 - is-glob: registry.npmjs.org/is-glob/2.0.1 - dev: true - registry.npmjs.org/parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz} name: parse-json version: 5.2.0 engines: {node: '>=8'} dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.21.4 error-ex: registry.npmjs.org/error-ex/1.3.2 json-parse-even-better-errors: registry.npmjs.org/json-parse-even-better-errors/2.3.1 lines-and-columns: registry.npmjs.org/lines-and-columns/1.2.4 @@ -6857,7 +5765,7 @@ packages: version: 3.1.2 dependencies: no-case: registry.npmjs.org/no-case/3.0.4 - tslib: registry.npmjs.org/tslib/2.4.1 + tslib: registry.npmjs.org/tslib/2.5.2 dev: true registry.npmjs.org/path-exists/4.0.0: @@ -6941,13 +5849,6 @@ packages: engines: {node: '>=6'} dev: true - registry.npmjs.org/pirates/4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz} - name: pirates - version: 4.0.5 - engines: {node: '>= 6'} - dev: true - registry.npmjs.org/pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz} name: pkg-dir @@ -6957,7 +5858,7 @@ packages: find-up: registry.npmjs.org/find-up/4.1.0 dev: true - registry.npmjs.org/postcss-cli/10.1.0_postcss@8.4.21: + registry.npmjs.org/postcss-cli/10.1.0_postcss@8.4.24: resolution: {integrity: sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz} id: registry.npmjs.org/postcss-cli/10.1.0 name: postcss-cli @@ -6969,22 +5870,22 @@ packages: dependencies: chokidar: registry.npmjs.org/chokidar/3.5.3 dependency-graph: registry.npmjs.org/dependency-graph/0.11.0 - fs-extra: registry.npmjs.org/fs-extra/11.1.0 + fs-extra: registry.npmjs.org/fs-extra/11.1.1 get-stdin: registry.npmjs.org/get-stdin/9.0.0 - globby: registry.npmjs.org/globby/13.1.3 + globby: registry.npmjs.org/globby/13.1.4 picocolors: registry.npmjs.org/picocolors/1.0.0 - postcss: registry.npmjs.org/postcss/8.4.21 - postcss-load-config: registry.npmjs.org/postcss-load-config/4.0.1_postcss@8.4.21 - postcss-reporter: registry.npmjs.org/postcss-reporter/7.0.5_postcss@8.4.21 + postcss: registry.npmjs.org/postcss/8.4.24 + postcss-load-config: registry.npmjs.org/postcss-load-config/4.0.1_postcss@8.4.24 + postcss-reporter: registry.npmjs.org/postcss-reporter/7.0.5_postcss@8.4.24 pretty-hrtime: registry.npmjs.org/pretty-hrtime/1.0.3 read-cache: registry.npmjs.org/read-cache/1.0.0 - slash: registry.npmjs.org/slash/5.0.0 - yargs: registry.npmjs.org/yargs/17.6.2 + slash: registry.npmjs.org/slash/5.1.0 + yargs: registry.npmjs.org/yargs/17.7.2 transitivePeerDependencies: - ts-node dev: true - registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3_postcss@8.4.21: + registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3_postcss@8.4.24: resolution: {integrity: sha512-IP0BmwFloCskv7DV7xqvzDXqMHpwdczJa6ZvIW8abgHdcIHs9mCJX2ltFhu3EwA51ozp13DByng30+Ke+eIExA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-combine-duplicated-selectors/-/postcss-combine-duplicated-selectors-10.0.3.tgz} id: registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3 name: postcss-combine-duplicated-selectors @@ -6993,11 +5894,11 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - postcss: registry.npmjs.org/postcss/8.4.21 - postcss-selector-parser: registry.npmjs.org/postcss-selector-parser/6.0.10 + postcss: registry.npmjs.org/postcss/8.4.24 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser/6.0.13 dev: true - registry.npmjs.org/postcss-import/15.1.0_postcss@8.4.21: + registry.npmjs.org/postcss-import/15.1.0_postcss@8.4.24: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz} id: registry.npmjs.org/postcss-import/15.1.0 name: postcss-import @@ -7006,13 +5907,13 @@ packages: peerDependencies: postcss: ^8.0.0 dependencies: - postcss: registry.npmjs.org/postcss/8.4.21 + postcss: registry.npmjs.org/postcss/8.4.24 postcss-value-parser: registry.npmjs.org/postcss-value-parser/4.2.0 read-cache: registry.npmjs.org/read-cache/1.0.0 - resolve: registry.npmjs.org/resolve/1.22.1 + resolve: registry.npmjs.org/resolve/1.22.2 dev: true - registry.npmjs.org/postcss-load-config/4.0.1_postcss@8.4.21: + registry.npmjs.org/postcss-load-config/4.0.1_postcss@8.4.24: resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz} id: registry.npmjs.org/postcss-load-config/4.0.1 name: postcss-load-config @@ -7027,25 +5928,25 @@ packages: ts-node: optional: true dependencies: - lilconfig: registry.npmjs.org/lilconfig/2.0.6 - postcss: registry.npmjs.org/postcss/8.4.21 - yaml: registry.npmjs.org/yaml/2.2.1 + lilconfig: registry.npmjs.org/lilconfig/2.1.0 + postcss: registry.npmjs.org/postcss/8.4.24 + yaml: registry.npmjs.org/yaml/2.3.1 dev: true - registry.npmjs.org/postcss-nested/6.0.0_postcss@8.4.21: - resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz} - id: registry.npmjs.org/postcss-nested/6.0.0 + registry.npmjs.org/postcss-nested/6.0.1_postcss@8.4.24: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz} + id: registry.npmjs.org/postcss-nested/6.0.1 name: postcss-nested - version: 6.0.0 + version: 6.0.1 engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: registry.npmjs.org/postcss/8.4.21 - postcss-selector-parser: registry.npmjs.org/postcss-selector-parser/6.0.11 + postcss: registry.npmjs.org/postcss/8.4.24 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser/6.0.13 dev: true - registry.npmjs.org/postcss-reporter/7.0.5_postcss@8.4.21: + registry.npmjs.org/postcss-reporter/7.0.5_postcss@8.4.24: resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz} id: registry.npmjs.org/postcss-reporter/7.0.5 name: postcss-reporter @@ -7055,24 +5956,14 @@ packages: postcss: ^8.1.0 dependencies: picocolors: registry.npmjs.org/picocolors/1.0.0 - postcss: registry.npmjs.org/postcss/8.4.21 + postcss: registry.npmjs.org/postcss/8.4.24 thenby: registry.npmjs.org/thenby/1.3.4 dev: true - registry.npmjs.org/postcss-selector-parser/6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz} - name: postcss-selector-parser - version: 6.0.10 - engines: {node: '>=4'} - dependencies: - cssesc: registry.npmjs.org/cssesc/3.0.0 - util-deprecate: registry.npmjs.org/util-deprecate/1.0.2 - dev: true - - registry.npmjs.org/postcss-selector-parser/6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz} + registry.npmjs.org/postcss-selector-parser/6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz} name: postcss-selector-parser - version: 6.0.11 + version: 6.0.13 engines: {node: '>=4'} dependencies: cssesc: registry.npmjs.org/cssesc/3.0.0 @@ -7085,13 +5976,13 @@ packages: version: 4.2.0 dev: true - registry.npmjs.org/postcss/8.4.21: - resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz} + registry.npmjs.org/postcss/8.4.24: + resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz} name: postcss - version: 8.4.21 + version: 8.4.24 engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: registry.npmjs.org/nanoid/3.3.4 + nanoid: registry.npmjs.org/nanoid/3.3.6 picocolors: registry.npmjs.org/picocolors/1.0.0 source-map-js: registry.npmjs.org/source-map-js/1.0.2 dev: true @@ -7121,34 +6012,26 @@ packages: version: 1.0.0 engines: {node: '>=6.0.0'} dependencies: - fast-diff: registry.npmjs.org/fast-diff/1.2.0 + fast-diff: registry.npmjs.org/fast-diff/1.3.0 dev: true - registry.npmjs.org/prettier-plugin-svelte/2.10.0_5ir2xprf4ygk6mygilwnltaw3a: - resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.0.tgz} - id: registry.npmjs.org/prettier-plugin-svelte/2.10.0 + registry.npmjs.org/prettier-plugin-svelte/2.10.1_blbg2s7pis747igzn3ilcyh5ou: + resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz} + id: registry.npmjs.org/prettier-plugin-svelte/2.10.1 name: prettier-plugin-svelte - version: 2.10.0 + version: 2.10.1 peerDependencies: prettier: ^1.16.4 || ^2.0.0 - svelte: ^3.2.0 + svelte: ^3.2.0 || ^4.0.0-next.0 dependencies: - prettier: registry.npmjs.org/prettier/2.8.7 - svelte: registry.npmjs.org/svelte/3.57.0 - dev: true - - registry.npmjs.org/prettier/2.7.1: - resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz} - name: prettier - version: 2.7.1 - engines: {node: '>=10.13.0'} - hasBin: true + prettier: registry.npmjs.org/prettier/2.8.8 + svelte: registry.npmjs.org/svelte/3.59.1 dev: true - registry.npmjs.org/prettier/2.8.7: - resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz} + 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 - version: 2.8.7 + version: 2.8.8 engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -7214,18 +6097,20 @@ packages: once: registry.npmjs.org/once/1.4.0 dev: true - registry.npmjs.org/punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz} + registry.npmjs.org/punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz} name: punycode - version: 2.1.1 + version: 2.3.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/qs/6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/qs/-/qs-6.5.3.tgz} + 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 - version: 6.5.3 + version: 6.10.4 engines: {node: '>=0.6'} + dependencies: + side-channel: registry.npmjs.org/side-channel/1.0.4 dev: true registry.npmjs.org/queue-microtask/1.2.3: @@ -7241,13 +6126,6 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/quick-lru/5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz} - name: quick-lru - version: 5.1.1 - engines: {node: '>=10'} - dev: true - registry.npmjs.org/randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz} name: randombytes @@ -7281,30 +6159,32 @@ packages: engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/react-router-dom/6.3.0_biqbaboplfbrettd7655fr4n2y: - 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.11.2_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz} + id: registry.npmjs.org/react-router-dom/6.11.2 name: react-router-dom - version: 6.3.0 + version: 6.11.2 + engines: {node: '>=14'} 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.6.2 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.11.2_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.11.2_react@18.2.0: + resolution: {integrity: sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz} + id: registry.npmjs.org/react-router/6.11.2 name: react-router - version: 6.3.0 + version: 6.11.2 + engines: {node: '>=14'} peerDependencies: react: '>=16.8' dependencies: - history: registry.npmjs.org/history/5.3.0 + '@remix-run/router': registry.npmjs.org/@remix-run/router/1.6.2 react: registry.npmjs.org/react/18.2.0 dev: false @@ -7353,7 +6233,7 @@ packages: version: 1.1.0 engines: {node: '>=6'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 js-yaml: registry.npmjs.org/js-yaml/3.14.1 pify: registry.npmjs.org/pify/4.0.1 strip-bom: registry.npmjs.org/strip-bom/3.0.0 @@ -7378,29 +6258,23 @@ packages: strip-indent: registry.npmjs.org/strip-indent/3.0.0 dev: true - registry.npmjs.org/regenerator-runtime/0.13.9: - resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz} + registry.npmjs.org/regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} name: regenerator-runtime - version: 0.13.9 + version: 0.13.11 + dev: true - registry.npmjs.org/regexp.prototype.flags/1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz} + registry.npmjs.org/regexp.prototype.flags/1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz} name: regexp.prototype.flags - version: 1.4.3 + version: 1.5.0 engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 + define-properties: registry.npmjs.org/define-properties/1.2.0 functions-have-names: registry.npmjs.org/functions-have-names/1.2.3 dev: true - registry.npmjs.org/regexpp/3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz} - name: regexpp - version: 3.2.0 - engines: {node: '>=8'} - dev: true - registry.npmjs.org/request-progress/3.0.0: resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz} name: request-progress @@ -7436,13 +6310,13 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/resolve/1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz} + registry.npmjs.org/resolve/1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz} name: resolve - version: 1.22.1 + version: 1.22.2 hasBin: true dependencies: - is-core-module: registry.npmjs.org/is-core-module/2.11.0 + is-core-module: registry.npmjs.org/is-core-module/2.12.1 path-parse: registry.npmjs.org/path-parse/1.0.7 supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag/1.0.0 dev: true @@ -7453,7 +6327,7 @@ packages: version: 2.0.0-next.4 hasBin: true dependencies: - is-core-module: registry.npmjs.org/is-core-module/2.11.0 + is-core-module: registry.npmjs.org/is-core-module/2.12.1 path-parse: registry.npmjs.org/path-parse/1.0.7 supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag/1.0.0 dev: true @@ -7499,7 +6373,7 @@ packages: glob: registry.npmjs.org/glob/7.2.3 dev: true - registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4_rollup@3.20.2: + registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4_rollup@3.23.0: resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz} id: registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4 name: rollup-plugin-peer-deps-external @@ -7507,23 +6381,13 @@ packages: peerDependencies: rollup: '*' dependencies: - rollup: registry.npmjs.org/rollup/3.20.2 - dev: true - - registry.npmjs.org/rollup/2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz} - name: rollup - version: 2.79.1 - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + rollup: registry.npmjs.org/rollup/3.23.0 dev: true - registry.npmjs.org/rollup/3.20.2: - resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz} + registry.npmjs.org/rollup/3.23.0: + resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz} name: rollup - version: 3.20.2 + version: 3.23.0 engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -7538,20 +6402,12 @@ packages: queue-microtask: registry.npmjs.org/queue-microtask/1.2.3 dev: true - registry.npmjs.org/rxjs/7.5.6: - resolution: {integrity: sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz} - name: rxjs - version: 7.5.6 - dependencies: - tslib: registry.npmjs.org/tslib/2.4.1 - dev: true - - registry.npmjs.org/rxjs/7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz} + registry.npmjs.org/rxjs/7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz} name: rxjs - version: 7.8.0 + version: 7.8.1 dependencies: - tslib: registry.npmjs.org/tslib/2.4.1 + tslib: registry.npmjs.org/tslib/2.5.2 dev: true registry.npmjs.org/sade/1.8.1: @@ -7563,12 +6419,6 @@ packages: mri: registry.npmjs.org/mri/1.2.0 dev: true - registry.npmjs.org/safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz} - name: safe-buffer - version: 5.1.2 - dev: true - registry.npmjs.org/safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} name: safe-buffer @@ -7581,7 +6431,7 @@ packages: version: 1.0.0 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 is-regex: registry.npmjs.org/is-regex/1.1.4 dev: true @@ -7597,7 +6447,7 @@ packages: version: 0.5.1 dependencies: es6-promise: registry.npmjs.org/es6-promise/3.3.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 mkdirp: registry.npmjs.org/mkdirp/0.5.6 rimraf: registry.npmjs.org/rimraf/2.7.1 dev: true @@ -7623,30 +6473,20 @@ packages: hasBin: true dev: true - registry.npmjs.org/semver/7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-7.3.7.tgz} - name: semver - version: 7.3.7 - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: registry.npmjs.org/lru-cache/6.0.0 - dev: true - - registry.npmjs.org/semver/7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-7.3.8.tgz} + registry.npmjs.org/semver/7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-7.5.1.tgz} name: semver - version: 7.3.8 + version: 7.5.1 engines: {node: '>=10'} hasBin: true dependencies: lru-cache: registry.npmjs.org/lru-cache/6.0.0 dev: true - registry.npmjs.org/serialize-javascript/6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz} + registry.npmjs.org/serialize-javascript/6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz} name: serialize-javascript - version: 6.0.0 + version: 6.0.1 dependencies: randombytes: registry.npmjs.org/randombytes/2.1.0 dev: true @@ -7695,10 +6535,10 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/shell-quote/1.7.4: - resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz} + registry.npmjs.org/shell-quote/1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz} name: shell-quote - version: 1.7.4 + version: 1.8.1 dev: true registry.npmjs.org/side-channel/1.0.4: @@ -7707,8 +6547,8 @@ packages: version: 1.0.4 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 - object-inspect: registry.npmjs.org/object-inspect/1.12.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 + object-inspect: registry.npmjs.org/object-inspect/1.12.3 dev: true registry.npmjs.org/signal-exit/3.0.7: @@ -7717,15 +6557,15 @@ packages: version: 3.0.7 dev: true - registry.npmjs.org/sirv/2.0.2: - resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz} + registry.npmjs.org/sirv/2.0.3: + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz} name: sirv - version: 2.0.2 + version: 2.0.3 engines: {node: '>= 10'} dependencies: '@polka/url': registry.npmjs.org/@polka/url/1.0.0-next.21 mrmime: registry.npmjs.org/mrmime/1.0.1 - totalist: registry.npmjs.org/totalist/3.0.0 + totalist: registry.npmjs.org/totalist/3.0.1 dev: true registry.npmjs.org/slash/3.0.0: @@ -7742,10 +6582,10 @@ packages: engines: {node: '>=12'} dev: true - registry.npmjs.org/slash/5.0.0: - resolution: {integrity: sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slash/-/slash-5.0.0.tgz} + registry.npmjs.org/slash/5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slash/-/slash-5.1.0.tgz} name: slash - version: 5.0.0 + version: 5.1.0 engines: {node: '>=14.16'} dev: true @@ -7778,18 +6618,18 @@ packages: engines: {node: '>=6'} hasBin: true dependencies: - array.prototype.flat: registry.npmjs.org/array.prototype.flat/1.3.0 - breakword: registry.npmjs.org/breakword/1.0.5 + array.prototype.flat: registry.npmjs.org/array.prototype.flat/1.3.1 + breakword: registry.npmjs.org/breakword/1.0.6 grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 wcwidth: registry.npmjs.org/wcwidth/1.0.1 yargs: registry.npmjs.org/yargs/15.4.1 dev: true - registry.npmjs.org/smob/0.0.6: - resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/smob/-/smob-0.0.6.tgz} + registry.npmjs.org/smob/1.4.0: + resolution: {integrity: sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/smob/-/smob-1.4.0.tgz} name: smob - version: 0.0.6 + version: 1.4.0 dev: true registry.npmjs.org/sorcery/0.11.0: @@ -7798,9 +6638,9 @@ packages: version: 0.11.0 hasBin: true dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 buffer-crc32: registry.npmjs.org/buffer-crc32/0.2.13 - minimist: registry.npmjs.org/minimist/1.2.6 + minimist: registry.npmjs.org/minimist/1.2.8 sander: registry.npmjs.org/sander/0.5.1 dev: true @@ -7827,13 +6667,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz} - name: sourcemap-codec - version: 1.4.8 - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true - registry.npmjs.org/spawn-command/0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz} name: spawn-command @@ -7849,13 +6682,13 @@ packages: signal-exit: registry.npmjs.org/signal-exit/3.0.7 dev: true - registry.npmjs.org/spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz} + registry.npmjs.org/spdx-correct/3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz} name: spdx-correct - version: 3.1.1 + version: 3.2.0 dependencies: spdx-expression-parse: registry.npmjs.org/spdx-expression-parse/3.0.1 - spdx-license-ids: registry.npmjs.org/spdx-license-ids/3.0.12 + spdx-license-ids: registry.npmjs.org/spdx-license-ids/3.0.13 dev: true registry.npmjs.org/spdx-exceptions/2.3.0: @@ -7870,13 +6703,13 @@ packages: version: 3.0.1 dependencies: spdx-exceptions: registry.npmjs.org/spdx-exceptions/2.3.0 - spdx-license-ids: registry.npmjs.org/spdx-license-ids/3.0.12 + spdx-license-ids: registry.npmjs.org/spdx-license-ids/3.0.13 dev: true - registry.npmjs.org/spdx-license-ids/3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz} + registry.npmjs.org/spdx-license-ids/3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz} name: spdx-license-ids - version: 3.0.12 + version: 3.0.13 dev: true registry.npmjs.org/split/0.3.3: @@ -7911,20 +6744,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/1.15.4: + resolution: {integrity: sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.15.4.tgz} name: start-server-and-test - version: 1.14.0 + version: 1.15.4 engines: {node: '>=6'} 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 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.0.1_debug@4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -7942,7 +6776,7 @@ packages: name: stream-transform version: 2.1.3 dependencies: - mixme: registry.npmjs.org/mixme/0.5.4 + mixme: registry.npmjs.org/mixme/0.5.9 dev: true registry.npmjs.org/streamsearch/1.1.0: @@ -7969,23 +6803,34 @@ packages: version: 4.0.8 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 has-symbols: registry.npmjs.org/has-symbols/1.0.3 - internal-slot: registry.npmjs.org/internal-slot/1.0.4 - regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags/1.4.3 + internal-slot: registry.npmjs.org/internal-slot/1.0.5 + regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags/1.5.0 side-channel: registry.npmjs.org/side-channel/1.0.4 dev: true + registry.npmjs.org/string.prototype.trim/1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz} + name: string.prototype.trim + version: 1.2.7 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 + dev: true + registry.npmjs.org/string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz} name: string.prototype.trimend version: 1.0.6 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 dev: true registry.npmjs.org/string.prototype.trimstart/1.0.6: @@ -7994,8 +6839,8 @@ packages: version: 1.0.6 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.1.4 - es-abstract: registry.npmjs.org/es-abstract/1.21.1 + define-properties: registry.npmjs.org/define-properties/1.2.0 + es-abstract: registry.npmjs.org/es-abstract/1.21.2 dev: true registry.npmjs.org/strip-ansi/6.0.1: @@ -8071,24 +6916,24 @@ packages: engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/svelte-check/3.1.4_svelte@3.57.0: - resolution: {integrity: sha512-25Lb46ZS4IK/XpBMe4IBMrtYf23V8alqBX+szXoccb7uM0D2Wqq5rMRzYBONZnFVuU1bQG3R50lyIT5eRewv2g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-3.1.4.tgz} - id: registry.npmjs.org/svelte-check/3.1.4 + registry.npmjs.org/svelte-check/3.4.3_svelte@3.59.1: + resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.3.tgz} + id: registry.npmjs.org/svelte-check/3.4.3 name: svelte-check - version: 3.1.4 + version: 3.4.3 hasBin: true peerDependencies: - svelte: ^3.55.0 + svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 dependencies: - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.17 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 chokidar: registry.npmjs.org/chokidar/3.5.3 fast-glob: registry.npmjs.org/fast-glob/3.2.12 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/3.57.0 - svelte-preprocess: registry.npmjs.org/svelte-preprocess/5.0.3_44zspxpepvug6mo2qrfwkj3taq - typescript: registry.npmjs.org/typescript/4.9.4 + svelte: registry.npmjs.org/svelte/3.59.1 + svelte-preprocess: registry.npmjs.org/svelte-preprocess/5.0.4_gmmus3lprw664mkdmboocppfke + typescript: registry.npmjs.org/typescript/5.0.4 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -8101,23 +6946,23 @@ packages: - sugarss dev: true - registry.npmjs.org/svelte-hmr/0.15.1_svelte@3.57.0: - resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz} - id: registry.npmjs.org/svelte-hmr/0.15.1 + registry.npmjs.org/svelte-hmr/0.15.2_svelte@3.59.1: + resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz} + id: registry.npmjs.org/svelte-hmr/0.15.2 name: svelte-hmr - version: 0.15.1 + version: 0.15.2 engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: - svelte: '>=3.19.0' + svelte: ^3.19.0 || ^4.0.0-next.0 dependencies: - svelte: registry.npmjs.org/svelte/3.57.0 + svelte: registry.npmjs.org/svelte/3.59.1 dev: true - registry.npmjs.org/svelte-preprocess/5.0.3_44zspxpepvug6mo2qrfwkj3taq: - resolution: {integrity: sha512-GrHF1rusdJVbOZOwgPWtpqmaexkydznKzy5qIC2FabgpFyKN57bjMUUUqPRfbBXK5igiEWn1uO/DXsa2vJ5VHA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.3.tgz} - id: registry.npmjs.org/svelte-preprocess/5.0.3 + registry.npmjs.org/svelte-preprocess/5.0.4_gmmus3lprw664mkdmboocppfke: + 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 - version: 5.0.3 + version: 5.0.4 engines: {node: '>= 14.10.0'} requiresBuild: true peerDependencies: @@ -8130,7 +6975,7 @@ packages: sass: ^1.26.8 stylus: ^0.55.0 sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 + svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' peerDependenciesMeta: '@babel/core': @@ -8159,30 +7004,30 @@ packages: magic-string: registry.npmjs.org/magic-string/0.27.0 sorcery: registry.npmjs.org/sorcery/0.11.0 strip-indent: registry.npmjs.org/strip-indent/3.0.0 - svelte: registry.npmjs.org/svelte/3.57.0 - typescript: registry.npmjs.org/typescript/4.9.4 + svelte: registry.npmjs.org/svelte/3.59.1 + typescript: registry.npmjs.org/typescript/5.0.4 dev: true - registry.npmjs.org/svelte/3.57.0: - resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-3.57.0.tgz} + registry.npmjs.org/svelte/3.59.1: + resolution: {integrity: sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz} name: svelte - version: 3.57.0 + version: 3.59.1 engines: {node: '>= 8'} dev: true - registry.npmjs.org/svelte2tsx/0.6.10_44zspxpepvug6mo2qrfwkj3taq: - resolution: {integrity: sha512-7CtUexhSHppSpLwVX7yI9OxJp7+esCNTuOF/CaVxWTgWp88QF/2/dCbpND/cTZmBxht5cFFQBwoLXXqFLdYe3Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.10.tgz} - id: registry.npmjs.org/svelte2tsx/0.6.10 + registry.npmjs.org/svelte2tsx/0.6.15_cnumnonbjyr4j6qimrlvyofpny: + resolution: {integrity: sha512-+j6RmA3g5pPs1DHa/rdzJjjhZuCfWx0IbNPaR99A2bvOSPPY6BlVkBGU0urI+DGcWHhYEG28Flo942KqlAkpEQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.15.tgz} + id: registry.npmjs.org/svelte2tsx/0.6.15 name: svelte2tsx - version: 0.6.10 + version: 0.6.15 peerDependencies: - svelte: ^3.55 + svelte: ^3.55 || ^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/3.57.0 - typescript: registry.npmjs.org/typescript/4.9.4 + svelte: registry.npmjs.org/svelte/3.59.1 + typescript: registry.npmjs.org/typescript/4.9.5 dev: true registry.npmjs.org/term-size/2.2.1: @@ -8192,28 +7037,15 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/terser/5.15.0: - resolution: {integrity: sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/terser/-/terser-5.15.0.tgz} - name: terser - version: 5.15.0 - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map/0.3.2 - acorn: registry.npmjs.org/acorn/8.8.0 - commander: registry.npmjs.org/commander/2.20.3 - source-map-support: registry.npmjs.org/source-map-support/0.5.21 - dev: true - - registry.npmjs.org/terser/5.16.1: - resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/terser/-/terser-5.16.1.tgz} + registry.npmjs.org/terser/5.17.6: + resolution: {integrity: sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/terser/-/terser-5.17.6.tgz} name: terser - version: 5.16.1 + version: 5.17.6 engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map/0.3.2 - acorn: registry.npmjs.org/acorn/8.8.0 + '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map/0.3.3 + acorn: registry.npmjs.org/acorn/8.8.2 commander: registry.npmjs.org/commander/2.20.3 source-map-support: registry.npmjs.org/source-map-support/0.5.21 dev: true @@ -8285,10 +7117,10 @@ packages: is-number: registry.npmjs.org/is-number/7.0.0 dev: true - registry.npmjs.org/totalist/3.0.0: - resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz} + registry.npmjs.org/totalist/3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz} name: totalist - version: 3.0.0 + version: 3.0.1 engines: {node: '>=6'} dev: true @@ -8299,7 +7131,7 @@ packages: engines: {node: '>=0.8'} dependencies: psl: registry.npmjs.org/psl/1.9.0 - punycode: registry.npmjs.org/punycode/2.1.1 + punycode: registry.npmjs.org/punycode/2.3.0 dev: true registry.npmjs.org/tr46/0.0.3: @@ -8328,13 +7160,13 @@ packages: version: 1.14.1 dev: true - registry.npmjs.org/tslib/2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz} + registry.npmjs.org/tslib/2.5.2: + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz} name: tslib - version: 2.4.1 + version: 2.5.2 dev: true - registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4: + registry.npmjs.org/tsutils/3.21.0_typescript@4.9.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz} id: registry.npmjs.org/tsutils/3.21.0 name: tsutils @@ -8344,13 +7176,13 @@ packages: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: registry.npmjs.org/tslib/1.14.1 - typescript: registry.npmjs.org/typescript/4.9.4 + typescript: registry.npmjs.org/typescript/4.9.5 dev: true - registry.npmjs.org/tty-table/4.1.6: - resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tty-table/-/tty-table-4.1.6.tgz} + registry.npmjs.org/tty-table/4.2.1: + resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tty-table/-/tty-table-4.2.1.tgz} name: tty-table - version: 4.1.6 + version: 4.2.1 engines: {node: '>=8.0.0'} hasBin: true dependencies: @@ -8360,7 +7192,7 @@ packages: smartwrap: registry.npmjs.org/smartwrap/2.0.2 strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 wcwidth: registry.npmjs.org/wcwidth/1.0.1 - yargs: registry.npmjs.org/yargs/17.5.1 + yargs: registry.npmjs.org/yargs/17.7.2 dev: true registry.npmjs.org/tunnel-agent/0.6.0: @@ -8371,79 +7203,79 @@ packages: safe-buffer: registry.npmjs.org/safe-buffer/5.2.1 dev: true - registry.npmjs.org/turbo-darwin-64/1.8.6: - resolution: {integrity: sha512-VlXkQR0TEBAEyBRsvAXBax+fj1EdPKPliwBaCnRLiDUcA/8wYlKte/Kk6ubmj9E0n7U/B4keCxxHiJZqW/5Rqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.8.6.tgz} + registry.npmjs.org/turbo-darwin-64/1.10.0: + resolution: {integrity: sha512-N0aVGFtBgOKd7pIdUiKREwnDhNHRIvpMJbmUw04c1AqEoTiKAKT6iuzcCozO5N/gYMVr0hxrXgLal5OLYXtcsw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.10.0.tgz} name: turbo-darwin-64 - version: 1.8.6 + version: 1.10.0 cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - registry.npmjs.org/turbo-darwin-arm64/1.8.6: - resolution: {integrity: sha512-w4L2QLj90ex68UXxTPoqtZPl8mWzc6a1RtPjQhoxAWtZf9T2WXi813dCzYEbVUVC09/DOW/VxZRN7sb2r0KP9A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.8.6.tgz} + registry.npmjs.org/turbo-darwin-arm64/1.10.0: + resolution: {integrity: sha512-boXzhaHTS5MsTMv48I/JmYp9/fYplXk5nACUDrqV6nD1hzO5PMn5wNg75ATbpkaMaeuD+hjuobeSxn1p4vpqQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.0.tgz} name: turbo-darwin-arm64 - version: 1.8.6 + version: 1.10.0 cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - registry.npmjs.org/turbo-linux-64/1.8.6: - resolution: {integrity: sha512-eV245jefIhMAZskqQKalFwreC5UEdQcuHcBiWcgUk0py76fbwB7+1HfH5cmeJlb3a1sB6f3H0HHmGPmb34feCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.8.6.tgz} + registry.npmjs.org/turbo-linux-64/1.10.0: + resolution: {integrity: sha512-crKQuS1jrp4vp+Th6EmUqqmAlvYNnzGmwWMLeckmYILrV7zAddu87eJu4hB7V6uV+W1qHZUTw8WXa1w1+8boBw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.10.0.tgz} name: turbo-linux-64 - version: 1.8.6 + version: 1.10.0 cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - registry.npmjs.org/turbo-linux-arm64/1.8.6: - resolution: {integrity: sha512-Kiw3nyEvNU6Bpil4zE5FwhasPAOi59R4YdCmjJp0Sen6V9u+/Jij6SWwaoUdATORJLiYQBbhontWBH55B53VDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.8.6.tgz} + registry.npmjs.org/turbo-linux-arm64/1.10.0: + resolution: {integrity: sha512-Y2fhWe0xepLjl7doIvsJK7mp2h8E+OF6qJsUHRgxFeRWQWi1I6clD2aEQeykHK8Tp+qp8pKFMocj32nFBvuCcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.10.0.tgz} name: turbo-linux-arm64 - version: 1.8.6 + version: 1.10.0 cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - registry.npmjs.org/turbo-windows-64/1.8.6: - resolution: {integrity: sha512-34BkAG9r4nE00xeMeVahaF82h8R6SO+IIOcD60fNr2p+Ch+YcQa+DbEWA/KUj3coUTIiNP5XnRCLRUYADdlxjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.8.6.tgz} + registry.npmjs.org/turbo-windows-64/1.10.0: + resolution: {integrity: sha512-uh8rEqH6teaHysEMjinwWBqyNwv4IvgSAwbq/OphP8jObstTYHoR+gFPo8RQUSTaBYy4QVszgi5eO5YLvEQqNA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.10.0.tgz} name: turbo-windows-64 - version: 1.8.6 + version: 1.10.0 cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - registry.npmjs.org/turbo-windows-arm64/1.8.6: - resolution: {integrity: sha512-4jWUaI7Lmonp2I3x81GruiCYd0aQsG/xDOYhuv9+j2yIgB/UHJFz/P8PWp/nziwPtGpRd/AheDlPzzyd9lWoqw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.8.6.tgz} + registry.npmjs.org/turbo-windows-arm64/1.10.0: + resolution: {integrity: sha512-JaVj3iM7qyRD6xYGZLL/Gs4mQKfM1zL0f91AwHZLNkk1CrJ6i5kO4ZjhKkwXSpVOTNKW3sX0Q7dExXj85Vv7UQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.10.0.tgz} name: turbo-windows-arm64 - version: 1.8.6 + version: 1.10.0 cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - registry.npmjs.org/turbo/1.8.6: - resolution: {integrity: sha512-6IOOaa8ytgjnSCTnp3LKAd2uGBZ/Kmx8ZPlI/YMWuKMUqvkXKLbh+w76ApMgMm+faUqti+QujVWovCu2kY6KuQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo/-/turbo-1.8.6.tgz} + registry.npmjs.org/turbo/1.10.0: + resolution: {integrity: sha512-GWxoL2zJduiNaEHz78o74l2jCQEeuUZ3MdpMPz0SpZOvt3nimpvQPNxiyfbqt3U9/V5G375PWKYSbXkVnIbQcA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo/-/turbo-1.10.0.tgz} name: turbo - version: 1.8.6 + version: 1.10.0 hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: registry.npmjs.org/turbo-darwin-64/1.8.6 - turbo-darwin-arm64: registry.npmjs.org/turbo-darwin-arm64/1.8.6 - turbo-linux-64: registry.npmjs.org/turbo-linux-64/1.8.6 - turbo-linux-arm64: registry.npmjs.org/turbo-linux-arm64/1.8.6 - turbo-windows-64: registry.npmjs.org/turbo-windows-64/1.8.6 - turbo-windows-arm64: registry.npmjs.org/turbo-windows-arm64/1.8.6 + turbo-darwin-64: registry.npmjs.org/turbo-darwin-64/1.10.0 + turbo-darwin-arm64: registry.npmjs.org/turbo-darwin-arm64/1.10.0 + turbo-linux-64: registry.npmjs.org/turbo-linux-64/1.10.0 + turbo-linux-arm64: registry.npmjs.org/turbo-linux-arm64/1.10.0 + turbo-windows-64: registry.npmjs.org/turbo-windows-64/1.10.0 + turbo-windows-arm64: registry.npmjs.org/turbo-windows-arm64/1.10.0 dev: true registry.npmjs.org/tweetnacl/0.14.5: @@ -8506,14 +7338,22 @@ packages: is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 dev: true - registry.npmjs.org/typescript/4.9.4: - resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz} + registry.npmjs.org/typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz} name: typescript - version: 4.9.4 + version: 4.9.5 engines: {node: '>=4.2.0'} hasBin: true dev: true + registry.npmjs.org/typescript/5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz} + name: typescript + version: 5.0.4 + engines: {node: '>=12.20'} + hasBin: true + dev: true + registry.npmjs.org/unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz} name: unbox-primitive @@ -8525,11 +7365,11 @@ packages: which-boxed-primitive: registry.npmjs.org/which-boxed-primitive/1.0.2 dev: true - registry.npmjs.org/undici/5.21.0: - resolution: {integrity: sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici/-/undici-5.21.0.tgz} + registry.npmjs.org/undici/5.22.1: + resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici/-/undici-5.22.1.tgz} name: undici - version: 5.21.0 - engines: {node: '>=12.18'} + version: 5.22.1 + engines: {node: '>=14.0'} dependencies: busboy: registry.npmjs.org/busboy/1.6.0 dev: true @@ -8555,30 +7395,16 @@ packages: engines: {node: '>=8'} dev: true - registry.npmjs.org/update-browserslist-db/1.0.10_browserslist@4.21.4: - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz} - id: registry.npmjs.org/update-browserslist-db/1.0.10 - name: update-browserslist-db - version: 1.0.10 - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: registry.npmjs.org/browserslist/4.21.4 - escalade: registry.npmjs.org/escalade/3.1.1 - picocolors: registry.npmjs.org/picocolors/1.0.0 - dev: true - - registry.npmjs.org/update-browserslist-db/1.0.7_browserslist@4.21.3: - resolution: {integrity: sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz} - id: registry.npmjs.org/update-browserslist-db/1.0.7 + registry.npmjs.org/update-browserslist-db/1.0.11_browserslist@4.21.7: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz} + id: registry.npmjs.org/update-browserslist-db/1.0.11 name: update-browserslist-db - version: 1.0.7 + version: 1.0.11 hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: registry.npmjs.org/browserslist/4.21.3 + browserslist: registry.npmjs.org/browserslist/4.21.7 escalade: registry.npmjs.org/escalade/3.1.1 picocolors: registry.npmjs.org/picocolors/1.0.0 dev: true @@ -8588,7 +7414,7 @@ packages: name: uri-js version: 4.4.1 dependencies: - punycode: registry.npmjs.org/punycode/2.1.1 + punycode: registry.npmjs.org/punycode/2.3.0 dev: true registry.npmjs.org/use-sync-external-store/1.2.0: @@ -8623,18 +7449,12 @@ packages: hasBin: true dev: true - registry.npmjs.org/v8-compile-cache/2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz} - name: v8-compile-cache - version: 2.3.0 - dev: true - registry.npmjs.org/validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz} name: validate-npm-package-license version: 3.0.4 dependencies: - spdx-correct: registry.npmjs.org/spdx-correct/3.1.1 + spdx-correct: registry.npmjs.org/spdx-correct/3.2.0 spdx-expression-parse: registry.npmjs.org/spdx-expression-parse/3.0.1 dev: true @@ -8649,45 +7469,10 @@ packages: extsprintf: registry.npmjs.org/extsprintf/1.3.0 dev: true - registry.npmjs.org/vite/4.0.4: - resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.0.4.tgz} - name: vite - version: 4.0.4 - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: registry.npmjs.org/esbuild/0.16.16 - postcss: registry.npmjs.org/postcss/8.4.21 - resolve: registry.npmjs.org/resolve/1.22.1 - rollup: registry.npmjs.org/rollup/3.20.2 - optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 - dev: true - - registry.npmjs.org/vite/4.2.1: - resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.2.1.tgz} + registry.npmjs.org/vite/4.3.9: + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.3.9.tgz} name: vite - version: 4.2.1 + version: 4.3.9 engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -8711,15 +7496,14 @@ packages: terser: optional: true dependencies: - esbuild: registry.npmjs.org/esbuild/0.17.14 - postcss: registry.npmjs.org/postcss/8.4.21 - resolve: registry.npmjs.org/resolve/1.22.1 - rollup: registry.npmjs.org/rollup/3.20.2 + esbuild: registry.npmjs.org/esbuild/0.17.19 + postcss: registry.npmjs.org/postcss/8.4.24 + rollup: registry.npmjs.org/rollup/3.23.0 optionalDependencies: fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true - registry.npmjs.org/vitefu/0.2.4_vite@4.2.1: + registry.npmjs.org/vitefu/0.2.4_vite@4.3.9: resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz} id: registry.npmjs.org/vitefu/0.2.4 name: vitefu @@ -8730,22 +7514,22 @@ packages: vite: optional: true dependencies: - vite: registry.npmjs.org/vite/4.2.1 + vite: registry.npmjs.org/vite/4.3.9 dev: true - 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.0.1_debug@4.3.4: + resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz} + id: registry.npmjs.org/wait-on/7.0.1 name: wait-on - version: 6.0.0 - engines: {node: '>=10.0.0'} + version: 7.0.1 + engines: {node: '>=12.0.0'} hasBin: true dependencies: - axios: registry.npmjs.org/axios/0.21.4_debug@4.3.2 - joi: registry.npmjs.org/joi/17.6.0 + axios: registry.npmjs.org/axios/0.27.2_debug@4.3.4 + joi: registry.npmjs.org/joi/17.9.2 lodash: registry.npmjs.org/lodash/4.17.21 - minimist: registry.npmjs.org/minimist/1.2.6 - rxjs: registry.npmjs.org/rxjs/7.5.6 + minimist: registry.npmjs.org/minimist/1.2.8 + rxjs: registry.npmjs.org/rxjs/7.8.1 transitivePeerDependencies: - debug dev: true @@ -8755,7 +7539,7 @@ packages: name: wcwidth version: 1.0.1 dependencies: - defaults: registry.npmjs.org/defaults/1.0.3 + defaults: registry.npmjs.org/defaults/1.0.4 dev: true registry.npmjs.org/webidl-conversions/3.0.1: @@ -8785,10 +7569,10 @@ packages: is-symbol: registry.npmjs.org/is-symbol/1.0.4 dev: true - registry.npmjs.org/which-module/2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz} + registry.npmjs.org/which-module/2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz} name: which-module - version: 2.0.0 + version: 2.0.1 dev: true registry.npmjs.org/which-pm/2.0.0: @@ -8900,10 +7684,10 @@ packages: version: 4.0.0 dev: true - registry.npmjs.org/yaml/2.2.1: - resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz} + registry.npmjs.org/yaml/2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz} name: yaml - version: 2.2.1 + version: 2.3.1 engines: {node: '>= 14'} dev: true @@ -8938,30 +7722,15 @@ packages: require-main-filename: registry.npmjs.org/require-main-filename/2.0.0 set-blocking: registry.npmjs.org/set-blocking/2.0.0 string-width: registry.npmjs.org/string-width/4.2.3 - which-module: registry.npmjs.org/which-module/2.0.0 + which-module: registry.npmjs.org/which-module/2.0.1 y18n: registry.npmjs.org/y18n/4.0.3 yargs-parser: registry.npmjs.org/yargs-parser/18.1.3 dev: true - registry.npmjs.org/yargs/17.5.1: - resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz} - name: yargs - version: 17.5.1 - engines: {node: '>=12'} - dependencies: - cliui: registry.npmjs.org/cliui/7.0.4 - escalade: registry.npmjs.org/escalade/3.1.1 - get-caller-file: registry.npmjs.org/get-caller-file/2.0.5 - require-directory: registry.npmjs.org/require-directory/2.1.1 - string-width: registry.npmjs.org/string-width/4.2.3 - y18n: registry.npmjs.org/y18n/5.0.8 - yargs-parser: registry.npmjs.org/yargs-parser/21.1.1 - dev: true - - registry.npmjs.org/yargs/17.6.2: - resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz} + registry.npmjs.org/yargs/17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz} name: yargs - version: 17.6.2 + version: 17.7.2 engines: {node: '>=12'} dependencies: cliui: registry.npmjs.org/cliui/8.0.1 @@ -8989,10 +7758,10 @@ packages: engines: {node: '>=10'} dev: true - registry.npmjs.org/zustand/4.3.1: - resolution: {integrity: sha512-EVyo/eLlOTcJm/X5M00rwtbYFXwRVTaRteSvhtbTZUCQFJkNfIyHPiJ6Ke68MSWzcKHpPzvqNH4gC2ZS/sbNqw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.1.tgz} + registry.npmjs.org/zustand/4.3.8: + resolution: {integrity: sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz} name: zustand - version: 4.3.1 + version: 4.3.8 engines: {node: '>=12.7.0'} peerDependencies: immer: '>=9.0' @@ -9006,30 +7775,11 @@ packages: use-sync-external-store: registry.npmjs.org/use-sync-external-store/1.2.0 dev: false - registry.npmjs.org/zustand/4.3.1_react@18.2.0: - resolution: {integrity: sha512-EVyo/eLlOTcJm/X5M00rwtbYFXwRVTaRteSvhtbTZUCQFJkNfIyHPiJ6Ke68MSWzcKHpPzvqNH4gC2ZS/sbNqw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.1.tgz} - id: registry.npmjs.org/zustand/4.3.1 - name: zustand - version: 4.3.1 - engines: {node: '>=12.7.0'} - peerDependencies: - immer: '>=9.0' - react: '>=16.8' - peerDependenciesMeta: - immer: - optional: true - react: - optional: true - dependencies: - 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/zustand/4.3.6_react@18.2.0: - resolution: {integrity: sha512-6J5zDxjxLE+yukC2XZWf/IyWVKnXT9b9HUv09VJ/bwGCpKNcaTqp7Ws28Xr8jnbvnZcdRaidztAPsXFBIqufiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.6.tgz} - id: registry.npmjs.org/zustand/4.3.6 + registry.npmjs.org/zustand/4.3.8_react@18.2.0: + resolution: {integrity: sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz} + id: registry.npmjs.org/zustand/4.3.8 name: zustand - version: 4.3.6 + version: 4.3.8 engines: {node: '>=12.7.0'} peerDependencies: immer: '>=9.0' diff --git a/tooling/rollup-config/package.json b/tooling/rollup-config/package.json index 99948d2ca..c24f49bd7 100644 --- a/tooling/rollup-config/package.json +++ b/tooling/rollup-config/package.json @@ -7,12 +7,12 @@ "main": "src/index.js", "module": "src/index.js", "devDependencies": { - "@rollup/plugin-commonjs": "^24.0.1", - "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-commonjs": "^25.0.0", + "@rollup/plugin-node-resolve": "^15.1.0", "@rollup/plugin-replace": "^5.0.2", - "@rollup/plugin-terser": "^0.4.0", - "@rollup/plugin-typescript": "^11.0.0", - "rollup": "^3.19.1", + "@rollup/plugin-terser": "^0.4.3", + "@rollup/plugin-typescript": "11.0.0", + "rollup": "^3.23.0", "rollup-plugin-peer-deps-external": "^2.2.4", "typescript": "^4.9.4" } From 45f51e96b119724371b29f1b920b6a8f52c92699 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 5 Jun 2023 00:02:07 +0200 Subject: [PATCH 0072/1093] refactor(store): connection data --- examples/vite-app/package.json | 3 +- .../src/examples/EasyConnect/CustomNode.tsx | 2 +- .../src/components/ConnectionLine/index.tsx | 6 +- .../core/src/components/Edges/wrapEdge.tsx | 42 ++- .../core/src/components/Handle/handler.ts | 205 ------------ packages/core/src/components/Handle/index.tsx | 52 +-- packages/core/src/store/index.ts | 44 +-- packages/core/src/store/initialState.ts | 5 +- packages/core/src/types/component-props.ts | 8 +- packages/core/src/types/general.ts | 14 +- packages/core/src/types/store.ts | 25 +- .../ConnectionLine/ConnectionLine.svelte | 2 +- .../src/lib/components/Handle/Handle.svelte | 22 +- .../src/lib/components/Handle/handler.ts | 213 ------------ .../svelte/src/lib/components/Handle/utils.ts | 194 ----------- .../svelte/src/lib/container/Pane/Pane.svelte | 19 +- .../svelte/src/lib/container/Pane/types.ts | 3 + .../container/SvelteFlow/SvelteFlow.svelte | 2 +- .../src/lib/container/SvelteFlow/types.ts | 12 +- .../svelte/src/lib/store/connection-path.ts | 19 +- packages/svelte/src/lib/store/index.ts | 12 +- .../svelte/src/lib/store/initial-store.ts | 25 +- packages/svelte/src/lib/store/types.ts | 7 +- packages/svelte/src/lib/types/general.ts | 18 +- packages/system/src/types/general.ts | 26 +- packages/system/src/types/handles.ts | 12 +- packages/utils/src/index.ts | 1 + packages/utils/src/xyhandle/index.ts | 312 ++++++++++++++++++ .../Handle => utils/src/xyhandle}/utils.ts | 101 +----- 29 files changed, 527 insertions(+), 879 deletions(-) delete mode 100644 packages/core/src/components/Handle/handler.ts delete mode 100644 packages/svelte/src/lib/components/Handle/handler.ts delete mode 100644 packages/svelte/src/lib/components/Handle/utils.ts create mode 100644 packages/svelte/src/lib/container/Pane/types.ts create mode 100644 packages/utils/src/xyhandle/index.ts rename packages/{core/src/components/Handle => utils/src/xyhandle}/utils.ts (50%) diff --git a/examples/vite-app/package.json b/examples/vite-app/package.json index ff8d4877d..6226fda01 100644 --- a/examples/vite-app/package.json +++ b/examples/vite-app/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite --port 3000 --open --host", + "dev": "vite --port 3000 --open --host --force", "serve": "vite serve --port 3000", "build": "vite build", "test:dev": "cypress open", @@ -14,7 +14,6 @@ "test-e2e": "start-server-and-test 'pnpm serve' http-get://localhost:3000 'pnpm test-e2e-cypress'" }, "dependencies": { - "@reactflow/node-resizer": "workspace:*", "classcat": "^5.0.3", "dagre": "^0.8.5", "localforage": "^1.10.0", diff --git a/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx b/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx index bd107c93f..3e4893623 100644 --- a/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx +++ b/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx @@ -1,6 +1,6 @@ import { Handle, NodeProps, Position, ReactFlowState, useStore } from 'reactflow'; -const connectionNodeIdSelector = (state: ReactFlowState) => state.connectionNodeId; +const connectionNodeIdSelector = (state: ReactFlowState) => state.connectionStartHandle?.nodeId; export default function CustomNode({ id }: NodeProps) { const connectionNodeId = useStore(connectionNodeIdSelector); diff --git a/packages/core/src/components/ConnectionLine/index.tsx b/packages/core/src/components/ConnectionLine/index.tsx index ee3202166..0d083762a 100644 --- a/packages/core/src/components/ConnectionLine/index.tsx +++ b/packages/core/src/components/ConnectionLine/index.tsx @@ -43,7 +43,7 @@ const ConnectionLine = ({ useCallback( (s: ReactFlowStore) => ({ fromNode: s.nodeInternals.get(nodeId), - handleId: s.connectionHandleId, + handleId: s.connectionStartHandle?.handleId, toX: (s.connectionPosition.x - s.transform[0]) / s.transform[2], toY: (s.connectionPosition.y - s.transform[1]) / s.transform[2], connectionMode: s.connectionMode, @@ -133,8 +133,8 @@ type ConnectionLineWrapperProps = { }; const selector = (s: ReactFlowState) => ({ - nodeId: s.connectionNodeId, - handleType: s.connectionHandleType, + nodeId: s.connectionStartHandle?.nodeId, + handleType: s.connectionStartHandle?.type, nodesConnectable: s.nodesConnectable, connectionStatus: s.connectionStatus, width: s.width, diff --git a/packages/core/src/components/Edges/wrapEdge.tsx b/packages/core/src/components/Edges/wrapEdge.tsx index e14af22a1..1c780a9bd 100644 --- a/packages/core/src/components/Edges/wrapEdge.tsx +++ b/packages/core/src/components/Edges/wrapEdge.tsx @@ -1,11 +1,10 @@ import { memo, useState, useMemo, useRef, type ComponentType, type KeyboardEvent } from 'react'; import cc from 'classcat'; -import { getMarkerId, elementSelectionKeys } from '@reactflow/utils'; +import { getMarkerId, elementSelectionKeys, XYHandle } from '@reactflow/utils'; import type { Connection } from '@reactflow/system'; import { useStoreApi } from '../../hooks/useStore'; import { ARIA_EDGE_DESC_KEY } from '../A11yDescriptions'; -import { handlePointerDown } from '../Handle/handler'; import { EdgeAnchor } from './EdgeAnchor'; import { getMouseHandler } from './utils'; import type { EdgeProps, WrapEdgeProps } from '../../types'; @@ -96,7 +95,22 @@ export default (EdgeComponent: ComponentType) => { return; } - const { edges, isValidConnection: isValidConnectionStore } = store.getState(); + const { + autoPanOnConnect, + domNode, + edges, + isValidConnection: isValidConnectionStore, + connectionMode, + connectionRadius, + transform, + lib, + onConnectStart, + onConnectEnd, + cancelConnection, + getNodes, + panBy, + updateConnection, + } = store.getState(); const nodeId = isSourceHandle ? target : source; const handleId = (isSourceHandle ? targetHandleId : sourceHandleId) || null; const handleType = isSourceHandle ? 'target' : 'source'; @@ -104,6 +118,7 @@ export default (EdgeComponent: ComponentType) => { const isTarget = isSourceHandle; const edge = edges.find((e) => e.id === id)!; + const nodes = getNodes(); setUpdating(true); onEdgeUpdateStart?.(event, edge, handleType); @@ -115,17 +130,26 @@ export default (EdgeComponent: ComponentType) => { const onConnectEdge = (connection: Connection) => onEdgeUpdate?.(edge, connection); - handlePointerDown({ - event, + XYHandle.onPointerDown(event.nativeEvent, { + autoPanOnConnect, + connectionMode, + connectionRadius, + domNode, handleId, nodeId, - onConnect: onConnectEdge, + nodes, isTarget, - getState: store.getState, - setState: store.setState, - isValidConnection, edgeUpdaterType: handleType, + transform, + lib, + cancelConnection, + panBy, + isValidConnection, + onConnect: onConnectEdge, + onConnectStart, + onConnectEnd, onEdgeUpdateEnd: _onEdgeUpdateEnd, + updateConnection, }); }; diff --git a/packages/core/src/components/Handle/handler.ts b/packages/core/src/components/Handle/handler.ts deleted file mode 100644 index 4a5339688..000000000 --- a/packages/core/src/components/Handle/handler.ts +++ /dev/null @@ -1,205 +0,0 @@ -import type { MouseEvent as ReactMouseEvent, TouchEvent as ReactTouchEvent } from 'react'; -import { StoreApi } from 'zustand'; -import { - getHostForElement, - calcAutoPan, - getEventPosition, - pointToRendererPoint, - rendererPointToPoint, -} from '@reactflow/utils'; -import type { OnConnect, HandleType, Connection } from '@reactflow/system'; - -import { - ConnectionHandle, - getClosestHandle, - getConnectionStatus, - getHandleLookup, - getHandleType, - isValidHandle, - resetRecentHandle, - ValidConnectionFunc, -} from './utils'; -import type { ReactFlowState } from '../../types'; - -export function handlePointerDown({ - event, - handleId, - nodeId, - onConnect, - isTarget, - getState, - setState, - isValidConnection, - edgeUpdaterType, - onEdgeUpdateEnd, -}: { - event: ReactMouseEvent | ReactTouchEvent; - handleId: string | null; - nodeId: string; - onConnect: OnConnect; - isTarget: boolean; - getState: StoreApi['getState']; - setState: StoreApi['setState']; - isValidConnection: ValidConnectionFunc; - edgeUpdaterType?: HandleType; - onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; -}): void { - // when react-flow is used inside a shadow root we can't use document - const doc = getHostForElement(event.target as HTMLElement); - const { - connectionMode, - domNode, - autoPanOnConnect, - connectionRadius, - onConnectStart, - panBy, - getNodes, - cancelConnection, - } = getState(); - let autoPanId = 0; - let closestHandle: ConnectionHandle | null; - - const { x, y } = getEventPosition(event.nativeEvent); - const clickedHandle = doc?.elementFromPoint(x, y); - const handleType = getHandleType(edgeUpdaterType, clickedHandle); - const containerBounds = domNode?.getBoundingClientRect(); - - if (!containerBounds || !handleType) { - return; - } - - let prevActiveHandle: Element; - let connectionPosition = getEventPosition(event.nativeEvent, containerBounds); - let autoPanStarted = false; - let connection: Connection | null = null; - let isValid = false; - let handleDomNode: Element | null = null; - - const handleLookup = getHandleLookup({ - nodes: getNodes(), - nodeId, - handleId, - handleType, - }); - - // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas - const autoPan = (): void => { - if (!autoPanOnConnect) { - return; - } - const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds); - - panBy({ x: xMovement, y: yMovement }); - autoPanId = requestAnimationFrame(autoPan); - }; - - setState({ - connectionPosition, - connectionStatus: null, - // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle - connectionNodeId: nodeId, - connectionHandleId: handleId, - connectionHandleType: handleType, - connectionStartHandle: { - nodeId, - handleId, - type: handleType, - }, - connectionEndHandle: null, - }); - - onConnectStart?.(event, { nodeId, handleId, handleType }); - - function onPointerMove(event: MouseEvent | TouchEvent) { - const { transform } = getState(); - - connectionPosition = getEventPosition(event, containerBounds); - closestHandle = getClosestHandle( - pointToRendererPoint(connectionPosition, transform, false, [1, 1]), - connectionRadius, - handleLookup - ); - - if (!autoPanStarted) { - autoPan(); - autoPanStarted = true; - } - - const result = isValidHandle( - event, - closestHandle, - connectionMode, - nodeId, - handleId, - isTarget ? 'target' : 'source', - isValidConnection, - doc - ); - - handleDomNode = result.handleDomNode; - connection = result.connection; - isValid = result.isValid; - - setState({ - connectionPosition: - closestHandle && isValid - ? rendererPointToPoint( - { - x: closestHandle.x, - y: closestHandle.y, - }, - transform - ) - : connectionPosition, - connectionStatus: getConnectionStatus(!!closestHandle, isValid), - connectionEndHandle: result.endHandle, - }); - - if (!closestHandle && !isValid && !handleDomNode) { - return resetRecentHandle(prevActiveHandle); - } - - if (connection.source !== connection.target && handleDomNode) { - resetRecentHandle(prevActiveHandle); - prevActiveHandle = handleDomNode; - // @todo: remove the old class names "react-flow__handle-" in the next major version - handleDomNode.classList.add('connecting', 'react-flow__handle-connecting'); - handleDomNode.classList.toggle('valid', isValid); - handleDomNode.classList.toggle('react-flow__handle-valid', isValid); - } - } - - function onPointerUp(event: MouseEvent | TouchEvent) { - if ((closestHandle || handleDomNode) && connection && isValid) { - onConnect?.(connection); - } - - // it's important to get a fresh reference from the store here - // in order to get the latest state of onConnectEnd - getState().onConnectEnd?.(event); - - if (edgeUpdaterType) { - onEdgeUpdateEnd?.(event); - } - - resetRecentHandle(prevActiveHandle); - cancelConnection(); - cancelAnimationFrame(autoPanId); - autoPanStarted = false; - isValid = false; - connection = null; - handleDomNode = null; - - doc.removeEventListener('mousemove', onPointerMove as EventListener); - doc.removeEventListener('mouseup', onPointerUp as EventListener); - - doc.removeEventListener('touchmove', onPointerMove as EventListener); - doc.removeEventListener('touchend', onPointerUp as EventListener); - } - - doc.addEventListener('mousemove', onPointerMove as EventListener); - doc.addEventListener('mouseup', onPointerUp as EventListener); - - doc.addEventListener('touchmove', onPointerMove as EventListener); - doc.addEventListener('touchend', onPointerUp as EventListener); -} diff --git a/packages/core/src/components/Handle/index.tsx b/packages/core/src/components/Handle/index.tsx index 0ba6c400a..2c7fe7d84 100644 --- a/packages/core/src/components/Handle/index.tsx +++ b/packages/core/src/components/Handle/index.tsx @@ -2,16 +2,12 @@ import { memo, HTMLAttributes, forwardRef, MouseEvent as ReactMouseEvent, TouchE import cc from 'classcat'; import { shallow } from 'zustand/shallow'; import { errorMessages, Position, type HandleProps, type Connection, type HandleType } from '@reactflow/system'; -import { getHostForElement, isMouseEvent } from '@reactflow/utils'; +import { XYHandle, getHostForElement, isMouseEvent } from '@reactflow/utils'; import { useStore, useStoreApi } from '../../hooks/useStore'; import { useNodeId } from '../../contexts/NodeIdContext'; -import { handlePointerDown } from './handler'; import { addEdge } from '../../utils/'; import { type ReactFlowState } from '../../types'; -import { isValidHandle } from './utils'; - -const alwaysValid = () => true; export type HandleComponentProps = HandleProps & Omit, 'id'>; @@ -95,15 +91,26 @@ const Handle = forwardRef( isConnectableStart && ((isMouseTriggered && (event as ReactMouseEvent).button === 0) || !isMouseTriggered) ) { - handlePointerDown({ - event, + const currentStore = store.getState(); + + XYHandle.onPointerDown(event.nativeEvent, { + autoPanOnConnect: currentStore.autoPanOnConnect, + connectionMode: currentStore.connectionMode, + connectionRadius: currentStore.connectionRadius, + domNode: currentStore.domNode, + nodes: currentStore.getNodes(), + transform: currentStore.transform, + lib: currentStore.lib, + isTarget, handleId, nodeId, + panBy: currentStore.panBy, + cancelConnection: currentStore.cancelConnection, + onConnectStart: currentStore.onConnectStart, + onConnectEnd: currentStore.onConnectEnd, + updateConnection: currentStore.updateConnection, onConnect: onConnectExtended, - isTarget, - getState: store.getState, - setState: store.setState, - isValidConnection: isValidConnection || store.getState().isValidConnection || alwaysValid, + isValidConnection: isValidConnection || currentStore.isValidConnection, }); } @@ -121,6 +128,7 @@ const Handle = forwardRef( connectionClickStartHandle, connectionMode, isValidConnection: isValidConnectionStore, + lib, } = store.getState(); if (!nodeId || (!connectionClickStartHandle && !isConnectableStart)) { @@ -128,27 +136,27 @@ const Handle = forwardRef( } if (!connectionClickStartHandle) { - onClickConnectStart?.(event, { nodeId, handleId, handleType: type }); + onClickConnectStart?.(event.nativeEvent, { nodeId, handleId, handleType: type }); store.setState({ connectionClickStartHandle: { nodeId, type, handleId } }); return; } const doc = getHostForElement(event.target as HTMLElement); - const isValidConnectionHandler = isValidConnection || isValidConnectionStore || alwaysValid; - const { connection, isValid } = isValidHandle( - event.nativeEvent, - { + const isValidConnectionHandler = isValidConnection || isValidConnectionStore; + const { connection, isValid } = XYHandle.isValid(event.nativeEvent, { + handle: { nodeId, id: handleId, type, }, connectionMode, - connectionClickStartHandle.nodeId, - connectionClickStartHandle.handleId || null, - connectionClickStartHandle.type, - isValidConnectionHandler, - doc - ); + fromNodeId: connectionClickStartHandle.nodeId, + fromHandleId: connectionClickStartHandle.handleId || null, + fromType: connectionClickStartHandle.type, + isValidConnection: isValidConnectionHandler, + doc, + lib, + }); if (isValid) { onConnectExtended(connection); diff --git a/packages/core/src/store/index.ts b/packages/core/src/store/index.ts index 2c31ad3d3..6aae84b02 100644 --- a/packages/core/src/store/index.ts +++ b/packages/core/src/store/index.ts @@ -1,12 +1,6 @@ import { createStore } from 'zustand'; import { clampPosition, getDimensions, fitView, getHandleBounds } from '@reactflow/utils'; -import { - internalsSymbol, - type NodeDimensionUpdate, - type CoordinateExtent, - type NodeDragItem, - type XYPosition, -} from '@reactflow/system'; +import { internalsSymbol, type CoordinateExtent } from '@reactflow/system'; import { applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes'; import { createNodeInternals, updateAbsoluteNodePositions, updateNodesAndEdgesSelections } from './utils'; @@ -20,7 +14,6 @@ import type { NodeSelectionChange, NodePositionChange, UnselectNodesAndEdgesParams, - NodeChange, } from '../types'; const createRFStore = () => @@ -48,7 +41,7 @@ const createRFStore = () => set({ nodeInternals, edges: nextEdges, hasDefaultNodes, hasDefaultEdges }); }, - updateNodeDimensions: (updates: NodeDimensionUpdate[]) => { + updateNodeDimensions: (updates) => { const { onNodesChange, nodeInternals, @@ -132,7 +125,7 @@ const createRFStore = () => onNodesChange?.(changes); } }, - updateNodePositions: (nodeDragItems: NodeDragItem[] | Node[], positionChanged = true, dragging = false) => { + updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => { const { triggerNodeChanges } = get(); const changes = nodeDragItems.map((node) => { @@ -153,7 +146,7 @@ const createRFStore = () => triggerNodeChanges(changes); }, - triggerNodeChanges: (changes: NodeChange[]) => { + triggerNodeChanges: (changes) => { const { onNodesChange, nodeInternals, hasDefaultNodes, nodeOrigin, getNodes, elevateNodesOnSelect } = get(); if (changes?.length) { @@ -167,7 +160,7 @@ const createRFStore = () => } }, - addSelectedNodes: (selectedNodeIds: string[]) => { + addSelectedNodes: (selectedNodeIds) => { const { multiSelectionActive, edges, getNodes } = get(); let changedNodes: NodeSelectionChange[]; let changedEdges: EdgeSelectionChange[] | null = null; @@ -186,7 +179,7 @@ const createRFStore = () => set, }); }, - addSelectedEdges: (selectedEdgeIds: string[]) => { + addSelectedEdges: (selectedEdgeIds) => { const { multiSelectionActive, edges, getNodes } = get(); let changedEdges: EdgeSelectionChange[]; let changedNodes: NodeSelectionChange[] | null = null; @@ -225,19 +218,19 @@ const createRFStore = () => set, }); }, - setMinZoom: (minZoom: number) => { + setMinZoom: (minZoom) => { const { panZoom, maxZoom } = get(); panZoom?.setScaleExtent([minZoom, maxZoom]); set({ minZoom }); }, - setMaxZoom: (maxZoom: number) => { + setMaxZoom: (maxZoom) => { const { panZoom, minZoom } = get(); panZoom?.setScaleExtent([minZoom, maxZoom]); set({ maxZoom }); }, - setTranslateExtent: (translateExtent: CoordinateExtent) => { + setTranslateExtent: (translateExtent) => { get().panZoom?.setTranslateExtent(translateExtent); set({ translateExtent }); @@ -260,7 +253,7 @@ const createRFStore = () => set, }); }, - setNodeExtent: (nodeExtent: CoordinateExtent) => { + setNodeExtent: (nodeExtent) => { const { nodeInternals } = get(); nodeInternals.forEach((node) => { @@ -272,7 +265,7 @@ const createRFStore = () => nodeInternals: new Map(nodeInternals), }); }, - panBy: (delta: XYPosition): boolean => { + panBy: (delta): boolean => { const { transform, width, height, panZoom, translateExtent } = get(); if (!panZoom || (!delta.x && !delta.y)) { @@ -300,13 +293,22 @@ const createRFStore = () => }, cancelConnection: () => set({ - connectionNodeId: initialState.connectionNodeId, - connectionHandleId: initialState.connectionHandleId, - connectionHandleType: initialState.connectionHandleType, connectionStatus: initialState.connectionStatus, connectionStartHandle: initialState.connectionStartHandle, connectionEndHandle: initialState.connectionEndHandle, }), + updateConnection: (params) => { + const { connectionStatus, connectionStartHandle, connectionEndHandle, connectionPosition } = get(); + + const currentConnection = { + connectionPosition: params.connectionPosition ?? connectionPosition, + connectionStatus: params.connectionStatus ?? connectionStatus, + connectionStartHandle: params.connectionStartHandle ?? connectionStartHandle, + connectionEndHandle: params.connectionEndHandle ?? connectionEndHandle, + }; + + set(currentConnection); + }, reset: () => set({ ...initialState }), })); diff --git a/packages/core/src/store/initialState.ts b/packages/core/src/store/initialState.ts index 28e0d4654..4a34de55d 100644 --- a/packages/core/src/store/initialState.ts +++ b/packages/core/src/store/initialState.ts @@ -22,9 +22,6 @@ const initialState: ReactFlowStore = { nodesSelectionActive: false, userSelectionActive: false, userSelectionRect: null, - connectionNodeId: null, - connectionHandleId: null, - connectionHandleType: 'source', connectionPosition: { x: 0, y: 0 }, connectionStatus: null, connectionMode: ConnectionMode.Strict, @@ -61,6 +58,8 @@ const initialState: ReactFlowStore = { connectionRadius: 20, onError: devWarn, isValidConnection: undefined, + + lib: 'react', }; export default initialState; diff --git a/packages/core/src/types/component-props.ts b/packages/core/src/types/component-props.ts index f8d05a208..760f13383 100644 --- a/packages/core/src/types/component-props.ts +++ b/packages/core/src/types/component-props.ts @@ -3,6 +3,8 @@ import type { ConnectionMode, ConnectionLineType, OnConnect, + OnConnectStart, + OnConnectEnd, CoordinateExtent, KeyCode, PanOnScrollMode, @@ -16,6 +18,7 @@ import type { HandleType, SelectionMode, OnError, + IsValidConnection, } from '@reactflow/system'; import type { @@ -25,8 +28,6 @@ import type { Node, Edge, ConnectionLineComponent, - OnConnectStart, - OnConnectEnd, OnEdgeUpdateFunc, OnInit, DefaultEdgeOptions, @@ -40,7 +41,6 @@ import type { SelectionDragHandler, EdgeMouseHandler, } from '.'; -import { ValidConnectionFunc } from '../components/Handle/utils'; export type ReactFlowProps = HTMLAttributes & { nodes?: Node[]; @@ -148,7 +148,7 @@ export type ReactFlowProps = HTMLAttributes & { autoPanOnConnect?: boolean; connectionRadius?: number; onError?: OnError; - isValidConnection?: ValidConnectionFunc; + isValidConnection?: IsValidConnection; }; export type ReactFlowRefType = HTMLDivElement; diff --git a/packages/core/src/types/general.ts b/packages/core/src/types/general.ts index ec86e7e8a..b8bb015c4 100644 --- a/packages/core/src/types/general.ts +++ b/packages/core/src/types/general.ts @@ -1,15 +1,9 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { - MouseEvent as ReactMouseEvent, - TouchEvent as ReactTouchEvent, - ComponentType, - MemoExoticComponent, -} from 'react'; +import type { ComponentType, MemoExoticComponent } from 'react'; import { FitViewParamsBase, FitViewOptionsBase, NodeProps, - OnConnectStartParams, ZoomInOut, ZoomTo, SetViewport, @@ -18,7 +12,6 @@ import { SetCenter, FitBounds, Project, - Connection, } from '@reactflow/system'; import type { NodeChange, EdgeChange, Node, WrapNodeProps, Edge, EdgeProps, WrapEdgeProps, ReactFlowInstance } from '.'; @@ -46,16 +39,11 @@ export type OnSelectionChangeParams = { export type OnSelectionChangeFunc = (params: OnSelectionChangeParams) => void; -export type OnConnectStart = (event: ReactMouseEvent | ReactTouchEvent, params: OnConnectStartParams) => void; -export type OnConnectEnd = (event: MouseEvent | TouchEvent) => void; - export type FitViewParams = FitViewParamsBase; export type FitViewOptions = FitViewOptionsBase; export type FitView = (fitViewOptions?: FitViewOptions) => boolean; export type OnInit = (reactFlowInstance: ReactFlowInstance) => void; -export type IsValidConnection = (edge: Edge | Connection) => boolean; - export type ViewportHelperFunctions = { zoomIn: ZoomInOut; zoomOut: ZoomInOut; diff --git a/packages/core/src/types/store.ts b/packages/core/src/types/store.ts index dbd7741d3..a07603293 100644 --- a/packages/core/src/types/store.ts +++ b/packages/core/src/types/store.ts @@ -2,7 +2,6 @@ import { ConnectionMode, type ConnectionStatus, type CoordinateExtent, - type HandleType, type NodeDimensionUpdate, type UpdateNodePositions, type NodeOrigin, @@ -16,11 +15,15 @@ import { type XYPosition, type PanZoomInstance, type PanBy, - OnNodeDrag, - OnSelectionDrag, - OnMoveStart, - OnMove, - OnMoveEnd, + type OnConnectStart, + type OnConnectEnd, + type OnNodeDrag, + type OnSelectionDrag, + type OnMoveStart, + type OnMove, + type OnMoveEnd, + type IsValidConnection, + type UpdateConnection, } from '@reactflow/system'; import type { @@ -30,15 +33,12 @@ import type { OnNodesChange, OnEdgesChange, NodeInternals, - OnConnectStart, - OnConnectEnd, DefaultEdgeOptions, FitViewOptions, OnNodesDelete, OnEdgesDelete, OnSelectionChangeFunc, UnselectNodesAndEdgesParams, - IsValidConnection, } from '.'; export type ReactFlowStore = { @@ -67,9 +67,6 @@ export type ReactFlowStore = { userSelectionActive: boolean; userSelectionRect: SelectionRect | null; - connectionNodeId: string | null; - connectionHandleId: string | null; - connectionHandleType: HandleType | null; connectionPosition: XYPosition; connectionStatus: ConnectionStatus | null; connectionMode: ConnectionMode; @@ -135,6 +132,8 @@ export type ReactFlowStore = { connectionRadius: number; isValidConnection?: IsValidConnection; + + lib: string; }; export type ReactFlowActions = { @@ -153,6 +152,8 @@ export type ReactFlowActions = { setTranslateExtent: (translateExtent: CoordinateExtent) => void; setNodeExtent: (nodeExtent: CoordinateExtent) => void; cancelConnection: () => void; + // @todo can this be reused by system? + updateConnection: UpdateConnection; reset: () => void; triggerNodeChanges: (changes: NodeChange[]) => void; panBy: PanBy; diff --git a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte index d49d24127..770b72415 100644 --- a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte +++ b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte @@ -8,7 +8,7 @@ {#if $connectionPath} - + diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index d26e98df0..044b387a9 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -2,9 +2,8 @@ import { getContext, createEventDispatcher } from 'svelte'; import cc from 'classcat'; import { Position, type Connection } from '@reactflow/system'; - import { isMouseEvent } from '@reactflow/utils'; + import { XYHandle, isMouseEvent } from '@reactflow/utils'; - import { handlePointerDown } from './handler'; import { useStore } from '$lib/store'; import type { HandleComponentProps } from '$lib/types'; @@ -23,7 +22,8 @@ const handleId = id || null; const dispatch = createEventDispatcher(); - + + const store = useStore(); const { connectionMode, domNode, @@ -31,11 +31,12 @@ connectionRadius, transform, isValidConnection, + lib, addEdge, panBy, cancelConnection, updateConnection, - } = useStore(); + } = store; function dispatchEvent(eventName: string, params?: Connection) { dispatch(eventName, params || { nodeId, handleId, type }); @@ -50,23 +51,22 @@ const isMouseTriggered = isMouseEvent(event); if ((isMouseTriggered && event.button === 0) || !isMouseTriggered) { - handlePointerDown({ - event, + XYHandle.onPointerDown(event, { handleId, nodeId, isTarget, connectionRadius: $connectionRadius, domNode: $domNode, - nodes, + nodes: $nodes, connectionMode: $connectionMode, - transform, + transform: $transform, + lib: $lib, + autoPanOnConnect: true, isValidConnection: $isValidConnection, - onConnect: onConnectExtended, updateConnection, cancelConnection, panBy, - onConnectStart: () => dispatchEvent('connect:start'), - onConnectEnd: () => dispatchEvent('connect:end') + onConnect: onConnectExtended, }); } } diff --git a/packages/svelte/src/lib/components/Handle/handler.ts b/packages/svelte/src/lib/components/Handle/handler.ts deleted file mode 100644 index 0275f3334..000000000 --- a/packages/svelte/src/lib/components/Handle/handler.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { get, type Writable } from 'svelte/store'; -import { - getHostForElement, - calcAutoPan, - getEventPosition, - pointToRendererPoint, - rendererPointToPoint -} from '@reactflow/utils'; -import type { - OnConnect, - HandleType, - Connection, - ConnectionMode, - XYPosition, - Transform -} from '@reactflow/system'; - -import { - getClosestHandle, - getConnectionStatus, - getHandleLookup, - getHandleType, - isValidHandle, - resetRecentHandle, - type ConnectionHandle -} from './utils'; -import type { ConnectionData, IsValidConnection, Node } from '$lib/types'; - -export function handlePointerDown({ - event, - handleId, - nodeId, - onConnect, - domNode, - nodes, - connectionMode, - connectionRadius, - isTarget, - transform: transformStore, - panBy, - updateConnection, - cancelConnection, - isValidConnection, - edgeUpdaterType, - onEdgeUpdateEnd, - onConnectStart, - onConnectEnd -}: { - event: MouseEvent | TouchEvent; - handleId: string | null; - nodeId: string; - onConnect: OnConnect; - isTarget: boolean; - connectionMode: ConnectionMode; - domNode: HTMLDivElement | null; - nodes: Writable; - connectionRadius: number; - isValidConnection: IsValidConnection; - transform: Writable; - updateConnection: (connection: Partial) => void; - cancelConnection: () => void; - panBy: (delta: XYPosition) => void; - edgeUpdaterType?: HandleType; - onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; - onConnectStart: () => void; - onConnectEnd: () => void; -}): void { - // when svelte-flow is used inside a shadow root we can't use document - const doc = getHostForElement(event.target as HTMLElement); - let autoPanId = 0; - let prevClosestHandle: ConnectionHandle | null; - - const { x, y } = getEventPosition(event); - const clickedHandle = doc?.elementFromPoint(x, y); - const handleType = getHandleType(edgeUpdaterType, clickedHandle); - const containerBounds = domNode?.getBoundingClientRect(); - - if (!containerBounds || !handleType) { - return; - } - - let prevActiveHandle: Element; - let connectionPosition = getEventPosition(event, containerBounds); - let autoPanStarted = false; - let connection: Connection | null = null; - let isValid = false; - let handleDomNode: Element | null = null; - - const autoPanOnConnect = true; - - const handleLookup = getHandleLookup({ - nodes: get(nodes), - nodeId, - handleId, - handleType - }); - - // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas - const autoPan = (): void => { - // @todd add prop - if (!autoPanOnConnect) { - return; - } - const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds); - - panBy({ x: xMovement, y: yMovement }); - autoPanId = requestAnimationFrame(autoPan); - }; - - updateConnection({ - position: connectionPosition, - nodeId, - handleId, - handleType, - status: null - }); - - // onConnectStart?.(event, { nodeId, handleId, handleType }); - onConnectStart(); - - function onPointerMove(event: MouseEvent | TouchEvent) { - const transform = get(transformStore); - connectionPosition = getEventPosition(event, containerBounds); - - prevClosestHandle = getClosestHandle( - pointToRendererPoint(connectionPosition, transform, false, [1, 1]), - connectionRadius, - handleLookup - ); - - if (!autoPanStarted) { - autoPan(); - autoPanStarted = true; - } - - const result = isValidHandle( - event, - prevClosestHandle, - connectionMode, - nodeId, - handleId, - isTarget ? 'target' : 'source', - isValidConnection, - doc, - get(nodes) - ); - - handleDomNode = result.handleDomNode; - connection = result.connection; - isValid = result.isValid; - - updateConnection({ - position: - prevClosestHandle && isValid - ? rendererPointToPoint( - { - x: prevClosestHandle.x, - y: prevClosestHandle.y - }, - transform - ) - : connectionPosition, - status: getConnectionStatus(!!prevClosestHandle, isValid) - }); - - if (!prevClosestHandle && !isValid && !handleDomNode) { - return resetRecentHandle(prevActiveHandle); - } - - if (connection.source !== connection.target && handleDomNode) { - resetRecentHandle(prevActiveHandle); - prevActiveHandle = handleDomNode; - // @todo: remove the old class names "svelte-flow__handle-" in the next major version - handleDomNode.classList.add('connecting'); - handleDomNode.classList.toggle('valid', isValid); - } - } - - function onPointerUp(event: MouseEvent | TouchEvent) { - if ((prevClosestHandle || handleDomNode) && connection && isValid) { - onConnect?.(connection); - } - - // it's important to get a fresh reference from the store here - // in order to get the latest state of onConnectEnd - - onConnectEnd(); - - if (edgeUpdaterType) { - onEdgeUpdateEnd?.(event); - } - - resetRecentHandle(prevActiveHandle); - cancelConnection(); - cancelAnimationFrame(autoPanId); - autoPanStarted = false; - isValid = false; - connection = null; - handleDomNode = null; - - doc.removeEventListener('mousemove', onPointerMove as EventListener); - doc.removeEventListener('mouseup', onPointerUp as EventListener); - - doc.removeEventListener('touchmove', onPointerMove as EventListener); - doc.removeEventListener('touchend', onPointerUp as EventListener); - } - - doc.addEventListener('mousemove', onPointerMove as EventListener); - doc.addEventListener('mouseup', onPointerUp as EventListener); - - doc.addEventListener('touchmove', onPointerMove as EventListener); - doc.addEventListener('touchend', onPointerUp as EventListener); -} diff --git a/packages/svelte/src/lib/components/Handle/utils.ts b/packages/svelte/src/lib/components/Handle/utils.ts deleted file mode 100644 index 183227182..000000000 --- a/packages/svelte/src/lib/components/Handle/utils.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { internalsSymbol, ConnectionMode, type ConnectionStatus } from '@reactflow/system'; -import type { Connection, HandleType, XYPosition, NodeHandleBounds } from '@reactflow/system'; -import { getEventPosition } from '@reactflow/utils'; - -import type { IsValidConnection, Node } from '$lib/types'; - -export type ConnectionHandle = { - id: string | null; - type: HandleType; - nodeId: string; - x: number; - y: number; -}; - -export type ValidConnectionFunc = (connection: Connection) => boolean; - -// this functions collects all handles and adds an absolute position -// so that we can later find the closest handle to the mouse position -export function getHandles( - node: Node, - handleBounds: NodeHandleBounds, - type: HandleType, - currentHandle: string -): ConnectionHandle[] { - return (handleBounds[type] || []).reduce((res, h) => { - if (`${node.id}-${h.id}-${type}` !== currentHandle) { - res.push({ - id: h.id || null, - type, - nodeId: node.id, - x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2, - y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2 - }); - } - return res; - }, []); -} - -export function getClosestHandle( - pos: XYPosition, - connectionRadius: number, - handles: ConnectionHandle[] -): ConnectionHandle | null { - let closestHandle: ConnectionHandle | null = null; - let minDistance = Infinity; - - handles.forEach((handle) => { - const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2)); - if (distance <= connectionRadius && distance < minDistance) { - minDistance = distance; - closestHandle = handle; - } - }); - - return closestHandle; -} - -type Result = { - handleDomNode: Element | null; - isValid: boolean; - connection: Connection; -}; - -const nullConnection: Connection = { - source: null, - target: null, - sourceHandle: null, - targetHandle: null -}; - -// checks if and returns connection in fom of an object { source: 123, target: 312 } -export function isValidHandle( - event: MouseEvent | TouchEvent, - handle: Pick | null, - connectionMode: ConnectionMode, - fromNodeId: string, - fromHandleId: string | null, - fromType: string, - isValidConnection: IsValidConnection, - doc: Document | ShadowRoot, - nodes: Node[] -) { - const isTarget = fromType === 'target'; - const handleDomNode = doc.querySelector( - `.svelte-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` - ); - const { x, y } = getEventPosition(event); - const handleBelow = doc.elementFromPoint(x, y); - const handleToCheck = handleBelow?.classList.contains('svelte-flow__handle') - ? handleBelow - : handleDomNode; - - const result: Result = { - handleDomNode: handleToCheck, - isValid: false, - connection: nullConnection - }; - - if (handleToCheck) { - const handleType = getHandleType(undefined, handleToCheck); - const handleNodeId = handleToCheck.getAttribute('data-nodeid'); - const handleId = handleToCheck.getAttribute('data-handleid'); - - const connection: Connection = { - source: isTarget ? handleNodeId : fromNodeId, - sourceHandle: isTarget ? handleId : fromHandleId, - target: isTarget ? fromNodeId : handleNodeId, - targetHandle: isTarget ? fromHandleId : handleId - }; - - result.connection = connection; - - // in strict mode we don't allow target to target or source to source connections - const isValid = - connectionMode === ConnectionMode.Strict - ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') - : handleNodeId !== fromNodeId || handleId !== fromHandleId; - - if (isValid) { - const fromNode: Node | undefined = nodes.find((n) => n.id === connection.source); - const toNode: Node | undefined = nodes.find((n) => n.id === connection.target); - - if (fromNode && toNode) result.isValid = isValidConnection(connection, { fromNode, toNode }); - } - } - - return result; -} - -type GetHandleLookupParams = { - nodes: Node[]; - nodeId: string; - handleId: string | null; - handleType: string; -}; - -export function getHandleLookup({ nodes, nodeId, handleId, handleType }: GetHandleLookupParams) { - return nodes.reduce((res, node) => { - if (node[internalsSymbol]) { - const { handleBounds } = node[internalsSymbol]; - let sourceHandles: ConnectionHandle[] = []; - let targetHandles: ConnectionHandle[] = []; - - if (handleBounds) { - sourceHandles = getHandles( - node, - handleBounds, - 'source', - `${nodeId}-${handleId}-${handleType}` - ); - targetHandles = getHandles( - node, - handleBounds, - 'target', - `${nodeId}-${handleId}-${handleType}` - ); - } - - res.push(...sourceHandles, ...targetHandles); - } - return res; - }, []); -} - -export function getHandleType( - edgeUpdaterType: HandleType | undefined, - handleDomNode: Element | null -): HandleType | null { - if (edgeUpdaterType) { - return edgeUpdaterType; - } else if (handleDomNode?.classList.contains('target')) { - return 'target'; - } else if (handleDomNode?.classList.contains('source')) { - return 'source'; - } - - return null; -} - -export function resetRecentHandle(handleDomNode: Element): void { - handleDomNode?.classList.remove('valid', 'connecting'); -} - -export function getConnectionStatus(isInsideConnectionRadius: boolean, isHandleValid: boolean) { - let connectionStatus = null; - - if (isHandleValid) { - connectionStatus = 'valid'; - } else if (isInsideConnectionRadius && !isHandleValid) { - connectionStatus = 'invalid'; - } - - return connectionStatus as ConnectionStatus; -} diff --git a/packages/svelte/src/lib/container/Pane/Pane.svelte b/packages/svelte/src/lib/container/Pane/Pane.svelte index c915987a2..2ea2696f8 100644 --- a/packages/svelte/src/lib/container/Pane/Pane.svelte +++ b/packages/svelte/src/lib/container/Pane/Pane.svelte @@ -36,6 +36,11 @@ import { useStore } from '$lib/store'; import { getConnectedEdges } from '$lib/utils'; import type { Node, Edge } from '$lib/types'; + import type { PaneProps } from './types'; + + type $$Props = PaneProps; + + export let panOnDrag: $$Props['panOnDrag'] = undefined; const dispatch = createEventDispatcher(); const { @@ -133,9 +138,9 @@ // We only want to trigger click functions when in selection mode if // the user did not move the mouse. - // if (!userSelectionActive && userSelectionRect && event.target === container.current) { - // onClick?.(event); - // } + if (!isSelecting && $selectionRectMode === 'user' && event.target === container) { + onClick?.(event); + } selectionRect.set(null); if (selectedNodes.length > 0) { @@ -155,10 +160,10 @@ }; const onContextMenu = (event: MouseEvent) => { - // if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) { - // event.preventDefault(); - // return; - // } + if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) { + event.preventDefault(); + return; + } dispatch('pane:contextmenu', event); }; diff --git a/packages/svelte/src/lib/container/Pane/types.ts b/packages/svelte/src/lib/container/Pane/types.ts new file mode 100644 index 000000000..9495397b7 --- /dev/null +++ b/packages/svelte/src/lib/container/Pane/types.ts @@ -0,0 +1,3 @@ +export type PaneProps = { + panOnDrag?: boolean | number[]; +}; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index bd8ba901e..ac9df3f77 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -167,7 +167,7 @@ {panOnScroll} {panOnDrag} > - + diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index ed078da9b..baf45f58d 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -11,17 +11,11 @@ import type { OnMove, OnMoveEnd, CoordinateExtent, - PanOnScrollMode + PanOnScrollMode, + IsValidConnection } from '@reactflow/system'; -import type { - Edge, - Node, - NodeTypes, - KeyDefinition, - EdgeTypes, - IsValidConnection -} from '$lib/types'; +import type { Edge, Node, NodeTypes, KeyDefinition, EdgeTypes } from '$lib/types'; export type SvelteFlowProps = DOMAttributes & { id?: string; diff --git a/packages/svelte/src/lib/store/connection-path.ts b/packages/svelte/src/lib/store/connection-path.ts index 317d260e0..a707f5334 100644 --- a/packages/svelte/src/lib/store/connection-path.ts +++ b/packages/svelte/src/lib/store/connection-path.ts @@ -21,20 +21,23 @@ export function getConnectionPath(store: SvelteFlowStoreState) { store.transform ], ([connection, connectionLineType, connectionMode, nodes, transform]) => { - if (!connection.nodeId) { + if (!connection.connectionStartHandle?.nodeId) { return null; } - const fromNode = nodes.find((n) => n.id === connection.nodeId); + const fromNode = nodes.find((n) => n.id === connection.connectionStartHandle?.nodeId); const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds; - const handleBoundsStrict = fromHandleBounds?.[connection.handleType || 'source'] || []; + const handleBoundsStrict = + fromHandleBounds?.[connection.connectionStartHandle.type || 'source'] || []; const handleBoundsLoose = handleBoundsStrict ? handleBoundsStrict - : fromHandleBounds?.[connection.handleType === 'source' ? 'target' : 'source']!; + : fromHandleBounds?.[ + connection?.connectionStartHandle?.type === 'source' ? 'target' : 'source' + ]!; const handleBounds = connectionMode === ConnectionMode.Strict ? handleBoundsStrict : handleBoundsLoose; - const fromHandle = connection.handleId - ? handleBounds.find((d) => d.id === connection.handleId) + const fromHandle = connection.connectionStartHandle?.handleId + ? handleBounds.find((d) => d.id === connection.connectionStartHandle?.handleId) : handleBounds[0]; const fromHandleX = fromHandle ? fromHandle.x + fromHandle.width / 2 @@ -49,8 +52,8 @@ export function getConnectionPath(store: SvelteFlowStoreState) { sourceX: fromX, sourceY: fromY, sourcePosition: fromPosition, - targetX: ((connection.position?.x ?? 0) - transform[0]) / transform[2], - targetY: ((connection.position?.y ?? 0) - transform[1]) / transform[2], + targetX: ((connection.connectionPosition?.x ?? 0) - transform[0]) / transform[2], + targetY: ((connection.connectionPosition?.y ?? 0) - transform[1]) / transform[2], targetPosition: toPosition }; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 838deab32..fe8262f0e 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -7,7 +7,8 @@ import { type ViewportHelperFunctionOptions, type Connection, type XYPosition, - type CoordinateExtent + type CoordinateExtent, + type UpdateConnection } from '@reactflow/system'; import { createMarkerIds, @@ -304,21 +305,22 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { return transformChanged; } - function updateConnection(connectionUpdate: Partial | null) { + const updateConnection: UpdateConnection = (update) => { const currentConnectionData = get(store.connection); + const nextConnectionData = currentConnectionData ? { ...initConnectionData, ...currentConnectionData, - ...connectionUpdate + ...update } : { ...initConnectionData, - ...connectionUpdate + ...update }; store.connection.set(nextConnectionData); - } + }; function cancelConnection() { updateConnection(initConnectionData); diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 9dd586e57..d65a79f22 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -8,7 +8,8 @@ import { type SnapGrid, type MarkerProps, type PanZoomInstance, - type CoordinateExtent + type CoordinateExtent, + type IsValidConnection } from '@reactflow/system'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; @@ -18,23 +19,14 @@ import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; import StepEdge from '$lib/components/edges/StepEdge.svelte'; -import type { - ConnectionData, - NodeTypes, - EdgeTypes, - EdgeLayouted, - Edge, - Node, - IsValidConnection -} from '$lib/types'; +import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted, Edge, Node } from '$lib/types'; import { infiniteExtent } from '@reactflow/utils'; export const initConnectionData = { - nodeId: null, - handleId: null, - handleType: null, - position: null, - status: null + connectionStartHandle: null, + connectionEndHandle: null, + connectionPosition: null, + connectionStatus: null }; export const initialNodeTypes = { @@ -88,5 +80,6 @@ export const initialStoreState = { elementsSelectable: writable(true), selectNodesOnDrag: writable(true), markers: readable([]), - defaultMarkerColor: writable('#b1b1b7') + defaultMarkerColor: writable('#b1b1b7'), + lib: readable('svelte') }; diff --git a/packages/svelte/src/lib/store/types.ts b/packages/svelte/src/lib/store/types.ts index 76bfb6db2..00dca1425 100644 --- a/packages/svelte/src/lib/store/types.ts +++ b/packages/svelte/src/lib/store/types.ts @@ -4,11 +4,12 @@ import type { ViewportHelperFunctionOptions, Connection, UpdateNodePositions, - CoordinateExtent + CoordinateExtent, + UpdateConnection } from '@reactflow/system'; import type { initialStoreState } from './initial-store'; -import type { Node, Edge, ConnectionData, NodeTypes, EdgeTypes, FitViewOptions } from '$lib/types'; +import type { Node, Edge, NodeTypes, EdgeTypes, FitViewOptions } from '$lib/types'; import type { Writable } from 'svelte/store'; export type SvelteFlowStoreActions = { @@ -27,7 +28,7 @@ export type SvelteFlowStoreActions = { addSelectedNodes: (ids: string[]) => void; addSelectedEdges: (ids: string[]) => void; panBy: (delta: XYPosition) => boolean; - updateConnection: (connection: Partial) => void; + updateConnection: UpdateConnection; cancelConnection: () => void; reset(): void; }; diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index 0ac194244..918547e6f 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -1,10 +1,10 @@ import type { ShortcutModifierDefinition } from '@svelte-put/shortcut'; import type { - Connection, FitViewOptionsBase, HandleType, Position, - XYPosition + XYPosition, + ConnectingHandle } from '@reactflow/system'; import type { Node } from './nodes'; @@ -14,11 +14,10 @@ export type KeyDefinitionObject = { key: string; modifier?: KeyModifier }; export type KeyDefinition = string | KeyDefinitionObject; export type ConnectionData = { - position: XYPosition | null; - nodeId: string | null; - handleId: string | null; - handleType: HandleType | null; - status: string | null; + connectionPosition: XYPosition | null; + connectionStartHandle: ConnectingHandle | null; + connectionEndHandle: ConnectingHandle | null; + connectionStatus: string | null; }; export type HandleComponentProps = { @@ -30,8 +29,3 @@ export type HandleComponentProps = { }; export type FitViewOptions = FitViewOptionsBase; - -export type IsValidConnection = ( - connection: Connection, - { fromNode, toNode }: { fromNode: Node; toNode: Node } -) => boolean; diff --git a/packages/system/src/types/general.ts b/packages/system/src/types/general.ts index 0b1412c94..0190f7df3 100644 --- a/packages/system/src/types/general.ts +++ b/packages/system/src/types/general.ts @@ -3,8 +3,9 @@ import type { D3DragEvent, Selection as D3Selection, SubjectPosition, ZoomBehavi import type { XYPosition, Rect } from './utils'; import type { BaseNode, NodeDragItem, NodeOrigin } from './nodes'; -import type { HandleType } from './handles'; +import type { ConnectingHandle, HandleType } from './handles'; import { PanZoomInstance } from './panzoom'; +import { BaseEdge } from '..'; export type Project = (position: XYPosition) => XYPosition; @@ -34,7 +35,17 @@ export enum ConnectionMode { Loose = 'loose', } +export type OnConnectStartParams = { + nodeId: string | null; + handleId: string | null; + handleType: HandleType | null; +}; + +export type OnConnectStart = (event: MouseEvent | TouchEvent, params: OnConnectStartParams) => void; export type OnConnect = (connection: Connection) => void; +export type OnConnectEnd = (event: MouseEvent | TouchEvent) => void; + +export type IsValidConnection = (edge: BaseEdge | Connection) => boolean; export type FitViewParamsBase = { nodes: NodeType[]; @@ -55,12 +66,6 @@ export type FitViewOptionsBase = { nodes?: (Partial & { id: NodeType['id'] })[]; }; -export type OnConnectStartParams = { - nodeId: string | null; - handleId: string | null; - handleType: HandleType | null; -}; - export type Viewport = { x: number; y: number; @@ -124,3 +129,10 @@ export type UpdateNodePositions = ( dragging?: boolean ) => void; export type PanBy = (delta: XYPosition) => boolean; + +export type UpdateConnection = (params: { + connectionPosition?: XYPosition | null; + connectionStatus?: ConnectionStatus | null; + connectionStartHandle?: ConnectingHandle | null; + connectionEndHandle?: ConnectingHandle | null; +}) => void; diff --git a/packages/system/src/types/handles.ts b/packages/system/src/types/handles.ts index 7e40d1e5d..be0ee6084 100644 --- a/packages/system/src/types/handles.ts +++ b/packages/system/src/types/handles.ts @@ -1,4 +1,4 @@ -import type { XYPosition, Position, Dimensions, OnConnect, Connection } from '.'; +import type { XYPosition, Position, Dimensions, OnConnect, IsValidConnection } from '.'; export type HandleType = 'source' | 'target'; @@ -14,6 +14,14 @@ export type ConnectingHandle = { handleId?: string | null; }; +export type ConnectionHandle = { + id: string | null; + type: HandleType; + nodeId: string; + x: number; + y: number; +}; + export type HandleProps = { type: HandleType; position: Position; @@ -21,6 +29,6 @@ export type HandleProps = { isConnectableStart?: boolean; isConnectableEnd?: boolean; onConnect?: OnConnect; - isValidConnection?: (connection: Connection) => boolean; + isValidConnection?: IsValidConnection; id?: string; }; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 6cccc3ded..813e54d88 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,5 +1,6 @@ export * from './graph'; export * from './utils'; export * from './marker'; +export * from './xyhandle'; export * from './xypanzoom'; export * from './xydrag'; diff --git a/packages/utils/src/xyhandle/index.ts b/packages/utils/src/xyhandle/index.ts new file mode 100644 index 000000000..69e35938e --- /dev/null +++ b/packages/utils/src/xyhandle/index.ts @@ -0,0 +1,312 @@ +import { getHostForElement, calcAutoPan, getEventPosition, pointToRendererPoint, rendererPointToPoint } from '..'; +import { + OnConnect, + OnConnectStart, + HandleType, + Connection, + ConnectionMode, + PanBy, + BaseNode, + Transform, + ConnectingHandle, + OnConnectEnd, + UpdateConnection, + IsValidConnection, + ConnectionHandle, +} from '@reactflow/system'; + +import { getClosestHandle, getConnectionStatus, getHandleLookup, getHandleType, resetRecentHandle } from './utils'; + +export type OnPointerDownParams = { + autoPanOnConnect: boolean; + connectionMode: ConnectionMode; + connectionRadius: number; + domNode: HTMLDivElement | null; + handleId: string | null; + nodeId: string; + isTarget: boolean; + nodes: BaseNode[]; + transform: Transform; + lib: string; + edgeUpdaterType?: HandleType; + updateConnection: UpdateConnection; + panBy: PanBy; + cancelConnection: () => void; + onConnectStart?: OnConnectStart; + onConnect?: OnConnect; + onConnectEnd?: OnConnectEnd; + isValidConnection?: IsValidConnection; + onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; +}; + +export type IsValidParams = { + handle: Pick | null; + connectionMode: ConnectionMode; + fromNodeId: string; + fromHandleId: string | null; + fromType: HandleType; + isValidConnection?: IsValidConnection; + doc: Document | ShadowRoot; + lib: string; +}; + +export type XYHandleInstance = { + onPointerDown: (event: MouseEvent | TouchEvent, params: OnPointerDownParams) => void; + isValid: (event: MouseEvent | TouchEvent, params: IsValidParams) => Result; +}; + +type Result = { + handleDomNode: Element | null; + isValid: boolean; + connection: Connection; + endHandle: ConnectingHandle | null; +}; + +const nullConnection: Connection = { source: null, target: null, sourceHandle: null, targetHandle: null }; + +const alwaysValid = () => true; + +function onPointerDown( + event: MouseEvent | TouchEvent, + { + connectionMode, + connectionRadius, + handleId, + nodeId, + edgeUpdaterType, + isTarget, + domNode, + nodes, + transform, + lib, + autoPanOnConnect, + panBy, + cancelConnection, + onConnectStart, + onConnect, + onConnectEnd, + isValidConnection = alwaysValid, + onEdgeUpdateEnd, + updateConnection, + }: OnPointerDownParams +) { + // when react-flow is used inside a shadow root we can't use document + const doc = getHostForElement(event.target as HTMLElement); + let autoPanId = 0; + let closestHandle: ConnectionHandle | null; + + const { x, y } = getEventPosition(event); + const clickedHandle = doc?.elementFromPoint(x, y); + const handleType = getHandleType(edgeUpdaterType, clickedHandle); + const containerBounds = domNode?.getBoundingClientRect(); + + if (!containerBounds || !handleType) { + return; + } + + let prevActiveHandle: Element; + let connectionPosition = getEventPosition(event, containerBounds); + let autoPanStarted = false; + let connection: Connection | null = null; + let isValid = false; + let handleDomNode: Element | null = null; + + const handleLookup = getHandleLookup({ + nodes, + nodeId, + handleId, + handleType, + }); + + // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas + function autoPan(): void { + if (!autoPanOnConnect || !containerBounds) { + return; + } + const [x, y] = calcAutoPan(connectionPosition, containerBounds); + + panBy({ x, y }); + autoPanId = requestAnimationFrame(autoPan); + } + + updateConnection({ + connectionPosition, + connectionStatus: null, + // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle + connectionStartHandle: { + nodeId, + handleId, + type: handleType, + }, + connectionEndHandle: null, + }); + + onConnectStart?.(event, { nodeId, handleId, handleType }); + + function onPointerMove(event: MouseEvent | TouchEvent) { + connectionPosition = getEventPosition(event, containerBounds); + closestHandle = getClosestHandle( + pointToRendererPoint(connectionPosition, transform, false, [1, 1]), + connectionRadius, + handleLookup + ); + + if (!autoPanStarted) { + autoPan(); + autoPanStarted = true; + } + + const result = isValidHandle(event, { + handle: closestHandle, + connectionMode, + fromNodeId: nodeId, + fromHandleId: handleId, + fromType: isTarget ? 'target' : 'source', + isValidConnection, + doc, + lib, + }); + + handleDomNode = result.handleDomNode; + connection = result.connection; + isValid = result.isValid; + + updateConnection({ + connectionPosition: + closestHandle && isValid + ? rendererPointToPoint( + { + x: closestHandle.x, + y: closestHandle.y, + }, + transform + ) + : connectionPosition, + connectionStatus: getConnectionStatus(!!closestHandle, isValid), + connectionEndHandle: result.endHandle, + }); + + if (!closestHandle && !isValid && !handleDomNode) { + return resetRecentHandle(prevActiveHandle, lib); + } + + if (connection.source !== connection.target && handleDomNode) { + resetRecentHandle(prevActiveHandle, lib); + prevActiveHandle = handleDomNode; + // @todo: remove the old class names "react-flow__handle-" in the next major version + handleDomNode.classList.add('connecting', `${lib}-flow__handle-connecting`); + handleDomNode.classList.toggle('valid', isValid); + handleDomNode.classList.toggle(`${lib}-flow__handle-valid`, isValid); + } + } + + function onPointerUp(event: MouseEvent | TouchEvent) { + if ((closestHandle || handleDomNode) && connection && isValid) { + onConnect?.(connection); + } + + // it's important to get a fresh reference from the store here + // in order to get the latest state of onConnectEnd + onConnectEnd?.(event); + + if (edgeUpdaterType) { + onEdgeUpdateEnd?.(event); + } + + resetRecentHandle(prevActiveHandle, lib); + cancelConnection(); + cancelAnimationFrame(autoPanId); + autoPanStarted = false; + isValid = false; + connection = null; + handleDomNode = null; + + doc.removeEventListener('mousemove', onPointerMove as EventListener); + doc.removeEventListener('mouseup', onPointerUp as EventListener); + + doc.removeEventListener('touchmove', onPointerMove as EventListener); + doc.removeEventListener('touchend', onPointerUp as EventListener); + } + + doc.addEventListener('mousemove', onPointerMove as EventListener); + doc.addEventListener('mouseup', onPointerUp as EventListener); + + doc.addEventListener('touchmove', onPointerMove as EventListener); + doc.addEventListener('touchend', onPointerUp as EventListener); +} + +// checks if and returns connection in fom of an object { source: 123, target: 312 } +function isValidHandle( + event: MouseEvent | TouchEvent, + { + handle, + connectionMode, + fromNodeId, + fromHandleId, + fromType, + doc, + lib, + isValidConnection = alwaysValid, + }: IsValidParams +) { + const isTarget = fromType === 'target'; + const handleDomNode = doc.querySelector( + `.${lib}-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` + ); + const { x, y } = getEventPosition(event); + const handleBelow = doc.elementFromPoint(x, y); + // we always want to prioritize the handle below the mouse cursor over the closest distance handle, + // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor + const handleToCheck = handleBelow?.classList.contains(`${lib}-flow__handle`) ? handleBelow : handleDomNode; + + const result: Result = { + handleDomNode: handleToCheck, + isValid: false, + connection: nullConnection, + endHandle: null, + }; + + console.log(1, result); + + if (handleToCheck) { + const handleType = getHandleType(undefined, handleToCheck); + const handleNodeId = handleToCheck.getAttribute('data-nodeid'); + const handleId = handleToCheck.getAttribute('data-handleid'); + const connectable = handleToCheck.classList.contains('connectable'); + const connectableEnd = handleToCheck.classList.contains('connectableend'); + + const connection: Connection = { + source: isTarget ? handleNodeId : fromNodeId, + sourceHandle: isTarget ? handleId : fromHandleId, + target: isTarget ? fromNodeId : handleNodeId, + targetHandle: isTarget ? fromHandleId : handleId, + }; + + result.connection = connection; + + const isConnectable = connectable && connectableEnd; + // in strict mode we don't allow target to target or source to source connections + const isValid = + isConnectable && + (connectionMode === ConnectionMode.Strict + ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') + : handleNodeId !== fromNodeId || handleId !== fromHandleId); + + if (isValid) { + result.endHandle = { + nodeId: handleNodeId as string, + handleId, + type: handleType as HandleType, + }; + + result.isValid = isValidConnection(connection); + } + } + + return result; +} + +export const XYHandle: XYHandleInstance = { + onPointerDown, + isValid: isValidHandle, +}; diff --git a/packages/core/src/components/Handle/utils.ts b/packages/utils/src/xyhandle/utils.ts similarity index 50% rename from packages/core/src/components/Handle/utils.ts rename to packages/utils/src/xyhandle/utils.ts index 1ec471a84..3677c626b 100644 --- a/packages/core/src/components/Handle/utils.ts +++ b/packages/utils/src/xyhandle/utils.ts @@ -1,31 +1,17 @@ import { internalsSymbol, - ConnectionMode, ConnectionStatus, - type ConnectingHandle, - type Connection, type HandleType, type NodeHandleBounds, type XYPosition, + type BaseNode, + type ConnectionHandle, } from '@reactflow/system'; -import { getEventPosition } from '@reactflow/utils'; - -import type { Node } from '../../types'; - -export type ConnectionHandle = { - id: string | null; - type: HandleType; - nodeId: string; - x: number; - y: number; -}; - -export type ValidConnectionFunc = (connection: Connection) => boolean; // this functions collects all handles and adds an absolute position // so that we can later find the closest handle to the mouse position export function getHandles( - node: Node, + node: BaseNode, handleBounds: NodeHandleBounds, type: HandleType, currentHandle: string @@ -75,83 +61,8 @@ export function getClosestHandle( closestHandles.find((handle) => handle.type === 'target') || closestHandles[0]; } -type Result = { - handleDomNode: Element | null; - isValid: boolean; - connection: Connection; - endHandle: ConnectingHandle | null; -}; - -const nullConnection: Connection = { source: null, target: null, sourceHandle: null, targetHandle: null }; - -// checks if and returns connection in fom of an object { source: 123, target: 312 } -export function isValidHandle( - event: MouseEvent | TouchEvent, - handle: Pick | null, - connectionMode: ConnectionMode, - fromNodeId: string, - fromHandleId: string | null, - fromType: HandleType, - isValidConnection: ValidConnectionFunc, - doc: Document | ShadowRoot -) { - const isTarget = fromType === 'target'; - const handleDomNode = doc.querySelector( - `.react-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` - ); - const { x, y } = getEventPosition(event); - const handleBelow = doc.elementFromPoint(x, y); - // we always want to prioritize the handle below the mouse cursor over the closest distance handle, - // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor - const handleToCheck = handleBelow?.classList.contains('react-flow__handle') ? handleBelow : handleDomNode; - - const result: Result = { - handleDomNode: handleToCheck, - isValid: false, - connection: nullConnection, - endHandle: null, - }; - - if (handleToCheck) { - const handleType = getHandleType(undefined, handleToCheck); - const handleNodeId = handleToCheck.getAttribute('data-nodeid'); - const handleId = handleToCheck.getAttribute('data-handleid'); - const connectable = handleToCheck.classList.contains('connectable'); - const connectableEnd = handleToCheck.classList.contains('connectableend'); - - const connection: Connection = { - source: isTarget ? handleNodeId : fromNodeId, - sourceHandle: isTarget ? handleId : fromHandleId, - target: isTarget ? fromNodeId : handleNodeId, - targetHandle: isTarget ? fromHandleId : handleId, - }; - - result.connection = connection; - - const isConnectable = connectable && connectableEnd; - // in strict mode we don't allow target to target or source to source connections - const isValid = - isConnectable && - (connectionMode === ConnectionMode.Strict - ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') - : handleNodeId !== fromNodeId || handleId !== fromHandleId); - - if (isValid) { - result.endHandle = { - nodeId: handleNodeId as string, - handleId, - type: handleType as HandleType, - }; - - result.isValid = isValidConnection(connection); - } - } - - return result; -} - type GetHandleLookupParams = { - nodes: Node[]; + nodes: BaseNode[]; nodeId: string; handleId: string | null; handleType: string; @@ -190,8 +101,8 @@ export function getHandleType( return null; } -export function resetRecentHandle(handleDomNode: Element): void { - handleDomNode?.classList.remove('valid', 'connecting', 'react-flow__handle-valid', 'react-flow__handle-connecting'); +export function resetRecentHandle(handleDomNode: Element, lib: string): void { + handleDomNode?.classList.remove('valid', 'connecting', `${lib}-flow__handle-valid`, `${lib}-flow__handle-connecting`); } export function getConnectionStatus(isInsideConnectionRadius: boolean, isHandleValid: boolean) { From b2e296901e8e1498f9098eefb35f71cf08716596 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 5 Jun 2023 11:28:19 +0200 Subject: [PATCH 0073/1093] chore(svelte): use xyhandle --- .../svelte/src/lib/components/Handle/Handle.svelte | 11 +++++++++-- packages/svelte/src/lib/types/general.ts | 3 +++ packages/utils/src/xyhandle/index.ts | 2 -- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 044b387a9..a275e81b7 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -13,12 +13,17 @@ export let type: $$Props['type'] = 'source'; export let position: $$Props['position'] = Position.Top; export let style: $$Props['style'] = undefined; + export let isConnectable: $$Props['isConnectable'] = true; + export let isConnectableStart: $$Props['isConnectableStart'] = true; + export let isConnectableEnd: $$Props['isConnectableEnd'] = true; + + let className: $$Props['class'] = undefined; export { className as class }; const isTarget = type === 'target'; const nodeId = getContext('svelteflow__node_id'); - const connectable = getContext('svelteflow__node_connectable'); + // const connectable = getContext('svelteflow__node_connectable'); const handleId = id || null; const dispatch = createEventDispatcher(); @@ -87,7 +92,9 @@ ])} class:source={!isTarget} class:target={isTarget} - class:connectable + class:connectableStart={isConnectableStart} + class:isConnectableEnd={isConnectableEnd} + class:connectable={isConnectable} on:mousedown={onPointerDown} on:touchstart={onPointerDown} {style} diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index 918547e6f..c7a9bb92f 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -26,6 +26,9 @@ export type HandleComponentProps = { id?: string; class?: string; style?: string; + isConnectable?: boolean;, + isConnectableStart?: boolean;, + isConnectableEnd?: boolean;, }; export type FitViewOptions = FitViewOptionsBase; diff --git a/packages/utils/src/xyhandle/index.ts b/packages/utils/src/xyhandle/index.ts index 69e35938e..f5360180b 100644 --- a/packages/utils/src/xyhandle/index.ts +++ b/packages/utils/src/xyhandle/index.ts @@ -266,8 +266,6 @@ function isValidHandle( endHandle: null, }; - console.log(1, result); - if (handleToCheck) { const handleType = getHandleType(undefined, handleToCheck); const handleNodeId = handleToCheck.getAttribute('data-nodeid'); From 8354759f57bec8bc17129feb9fa234956fad1aed Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 5 Jun 2023 15:40:18 +0200 Subject: [PATCH 0074/1093] refactor(packages): change package structure --- README.md | 2 +- .../cypress/components/hooks/useEdges.cy.tsx | 2 +- .../cypress/components/hooks/useNodes.cy.tsx | 2 +- .../hooks/useNodesInitialized.cy.tsx | 2 +- .../hooks/useOnViewportChange.cy.tsx | 2 +- .../components/hooks/useViewport.cy.tsx | 2 +- .../components/reactflow/basic-props.cy.tsx | 2 +- .../reactflow/multiple-instance.cy.tsx | 2 +- .../components/reactflow/uncontrolled.cy.tsx | 2 +- .../components/reactflow/view-props.cy.tsx | 2 +- .../components/utils/graph-utils.cy.ts | 2 +- .../vite-app/cypress/fixtures/simpleflow.ts | 2 +- .../cypress/support/ControlledFlow.tsx | 2 +- .../vite-app/cypress/support/component.ts | 4 +- examples/vite-app/package.json | 7 +- .../src/examples/Backgrounds/index.tsx | 5 +- .../vite-app/src/examples/Basic/index.tsx | 5 +- .../src/examples/CancelConnection/data.ts | 2 +- .../src/examples/CancelConnection/index.tsx | 15 +- .../examples/ControlledUncontrolled/index.tsx | 5 +- .../CustomConnectionLine/ConnectionLine.tsx | 2 +- .../examples/CustomConnectionLine/index.tsx | 5 +- .../src/examples/CustomMiniMapNode/index.tsx | 5 +- .../examples/CustomNode/ColorSelectorNode.tsx | 2 +- .../src/examples/CustomNode/index.tsx | 5 +- .../src/examples/DefaultNodes/index.tsx | 5 +- .../examples/DragHandle/DragHandleNode.tsx | 5 +- .../src/examples/DragHandle/index.tsx | 2 +- .../vite-app/src/examples/DragNDrop/index.tsx | 5 +- .../EasyConnect/CustomConnectionLine.tsx | 2 +- .../src/examples/EasyConnect/CustomNode.tsx | 2 +- .../src/examples/EasyConnect/FloatingEdge.tsx | 2 +- .../src/examples/EasyConnect/index.tsx | 4 +- .../src/examples/EasyConnect/utils.tsx | 2 +- .../src/examples/EdgeRenderer/CustomEdge.tsx | 2 +- .../src/examples/EdgeRenderer/CustomEdge2.tsx | 2 +- .../src/examples/EdgeRenderer/index.tsx | 5 +- .../src/examples/EdgeRouting/index.tsx | 2 +- .../vite-app/src/examples/EdgeTypes/index.tsx | 5 +- .../vite-app/src/examples/EdgeTypes/utils.ts | 2 +- .../src/examples/Edges/CustomEdge.tsx | 2 +- .../src/examples/Edges/CustomEdge2.tsx | 2 +- .../vite-app/src/examples/Edges/index.tsx | 5 +- .../vite-app/src/examples/Empty/index.tsx | 5 +- .../vite-app/src/examples/Figma/index.tsx | 2 +- .../FloatingEdges/FloatingConnectionLine.tsx | 33 +- .../examples/FloatingEdges/FloatingEdge.tsx | 2 +- .../src/examples/FloatingEdges/index.tsx | 5 +- .../src/examples/FloatingEdges/utils.ts | 2 +- .../vite-app/src/examples/Hidden/index.tsx | 12 +- .../src/examples/Interaction/index.tsx | 7 +- .../src/examples/InteractiveMinimap/index.tsx | 8 +- .../src/examples/Intersection/index.tsx | 5 +- .../vite-app/src/examples/Layouting/index.tsx | 5 +- .../examples/Layouting/initial-elements.ts | 2 +- .../src/examples/MultiFlows/index.tsx | 6 +- .../src/examples/NestedNodes/index.tsx | 5 +- .../examples/NodeResizer/CustomResizer.tsx | 2 +- .../examples/NodeResizer/DefaultResizer.tsx | 2 +- .../NodeResizer/HorizontalResizer.tsx | 2 +- .../examples/NodeResizer/VerticalResizer.tsx | 2 +- .../src/examples/NodeResizer/index.tsx | 14 +- .../src/examples/NodeToolbar/CustomNode.tsx | 2 +- .../NodeToolbar/SelectedNodesToolbar.tsx | 2 +- .../src/examples/NodeToolbar/index.tsx | 5 +- .../src/examples/NodeTypeChange/index.tsx | 2 +- .../examples/NodeTypesObjectChange/index.tsx | 5 +- .../vite-app/src/examples/Overview/index.tsx | 9 +- .../src/examples/Provider/Sidebar.tsx | 2 +- .../vite-app/src/examples/Provider/index.tsx | 5 +- .../src/examples/SaveRestore/Controls.tsx | 2 +- .../src/examples/SaveRestore/index.tsx | 11 +- .../vite-app/src/examples/Stress/index.tsx | 5 +- .../vite-app/src/examples/Stress/utils.ts | 2 +- .../src/examples/Subflow/DebugNode.tsx | 2 +- .../vite-app/src/examples/Subflow/index.tsx | 5 +- .../vite-app/src/examples/Switch/index.tsx | 2 +- .../src/examples/TouchDevice/index.tsx | 2 +- .../src/examples/Undirectional/CustomNode.tsx | 5 +- .../src/examples/Undirectional/index.tsx | 5 +- .../src/examples/UpdatableEdge/index.tsx | 5 +- .../src/examples/UpdateNode/index.tsx | 2 +- .../src/examples/UseKeyPress/index.tsx | 2 +- .../src/examples/UseNodesInit/index.tsx | 5 +- .../UseOnSelectionChange/CustomNode.tsx | 4 +- .../examples/UseOnSelectionChange/index.tsx | 9 +- .../src/examples/UseReactFlow/index.tsx | 5 +- .../UseUpdateNodeInternals/CustomNode.tsx | 2 +- .../examples/UseUpdateNodeInternals/index.tsx | 5 +- .../examples/Validation/ConnectionStatus.tsx | 2 +- .../src/examples/Validation/index.tsx | 8 +- examples/vite-app/src/main.tsx | 2 +- examples/vite-app/vite.config.ts | 2 +- package.json | 2 +- packages/background/.eslintrc.js | 4 - packages/background/CHANGELOG.md | 216 ----- packages/background/README.md | 10 - packages/background/package.json | 65 -- packages/background/tsconfig.json | 6 - packages/controls/.eslintrc.js | 4 - packages/controls/CHANGELOG.md | 212 ----- packages/controls/README.md | 10 - packages/controls/package.json | 65 -- packages/controls/src/style.css | 36 - packages/controls/tsconfig.json | 6 - packages/core/.eslintrc.js | 4 - packages/core/tsconfig.json | 6 - packages/edge-utils/.eslintrc.js | 4 - packages/edge-utils/README.md | 10 - packages/edge-utils/package.json | 59 -- packages/edge-utils/tsconfig.json | 6 - packages/minimap/.eslintrc.js | 4 - packages/minimap/CHANGELOG.md | 255 ------ packages/minimap/README.md | 10 - packages/minimap/package.json | 70 -- packages/minimap/src/style.css | 3 - packages/minimap/tsconfig.json | 6 - packages/node-resizer/.eslintrc.js | 4 - packages/node-resizer/CHANGELOG.md | 123 --- packages/node-resizer/README.md | 9 - packages/node-resizer/package.json | 72 -- packages/node-resizer/tsconfig.json | 6 - packages/node-toolbar/.eslintrc.js | 4 - packages/node-toolbar/CHANGELOG.md | 167 ---- packages/node-toolbar/README.md | 10 - packages/node-toolbar/package.json | 65 -- packages/node-toolbar/tsconfig.json | 6 - packages/react/.eslintrc.js | 4 + packages/{core => react}/CHANGELOG.md | 0 packages/{core => react}/README.md | 0 packages/{core => react}/package.json | 19 +- .../Background}/Background.tsx | 7 +- .../Background}/Patterns.tsx | 0 .../Background}/index.tsx | 0 .../Background}/types.ts | 0 .../Controls}/ControlButton.tsx | 0 .../Controls}/Controls.tsx | 6 +- .../Controls}/Icons/FitView.tsx | 0 .../Controls}/Icons/Lock.tsx | 0 .../Controls}/Icons/Minus.tsx | 0 .../Controls}/Icons/Plus.tsx | 0 .../Controls}/Icons/Unlock.tsx | 0 .../additional-components/Controls}/index.tsx | 0 .../additional-components/Controls/style.css | 0 .../additional-components/Controls}/types.ts | 4 +- .../MiniMap}/MiniMap.tsx | 10 +- .../MiniMap}/MiniMapNode.tsx | 0 .../additional-components/MiniMap}/index.tsx | 0 .../additional-components/MiniMap}/types.ts | 4 +- .../NodeResizer}/NodeResizer.tsx | 0 .../NodeResizer}/ResizeControl.tsx | 15 +- .../NodeResizer}/index.tsx | 0 .../NodeResizer}/types.ts | 0 .../NodeResizer}/utils.ts | 0 .../NodeToolbar}/NodeToolbar.tsx | 15 +- .../NodeToolbar}/NodeToolbarPortal.tsx | 4 +- .../NodeToolbar}/index.tsx | 0 .../NodeToolbar}/types.ts | 2 +- .../react/src/additional-components/index.ts | 5 + .../src/components/A11yDescriptions/index.tsx | 0 .../src/components/Attribution/index.tsx | 2 +- .../src/components/ConnectionLine/index.tsx | 5 +- .../components/EdgeLabelRenderer/index.tsx | 0 .../src/components/Edges/BaseEdge.tsx | 2 +- .../src/components/Edges/BezierEdge.tsx | 3 +- .../src/components/Edges/EdgeAnchor.tsx | 2 +- .../src/components/Edges/EdgeText.tsx | 2 +- .../src/components/Edges/SimpleBezierEdge.tsx | 3 +- .../src/components/Edges/SmoothStepEdge.tsx | 3 +- .../src/components/Edges/StepEdge.tsx | 0 .../src/components/Edges/StraightEdge.tsx | 2 +- .../src/components/Edges/index.ts | 0 .../src/components/Edges/utils.ts | 4 +- .../src/components/Edges/wrapEdge.tsx | 3 +- .../src/components/Handle/index.tsx | 14 +- .../src/components/Nodes/DefaultNode.tsx | 2 +- .../src/components/Nodes/GroupNode.tsx | 0 .../src/components/Nodes/InputNode.tsx | 2 +- .../src/components/Nodes/OutputNode.tsx | 2 +- .../src/components/Nodes/utils.ts | 4 +- .../src/components/Nodes/wrapNode.tsx | 3 +- .../src/components/NodesSelection/index.tsx | 5 +- .../src/components/Panel/index.tsx | 2 +- .../components/ReactFlowProvider/index.tsx | 2 +- .../components/SelectionListener/index.tsx | 0 .../src/components/StoreUpdater/index.tsx | 2 +- .../src/components/UserSelection/index.tsx | 0 .../EdgeRenderer/MarkerDefinitions.tsx | 3 +- .../container/EdgeRenderer/MarkerSymbols.tsx | 2 +- .../src/container/EdgeRenderer/index.tsx | 3 +- .../src/container/EdgeRenderer/utils.ts | 6 +- .../src/container/FlowRenderer/index.tsx | 0 .../src/container/GraphView/index.tsx | 0 .../src/container/NodeRenderer/index.tsx | 3 +- .../src/container/NodeRenderer/utils.ts | 2 +- .../src/container/Pane/index.tsx | 3 +- .../src/container/ReactFlow/Wrapper.tsx | 0 .../src/container/ReactFlow/index.tsx | 4 +- .../src/container/ReactFlow/utils.ts | 3 +- .../src/container/Viewport/index.tsx | 0 .../src/container/ZoomPane/index.tsx | 13 +- .../src/contexts/NodeIdContext.ts | 0 .../src/contexts/RFStoreContext.ts | 0 packages/{core => react}/src/custom.d.ts | 0 packages/{core => react}/src/hooks/useDrag.ts | 2 +- .../{core => react}/src/hooks/useEdges.ts | 0 .../src/hooks/useGlobalKeyHandler.ts | 12 +- .../{core => react}/src/hooks/useKeyPress.ts | 9 +- .../{core => react}/src/hooks/useNodes.ts | 1 - .../src/hooks/useNodesEdgesState.ts | 0 .../src/hooks/useNodesInitialized.ts | 2 +- .../src/hooks/useOnInitHandler.ts | 0 .../src/hooks/useOnSelectionChange.ts | 0 .../src/hooks/useOnViewportChange.ts | 2 +- .../{core => react}/src/hooks/useReactFlow.ts | 3 +- .../src/hooks/useResizeHandler.ts | 3 +- .../{core => react}/src/hooks/useStore.ts | 2 +- .../src/hooks/useUpdateNodeInternals.ts | 2 +- .../src/hooks/useUpdateNodePositions.ts | 2 +- .../{core => react}/src/hooks/useViewport.ts | 2 +- .../src/hooks/useViewportHelper.ts | 3 +- .../src/hooks/useVisibleEdges.ts | 3 +- .../src/hooks/useVisibleNodes.ts | 2 +- packages/{core => react}/src/index.ts | 23 +- packages/{core => react}/src/store/index.ts | 10 +- .../{core => react}/src/store/initialState.ts | 3 +- packages/{core => react}/src/store/utils.ts | 9 +- packages/{core => react}/src/styles/base.css | 0 packages/{core => react}/src/styles/index.ts | 0 packages/{core => react}/src/styles/init.css | 4 + .../src/styles/node-resizer.css} | 2 + packages/{core => react}/src/styles/style.css | 38 + packages/{core => react}/src/types/changes.ts | 3 +- .../src/types/component-props.ts | 2 +- packages/{core => react}/src/types/edges.ts | 2 +- packages/{core => react}/src/types/general.ts | 2 +- packages/{core => react}/src/types/index.ts | 0 .../{core => react}/src/types/instance.ts | 2 +- packages/{core => react}/src/types/nodes.ts | 2 +- packages/{core => react}/src/types/store.ts | 2 +- packages/{core => react}/src/utils/changes.ts | 0 packages/{core => react}/src/utils/general.ts | 3 +- packages/{core => react}/src/utils/index.ts | 0 packages/{reactflow => react}/tsconfig.json | 4 +- packages/reactflow/.eslintrc.js | 4 - packages/reactflow/CHANGELOG.md | 496 ----------- packages/reactflow/README.md | 128 --- packages/reactflow/package.json | 68 -- packages/reactflow/src/base.css | 4 - packages/reactflow/src/index.ts | 8 - packages/reactflow/src/style.css | 4 - packages/svelte/package.json | 6 +- packages/svelte/src/lib/actions/drag/index.ts | 2 +- packages/svelte/src/lib/actions/zoom/index.ts | 5 +- .../src/lib/components/Attribution/types.ts | 2 +- .../components/EdgeWrapper/EdgeWrapper.svelte | 4 +- .../src/lib/components/Handle/Handle.svelte | 11 +- .../NodeSelection/NodeSelection.svelte | 2 +- .../components/NodeWrapper/NodeWrapper.svelte | 2 +- .../src/lib/components/NodeWrapper/types.ts | 2 +- .../lib/components/edges/BezierEdge.svelte | 2 +- .../components/edges/SmoothStepEdge.svelte | 2 +- .../src/lib/components/edges/StepEdge.svelte | 2 +- .../lib/components/edges/StraightEdge.svelte | 2 +- .../lib/components/nodes/DefaultNode.svelte | 2 +- .../src/lib/components/nodes/InputNode.svelte | 2 +- .../lib/components/nodes/OutputNode.svelte | 2 +- .../MarkerDefinition/Marker.svelte | 2 +- .../src/lib/container/EdgeRenderer/utils.ts | 4 +- .../NodeRenderer/NodeRenderer.svelte | 4 +- .../svelte/src/lib/container/Pane/Pane.svelte | 4 +- .../svelte/src/lib/container/Panel/types.ts | 2 +- .../container/SvelteFlow/SvelteFlow.svelte | 2 +- .../src/lib/container/SvelteFlow/types.ts | 2 +- .../svelte/src/lib/container/Zoom/Zoom.svelte | 8 +- .../svelte/src/lib/container/Zoom/types.ts | 2 +- .../svelte/src/lib/hooks/useSvelteFlow.ts | 4 +- packages/svelte/src/lib/index.ts | 6 +- .../svelte/src/lib/plugins/Controls/types.ts | 2 +- .../src/lib/plugins/Minimap/Minimap.svelte | 6 +- .../svelte/src/lib/plugins/Minimap/types.ts | 2 +- .../svelte/src/lib/store/connection-path.ts | 4 +- .../svelte/src/lib/store/edges-layouted.ts | 4 +- packages/svelte/src/lib/store/index.ts | 4 +- .../svelte/src/lib/store/initial-store.ts | 4 +- packages/svelte/src/lib/store/types.ts | 2 +- packages/svelte/src/lib/types/edges.ts | 2 +- packages/svelte/src/lib/types/general.ts | 8 +- packages/svelte/src/lib/types/nodes.ts | 2 +- packages/svelte/src/lib/utils/index.ts | 4 +- .../customnode/CustomNode/Custom.svelte | 2 +- .../routes/overview/CustomEdge/Custom.svelte | 2 +- .../routes/overview/CustomNode/Custom.svelte | 2 +- .../svelte/src/routes/validation/+page.svelte | 2 +- packages/system/.eslintrc.js | 2 +- packages/system/README.md | 4 +- packages/system/package.json | 39 +- packages/system/src/constants.ts | 2 + packages/system/src/index.ts | 8 +- packages/system/src/types/nodes.ts | 2 +- packages/system/src/types/panzoom.ts | 2 + .../src/utils/edges}/bezier-edge.ts | 2 +- .../src => system/src/utils/edges}/general.ts | 2 +- .../src => system/src/utils/edges}/index.ts | 0 .../src/utils/edges}/smoothstep-edge.ts | 2 +- .../src/utils/edges}/straight-edge.ts | 0 .../{utils/src => system/src/utils}/graph.ts | 4 +- packages/system/src/utils/index.ts | 4 + .../{utils/src => system/src/utils}/marker.ts | 2 +- .../{utils/src => system/src/utils}/utils.ts | 2 +- .../{utils => system}/src/xydrag/XYDrag.ts | 8 +- .../{utils => system}/src/xydrag/index.ts | 0 .../{utils => system}/src/xydrag/utils.ts | 2 +- .../{utils => system}/src/xyhandle/index.ts | 33 +- .../{utils => system}/src/xyhandle/utils.ts | 4 +- .../src/xypanzoom/XYPanZoom.ts | 6 +- .../src/xypanzoom/eventhandler.ts | 18 +- .../{utils => system}/src/xypanzoom/filter.ts | 4 +- .../{utils => system}/src/xypanzoom/index.ts | 0 .../{utils => system}/src/xypanzoom/utils.ts | 3 +- packages/system/tsconfig.json | 4 +- packages/utils/.eslintrc.js | 4 - packages/utils/README.md | 10 - packages/utils/package.json | 59 -- packages/utils/src/index.ts | 6 - packages/utils/tsconfig.json | 6 - pnpm-lock.yaml | 784 ++++++++---------- tooling/eslint-config/package.json | 2 +- tooling/rollup-config/package.json | 2 +- tooling/rollup-config/src/index.js | 6 +- tooling/tsconfig/package.json | 2 +- turbo.json | 3 +- 332 files changed, 965 insertions(+), 3229 deletions(-) delete mode 100644 packages/background/.eslintrc.js delete mode 100644 packages/background/CHANGELOG.md delete mode 100644 packages/background/README.md delete mode 100644 packages/background/package.json delete mode 100644 packages/background/tsconfig.json delete mode 100644 packages/controls/.eslintrc.js delete mode 100644 packages/controls/CHANGELOG.md delete mode 100644 packages/controls/README.md delete mode 100644 packages/controls/package.json delete mode 100644 packages/controls/src/style.css delete mode 100644 packages/controls/tsconfig.json delete mode 100644 packages/core/.eslintrc.js delete mode 100644 packages/core/tsconfig.json delete mode 100644 packages/edge-utils/.eslintrc.js delete mode 100644 packages/edge-utils/README.md delete mode 100644 packages/edge-utils/package.json delete mode 100644 packages/edge-utils/tsconfig.json delete mode 100644 packages/minimap/.eslintrc.js delete mode 100644 packages/minimap/CHANGELOG.md delete mode 100644 packages/minimap/README.md delete mode 100644 packages/minimap/package.json delete mode 100644 packages/minimap/src/style.css delete mode 100644 packages/minimap/tsconfig.json delete mode 100644 packages/node-resizer/.eslintrc.js delete mode 100644 packages/node-resizer/CHANGELOG.md delete mode 100644 packages/node-resizer/README.md delete mode 100644 packages/node-resizer/package.json delete mode 100644 packages/node-resizer/tsconfig.json delete mode 100644 packages/node-toolbar/.eslintrc.js delete mode 100644 packages/node-toolbar/CHANGELOG.md delete mode 100644 packages/node-toolbar/README.md delete mode 100644 packages/node-toolbar/package.json delete mode 100644 packages/node-toolbar/tsconfig.json create mode 100644 packages/react/.eslintrc.js rename packages/{core => react}/CHANGELOG.md (100%) rename packages/{core => react}/README.md (100%) rename packages/{core => react}/package.json (75%) rename packages/{background/src => react/src/additional-components/Background}/Background.tsx (94%) rename packages/{background/src => react/src/additional-components/Background}/Patterns.tsx (100%) rename packages/{background/src => react/src/additional-components/Background}/index.tsx (100%) rename packages/{background/src => react/src/additional-components/Background}/types.ts (100%) rename packages/{controls/src => react/src/additional-components/Controls}/ControlButton.tsx (100%) rename packages/{controls/src => react/src/additional-components/Controls}/Controls.tsx (93%) rename packages/{controls/src => react/src/additional-components/Controls}/Icons/FitView.tsx (100%) rename packages/{controls/src => react/src/additional-components/Controls}/Icons/Lock.tsx (100%) rename packages/{controls/src => react/src/additional-components/Controls}/Icons/Minus.tsx (100%) rename packages/{controls/src => react/src/additional-components/Controls}/Icons/Plus.tsx (100%) rename packages/{controls/src => react/src/additional-components/Controls}/Icons/Unlock.tsx (100%) rename packages/{controls/src => react/src/additional-components/Controls}/index.tsx (100%) create mode 100644 packages/react/src/additional-components/Controls/style.css rename packages/{controls/src => react/src/additional-components/Controls}/types.ts (82%) rename packages/{minimap/src => react/src/additional-components/MiniMap}/MiniMap.tsx (97%) rename packages/{minimap/src => react/src/additional-components/MiniMap}/MiniMapNode.tsx (100%) rename packages/{minimap/src => react/src/additional-components/MiniMap}/index.tsx (100%) rename packages/{minimap/src => react/src/additional-components/MiniMap}/types.ts (92%) rename packages/{node-resizer/src => react/src/additional-components/NodeResizer}/NodeResizer.tsx (100%) rename packages/{node-resizer/src => react/src/additional-components/NodeResizer}/ResizeControl.tsx (95%) rename packages/{node-resizer/src => react/src/additional-components/NodeResizer}/index.tsx (100%) rename packages/{node-resizer/src => react/src/additional-components/NodeResizer}/types.ts (100%) rename packages/{node-resizer/src => react/src/additional-components/NodeResizer}/utils.ts (100%) rename packages/{node-toolbar/src => react/src/additional-components/NodeToolbar}/NodeToolbar.tsx (93%) rename packages/{node-toolbar/src => react/src/additional-components/NodeToolbar}/NodeToolbarPortal.tsx (80%) rename packages/{node-toolbar/src => react/src/additional-components/NodeToolbar}/index.tsx (100%) rename packages/{node-toolbar/src => react/src/additional-components/NodeToolbar}/types.ts (85%) create mode 100644 packages/react/src/additional-components/index.ts rename packages/{core => react}/src/components/A11yDescriptions/index.tsx (100%) rename packages/{core => react}/src/components/Attribution/index.tsx (90%) rename packages/{core => react}/src/components/ConnectionLine/index.tsx (98%) rename packages/{core => react}/src/components/EdgeLabelRenderer/index.tsx (100%) rename packages/{core => react}/src/components/Edges/BaseEdge.tsx (96%) rename packages/{core => react}/src/components/Edges/BezierEdge.tsx (88%) rename packages/{core => react}/src/components/Edges/EdgeAnchor.tsx (96%) rename packages/{core => react}/src/components/Edges/EdgeText.tsx (97%) rename packages/{core => react}/src/components/Edges/SimpleBezierEdge.tsx (96%) rename packages/{core => react}/src/components/Edges/SmoothStepEdge.tsx (92%) rename packages/{core => react}/src/components/Edges/StepEdge.tsx (100%) rename packages/{core => react}/src/components/Edges/StraightEdge.tsx (94%) rename packages/{core => react}/src/components/Edges/index.ts (100%) rename packages/{core => react}/src/components/Edges/utils.ts (82%) rename packages/{core => react}/src/components/Edges/wrapEdge.tsx (98%) rename packages/{core => react}/src/components/Handle/index.tsx (96%) rename packages/{core => react}/src/components/Nodes/DefaultNode.tsx (89%) rename packages/{core => react}/src/components/Nodes/GroupNode.tsx (100%) rename packages/{core => react}/src/components/Nodes/InputNode.tsx (85%) rename packages/{core => react}/src/components/Nodes/OutputNode.tsx (85%) rename packages/{core => react}/src/components/Nodes/utils.ts (93%) rename packages/{core => react}/src/components/Nodes/wrapNode.tsx (98%) rename packages/{core => react}/src/components/NodesSelection/index.tsx (94%) rename packages/{core => react}/src/components/Panel/index.tsx (93%) rename packages/{core => react}/src/components/ReactFlowProvider/index.tsx (93%) rename packages/{core => react}/src/components/SelectionListener/index.tsx (100%) rename packages/{core => react}/src/components/StoreUpdater/index.tsx (99%) rename packages/{core => react}/src/components/UserSelection/index.tsx (100%) rename packages/{core => react}/src/container/EdgeRenderer/MarkerDefinitions.tsx (95%) rename packages/{core => react}/src/container/EdgeRenderer/MarkerSymbols.tsx (93%) rename packages/{core => react}/src/container/EdgeRenderer/index.tsx (98%) rename packages/{core => react}/src/container/EdgeRenderer/utils.ts (96%) rename packages/{core => react}/src/container/FlowRenderer/index.tsx (100%) rename packages/{core => react}/src/container/GraphView/index.tsx (100%) rename packages/{core => react}/src/container/NodeRenderer/index.tsx (97%) rename packages/{core => react}/src/container/NodeRenderer/utils.ts (96%) rename packages/{core => react}/src/container/Pane/index.tsx (98%) rename packages/{core => react}/src/container/ReactFlow/Wrapper.tsx (100%) rename packages/{core => react}/src/container/ReactFlow/index.tsx (99%) rename packages/{core => react}/src/container/ReactFlow/utils.ts (92%) rename packages/{core => react}/src/container/Viewport/index.tsx (100%) rename packages/{core => react}/src/container/ZoomPane/index.tsx (89%) rename packages/{core => react}/src/contexts/NodeIdContext.ts (100%) rename packages/{core => react}/src/contexts/RFStoreContext.ts (100%) rename packages/{core => react}/src/custom.d.ts (100%) rename packages/{core => react}/src/hooks/useDrag.ts (96%) rename packages/{core => react}/src/hooks/useEdges.ts (100%) rename packages/{core => react}/src/hooks/useGlobalKeyHandler.ts (86%) rename packages/{core => react}/src/hooks/useKeyPress.ts (96%) rename packages/{core => react}/src/hooks/useNodes.ts (99%) rename packages/{core => react}/src/hooks/useNodesEdgesState.ts (100%) rename packages/{core => react}/src/hooks/useNodesInitialized.ts (93%) rename packages/{core => react}/src/hooks/useOnInitHandler.ts (100%) rename packages/{core => react}/src/hooks/useOnSelectionChange.ts (100%) rename packages/{core => react}/src/hooks/useOnViewportChange.ts (91%) rename packages/{core => react}/src/hooks/useReactFlow.ts (98%) rename packages/{core => react}/src/hooks/useResizeHandler.ts (91%) rename packages/{core => react}/src/hooks/useStore.ts (95%) rename packages/{core => react}/src/hooks/useUpdateNodeInternals.ts (97%) rename packages/{core => react}/src/hooks/useUpdateNodePositions.ts (97%) rename packages/{core => react}/src/hooks/useViewport.ts (89%) rename packages/{core => react}/src/hooks/useViewportHelper.ts (95%) rename packages/{core => react}/src/hooks/useVisibleEdges.ts (96%) rename packages/{core => react}/src/hooks/useVisibleNodes.ts (91%) rename packages/{core => react}/src/index.ts (88%) rename packages/{core => react}/src/store/index.ts (98%) rename packages/{core => react}/src/store/initialState.ts (92%) rename packages/{core => react}/src/store/utils.ts (96%) rename packages/{core => react}/src/styles/base.css (100%) rename packages/{core => react}/src/styles/index.ts (100%) rename packages/{core => react}/src/styles/init.css (98%) rename packages/{node-resizer/src/style.css => react/src/styles/node-resizer.css} (99%) rename packages/{core => react}/src/styles/style.css (66%) rename packages/{core => react}/src/types/changes.ts (95%) rename packages/{core => react}/src/types/component-props.ts (99%) rename packages/{core => react}/src/types/edges.ts (99%) rename packages/{core => react}/src/types/general.ts (98%) rename packages/{core => react}/src/types/index.ts (100%) rename packages/{core => react}/src/types/instance.ts (97%) rename packages/{core => react}/src/types/nodes.ts (96%) rename packages/{core => react}/src/types/store.ts (99%) rename packages/{core => react}/src/utils/changes.ts (100%) rename packages/{core => react}/src/utils/general.ts (95%) rename packages/{core => react}/src/utils/index.ts (100%) rename packages/{reactflow => react}/tsconfig.json (51%) delete mode 100644 packages/reactflow/.eslintrc.js delete mode 100644 packages/reactflow/CHANGELOG.md delete mode 100644 packages/reactflow/README.md delete mode 100644 packages/reactflow/package.json delete mode 100644 packages/reactflow/src/base.css delete mode 100644 packages/reactflow/src/index.ts delete mode 100644 packages/reactflow/src/style.css rename packages/{edge-utils/src => system/src/utils/edges}/bezier-edge.ts (98%) rename packages/{edge-utils/src => system/src/utils/edges}/general.ts (94%) rename packages/{edge-utils/src => system/src/utils/edges}/index.ts (100%) rename packages/{edge-utils/src => system/src/utils/edges}/smoothstep-edge.ts (99%) rename packages/{edge-utils/src => system/src/utils/edges}/straight-edge.ts (100%) rename packages/{utils/src => system/src/utils}/graph.ts (99%) create mode 100644 packages/system/src/utils/index.ts rename packages/{utils/src => system/src/utils}/marker.ts (97%) rename packages/{utils/src => system/src/utils}/utils.ts (99%) rename packages/{utils => system}/src/xydrag/XYDrag.ts (99%) rename packages/{utils => system}/src/xydrag/index.ts (100%) rename packages/{utils => system}/src/xydrag/utils.ts (96%) rename packages/{utils => system}/src/xyhandle/index.ts (94%) rename packages/{utils => system}/src/xyhandle/utils.ts (98%) rename packages/{utils => system}/src/xypanzoom/XYPanZoom.ts (99%) rename packages/{utils => system}/src/xypanzoom/eventhandler.ts (96%) rename packages/{utils => system}/src/xypanzoom/filter.ts (95%) rename packages/{utils => system}/src/xypanzoom/index.ts (100%) rename packages/{utils => system}/src/xypanzoom/utils.ts (92%) delete mode 100644 packages/utils/.eslintrc.js delete mode 100644 packages/utils/README.md delete mode 100644 packages/utils/package.json delete mode 100644 packages/utils/src/index.ts delete mode 100644 packages/utils/tsconfig.json diff --git a/README.md b/README.md index 6962878c7..bd25d0f91 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ import ReactFlow, { useNodesState, useEdgesState, addEdge, -} from 'reactflow'; +} from '@xyflow/react'; import 'reactflow/dist/style.css'; diff --git a/examples/vite-app/cypress/components/hooks/useEdges.cy.tsx b/examples/vite-app/cypress/components/hooks/useEdges.cy.tsx index 021dc4207..d64d9dfd0 100644 --- a/examples/vite-app/cypress/components/hooks/useEdges.cy.tsx +++ b/examples/vite-app/cypress/components/hooks/useEdges.cy.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react'; -import ReactFlow, { Edge, useEdges } from 'reactflow'; +import ReactFlow, { Edge, useEdges } from '@xyflow/react'; import { nodes as initialNodes, edges as initialEdges } from '../../fixtures/simpleflow'; diff --git a/examples/vite-app/cypress/components/hooks/useNodes.cy.tsx b/examples/vite-app/cypress/components/hooks/useNodes.cy.tsx index e80947dc1..43b7c0714 100644 --- a/examples/vite-app/cypress/components/hooks/useNodes.cy.tsx +++ b/examples/vite-app/cypress/components/hooks/useNodes.cy.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react'; -import ReactFlow, { Node, useNodes } from 'reactflow'; +import ReactFlow, { Node, useNodes } from '@xyflow/react'; import { nodes } from '../../fixtures/simpleflow'; diff --git a/examples/vite-app/cypress/components/hooks/useNodesInitialized.cy.tsx b/examples/vite-app/cypress/components/hooks/useNodesInitialized.cy.tsx index d7082b1f8..e70a68c8a 100644 --- a/examples/vite-app/cypress/components/hooks/useNodesInitialized.cy.tsx +++ b/examples/vite-app/cypress/components/hooks/useNodesInitialized.cy.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { useNodesInitialized } from 'reactflow'; +import ReactFlow, { useNodesInitialized } from '@xyflow/react'; import { nodes } from '../../fixtures/simpleflow'; import ControlledFlow from '../../support/ControlledFlow'; diff --git a/examples/vite-app/cypress/components/hooks/useOnViewportChange.cy.tsx b/examples/vite-app/cypress/components/hooks/useOnViewportChange.cy.tsx index 2f6edd8e7..22da0e8ec 100644 --- a/examples/vite-app/cypress/components/hooks/useOnViewportChange.cy.tsx +++ b/examples/vite-app/cypress/components/hooks/useOnViewportChange.cy.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { useOnViewportChange, Viewport } from 'reactflow'; +import ReactFlow, { useOnViewportChange, Viewport } from '@xyflow/react'; describe('useOnViewportChange.cy.tsx', () => { it('listen to viewport drag', () => { diff --git a/examples/vite-app/cypress/components/hooks/useViewport.cy.tsx b/examples/vite-app/cypress/components/hooks/useViewport.cy.tsx index cf57f7c5a..7e2c8b6b3 100644 --- a/examples/vite-app/cypress/components/hooks/useViewport.cy.tsx +++ b/examples/vite-app/cypress/components/hooks/useViewport.cy.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { useViewport, Viewport } from 'reactflow'; +import ReactFlow, { useViewport, Viewport } from '@xyflow/react'; describe('useViewport.cy.tsx', () => { it('handles drag', () => { diff --git a/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx b/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx index d777531ec..30bf86b93 100644 --- a/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx +++ b/examples/vite-app/cypress/components/reactflow/basic-props.cy.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { EdgeProps } from 'reactflow'; +import ReactFlow, { EdgeProps } from '@xyflow/react'; import ControlledFlow from '../../support/ControlledFlow'; import * as simpleflow from '../../fixtures/simpleflow'; diff --git a/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx b/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx index b1b354a0c..a2fbef352 100644 --- a/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx +++ b/examples/vite-app/cypress/components/reactflow/multiple-instance.cy.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { BaseEdge, EdgeLabelRenderer, EdgeProps, getSmoothStepPath, ReactFlowProvider } from 'reactflow'; +import ReactFlow, { BaseEdge, EdgeLabelRenderer, EdgeProps, getSmoothStepPath, ReactFlowProvider } from '@xyflow/react'; import * as simpleflow from '../../fixtures/simpleflow'; function CustomEdge(props: EdgeProps) { diff --git a/examples/vite-app/cypress/components/reactflow/uncontrolled.cy.tsx b/examples/vite-app/cypress/components/reactflow/uncontrolled.cy.tsx index 5a5a264ad..4b1eb0cf1 100644 --- a/examples/vite-app/cypress/components/reactflow/uncontrolled.cy.tsx +++ b/examples/vite-app/cypress/components/reactflow/uncontrolled.cy.tsx @@ -1,4 +1,4 @@ -import ReactFlow from 'reactflow'; +import ReactFlow from '@xyflow/react'; import { nodes, edges } from '../../fixtures/simpleflow'; diff --git a/examples/vite-app/cypress/components/reactflow/view-props.cy.tsx b/examples/vite-app/cypress/components/reactflow/view-props.cy.tsx index c73c94d15..dd1377baf 100644 --- a/examples/vite-app/cypress/components/reactflow/view-props.cy.tsx +++ b/examples/vite-app/cypress/components/reactflow/view-props.cy.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { ReactFlowProps, Viewport, useViewport, SnapGrid, CoordinateExtent, Node } from 'reactflow'; +import ReactFlow, { ReactFlowProps, Viewport, useViewport, SnapGrid, CoordinateExtent, Node } from '@xyflow/react'; import ControlledFlow from '../../support/ControlledFlow'; import * as simpleflow from '../../fixtures/simpleflow'; diff --git a/examples/vite-app/cypress/components/utils/graph-utils.cy.ts b/examples/vite-app/cypress/components/utils/graph-utils.cy.ts index 74119444e..7457f5ab7 100644 --- a/examples/vite-app/cypress/components/utils/graph-utils.cy.ts +++ b/examples/vite-app/cypress/components/utils/graph-utils.cy.ts @@ -1,4 +1,4 @@ -import { Node, Edge, isNode, isEdge, getOutgoers, getIncomers, addEdge } from 'reactflow'; +import { Node, Edge, isNode, isEdge, getOutgoers, getIncomers, addEdge } from '@xyflow/react'; const nodes: Node[] = [ { diff --git a/examples/vite-app/cypress/fixtures/simpleflow.ts b/examples/vite-app/cypress/fixtures/simpleflow.ts index ede9ac5cb..350688ad8 100644 --- a/examples/vite-app/cypress/fixtures/simpleflow.ts +++ b/examples/vite-app/cypress/fixtures/simpleflow.ts @@ -1,4 +1,4 @@ -import { Node, Edge } from 'reactflow'; +import { Node, Edge } from '@xyflow/react'; export const nodes: Node[] = [ { diff --git a/examples/vite-app/cypress/support/ControlledFlow.tsx b/examples/vite-app/cypress/support/ControlledFlow.tsx index 6181f1136..eaa560bfa 100644 --- a/examples/vite-app/cypress/support/ControlledFlow.tsx +++ b/examples/vite-app/cypress/support/ControlledFlow.tsx @@ -10,7 +10,7 @@ import { Connection, addEdge, ReactFlowProps, -} from 'reactflow'; +} from '@xyflow/react'; function ControlledFlow({ addOnNodeChangeHandler = true, diff --git a/examples/vite-app/cypress/support/component.ts b/examples/vite-app/cypress/support/component.ts index f065b0364..94d859fe7 100644 --- a/examples/vite-app/cypress/support/component.ts +++ b/examples/vite-app/cypress/support/component.ts @@ -6,9 +6,9 @@ import './commands'; import 'cypress-real-events/support'; import { mount } from 'cypress/react18'; -import { XYPosition } from 'reactflow'; +import { XYPosition } from '@xyflow/react'; -import 'reactflow/dist/style.css'; +import '@xyflow/react/dist/style.css'; declare global { // eslint-disable-next-line @typescript-eslint/no-namespace diff --git a/examples/vite-app/package.json b/examples/vite-app/package.json index 6226fda01..16a01a02a 100644 --- a/examples/vite-app/package.json +++ b/examples/vite-app/package.json @@ -1,10 +1,10 @@ { - "name": "@reactflow/examples", + "name": "@xyflow/react-examples", "private": true, "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite --port 3000 --open --host --force", + "dev": "vite --port 3000 --open --host", "serve": "vite serve --port 3000", "build": "vite build", "test:dev": "cypress open", @@ -14,13 +14,13 @@ "test-e2e": "start-server-and-test 'pnpm serve' http-get://localhost:3000 'pnpm test-e2e-cypress'" }, "dependencies": { + "@xyflow/react": "workspace:*", "classcat": "^5.0.3", "dagre": "^0.8.5", "localforage": "^1.10.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.3.0", - "reactflow": "workspace:*", "zustand": "^4.3.1" }, "devDependencies": { @@ -29,6 +29,7 @@ "@types/react": "^18.0.17", "@types/react-dom": "^18.0.6", "@vitejs/plugin-react": "4.0.0", + "@vitejs/plugin-react-swc": "^3.3.2", "cypress": "^10.6.0", "cypress-real-events": "^1.7.1", "start-server-and-test": "^1.14.0", diff --git a/examples/vite-app/src/examples/Backgrounds/index.tsx b/examples/vite-app/src/examples/Backgrounds/index.tsx index 0cbabf0ad..d9486ffe3 100644 --- a/examples/vite-app/src/examples/Backgrounds/index.tsx +++ b/examples/vite-app/src/examples/Backgrounds/index.tsx @@ -1,13 +1,14 @@ import { FC } from 'react'; -import ReactFlow, { +import { + ReactFlow, Node, ReactFlowProvider, useNodesState, Background, BackgroundProps, BackgroundVariant, -} from 'reactflow'; +} from '@xyflow/react'; import styles from './style.module.css'; diff --git a/examples/vite-app/src/examples/Basic/index.tsx b/examples/vite-app/src/examples/Basic/index.tsx index 76ce801be..21f48ec57 100644 --- a/examples/vite-app/src/examples/Basic/index.tsx +++ b/examples/vite-app/src/examples/Basic/index.tsx @@ -1,5 +1,6 @@ import { MouseEvent } from 'react'; -import ReactFlow, { +import { + ReactFlow, MiniMap, Background, BackgroundVariant, @@ -9,7 +10,7 @@ import ReactFlow, { Edge, useReactFlow, Panel, -} from 'reactflow'; +} from '@xyflow/react'; const onNodeDrag = (_: MouseEvent, node: Node) => console.log('drag', node); const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node); diff --git a/examples/vite-app/src/examples/CancelConnection/data.ts b/examples/vite-app/src/examples/CancelConnection/data.ts index 821b79fe5..b8a436f9f 100644 --- a/examples/vite-app/src/examples/CancelConnection/data.ts +++ b/examples/vite-app/src/examples/CancelConnection/data.ts @@ -1,4 +1,4 @@ -import { Edge, Node } from 'reactflow'; +import { Edge, Node } from '@xyflow/react'; export const initialNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/CancelConnection/index.tsx b/examples/vite-app/src/examples/CancelConnection/index.tsx index 689ededf7..56c8b4120 100644 --- a/examples/vite-app/src/examples/CancelConnection/index.tsx +++ b/examples/vite-app/src/examples/CancelConnection/index.tsx @@ -1,4 +1,5 @@ -import ReactFlow, { +import { + ReactFlow, Background, MiniMap, addEdge, @@ -10,7 +11,7 @@ import ReactFlow, { OnConnectStart, OnConnectEnd, useStore, -} from 'reactflow'; +} from '@xyflow/react'; import useCountdown from './hooks/useCountdown'; import { initialEdges, initialNodes } from './data'; @@ -21,7 +22,7 @@ const CANCEL_AFTER = 5; // seconds const CancelConnection = () => { const [nodes, _, onNodesChange] = useNodesState(initialNodes); const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); - const cancelConnection = useStore(state => state.cancelConnection) + const cancelConnection = useStore((state) => state.cancelConnection); // Cancels connection after 5 seconds const countdown = useCountdown(() => cancelConnection()); @@ -32,11 +33,7 @@ const CancelConnection = () => { return ( <> - + { ); -} +}; export default () => ( diff --git a/examples/vite-app/src/examples/ControlledUncontrolled/index.tsx b/examples/vite-app/src/examples/ControlledUncontrolled/index.tsx index 1d6ed2992..170df3a48 100644 --- a/examples/vite-app/src/examples/ControlledUncontrolled/index.tsx +++ b/examples/vite-app/src/examples/ControlledUncontrolled/index.tsx @@ -1,4 +1,5 @@ -import ReactFlow, { +import { + ReactFlow, useReactFlow, Node, Edge, @@ -7,7 +8,7 @@ import ReactFlow, { useEdgesState, Background, BackgroundVariant, -} from 'reactflow'; +} from '@xyflow/react'; const defaultNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx b/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx index b27306ddb..ddba960b9 100644 --- a/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx +++ b/examples/vite-app/src/examples/CustomConnectionLine/ConnectionLine.tsx @@ -1,4 +1,4 @@ -import { ConnectionLineComponentProps } from 'reactflow'; +import { ConnectionLineComponentProps } from '@xyflow/react'; function ConnectionLine({ fromX, fromY, toX, toY }: ConnectionLineComponentProps) { return ( diff --git a/examples/vite-app/src/examples/CustomConnectionLine/index.tsx b/examples/vite-app/src/examples/CustomConnectionLine/index.tsx index 669ec17b8..2e5e29693 100644 --- a/examples/vite-app/src/examples/CustomConnectionLine/index.tsx +++ b/examples/vite-app/src/examples/CustomConnectionLine/index.tsx @@ -1,5 +1,6 @@ import { useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Node, addEdge, Connection, @@ -8,7 +9,7 @@ import ReactFlow, { useEdgesState, Background, BackgroundVariant, -} from 'reactflow'; +} from '@xyflow/react'; import ConnectionLine from './ConnectionLine'; diff --git a/examples/vite-app/src/examples/CustomMiniMapNode/index.tsx b/examples/vite-app/src/examples/CustomMiniMapNode/index.tsx index 6a8e58079..d8f584b62 100644 --- a/examples/vite-app/src/examples/CustomMiniMapNode/index.tsx +++ b/examples/vite-app/src/examples/CustomMiniMapNode/index.tsx @@ -1,6 +1,7 @@ import { MouseEvent, CSSProperties, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, addEdge, Background, BackgroundVariant, @@ -13,7 +14,7 @@ import ReactFlow, { ReactFlowInstance, useEdgesState, useNodesState, -} from 'reactflow'; +} from '@xyflow/react'; const onInit = (reactFlowInstance: ReactFlowInstance) => console.log('flow loaded:', reactFlowInstance); const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node); diff --git a/examples/vite-app/src/examples/CustomNode/ColorSelectorNode.tsx b/examples/vite-app/src/examples/CustomNode/ColorSelectorNode.tsx index 2387e0e44..aebc8e0e7 100644 --- a/examples/vite-app/src/examples/CustomNode/ColorSelectorNode.tsx +++ b/examples/vite-app/src/examples/CustomNode/ColorSelectorNode.tsx @@ -1,5 +1,5 @@ import React, { memo, FC, CSSProperties, useCallback } from 'react'; -import { Handle, Position, NodeProps, Connection, Edge, useOnViewportChange, Viewport } from 'reactflow'; +import { Handle, Position, NodeProps, Connection, Edge, useOnViewportChange, Viewport } from '@xyflow/react'; const targetHandleStyle: CSSProperties = { background: '#555' }; const sourceHandleStyleA: CSSProperties = { ...targetHandleStyle, top: 10 }; diff --git a/examples/vite-app/src/examples/CustomNode/index.tsx b/examples/vite-app/src/examples/CustomNode/index.tsx index 27fab297b..72c581262 100644 --- a/examples/vite-app/src/examples/CustomNode/index.tsx +++ b/examples/vite-app/src/examples/CustomNode/index.tsx @@ -1,5 +1,6 @@ import { useState, useEffect, MouseEvent, ChangeEvent, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, MiniMap, Controls, addEdge, @@ -10,7 +11,7 @@ import ReactFlow, { Connection, useNodesState, useEdgesState, -} from 'reactflow'; +} from '@xyflow/react'; import ColorSelectorNode from './ColorSelectorNode'; diff --git a/examples/vite-app/src/examples/DefaultNodes/index.tsx b/examples/vite-app/src/examples/DefaultNodes/index.tsx index affd4ce72..46ef8e0c1 100644 --- a/examples/vite-app/src/examples/DefaultNodes/index.tsx +++ b/examples/vite-app/src/examples/DefaultNodes/index.tsx @@ -1,4 +1,5 @@ -import ReactFlow, { +import { + ReactFlow, useReactFlow, Node, Edge, @@ -6,7 +7,7 @@ import ReactFlow, { Background, BackgroundVariant, Panel, -} from 'reactflow'; +} from '@xyflow/react'; const defaultNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/DragHandle/DragHandleNode.tsx b/examples/vite-app/src/examples/DragHandle/DragHandleNode.tsx index 91ae44e89..56de576b6 100644 --- a/examples/vite-app/src/examples/DragHandle/DragHandleNode.tsx +++ b/examples/vite-app/src/examples/DragHandle/DragHandleNode.tsx @@ -1,6 +1,5 @@ -import React, { memo, FC } from 'react'; - -import { Handle, Position, NodeProps, Connection, Edge } from 'reactflow'; +import { memo, FC } from 'react'; +import { Handle, Position, NodeProps, Connection, Edge } from '@xyflow/react'; const onConnect = (params: Connection | Edge) => console.log('handle onConnect', params); diff --git a/examples/vite-app/src/examples/DragHandle/index.tsx b/examples/vite-app/src/examples/DragHandle/index.tsx index 8e6bbf982..b76d8ae76 100644 --- a/examples/vite-app/src/examples/DragHandle/index.tsx +++ b/examples/vite-app/src/examples/DragHandle/index.tsx @@ -1,5 +1,5 @@ import { MouseEvent } from 'react'; -import ReactFlow, { Node, Edge, useNodesState, useEdgesState } from 'reactflow'; +import { ReactFlow, Node, Edge, useNodesState, useEdgesState } from '@xyflow/react'; import DragHandleNode from './DragHandleNode'; diff --git a/examples/vite-app/src/examples/DragNDrop/index.tsx b/examples/vite-app/src/examples/DragNDrop/index.tsx index d59ee6876..16e9737e9 100644 --- a/examples/vite-app/src/examples/DragNDrop/index.tsx +++ b/examples/vite-app/src/examples/DragNDrop/index.tsx @@ -1,5 +1,6 @@ import { useState, DragEvent } from 'react'; -import ReactFlow, { +import { + ReactFlow, ReactFlowProvider, addEdge, ReactFlowInstance, @@ -10,7 +11,7 @@ import ReactFlow, { useEdgesState, Controls, NodeOrigin, -} from 'reactflow'; +} from '@xyflow/react'; import Sidebar from './Sidebar'; diff --git a/examples/vite-app/src/examples/EasyConnect/CustomConnectionLine.tsx b/examples/vite-app/src/examples/EasyConnect/CustomConnectionLine.tsx index ea671570f..8342d730b 100644 --- a/examples/vite-app/src/examples/EasyConnect/CustomConnectionLine.tsx +++ b/examples/vite-app/src/examples/EasyConnect/CustomConnectionLine.tsx @@ -1,4 +1,4 @@ -import { ConnectionLineComponentProps, getStraightPath } from 'reactflow'; +import { ConnectionLineComponentProps, getStraightPath } from '@xyflow/react'; function CustomConnectionLine({ fromX, fromY, toX, toY, connectionLineStyle }: ConnectionLineComponentProps) { const [edgePath] = getStraightPath({ diff --git a/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx b/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx index 3e4893623..7d3d6d672 100644 --- a/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx +++ b/examples/vite-app/src/examples/EasyConnect/CustomNode.tsx @@ -1,4 +1,4 @@ -import { Handle, NodeProps, Position, ReactFlowState, useStore } from 'reactflow'; +import { Handle, NodeProps, Position, ReactFlowState, useStore } from '@xyflow/react'; const connectionNodeIdSelector = (state: ReactFlowState) => state.connectionStartHandle?.nodeId; diff --git a/examples/vite-app/src/examples/EasyConnect/FloatingEdge.tsx b/examples/vite-app/src/examples/EasyConnect/FloatingEdge.tsx index 4b1038f07..55ed472b7 100644 --- a/examples/vite-app/src/examples/EasyConnect/FloatingEdge.tsx +++ b/examples/vite-app/src/examples/EasyConnect/FloatingEdge.tsx @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import { useStore, getStraightPath, EdgeProps } from 'reactflow'; +import { useStore, getStraightPath, EdgeProps } from '@xyflow/react'; import { getEdgeParams } from './utils.js'; diff --git a/examples/vite-app/src/examples/EasyConnect/index.tsx b/examples/vite-app/src/examples/EasyConnect/index.tsx index 1e26ae3dd..7e6008480 100644 --- a/examples/vite-app/src/examples/EasyConnect/index.tsx +++ b/examples/vite-app/src/examples/EasyConnect/index.tsx @@ -1,11 +1,11 @@ import { useCallback } from 'react'; -import ReactFlow, { Node, Edge, addEdge, useNodesState, useEdgesState, MarkerType, OnConnect } from 'reactflow'; +import { ReactFlow, Node, Edge, addEdge, useNodesState, useEdgesState, MarkerType, OnConnect } from '@xyflow/react'; import CustomNode from './CustomNode'; import FloatingEdge from './FloatingEdge'; import CustomConnectionLine from './CustomConnectionLine'; -import 'reactflow/dist/style.css'; +import '@xyflow/react/dist/style.css'; import './style.css'; const initialNodes: Node[] = [ diff --git a/examples/vite-app/src/examples/EasyConnect/utils.tsx b/examples/vite-app/src/examples/EasyConnect/utils.tsx index 02bf2eafb..cef818f5f 100644 --- a/examples/vite-app/src/examples/EasyConnect/utils.tsx +++ b/examples/vite-app/src/examples/EasyConnect/utils.tsx @@ -1,4 +1,4 @@ -import { Node, Position, MarkerType, XYPosition } from 'reactflow'; +import { Node, Position, MarkerType, XYPosition } from '@xyflow/react'; // this helper function returns the intersection point // of the line between the center of the intersectionNode and the target node diff --git a/examples/vite-app/src/examples/EdgeRenderer/CustomEdge.tsx b/examples/vite-app/src/examples/EdgeRenderer/CustomEdge.tsx index 05d893caf..ca9bb5f08 100644 --- a/examples/vite-app/src/examples/EdgeRenderer/CustomEdge.tsx +++ b/examples/vite-app/src/examples/EdgeRenderer/CustomEdge.tsx @@ -1,5 +1,5 @@ import { FC, MouseEvent } from 'react'; -import { EdgeProps, getBezierPath, EdgeLabelRenderer, useStore } from 'reactflow'; +import { EdgeProps, getBezierPath, EdgeLabelRenderer, useStore } from '@xyflow/react'; const CustomEdge: FC = ({ id, diff --git a/examples/vite-app/src/examples/EdgeRenderer/CustomEdge2.tsx b/examples/vite-app/src/examples/EdgeRenderer/CustomEdge2.tsx index ebdb1641b..d060a19d0 100644 --- a/examples/vite-app/src/examples/EdgeRenderer/CustomEdge2.tsx +++ b/examples/vite-app/src/examples/EdgeRenderer/CustomEdge2.tsx @@ -1,5 +1,5 @@ import { FC } from 'react'; -import { EdgeProps, getBezierPath, EdgeLabelRenderer, useStore } from 'reactflow'; +import { EdgeProps, getBezierPath, EdgeLabelRenderer, useStore } from '@xyflow/react'; const CustomEdge: FC = ({ id, diff --git a/examples/vite-app/src/examples/EdgeRenderer/index.tsx b/examples/vite-app/src/examples/EdgeRenderer/index.tsx index d80cea8b6..b5b84fc6e 100644 --- a/examples/vite-app/src/examples/EdgeRenderer/index.tsx +++ b/examples/vite-app/src/examples/EdgeRenderer/index.tsx @@ -1,5 +1,6 @@ import { MouseEvent, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Controls, Background, MiniMap, @@ -11,7 +12,7 @@ import ReactFlow, { Node, useEdgesState, useNodesState, -} from 'reactflow'; +} from '@xyflow/react'; import CustomEdge from './CustomEdge'; import CustomEdge2 from './CustomEdge2'; diff --git a/examples/vite-app/src/examples/EdgeRouting/index.tsx b/examples/vite-app/src/examples/EdgeRouting/index.tsx index 37bdb5cbf..4e78212b5 100644 --- a/examples/vite-app/src/examples/EdgeRouting/index.tsx +++ b/examples/vite-app/src/examples/EdgeRouting/index.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { Node, Edge, Position, MarkerType } from 'reactflow'; +import { ReactFlow, Node, Edge, Position, MarkerType } from '@xyflow/react'; const nodes: Node[] = [ // LTR diff --git a/examples/vite-app/src/examples/EdgeTypes/index.tsx b/examples/vite-app/src/examples/EdgeTypes/index.tsx index 9c1eb39a1..691eb36aa 100644 --- a/examples/vite-app/src/examples/EdgeTypes/index.tsx +++ b/examples/vite-app/src/examples/EdgeTypes/index.tsx @@ -1,6 +1,7 @@ import { useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Background, Controls, MiniMap, @@ -10,7 +11,7 @@ import ReactFlow, { Edge, useNodesState, useEdgesState, -} from 'reactflow'; +} from '@xyflow/react'; import { getElements } from './utils'; diff --git a/examples/vite-app/src/examples/EdgeTypes/utils.ts b/examples/vite-app/src/examples/EdgeTypes/utils.ts index 4992bd6f7..2a55d8898 100644 --- a/examples/vite-app/src/examples/EdgeTypes/utils.ts +++ b/examples/vite-app/src/examples/EdgeTypes/utils.ts @@ -1,4 +1,4 @@ -import { Edge, Node, Position } from 'reactflow'; +import { Edge, Node, Position } from '@xyflow/react'; const nodeWidth = 80; const nodeGapWidth = nodeWidth * 2; diff --git a/examples/vite-app/src/examples/Edges/CustomEdge.tsx b/examples/vite-app/src/examples/Edges/CustomEdge.tsx index ff7004136..f2fdc34c6 100644 --- a/examples/vite-app/src/examples/Edges/CustomEdge.tsx +++ b/examples/vite-app/src/examples/Edges/CustomEdge.tsx @@ -1,5 +1,5 @@ import { FC } from 'react'; -import { BaseEdge, EdgeProps, getBezierPath } from 'reactflow'; +import { BaseEdge, EdgeProps, getBezierPath } from '@xyflow/react'; const CustomEdge: FC = ({ id, diff --git a/examples/vite-app/src/examples/Edges/CustomEdge2.tsx b/examples/vite-app/src/examples/Edges/CustomEdge2.tsx index b40f12cbe..02cfd7917 100644 --- a/examples/vite-app/src/examples/Edges/CustomEdge2.tsx +++ b/examples/vite-app/src/examples/Edges/CustomEdge2.tsx @@ -1,5 +1,5 @@ import { FC } from 'react'; -import { EdgeProps, getBezierPath, EdgeText, BaseEdge } from 'reactflow'; +import { EdgeProps, getBezierPath, EdgeText, BaseEdge } from '@xyflow/react'; const CustomEdge: FC = ({ id, diff --git a/examples/vite-app/src/examples/Edges/index.tsx b/examples/vite-app/src/examples/Edges/index.tsx index d80cea8b6..b5b84fc6e 100644 --- a/examples/vite-app/src/examples/Edges/index.tsx +++ b/examples/vite-app/src/examples/Edges/index.tsx @@ -1,5 +1,6 @@ import { MouseEvent, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Controls, Background, MiniMap, @@ -11,7 +12,7 @@ import ReactFlow, { Node, useEdgesState, useNodesState, -} from 'reactflow'; +} from '@xyflow/react'; import CustomEdge from './CustomEdge'; import CustomEdge2 from './CustomEdge2'; diff --git a/examples/vite-app/src/examples/Empty/index.tsx b/examples/vite-app/src/examples/Empty/index.tsx index c7efeb140..e162daad6 100644 --- a/examples/vite-app/src/examples/Empty/index.tsx +++ b/examples/vite-app/src/examples/Empty/index.tsx @@ -1,6 +1,7 @@ import { MouseEvent, CSSProperties, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Background, BackgroundVariant, Controls, @@ -11,7 +12,7 @@ import ReactFlow, { useNodesState, useEdgesState, ReactFlowInstance, -} from 'reactflow'; +} from '@xyflow/react'; const onInit = (reactFlowInstance: ReactFlowInstance) => console.log('flow loaded:', reactFlowInstance); const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node); diff --git a/examples/vite-app/src/examples/Figma/index.tsx b/examples/vite-app/src/examples/Figma/index.tsx index 64cfb4bbf..bccafa967 100644 --- a/examples/vite-app/src/examples/Figma/index.tsx +++ b/examples/vite-app/src/examples/Figma/index.tsx @@ -1,4 +1,4 @@ -import ReactFlow, { Background, BackgroundVariant, Node, Edge, SelectionMode } from 'reactflow'; +import { ReactFlow, Background, BackgroundVariant, Node, Edge, SelectionMode } from '@xyflow/react'; const MULTI_SELECT_KEY = ['Meta', 'Shift']; diff --git a/examples/vite-app/src/examples/FloatingEdges/FloatingConnectionLine.tsx b/examples/vite-app/src/examples/FloatingEdges/FloatingConnectionLine.tsx index 19fb70a7e..3bac9d41b 100644 --- a/examples/vite-app/src/examples/FloatingEdges/FloatingConnectionLine.tsx +++ b/examples/vite-app/src/examples/FloatingEdges/FloatingConnectionLine.tsx @@ -1,16 +1,10 @@ -import React, { FC } from 'react'; -import { getBezierPath, ConnectionLineComponentProps, Node } from 'reactflow'; +import { FC } from 'react'; +import { getBezierPath, ConnectionLineComponentProps, Node } from '@xyflow/react'; import { getEdgeParams } from './utils'; -const FloatingConnectionLine: FC = ({ - targetX, - targetY, - sourcePosition, - targetPosition, - sourceNode, -}) => { - if (!sourceNode) { +const FloatingConnectionLine: FC = ({ toX, toY, fromPosition, toPosition, fromNode }) => { + if (!fromNode) { return null; } @@ -18,23 +12,24 @@ const FloatingConnectionLine: FC = ({ id: 'connection-target', width: 1, height: 1, - position: { x: targetX, y: targetY }, + position: { x: toX, y: toY }, } as Node; - const { sx, sy } = getEdgeParams(sourceNode, targetNode); - const d = getBezierPath({ + const { sx, sy } = getEdgeParams(fromNode, targetNode); + + const [path] = getBezierPath({ sourceX: sx, sourceY: sy, - sourcePosition, - targetPosition, - targetX, - targetY, + sourcePosition: fromPosition, + targetPosition: toPosition, + targetX: toX, + targetY: toY, }); return ( - - + + ); }; diff --git a/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx b/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx index 5e50f35fe..2dbd1050c 100644 --- a/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx +++ b/examples/vite-app/src/examples/FloatingEdges/FloatingEdge.tsx @@ -1,5 +1,5 @@ import { FC, useMemo, CSSProperties } from 'react'; -import { EdgeProps, useStore, getBezierPath, ReactFlowState } from 'reactflow'; +import { EdgeProps, useStore, getBezierPath, ReactFlowState } from '@xyflow/react'; import { getEdgeParams } from './utils'; diff --git a/examples/vite-app/src/examples/FloatingEdges/index.tsx b/examples/vite-app/src/examples/FloatingEdges/index.tsx index 94913c0c2..032f25f60 100644 --- a/examples/vite-app/src/examples/FloatingEdges/index.tsx +++ b/examples/vite-app/src/examples/FloatingEdges/index.tsx @@ -1,6 +1,7 @@ import { useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Background, addEdge, ReactFlowInstance, @@ -8,7 +9,7 @@ import ReactFlow, { Connection, useNodesState, useEdgesState, -} from 'reactflow'; +} from '@xyflow/react'; import styles from './style.module.css'; diff --git a/examples/vite-app/src/examples/FloatingEdges/utils.ts b/examples/vite-app/src/examples/FloatingEdges/utils.ts index 5c9b00683..543b0945b 100644 --- a/examples/vite-app/src/examples/FloatingEdges/utils.ts +++ b/examples/vite-app/src/examples/FloatingEdges/utils.ts @@ -1,4 +1,4 @@ -import { Position, XYPosition, Node, Edge } from 'reactflow'; +import { Position, XYPosition, Node, Edge } from '@xyflow/react'; // this helper function returns the intersection point // of the line between the center of the intersectionNode and the target node diff --git a/examples/vite-app/src/examples/Hidden/index.tsx b/examples/vite-app/src/examples/Hidden/index.tsx index 65a075818..586f300f1 100644 --- a/examples/vite-app/src/examples/Hidden/index.tsx +++ b/examples/vite-app/src/examples/Hidden/index.tsx @@ -1,6 +1,16 @@ import { useState, useEffect, useCallback } from 'react'; -import ReactFlow, { addEdge, Connection, Edge, Node, useNodesState, useEdgesState, MiniMap, Controls } from 'reactflow'; +import { + ReactFlow, + addEdge, + Connection, + Edge, + Node, + useNodesState, + useEdgesState, + MiniMap, + Controls, +} from '@xyflow/react'; const initialNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/Interaction/index.tsx b/examples/vite-app/src/examples/Interaction/index.tsx index ced5d6865..0dcee27bc 100644 --- a/examples/vite-app/src/examples/Interaction/index.tsx +++ b/examples/vite-app/src/examples/Interaction/index.tsx @@ -1,5 +1,6 @@ import { useState, MouseEvent as ReactMouseEvent, WheelEvent } from 'react'; -import ReactFlow, { +import { + ReactFlow, addEdge, Node, Connection, @@ -10,7 +11,7 @@ import ReactFlow, { useEdgesState, Controls, MiniMap, -} from 'reactflow'; +} from '@xyflow/react'; const initialNodes: Node[] = [ { @@ -36,7 +37,7 @@ const onEdgeClick = (_: ReactMouseEvent, edge: Edge) => console.log('click', edg const onPaneClick = (event: ReactMouseEvent) => console.log('onPaneClick', event); const onPaneScroll = (event?: WheelEvent) => console.log('onPaneScroll', event); const onPaneContextMenu = (event: ReactMouseEvent) => console.log('onPaneContextMenu', event); -const onMoveEnd = (_: TouchEvent | MouseEvent, viewport: Viewport) => console.log('onMoveEnd', viewport); +const onMoveEnd = (_: TouchEvent | MouseEvent | null, viewport: Viewport) => console.log('onMoveEnd', viewport); const InteractionFlow = () => { const [nodes, , onNodesChange] = useNodesState(initialNodes); diff --git a/examples/vite-app/src/examples/InteractiveMinimap/index.tsx b/examples/vite-app/src/examples/InteractiveMinimap/index.tsx index 450758d55..676f8dd04 100644 --- a/examples/vite-app/src/examples/InteractiveMinimap/index.tsx +++ b/examples/vite-app/src/examples/InteractiveMinimap/index.tsx @@ -1,5 +1,6 @@ import { MouseEvent, useCallback, useState } from 'react'; -import ReactFlow, { +import { + ReactFlow, MiniMap, Background, BackgroundVariant, @@ -9,7 +10,7 @@ import ReactFlow, { Edge, useReactFlow, XYPosition, -} from 'reactflow'; +} from '@xyflow/react'; const onNodeDrag = (_: MouseEvent, node: Node) => console.log('drag', node); const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node); @@ -139,8 +140,7 @@ const BasicFlow = () => { fitView > - +
diff --git a/examples/vite-app/src/examples/Intersection/index.tsx b/examples/vite-app/src/examples/Intersection/index.tsx index 1f82b3086..006ddc770 100644 --- a/examples/vite-app/src/examples/Intersection/index.tsx +++ b/examples/vite-app/src/examples/Intersection/index.tsx @@ -1,5 +1,6 @@ import { useCallback, MouseEvent } from 'react'; -import ReactFlow, { +import { + ReactFlow, MiniMap, Background, Controls, @@ -8,7 +9,7 @@ import ReactFlow, { Edge, useReactFlow, useNodesState, -} from 'reactflow'; +} from '@xyflow/react'; import './style.css'; diff --git a/examples/vite-app/src/examples/Layouting/index.tsx b/examples/vite-app/src/examples/Layouting/index.tsx index 2c031491d..4ec3e14c8 100644 --- a/examples/vite-app/src/examples/Layouting/index.tsx +++ b/examples/vite-app/src/examples/Layouting/index.tsx @@ -1,6 +1,7 @@ import { useCallback } from 'react'; import dagre from 'dagre'; -import ReactFlow, { +import { + ReactFlow, Controls, ReactFlowProvider, addEdge, @@ -13,7 +14,7 @@ import ReactFlow, { EdgeMarker, Panel, useReactFlow, -} from 'reactflow'; +} from '@xyflow/react'; import initialItems from './initial-elements'; diff --git a/examples/vite-app/src/examples/Layouting/initial-elements.ts b/examples/vite-app/src/examples/Layouting/initial-elements.ts index 8c88519e9..aef030056 100644 --- a/examples/vite-app/src/examples/Layouting/initial-elements.ts +++ b/examples/vite-app/src/examples/Layouting/initial-elements.ts @@ -1,4 +1,4 @@ -import { Node, Edge, XYPosition, MarkerType } from 'reactflow'; +import { Node, Edge, XYPosition, MarkerType } from '@xyflow/react'; const position: XYPosition = { x: 0, y: 0 }; diff --git a/examples/vite-app/src/examples/MultiFlows/index.tsx b/examples/vite-app/src/examples/MultiFlows/index.tsx index 1f8339006..901fd8272 100644 --- a/examples/vite-app/src/examples/MultiFlows/index.tsx +++ b/examples/vite-app/src/examples/MultiFlows/index.tsx @@ -1,6 +1,6 @@ import { FC } from 'react'; - -import ReactFlow, { +import { + ReactFlow, Background, addEdge, Node, @@ -11,7 +11,7 @@ import ReactFlow, { useEdgesState, MarkerType, MiniMap, -} from 'reactflow'; +} from '@xyflow/react'; import styles from './multiflows.module.css'; diff --git a/examples/vite-app/src/examples/NestedNodes/index.tsx b/examples/vite-app/src/examples/NestedNodes/index.tsx index e699337e0..56bc3ca8d 100644 --- a/examples/vite-app/src/examples/NestedNodes/index.tsx +++ b/examples/vite-app/src/examples/NestedNodes/index.tsx @@ -1,5 +1,6 @@ import { useState, MouseEvent, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Controls, MiniMap, Background, @@ -10,7 +11,7 @@ import ReactFlow, { Edge, ReactFlowInstance, Connection, -} from 'reactflow'; +} from '@xyflow/react'; const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node); const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node); diff --git a/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx b/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx index a61b3c3cf..374dc754f 100644 --- a/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx +++ b/examples/vite-app/src/examples/NodeResizer/CustomResizer.tsx @@ -1,5 +1,5 @@ import { memo, FC } from 'react'; -import { Handle, Position, NodeProps, NodeResizeControl } from 'reactflow'; +import { Handle, Position, NodeProps, NodeResizeControl } from '@xyflow/react'; import ResizeIcon from './ResizeIcon'; diff --git a/examples/vite-app/src/examples/NodeResizer/DefaultResizer.tsx b/examples/vite-app/src/examples/NodeResizer/DefaultResizer.tsx index 6ccd655ae..702b5c0fb 100644 --- a/examples/vite-app/src/examples/NodeResizer/DefaultResizer.tsx +++ b/examples/vite-app/src/examples/NodeResizer/DefaultResizer.tsx @@ -1,5 +1,5 @@ import { memo, FC } from 'react'; -import { Handle, Position, NodeProps, NodeResizer } from 'reactflow'; +import { Handle, Position, NodeProps, NodeResizer } from '@xyflow/react'; const DefaultResizerNode: FC = ({ data, selected }) => { return ( diff --git a/examples/vite-app/src/examples/NodeResizer/HorizontalResizer.tsx b/examples/vite-app/src/examples/NodeResizer/HorizontalResizer.tsx index 9e89d8c60..5d1574c5e 100644 --- a/examples/vite-app/src/examples/NodeResizer/HorizontalResizer.tsx +++ b/examples/vite-app/src/examples/NodeResizer/HorizontalResizer.tsx @@ -1,5 +1,5 @@ import { memo, FC } from 'react'; -import { Handle, Position, NodeProps, NodeResizeControl } from 'reactflow'; +import { Handle, Position, NodeProps, NodeResizeControl } from '@xyflow/react'; const HorizontalResizerNode: FC = ({ data }) => { return ( diff --git a/examples/vite-app/src/examples/NodeResizer/VerticalResizer.tsx b/examples/vite-app/src/examples/NodeResizer/VerticalResizer.tsx index f1230ce1c..7b2e02119 100644 --- a/examples/vite-app/src/examples/NodeResizer/VerticalResizer.tsx +++ b/examples/vite-app/src/examples/NodeResizer/VerticalResizer.tsx @@ -1,5 +1,5 @@ import { memo, FC } from 'react'; -import { Handle, Position, NodeProps, NodeResizeControl } from 'reactflow'; +import { Handle, Position, NodeProps, NodeResizeControl } from '@xyflow/react'; const CustomNode: FC = ({ id, data }) => { return ( diff --git a/examples/vite-app/src/examples/NodeResizer/index.tsx b/examples/vite-app/src/examples/NodeResizer/index.tsx index 6eb61b3a8..e276996c1 100644 --- a/examples/vite-app/src/examples/NodeResizer/index.tsx +++ b/examples/vite-app/src/examples/NodeResizer/index.tsx @@ -1,12 +1,22 @@ import { useCallback, useState } from 'react'; -import ReactFlow, { Controls, addEdge, Connection, useNodesState, useEdgesState, Panel, Node, Edge } from 'reactflow'; +import { + ReactFlow, + Controls, + addEdge, + Connection, + useNodesState, + useEdgesState, + Panel, + Node, + Edge, +} from '@xyflow/react'; import DefaultResizer from './DefaultResizer'; import CustomResizer from './CustomResizer'; import VerticalResizer from './VerticalResizer'; import HorizontalResizer from './HorizontalResizer'; -import 'reactflow/dist/style.css'; +import '@xyflow/react/dist/style.css'; const nodeTypes = { defaultResizer: DefaultResizer, diff --git a/examples/vite-app/src/examples/NodeToolbar/CustomNode.tsx b/examples/vite-app/src/examples/NodeToolbar/CustomNode.tsx index 7d179b7ea..303844454 100644 --- a/examples/vite-app/src/examples/NodeToolbar/CustomNode.tsx +++ b/examples/vite-app/src/examples/NodeToolbar/CustomNode.tsx @@ -1,5 +1,5 @@ import { memo, FC } from 'react'; -import { Handle, Position, NodeProps, NodeToolbar } from 'reactflow'; +import { Handle, Position, NodeProps, NodeToolbar } from '@xyflow/react'; const CustomNode: FC = ({ id, data }) => { return ( diff --git a/examples/vite-app/src/examples/NodeToolbar/SelectedNodesToolbar.tsx b/examples/vite-app/src/examples/NodeToolbar/SelectedNodesToolbar.tsx index fa1697aeb..d5ccded68 100644 --- a/examples/vite-app/src/examples/NodeToolbar/SelectedNodesToolbar.tsx +++ b/examples/vite-app/src/examples/NodeToolbar/SelectedNodesToolbar.tsx @@ -1,4 +1,4 @@ -import { NodeToolbar, ReactFlowState, useStore } from 'reactflow'; +import { NodeToolbar, ReactFlowState, useStore } from '@xyflow/react'; const selectedNodesSelector = (state: ReactFlowState) => state diff --git a/examples/vite-app/src/examples/NodeToolbar/index.tsx b/examples/vite-app/src/examples/NodeToolbar/index.tsx index b4d3d1c5b..0b148baf0 100644 --- a/examples/vite-app/src/examples/NodeToolbar/index.tsx +++ b/examples/vite-app/src/examples/NodeToolbar/index.tsx @@ -1,4 +1,5 @@ -import ReactFlow, { +import { + ReactFlow, MiniMap, Background, BackgroundVariant, @@ -8,7 +9,7 @@ import ReactFlow, { NodeTypes, Position, NodeOrigin, -} from 'reactflow'; +} from '@xyflow/react'; import CustomNode from './CustomNode'; import SelectedNodesToolbar from './SelectedNodesToolbar'; diff --git a/examples/vite-app/src/examples/NodeTypeChange/index.tsx b/examples/vite-app/src/examples/NodeTypeChange/index.tsx index 561ba66e6..d1119010b 100644 --- a/examples/vite-app/src/examples/NodeTypeChange/index.tsx +++ b/examples/vite-app/src/examples/NodeTypeChange/index.tsx @@ -1,5 +1,5 @@ import { CSSProperties, useCallback } from 'react'; -import ReactFlow, { addEdge, Node, Position, Connection, Edge, useNodesState, useEdgesState } from 'reactflow'; +import { ReactFlow, addEdge, Node, Position, Connection, Edge, useNodesState, useEdgesState } from '@xyflow/react'; const initialNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx b/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx index 66521aab6..01a0d993a 100644 --- a/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx +++ b/examples/vite-app/src/examples/NodeTypesObjectChange/index.tsx @@ -1,5 +1,6 @@ import { useState, CSSProperties, FC, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, addEdge, Node, Position, @@ -9,7 +10,7 @@ import ReactFlow, { NodeTypes, useNodesState, useEdgesState, -} from 'reactflow'; +} from '@xyflow/react'; const initialNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/Overview/index.tsx b/examples/vite-app/src/examples/Overview/index.tsx index 640e25f21..233aa76c7 100644 --- a/examples/vite-app/src/examples/Overview/index.tsx +++ b/examples/vite-app/src/examples/Overview/index.tsx @@ -1,5 +1,6 @@ import { MouseEvent as ReactMouseEvent, CSSProperties, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, addEdge, Node, Viewport, @@ -13,7 +14,7 @@ import ReactFlow, { Controls, Background, MiniMap, -} from 'reactflow'; +} from '@xyflow/react'; const onNodeDragStart = (_: ReactMouseEvent, node: Node, nodes: Node[]) => console.log('drag start', node, nodes); const onNodeDrag = (_: ReactMouseEvent, node: Node, nodes: Node[]) => console.log('drag', node, nodes); @@ -36,8 +37,8 @@ const onInit = (reactFlowInstance: ReactFlowInstance) => { console.log('pane ready:', reactFlowInstance); }; -const onMoveStart = (_: MouseEvent | TouchEvent, viewport: Viewport) => console.log('zoom/move start', viewport); -const onMoveEnd = (_: MouseEvent | TouchEvent, viewport: Viewport) => console.log('zoom/move end', viewport); +const onMoveStart = (_: MouseEvent | TouchEvent | null, viewport: Viewport) => console.log('zoom/move start', viewport); +const onMoveEnd = (_: MouseEvent | TouchEvent | null, viewport: Viewport) => console.log('zoom/move end', viewport); const onEdgeContextMenu = (_: ReactMouseEvent, edge: Edge) => console.log('edge context menu', edge); const onEdgeMouseEnter = (_: ReactMouseEvent, edge: Edge) => console.log('edge mouse enter', edge); const onEdgeMouseMove = (_: ReactMouseEvent, edge: Edge) => console.log('edge mouse move', edge); diff --git a/examples/vite-app/src/examples/Provider/Sidebar.tsx b/examples/vite-app/src/examples/Provider/Sidebar.tsx index a52056425..67c2c8b9a 100644 --- a/examples/vite-app/src/examples/Provider/Sidebar.tsx +++ b/examples/vite-app/src/examples/Provider/Sidebar.tsx @@ -1,4 +1,4 @@ -import { useReactFlow, useStore } from 'reactflow'; +import { useReactFlow, useStore } from '@xyflow/react'; import styles from './provider.module.css'; diff --git a/examples/vite-app/src/examples/Provider/index.tsx b/examples/vite-app/src/examples/Provider/index.tsx index 1e378ba3c..320d85de3 100644 --- a/examples/vite-app/src/examples/Provider/index.tsx +++ b/examples/vite-app/src/examples/Provider/index.tsx @@ -1,5 +1,6 @@ import { MouseEvent, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, Controls, ReactFlowProvider, addEdge, @@ -10,7 +11,7 @@ import ReactFlow, { useNodesState, useEdgesState, ReactFlowInstance, -} from 'reactflow'; +} from '@xyflow/react'; import Sidebar from './Sidebar'; diff --git a/examples/vite-app/src/examples/SaveRestore/Controls.tsx b/examples/vite-app/src/examples/SaveRestore/Controls.tsx index 61ca1a647..53aa209fa 100644 --- a/examples/vite-app/src/examples/SaveRestore/Controls.tsx +++ b/examples/vite-app/src/examples/SaveRestore/Controls.tsx @@ -1,5 +1,5 @@ import React, { memo, useCallback, Dispatch, FC } from 'react'; -import { useReactFlow, Edge, Node, ReactFlowJsonObject } from 'reactflow'; +import { useReactFlow, Edge, Node, ReactFlowJsonObject } from '@xyflow/react'; import localforage from 'localforage'; import styles from './save.module.css'; diff --git a/examples/vite-app/src/examples/SaveRestore/index.tsx b/examples/vite-app/src/examples/SaveRestore/index.tsx index e84eaf341..fc2e1a38d 100644 --- a/examples/vite-app/src/examples/SaveRestore/index.tsx +++ b/examples/vite-app/src/examples/SaveRestore/index.tsx @@ -1,5 +1,14 @@ import { useCallback } from 'react'; -import ReactFlow, { ReactFlowProvider, Node, addEdge, Connection, Edge, useNodesState, useEdgesState } from 'reactflow'; +import { + ReactFlow, + ReactFlowProvider, + Node, + addEdge, + Connection, + Edge, + useNodesState, + useEdgesState, +} from '@xyflow/react'; import Controls from './Controls'; diff --git a/examples/vite-app/src/examples/Stress/index.tsx b/examples/vite-app/src/examples/Stress/index.tsx index e8cf9f916..125c27646 100644 --- a/examples/vite-app/src/examples/Stress/index.tsx +++ b/examples/vite-app/src/examples/Stress/index.tsx @@ -1,5 +1,6 @@ import { useState, CSSProperties, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, ReactFlowInstance, Edge, Node, @@ -12,7 +13,7 @@ import ReactFlow, { Controls, Background, MiniMap, -} from 'reactflow'; +} from '@xyflow/react'; import { getNodesAndEdges } from './utils'; diff --git a/examples/vite-app/src/examples/Stress/utils.ts b/examples/vite-app/src/examples/Stress/utils.ts index 2c067d990..766b4bb70 100644 --- a/examples/vite-app/src/examples/Stress/utils.ts +++ b/examples/vite-app/src/examples/Stress/utils.ts @@ -1,4 +1,4 @@ -import { Node, Edge } from 'reactflow'; +import { Node, Edge } from '@xyflow/react'; type ElementsCollection = { nodes: Node[]; diff --git a/examples/vite-app/src/examples/Subflow/DebugNode.tsx b/examples/vite-app/src/examples/Subflow/DebugNode.tsx index 7b5f6b5b6..9170ef652 100644 --- a/examples/vite-app/src/examples/Subflow/DebugNode.tsx +++ b/examples/vite-app/src/examples/Subflow/DebugNode.tsx @@ -1,6 +1,6 @@ import React, { memo, FC, CSSProperties } from 'react'; -import { Handle, NodeProps, Position } from 'reactflow'; +import { Handle, NodeProps, Position } from '@xyflow/react'; const infoStyle: CSSProperties = { fontSize: 11 }; const idStyle: CSSProperties = { diff --git a/examples/vite-app/src/examples/Subflow/index.tsx b/examples/vite-app/src/examples/Subflow/index.tsx index 397e4376c..617b68ea4 100644 --- a/examples/vite-app/src/examples/Subflow/index.tsx +++ b/examples/vite-app/src/examples/Subflow/index.tsx @@ -1,5 +1,6 @@ import { useState, MouseEvent, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, addEdge, Node, Edge, @@ -12,7 +13,7 @@ import ReactFlow, { MiniMap, Background, Panel, -} from 'reactflow'; +} from '@xyflow/react'; import DebugNode from './DebugNode'; diff --git a/examples/vite-app/src/examples/Switch/index.tsx b/examples/vite-app/src/examples/Switch/index.tsx index b6ae22783..d2b237c8b 100644 --- a/examples/vite-app/src/examples/Switch/index.tsx +++ b/examples/vite-app/src/examples/Switch/index.tsx @@ -1,5 +1,5 @@ import { MouseEvent, useCallback } from 'react'; -import ReactFlow, { addEdge, Node, Connection, Edge, useNodesState, useEdgesState } from 'reactflow'; +import { ReactFlow, addEdge, Node, Connection, Edge, useNodesState, useEdgesState } from '@xyflow/react'; const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node); const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node); diff --git a/examples/vite-app/src/examples/TouchDevice/index.tsx b/examples/vite-app/src/examples/TouchDevice/index.tsx index 130c15fd9..636a36a46 100644 --- a/examples/vite-app/src/examples/TouchDevice/index.tsx +++ b/examples/vite-app/src/examples/TouchDevice/index.tsx @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import ReactFlow, { Node, Edge, useNodesState, useEdgesState, Position, Connection, addEdge } from 'reactflow'; +import { ReactFlow, Node, Edge, useNodesState, useEdgesState, Position, Connection, addEdge } from '@xyflow/react'; import styles from './touch-device.module.css'; diff --git a/examples/vite-app/src/examples/Undirectional/CustomNode.tsx b/examples/vite-app/src/examples/Undirectional/CustomNode.tsx index 0ede3317a..f380b517f 100644 --- a/examples/vite-app/src/examples/Undirectional/CustomNode.tsx +++ b/examples/vite-app/src/examples/Undirectional/CustomNode.tsx @@ -1,6 +1,5 @@ -import React, { memo, FC, CSSProperties } from 'react'; - -import { Handle, Position, NodeProps } from 'reactflow'; +import { memo, FC, CSSProperties } from 'react'; +import { Handle, Position, NodeProps } from '@xyflow/react'; const nodeStyles: CSSProperties = { padding: '10px 15px', diff --git a/examples/vite-app/src/examples/Undirectional/index.tsx b/examples/vite-app/src/examples/Undirectional/index.tsx index 00feda8e4..d93915411 100644 --- a/examples/vite-app/src/examples/Undirectional/index.tsx +++ b/examples/vite-app/src/examples/Undirectional/index.tsx @@ -1,5 +1,6 @@ import { MouseEvent, useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, useReactFlow, NodeTypes, addEdge, @@ -12,7 +13,7 @@ import ReactFlow, { updateEdge, useNodesState, useEdgesState, -} from 'reactflow'; +} from '@xyflow/react'; import CustomNode from './CustomNode'; diff --git a/examples/vite-app/src/examples/UpdatableEdge/index.tsx b/examples/vite-app/src/examples/UpdatableEdge/index.tsx index f9a109d1e..754efa569 100644 --- a/examples/vite-app/src/examples/UpdatableEdge/index.tsx +++ b/examples/vite-app/src/examples/UpdatableEdge/index.tsx @@ -1,5 +1,6 @@ import { useState, useCallback, MouseEvent as ReactMouseEvent } from 'react'; -import ReactFlow, { +import { + ReactFlow, Controls, updateEdge, addEdge, @@ -12,7 +13,7 @@ import ReactFlow, { NodeChange, EdgeChange, HandleType, -} from 'reactflow'; +} from '@xyflow/react'; const initialNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/UpdateNode/index.tsx b/examples/vite-app/src/examples/UpdateNode/index.tsx index 23706e017..7c320606e 100644 --- a/examples/vite-app/src/examples/UpdateNode/index.tsx +++ b/examples/vite-app/src/examples/UpdateNode/index.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import ReactFlow, { Node, Edge, useNodesState, useEdgesState } from 'reactflow'; +import { ReactFlow, Node, Edge, useNodesState, useEdgesState } from '@xyflow/react'; import styles from './updatenode.module.css'; diff --git a/examples/vite-app/src/examples/UseKeyPress/index.tsx b/examples/vite-app/src/examples/UseKeyPress/index.tsx index e95ae9bcd..28a950907 100644 --- a/examples/vite-app/src/examples/UseKeyPress/index.tsx +++ b/examples/vite-app/src/examples/UseKeyPress/index.tsx @@ -1,4 +1,4 @@ -import { useKeyPress } from 'reactflow'; +import { useKeyPress } from '@xyflow/react'; const UseKeyPressComponent = () => { const metaPressed = useKeyPress(['Meta']); diff --git a/examples/vite-app/src/examples/UseNodesInit/index.tsx b/examples/vite-app/src/examples/UseNodesInit/index.tsx index f779738d1..549315cad 100644 --- a/examples/vite-app/src/examples/UseNodesInit/index.tsx +++ b/examples/vite-app/src/examples/UseNodesInit/index.tsx @@ -1,5 +1,6 @@ import { useCallback, useEffect } from 'react'; -import ReactFlow, { +import { + ReactFlow, Background, MiniMap, Node, @@ -10,7 +11,7 @@ import ReactFlow, { useEdgesState, OnConnect, useNodesInitialized, -} from 'reactflow'; +} from '@xyflow/react'; const initialNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/UseOnSelectionChange/CustomNode.tsx b/examples/vite-app/src/examples/UseOnSelectionChange/CustomNode.tsx index 1684656bc..e6e90d3db 100644 --- a/examples/vite-app/src/examples/UseOnSelectionChange/CustomNode.tsx +++ b/examples/vite-app/src/examples/UseOnSelectionChange/CustomNode.tsx @@ -1,5 +1,5 @@ -import React, { useState, memo, FC, useMemo, CSSProperties } from 'react'; -import { Handle, Position, NodeProps, useUpdateNodeInternals } from 'reactflow'; +import { useState, memo, FC, useMemo, CSSProperties } from 'react'; +import { Handle, Position, NodeProps, useUpdateNodeInternals } from '@xyflow/react'; const nodeStyles: CSSProperties = { padding: 10, border: '1px solid #ddd' }; diff --git a/examples/vite-app/src/examples/UseOnSelectionChange/index.tsx b/examples/vite-app/src/examples/UseOnSelectionChange/index.tsx index b6f5531f0..a9f91adf0 100644 --- a/examples/vite-app/src/examples/UseOnSelectionChange/index.tsx +++ b/examples/vite-app/src/examples/UseOnSelectionChange/index.tsx @@ -1,5 +1,6 @@ import { useCallback } from 'react'; -import ReactFlow, { +import { + ReactFlow, addEdge, ReactFlowProvider, Node, @@ -9,7 +10,7 @@ import ReactFlow, { useEdgesState, useOnSelectionChange, OnSelectionChangeParams, -} from 'reactflow'; +} from '@xyflow/react'; const initialNodes: Node[] = [ { @@ -67,8 +68,8 @@ const WrappedFlow = () => (
- -
+ +
); diff --git a/examples/vite-app/src/examples/UseReactFlow/index.tsx b/examples/vite-app/src/examples/UseReactFlow/index.tsx index ae97bc9bd..584e6e7b3 100644 --- a/examples/vite-app/src/examples/UseReactFlow/index.tsx +++ b/examples/vite-app/src/examples/UseReactFlow/index.tsx @@ -1,5 +1,6 @@ import { useCallback, MouseEvent, useEffect } from 'react'; -import ReactFlow, { +import { + ReactFlow, Background, MiniMap, Node, @@ -11,7 +12,7 @@ import ReactFlow, { useNodesState, useEdgesState, Panel, -} from 'reactflow'; +} from '@xyflow/react'; const initialNodes: Node[] = [ { diff --git a/examples/vite-app/src/examples/UseUpdateNodeInternals/CustomNode.tsx b/examples/vite-app/src/examples/UseUpdateNodeInternals/CustomNode.tsx index a11c68d08..7b6df002d 100644 --- a/examples/vite-app/src/examples/UseUpdateNodeInternals/CustomNode.tsx +++ b/examples/vite-app/src/examples/UseUpdateNodeInternals/CustomNode.tsx @@ -1,5 +1,5 @@ import { useState, memo, FC, useMemo, CSSProperties } from 'react'; -import { Handle, Position, NodeProps, useUpdateNodeInternals } from 'reactflow'; +import { Handle, Position, NodeProps, useUpdateNodeInternals } from '@xyflow/react'; const nodeStyles: CSSProperties = { padding: 10, border: '1px solid #ddd' }; diff --git a/examples/vite-app/src/examples/UseUpdateNodeInternals/index.tsx b/examples/vite-app/src/examples/UseUpdateNodeInternals/index.tsx index 8a989b597..7de6cb9b7 100644 --- a/examples/vite-app/src/examples/UseUpdateNodeInternals/index.tsx +++ b/examples/vite-app/src/examples/UseUpdateNodeInternals/index.tsx @@ -1,5 +1,6 @@ import { useCallback, MouseEvent } from 'react'; -import ReactFlow, { +import { + ReactFlow, NodeTypes, addEdge, useReactFlow, @@ -10,7 +11,7 @@ import ReactFlow, { Position, useNodesState, useEdgesState, -} from 'reactflow'; +} from '@xyflow/react'; import CustomNode from './CustomNode'; diff --git a/examples/vite-app/src/examples/Validation/ConnectionStatus.tsx b/examples/vite-app/src/examples/Validation/ConnectionStatus.tsx index 43cdb5bfe..c97a16d7b 100644 --- a/examples/vite-app/src/examples/Validation/ConnectionStatus.tsx +++ b/examples/vite-app/src/examples/Validation/ConnectionStatus.tsx @@ -1,4 +1,4 @@ -import { ReactFlowState, useStore } from 'reactflow'; +import { ReactFlowState, useStore } from '@xyflow/react'; import { shallow } from 'zustand/shallow'; import styles from './validation.module.css'; diff --git a/examples/vite-app/src/examples/Validation/index.tsx b/examples/vite-app/src/examples/Validation/index.tsx index f385083b8..864c3c08e 100644 --- a/examples/vite-app/src/examples/Validation/index.tsx +++ b/examples/vite-app/src/examples/Validation/index.tsx @@ -1,5 +1,6 @@ import { FC, useCallback, useState } from 'react'; -import ReactFlow, { +import { + ReactFlow, addEdge, Handle, Connection, @@ -14,7 +15,8 @@ import ReactFlow, { OnConnect, updateEdge, Edge, -} from 'reactflow'; + IsValidConnection, +} from '@xyflow/react'; import ConnectionStatus from './ConnectionStatus'; @@ -27,7 +29,7 @@ const initialNodes: Node[] = [ { id: 'C', type: 'customnode', position: { x: 250, y: 300 }, data: null }, ]; -const isValidConnection = (connection: Connection) => connection.target === 'B'; +const isValidConnection: IsValidConnection = (connection) => connection.target === 'B'; const CustomInput: FC = () => ( <> diff --git a/examples/vite-app/src/main.tsx b/examples/vite-app/src/main.tsx index 4a3da3c14..34599efcf 100644 --- a/examples/vite-app/src/main.tsx +++ b/examples/vite-app/src/main.tsx @@ -3,7 +3,7 @@ import { createRoot } from 'react-dom/client'; import App from './App'; import './index.css'; -import 'reactflow/dist/style.css'; +import '@xyflow/react/dist/style.css'; createRoot(document.getElementById('root') as HTMLElement).render( diff --git a/examples/vite-app/vite.config.ts b/examples/vite-app/vite.config.ts index 73b3bb61f..442230f7d 100644 --- a/examples/vite-app/vite.config.ts +++ b/examples/vite-app/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; +import react from '@vitejs/plugin-react-swc'; // https://vitejs.dev/config/ export default defineConfig({ diff --git a/package.json b/package.json index c462e3cad..b0ee43f8b 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@reactflow/monorepo", + "name": "@xyflow/monorepo", "version": "0.0.0", "description": "A highly customizable React library for building node-based editors and interactive flow charts", "repository": "git@github.com:wbkd/react-flow.git", diff --git a/packages/background/.eslintrc.js b/packages/background/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/background/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/background/CHANGELOG.md b/packages/background/CHANGELOG.md deleted file mode 100644 index 61735a342..000000000 --- a/packages/background/CHANGELOG.md +++ /dev/null @@ -1,216 +0,0 @@ -# @reactflow/background - -## 11.2.2 - -### Patch Changes - -- Updated dependencies [[`70ec97f7`](https://github.com/wbkd/react-flow/commit/70ec97f7daec6d5401215cae3edac04aea88a3ba), [`d2d1aebc`](https://github.com/wbkd/react-flow/commit/d2d1aebc0f7fea4183406e7d1915b7fcd6995f48), [`4374459e`](https://github.com/wbkd/react-flow/commit/4374459ef9fec797bbc0407231f09a1acacd245b)]: - - @reactflow/core@11.7.2 - -## 11.2.1 - -### Patch Changes - -- Updated dependencies [[`cf7a7d3d`](https://github.com/wbkd/react-flow/commit/cf7a7d3dad1e73215a72a5dc72e21fd50208cdbb), [`07b975bb`](https://github.com/wbkd/react-flow/commit/07b975bbee3580249e36a19582213b250f78093c), [`c80d269b`](https://github.com/wbkd/react-flow/commit/c80d269b85a0054221f4639c328fc36a3befbe70), [`a3fa164c`](https://github.com/wbkd/react-flow/commit/a3fa164c34cc820c79bb031c9fd97b72a3546614)]: - - @reactflow/core@11.7.1 - -## 11.2.0 - -### Minor Changes - -- [#2941](https://github.com/wbkd/react-flow/pull/2941) Thanks [@Elringus](https://github.com/Elringus)! - add `id` and `offset` props - -### Patch Changes - -- Updated dependencies [[`098eee3d`](https://github.com/wbkd/react-flow/commit/098eee3d41dabc870777b081796401ff13b5a776), [`fe8cac0a`](https://github.com/wbkd/react-flow/commit/fe8cac0adb359109e0e9eafe8b9261ba354076bb), [`4a4ca171`](https://github.com/wbkd/react-flow/commit/4a4ca171955f5c8d58b23e3ad48406f1a21dc402), [`923a54c4`](https://github.com/wbkd/react-flow/commit/923a54c481b90954806202817ba844cfa7203a38), [`4d97a0ed`](https://github.com/wbkd/react-flow/commit/4d97a0ed168ce643fc0c99fa6b47cf1296d66065), [`c22e1c28`](https://github.com/wbkd/react-flow/commit/c22e1c28c5555a638c2a8e82c3bfc986b3965d36)]: - - @reactflow/core@11.7.0 - -## 11.1.10 - -### Patch Changes - -- Updated dependencies - -## 11.1.9 - -### Patch Changes - -- [#2895](https://github.com/wbkd/react-flow/pull/2895) [`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425) Thanks [@moklick](https://github.com/moklick)! - add data-testid for controls, minimap and background - -- Updated dependencies [[`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425), [`83fc4675`](https://github.com/wbkd/react-flow/commit/83fc467545527729633e817dbccfe59d0040da4b), [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798), [`5fabd272`](https://github.com/wbkd/react-flow/commit/5fabd2720f6367f75f79a45822d8f675a3b8e1cf), [`8f080bd5`](https://github.com/wbkd/react-flow/commit/8f080bd5e0e7e6c71f51eee9c9f2bc4b25182861), [`b8886514`](https://github.com/wbkd/react-flow/commit/b88865140c72fa7e92a883498768000cb2cc96a7), [`16bf89f2`](https://github.com/wbkd/react-flow/commit/16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533)]: - - @reactflow/core@11.6.0 - -## 11.1.8 - -### Patch Changes - -- Updated dependencies [[`72216ff6`](https://github.com/wbkd/react-flow/commit/72216ff62014acd2d73999053c72bd7aeed351f6), [`959b1114`](https://github.com/wbkd/react-flow/commit/959b111448bba4686040473e46988be9e7befbe6), [`0d259b02`](https://github.com/wbkd/react-flow/commit/0d259b028558aab650546f3371a85f3bce45252f), [`f3de9335`](https://github.com/wbkd/react-flow/commit/f3de9335af6cd96cd77dc77f24a944eef85384e5), [`23424ea6`](https://github.com/wbkd/react-flow/commit/23424ea6750f092210f83df17a00c89adb910d96), [`021f5a92`](https://github.com/wbkd/react-flow/commit/021f5a9210f47a968e50446cd2f9dae1f97880a4)]: - - @reactflow/core@11.5.5 - -## 11.1.7 - -### Patch Changes - -- Updated dependencies [[`383a074a`](https://github.com/wbkd/react-flow/commit/383a074aeae6dbec8437fa08c7c8d8240838a84e)]: - - @reactflow/core@11.5.4 - -## 11.1.6 - -### Patch Changes - -- Updated dependencies [[`be8097ac`](https://github.com/wbkd/react-flow/commit/be8097acadca3054c3b236ce4296fc516010ef8c), [`1527795d`](https://github.com/wbkd/react-flow/commit/1527795d18c3af38c8ec7059436ea0fbf6c27bbd), [`3b6348a8`](https://github.com/wbkd/react-flow/commit/3b6348a8d1573afb39576327318bc172e33393c2)]: - - @reactflow/core@11.5.3 - -## 11.1.5 - -### Patch Changes - -- [#2792](https://github.com/wbkd/react-flow/pull/2792) [`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a) - Accept React 17 types as dev dependency - -- Updated dependencies [[`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a)]: - - @reactflow/core@11.5.2 - -## 11.1.4 - -### Patch Changes - -- Updated dependencies [[`71153534`](https://github.com/wbkd/react-flow/commit/7115353418ebc7f7c81ab0e861200972bbf7dbd5)]: - - @reactflow/core@11.5.1 - -## 11.1.3 - -### Patch Changes - -- Updated dependencies [[`e96309b6`](https://github.com/wbkd/react-flow/commit/e96309b6a57b1071faeebf7b0547fef7fd418694), [`85003b01`](https://github.com/wbkd/react-flow/commit/85003b01add71ea852bd5b0d2f1e7496050a6b52), [`4c516882`](https://github.com/wbkd/react-flow/commit/4c516882d2bbf426c1832a53ad40763cc1abef92)]: - - @reactflow/core@11.5.0 - -## 11.1.2 - -### Patch Changes - -- [#2741](https://github.com/wbkd/react-flow/pull/2741) [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39) - chore(dependencies): update and cleanup - -- Updated dependencies [[`e34a3072`](https://github.com/wbkd/react-flow/commit/e34a30726dc55184f59adc4f16ca5215a7c42805), [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39)]: - - @reactflow/core@11.4.2 - -## 11.1.1 - -### Patch Changes - -- Updated dependencies [[`82988485`](https://github.com/wbkd/react-flow/commit/82988485b730a9e32acbdae1ddcc81b33ddccaba), [`d91e619a`](https://github.com/wbkd/react-flow/commit/d91e619a70a95db99a621ede59bc05b5a7766086)]: - - @reactflow/core@11.4.1 - -## 11.1.0 - -### Patch Changes - -- Updated dependencies [[`ab2ff374`](https://github.com/wbkd/react-flow/commit/ab2ff3740618da48bd4350597e816c397f3d78ff), [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`7ef29108`](https://github.com/wbkd/react-flow/commit/7ef2910808aaaee029894363d52efc0c378a7654), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0 - -## 11.1.0-next.1 - -### Minor Changes - -- panOnDrag: Use numbers for prop ([1,2] = drag via middle or right mouse button) -- selection: do not include hidden nodes -- minimap: fix onNodeClick for nodes outside the viewport -- keys: allow multi select when input is focused - -### Patch Changes - -- Updated dependencies []: - - @reactflow/core@11.4.0-next.1 - -## 11.0.8-next.0 - -### Patch Changes - -- Updated dependencies [[`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0-next.0 - -## 11.0.7 - -### Patch Changes - -- Updated dependencies [[`e6b5d90f`](https://github.com/wbkd/react-flow/commit/e6b5d90f61c8ee60e817bba232a162cae2ab3e2a), [`6ee44e07`](https://github.com/wbkd/react-flow/commit/6ee44e076eaa6908d07578a757a5187642b732ae), [`aa69c207`](https://github.com/wbkd/react-flow/commit/aa69c20765e6978f4f9c8cc63ed7110dbf6d9d9d), [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18), [`0df02f35`](https://github.com/wbkd/react-flow/commit/0df02f35f8d6c54dae36af18278feadc77acb2d6)]: - - @reactflow/core@11.3.2 - -## 11.0.6 - -### Patch Changes - -- Updated dependencies [[`c828bfda`](https://github.com/wbkd/react-flow/commit/c828bfda0a8c4774bc43588640c7cca0cfdcb3f4), [`b0302ce4`](https://github.com/wbkd/react-flow/commit/b0302ce4261a992bee841bae84af347d03be690f), [`b2c72813`](https://github.com/wbkd/react-flow/commit/b2c728137d1b53e38883f044fa447585c377a6af)]: - - @reactflow/core@11.3.1 - -## 11.0.5 - -### Patch Changes - -- Updated dependencies [[`92cf497e`](https://github.com/wbkd/react-flow/commit/92cf497eb72f21af592a53f5af9770c9f1e6d940), [`98116d43`](https://github.com/wbkd/react-flow/commit/98116d431f9fcdcc9b23a5b606a94ec0740b64cd), [`a39224b3`](https://github.com/wbkd/react-flow/commit/a39224b3a80afbdb83fc4490dd5f4f2be23cd4dd), [`5e8b67dd`](https://github.com/wbkd/react-flow/commit/5e8b67dd41f9bb60dcd7f5d14cc34b42c970e967), [`2a1c7db6`](https://github.com/wbkd/react-flow/commit/2a1c7db6b27ac0f4f81dcef2d593f4753c4321c7)]: - - @reactflow/core@11.3.0 - -## 11.0.4 - -### Patch Changes - -- Updated dependencies [[`740659c0`](https://github.com/wbkd/react-flow/commit/740659c0e788c7572d4a1e64e1d33d60712233fc), [`7902a3ce`](https://github.com/wbkd/react-flow/commit/7902a3ce3188426d5cd07cf0943a68f679e67948), [`b25d499e`](https://github.com/wbkd/react-flow/commit/b25d499ec05b5c6f21ac552d03650eb37433552e), [`4fc1253e`](https://github.com/wbkd/react-flow/commit/4fc1253eadf9b7dd392d8dc2348f44fa8d08f931), [`8ba4dd5d`](https://github.com/wbkd/react-flow/commit/8ba4dd5d1d4b2e6f107c148de62aec0b688d8b21)]: - - @reactflow/core@11.2.0 - -## 11.0.3 - -### Patch Changes - -- cleanup types -- cleanup rf id handling -- Updated dependencies: - - @reactflow/core@11.1.2 - -## 11.0.2 - -### Patch Changes - -- Updated dependencies: - - @reactflow/core@11.1.1 - -## 11.0.1 - -### Patch Changes - -- [`def11008`](https://github.com/wbkd/react-flow/commit/def11008d88749fec40e6fcba8bc41eea2511bab) Thanks [@moklick](https://github.com/moklick)! - default gap = 20 - -- Updated dependencies [[`def11008`](https://github.com/wbkd/react-flow/commit/def11008d88749fec40e6fcba8bc41eea2511bab), [`d00faa6b`](https://github.com/wbkd/react-flow/commit/d00faa6b3e77388bfd655d4c02e9a5375bc515e4)]: - - @reactflow/core@11.1.0 - -## 11.0.0 - -### Major Changes - -- **Better [Accessibility](/docs/guides/accessibility)** - - Nodes and edges are focusable, selectable, moveable and deleteable with the keyboard. - - `aria-` default attributes for all elements and controllable via `ariaLabel` options - - Keyboard controls can be disabled with the new `disableKeyboardA11y` prop -- **Better selectable edges** via new edge option: `interactionWidth` - renders invisible edge that makes it easier to interact -- **Better routing for smoothstep and step edges**: https://twitter.com/reactflowdev/status/1567535405284614145 -- **Nicer edge updating behaviour**: https://twitter.com/reactflowdev/status/1564966917517021184 -- **Node origin**: The new `nodeOrigin` prop lets you control the origin of a node. Useful for layouting. -- **New background pattern**: `BackgroundVariant.Cross` variant -- **[`useOnViewportChange`](/docs/api/hooks/use-on-viewport-change) hook** - handle viewport changes within a component -- **[`useOnSelectionChange`](/docs/api/hooks/use-on-selection-change) hook** - handle selection changes within a component -- **[`useNodesInitialized`](/docs/api/hooks/use-nodes-initialized) hook** - returns true if all nodes are initialized and if there is more than one node -- **Deletable option** for Nodes and edges -- **New Event handlers**: `onPaneMouseEnter`, `onPaneMouseMove` and `onPaneMouseLeave` -- **Edge `pathOptions`** for `smoothstep` and `default` edges -- **Nicer cursor defaults**: Cursor is grabbing, while dragging a node or panning -- **Pane moveable** with middle mouse button -- **Pan over nodes** when they are not draggable (`draggable=false` or `nodesDraggable` false) -- **[``](/docs/api/edges/base-edge) component** that makes it easier to build custom edges -- **[Separately installable packages](/docs/overview/packages/)** - - @reactflow/core - - @reactflow/background - - @reactflow/controls - - @reactflow/minimap - -### Patch Changes - -- Updated dependencies: - - @reactflow/core@11.0.0 diff --git a/packages/background/README.md b/packages/background/README.md deleted file mode 100644 index a55c5bfb0..000000000 --- a/packages/background/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# @reactflow/background - -Background component for React Flow. - -## Installation - -```sh -npm install @reactflow/background -``` - diff --git a/packages/background/package.json b/packages/background/package.json deleted file mode 100644 index 9f9bce1ec..000000000 --- a/packages/background/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "@reactflow/background", - "version": "11.2.2", - "description": "Background component with different variants for React Flow", - "keywords": [ - "react", - "node-based UI", - "graph", - "diagram", - "workflow", - "react-flow" - ], - "files": [ - "dist" - ], - "source": "src/index.tsx", - "main": "dist/umd/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": [ - "*.css" - ], - "scripts": { - "dev": "rollup --config node:@reactflow/rollup-config --watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production", - "lint": "eslint --ext .js,.jsx,.ts,.tsx src", - "typecheck": "tsc --noEmit", - "clean": "rimraf dist .turbo" - }, - "publishConfig": { - "access": "public" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/wbkd/react-flow.git", - "directory": "packages/background" - }, - "dependencies": { - "@reactflow/core": "workspace:*", - "classcat": "^5.0.3", - "zustand": "^4.3.1" - }, - "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", - "@types/node": "^18.7.16", - "@types/react": ">=17", - "react": "^18.2.0", - "typescript": "^4.9.4" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - }, - "rollup": { - "globals": { - "zustand": "Zustand", - "zustand/shallow": "zustandShallow", - "classcat": "cc" - }, - "name": "ReactFlowBackground" - } -} diff --git a/packages/background/tsconfig.json b/packages/background/tsconfig.json deleted file mode 100644 index d5b6da78c..000000000 --- a/packages/background/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@reactflow/tsconfig/react.json", - "display": "@reactflow/background", - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/controls/.eslintrc.js b/packages/controls/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/controls/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/controls/CHANGELOG.md b/packages/controls/CHANGELOG.md deleted file mode 100644 index b453b88c1..000000000 --- a/packages/controls/CHANGELOG.md +++ /dev/null @@ -1,212 +0,0 @@ -# @reactflow/controls - -## 11.1.13 - -### Patch Changes - -- [#3063](https://github.com/wbkd/react-flow/pull/3063) [`33915b88`](https://github.com/wbkd/react-flow/commit/33915b88c2ae701847870346b381f9cfa86c6459) - disable zoom buttons when min/max is reached - -- Updated dependencies [[`70ec97f7`](https://github.com/wbkd/react-flow/commit/70ec97f7daec6d5401215cae3edac04aea88a3ba), [`d2d1aebc`](https://github.com/wbkd/react-flow/commit/d2d1aebc0f7fea4183406e7d1915b7fcd6995f48), [`4374459e`](https://github.com/wbkd/react-flow/commit/4374459ef9fec797bbc0407231f09a1acacd245b)]: - - @reactflow/core@11.7.2 - -## 11.1.12 - -### Patch Changes - -- [#3054](https://github.com/wbkd/react-flow/pull/3054) [`46526b4e`](https://github.com/wbkd/react-flow/commit/46526b4e02b83d74726701e3ba73d0be8cf80787) - fix(icons): show correct lock icon - -- Updated dependencies [[`cf7a7d3d`](https://github.com/wbkd/react-flow/commit/cf7a7d3dad1e73215a72a5dc72e21fd50208cdbb), [`07b975bb`](https://github.com/wbkd/react-flow/commit/07b975bbee3580249e36a19582213b250f78093c), [`c80d269b`](https://github.com/wbkd/react-flow/commit/c80d269b85a0054221f4639c328fc36a3befbe70), [`a3fa164c`](https://github.com/wbkd/react-flow/commit/a3fa164c34cc820c79bb031c9fd97b72a3546614)]: - - @reactflow/core@11.7.1 - -## 11.1.11 - -### Patch Changes - -- Updated dependencies [[`098eee3d`](https://github.com/wbkd/react-flow/commit/098eee3d41dabc870777b081796401ff13b5a776), [`fe8cac0a`](https://github.com/wbkd/react-flow/commit/fe8cac0adb359109e0e9eafe8b9261ba354076bb), [`4a4ca171`](https://github.com/wbkd/react-flow/commit/4a4ca171955f5c8d58b23e3ad48406f1a21dc402), [`923a54c4`](https://github.com/wbkd/react-flow/commit/923a54c481b90954806202817ba844cfa7203a38), [`4d97a0ed`](https://github.com/wbkd/react-flow/commit/4d97a0ed168ce643fc0c99fa6b47cf1296d66065), [`c22e1c28`](https://github.com/wbkd/react-flow/commit/c22e1c28c5555a638c2a8e82c3bfc986b3965d36)]: - - @reactflow/core@11.7.0 - -## 11.1.10 - -### Patch Changes - -- Updated dependencies - -## 11.1.9 - -### Patch Changes - -- [#2895](https://github.com/wbkd/react-flow/pull/2895) [`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425) Thanks [@moklick](https://github.com/moklick)! - add data-testid for controls, minimap and background -- Updated dependencies [[`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425), [`83fc4675`](https://github.com/wbkd/react-flow/commit/83fc467545527729633e817dbccfe59d0040da4b), [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798), [`5fabd272`](https://github.com/wbkd/react-flow/commit/5fabd2720f6367f75f79a45822d8f675a3b8e1cf), [`8f080bd5`](https://github.com/wbkd/react-flow/commit/8f080bd5e0e7e6c71f51eee9c9f2bc4b25182861), [`b8886514`](https://github.com/wbkd/react-flow/commit/b88865140c72fa7e92a883498768000cb2cc96a7), [`16bf89f2`](https://github.com/wbkd/react-flow/commit/16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533)]: - - @reactflow/core@11.6.0 - -## 11.1.8 - -### Patch Changes - -- Updated dependencies [[`72216ff6`](https://github.com/wbkd/react-flow/commit/72216ff62014acd2d73999053c72bd7aeed351f6), [`959b1114`](https://github.com/wbkd/react-flow/commit/959b111448bba4686040473e46988be9e7befbe6), [`0d259b02`](https://github.com/wbkd/react-flow/commit/0d259b028558aab650546f3371a85f3bce45252f), [`f3de9335`](https://github.com/wbkd/react-flow/commit/f3de9335af6cd96cd77dc77f24a944eef85384e5), [`23424ea6`](https://github.com/wbkd/react-flow/commit/23424ea6750f092210f83df17a00c89adb910d96), [`021f5a92`](https://github.com/wbkd/react-flow/commit/021f5a9210f47a968e50446cd2f9dae1f97880a4)]: - - @reactflow/core@11.5.5 - -## 11.1.7 - -### Patch Changes - -- Updated dependencies [[`383a074a`](https://github.com/wbkd/react-flow/commit/383a074aeae6dbec8437fa08c7c8d8240838a84e)]: - - @reactflow/core@11.5.4 - -## 11.1.6 - -### Patch Changes - -- Updated dependencies [[`be8097ac`](https://github.com/wbkd/react-flow/commit/be8097acadca3054c3b236ce4296fc516010ef8c), [`1527795d`](https://github.com/wbkd/react-flow/commit/1527795d18c3af38c8ec7059436ea0fbf6c27bbd), [`3b6348a8`](https://github.com/wbkd/react-flow/commit/3b6348a8d1573afb39576327318bc172e33393c2)]: - - @reactflow/core@11.5.3 - -## 11.1.5 - -### Patch Changes - -- [#2792](https://github.com/wbkd/react-flow/pull/2792) [`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a) - Accept React 17 types as dev dependency - -- Updated dependencies [[`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a)]: - - @reactflow/core@11.5.2 - -## 11.1.4 - -### Patch Changes - -- Updated dependencies [[`71153534`](https://github.com/wbkd/react-flow/commit/7115353418ebc7f7c81ab0e861200972bbf7dbd5)]: - - @reactflow/core@11.5.1 - -## 11.1.3 - -### Patch Changes - -- Updated dependencies [[`e96309b6`](https://github.com/wbkd/react-flow/commit/e96309b6a57b1071faeebf7b0547fef7fd418694), [`85003b01`](https://github.com/wbkd/react-flow/commit/85003b01add71ea852bd5b0d2f1e7496050a6b52), [`4c516882`](https://github.com/wbkd/react-flow/commit/4c516882d2bbf426c1832a53ad40763cc1abef92)]: - - @reactflow/core@11.5.0 - -## 11.1.2 - -### Patch Changes - -- [#2741](https://github.com/wbkd/react-flow/pull/2741) [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39) - chore(dependencies): update and cleanup - -- Updated dependencies [[`e34a3072`](https://github.com/wbkd/react-flow/commit/e34a30726dc55184f59adc4f16ca5215a7c42805), [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39)]: - - @reactflow/core@11.4.2 - -## 11.1.1 - -### Patch Changes - -- Updated dependencies [[`82988485`](https://github.com/wbkd/react-flow/commit/82988485b730a9e32acbdae1ddcc81b33ddccaba), [`d91e619a`](https://github.com/wbkd/react-flow/commit/d91e619a70a95db99a621ede59bc05b5a7766086)]: - - @reactflow/core@11.4.1 - -## 11.1.0 - -### Patch Changes - -- Updated dependencies [[`ab2ff374`](https://github.com/wbkd/react-flow/commit/ab2ff3740618da48bd4350597e816c397f3d78ff), [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`7ef29108`](https://github.com/wbkd/react-flow/commit/7ef2910808aaaee029894363d52efc0c378a7654), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0 - -## 11.1.0-next.1 - -### Minor Changes - -- panOnDrag: Use numbers for prop ([1,2] = drag via middle or right mouse button) -- selection: do not include hidden nodes -- minimap: fix onNodeClick for nodes outside the viewport -- keys: allow multi select when input is focused - -### Patch Changes - -- Updated dependencies []: - - @reactflow/core@11.4.0-next.1 - -## 11.0.8-next.0 - -### Patch Changes - -- Updated dependencies [[`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0-next.0 - -## 11.0.7 - -### Patch Changes - -- Updated dependencies [[`e6b5d90f`](https://github.com/wbkd/react-flow/commit/e6b5d90f61c8ee60e817bba232a162cae2ab3e2a), [`6ee44e07`](https://github.com/wbkd/react-flow/commit/6ee44e076eaa6908d07578a757a5187642b732ae), [`aa69c207`](https://github.com/wbkd/react-flow/commit/aa69c20765e6978f4f9c8cc63ed7110dbf6d9d9d), [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18), [`0df02f35`](https://github.com/wbkd/react-flow/commit/0df02f35f8d6c54dae36af18278feadc77acb2d6)]: - - @reactflow/core@11.3.2 - -## 11.0.6 - -### Patch Changes - -- Updated dependencies [[`c828bfda`](https://github.com/wbkd/react-flow/commit/c828bfda0a8c4774bc43588640c7cca0cfdcb3f4), [`b0302ce4`](https://github.com/wbkd/react-flow/commit/b0302ce4261a992bee841bae84af347d03be690f), [`b2c72813`](https://github.com/wbkd/react-flow/commit/b2c728137d1b53e38883f044fa447585c377a6af)]: - - @reactflow/core@11.3.1 - -## 11.0.5 - -### Patch Changes - -- Updated dependencies [[`92cf497e`](https://github.com/wbkd/react-flow/commit/92cf497eb72f21af592a53f5af9770c9f1e6d940), [`98116d43`](https://github.com/wbkd/react-flow/commit/98116d431f9fcdcc9b23a5b606a94ec0740b64cd), [`a39224b3`](https://github.com/wbkd/react-flow/commit/a39224b3a80afbdb83fc4490dd5f4f2be23cd4dd), [`5e8b67dd`](https://github.com/wbkd/react-flow/commit/5e8b67dd41f9bb60dcd7f5d14cc34b42c970e967), [`2a1c7db6`](https://github.com/wbkd/react-flow/commit/2a1c7db6b27ac0f4f81dcef2d593f4753c4321c7)]: - - @reactflow/core@11.3.0 - -## 11.0.4 - -### Patch Changes - -- Updated dependencies [[`740659c0`](https://github.com/wbkd/react-flow/commit/740659c0e788c7572d4a1e64e1d33d60712233fc), [`7902a3ce`](https://github.com/wbkd/react-flow/commit/7902a3ce3188426d5cd07cf0943a68f679e67948), [`b25d499e`](https://github.com/wbkd/react-flow/commit/b25d499ec05b5c6f21ac552d03650eb37433552e), [`4fc1253e`](https://github.com/wbkd/react-flow/commit/4fc1253eadf9b7dd392d8dc2348f44fa8d08f931), [`8ba4dd5d`](https://github.com/wbkd/react-flow/commit/8ba4dd5d1d4b2e6f107c148de62aec0b688d8b21)]: - - @reactflow/core@11.2.0 - -## 11.0.3 - -### Patch Changes - -- cleanup types -- Updated dependencies: - - @reactflow/core@11.1.2 - -## 11.0.2 - -### Patch Changes - -- Updated dependencies: - - @reactflow/core@11.1.1 - -## 11.0.1 - -### Patch Changes - -- Updated dependencies [[`def11008`](https://github.com/wbkd/react-flow/commit/def11008d88749fec40e6fcba8bc41eea2511bab), [`d00faa6b`](https://github.com/wbkd/react-flow/commit/d00faa6b3e77388bfd655d4c02e9a5375bc515e4)]: - - @reactflow/core@11.1.0 - -## 11.0.0 - -### Major Changes - -- **Better [Accessibility](/docs/guides/accessibility)** - - Nodes and edges are focusable, selectable, moveable and deleteable with the keyboard. - - `aria-` default attributes for all elements and controllable via `ariaLabel` options - - Keyboard controls can be disabled with the new `disableKeyboardA11y` prop -- **Better selectable edges** via new edge option: `interactionWidth` - renders invisible edge that makes it easier to interact -- **Better routing for smoothstep and step edges**: https://twitter.com/reactflowdev/status/1567535405284614145 -- **Nicer edge updating behaviour**: https://twitter.com/reactflowdev/status/1564966917517021184 -- **Node origin**: The new `nodeOrigin` prop lets you control the origin of a node. Useful for layouting. -- **New background pattern**: `BackgroundVariant.Cross` variant -- **[`useOnViewportChange`](/docs/api/hooks/use-on-viewport-change) hook** - handle viewport changes within a component -- **[`useOnSelectionChange`](/docs/api/hooks/use-on-selection-change) hook** - handle selection changes within a component -- **[`useNodesInitialized`](/docs/api/hooks/use-nodes-initialized) hook** - returns true if all nodes are initialized and if there is more than one node -- **Deletable option** for Nodes and edges -- **New Event handlers**: `onPaneMouseEnter`, `onPaneMouseMove` and `onPaneMouseLeave` -- **Edge `pathOptions`** for `smoothstep` and `default` edges -- **Nicer cursor defaults**: Cursor is grabbing, while dragging a node or panning -- **Pane moveable** with middle mouse button -- **Pan over nodes** when they are not draggable (`draggable=false` or `nodesDraggable` false) -- **[``](/docs/api/edges/base-edge) component** that makes it easier to build custom edges -- **[Separately installable packages](/docs/overview/packages/)** - - @reactflow/core - - @reactflow/background - - @reactflow/controls - - @reactflow/minimap - -### Patch Changes - -- Updated dependencies: - - @reactflow/core@11.0.0 diff --git a/packages/controls/README.md b/packages/controls/README.md deleted file mode 100644 index 48d07fa87..000000000 --- a/packages/controls/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# @reactflow/controls - -Controls component for React Flow. - -## Installation - -```sh -npm install @reactflow/controls -``` - diff --git a/packages/controls/package.json b/packages/controls/package.json deleted file mode 100644 index 4325403ac..000000000 --- a/packages/controls/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "@reactflow/controls", - "version": "11.1.13", - "description": "Component to control the viewport of a React Flow instance", - "keywords": [ - "react", - "node-based UI", - "graph", - "diagram", - "workflow", - "react-flow" - ], - "files": [ - "dist" - ], - "source": "src/index.tsx", - "main": "dist/umd/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": [ - "*.css" - ], - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/wbkd/react-flow.git", - "directory": "packages/controls" - }, - "scripts": { - "dev": "concurrently \"rollup --config node:@reactflow/rollup-config --watch\" pnpm:css-watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production && npm run css", - "css": "postcss src/*.css --config ../../tooling/postcss-config/postcss.config.js --dir dist", - "css-watch": "pnpm css --watch", - "lint": "eslint --ext .js,.jsx,.ts,.tsx src", - "typecheck": "tsc --noEmit" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@reactflow/core": "workspace:*", - "classcat": "^5.0.3", - "zustand": "^4.3.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - }, - "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", - "@types/node": "^18.7.16", - "@types/react": ">=17", - "typescript": "^4.9.4" - }, - "rollup": { - "globals": { - "classcat": "cc", - "zustand": "Zustand", - "zustand/shallow": "zustandShallow" - }, - "name": "ReactFlowControls" - } -} diff --git a/packages/controls/src/style.css b/packages/controls/src/style.css deleted file mode 100644 index 92d55b1f8..000000000 --- a/packages/controls/src/style.css +++ /dev/null @@ -1,36 +0,0 @@ -.react-flow__controls { - box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.08); - - &-button { - border: none; - background: #fefefe; - border-bottom: 1px solid #eee; - box-sizing: content-box; - display: flex; - justify-content: center; - align-items: center; - width: 16px; - height: 16px; - cursor: pointer; - user-select: none; - padding: 5px; - - &:hover { - background: #f4f4f4; - } - - svg { - width: 100%; - max-width: 12px; - max-height: 12px; - } - - &:disabled { - pointer-events: none; - - svg { - fill-opacity: 0.4; - } - } - } -} diff --git a/packages/controls/tsconfig.json b/packages/controls/tsconfig.json deleted file mode 100644 index 81fb9c465..000000000 --- a/packages/controls/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@reactflow/tsconfig/react.json", - "display": "@reactflow/background", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/core/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json deleted file mode 100644 index 5e1c9b9a3..000000000 --- a/packages/core/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@reactflow/tsconfig/react.json", - "display": "@reactflow/core", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/edge-utils/.eslintrc.js b/packages/edge-utils/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/edge-utils/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/edge-utils/README.md b/packages/edge-utils/README.md deleted file mode 100644 index 941b215bf..000000000 --- a/packages/edge-utils/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# @reactflow/edge-utils - -Edge util functions of React Flow. - -## Installation - -```sh -npm install @reactflow/edge-utils -``` - diff --git a/packages/edge-utils/package.json b/packages/edge-utils/package.json deleted file mode 100644 index 108ac79a0..000000000 --- a/packages/edge-utils/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "@reactflow/edge-utils", - "version": "11.5.5", - "description": "Core edge utils of React Flow for creating edge paths.", - "keywords": [ - "react", - "node-based UI", - "graph", - "diagram", - "workflow", - "react-flow" - ], - "files": [ - "dist" - ], - "source": "src/index.ts", - "main": "dist/umd/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": [ - "*.css" - ], - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/wbkd/react-flow.git", - "directory": "packages/edge-utils" - }, - "scripts": { - "dev": "rollup --config node:@reactflow/rollup-config --watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production", - "lint": "eslint --ext .js,.jsx,.ts,.tsx src", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@reactflow/system": "workspace:*" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - }, - "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", - "@types/node": "^18.7.16", - "@types/react": ">=17", - "@types/react-dom": ">=17", - "react": "^18.2.0", - "typescript": "^4.9.4" - }, - "rollup": { - "globals": {}, - "name": "ReactFlowEdgeUtils" - } -} diff --git a/packages/edge-utils/tsconfig.json b/packages/edge-utils/tsconfig.json deleted file mode 100644 index b61349bb5..000000000 --- a/packages/edge-utils/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@reactflow/tsconfig/react.json", - "display": "@reactflow/utils", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/minimap/.eslintrc.js b/packages/minimap/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/minimap/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/minimap/CHANGELOG.md b/packages/minimap/CHANGELOG.md deleted file mode 100644 index bc41bc944..000000000 --- a/packages/minimap/CHANGELOG.md +++ /dev/null @@ -1,255 +0,0 @@ -# @reactflow/minimap - -## 11.5.2 - -### Patch Changes - -- Updated dependencies [[`70ec97f7`](https://github.com/wbkd/react-flow/commit/70ec97f7daec6d5401215cae3edac04aea88a3ba), [`d2d1aebc`](https://github.com/wbkd/react-flow/commit/d2d1aebc0f7fea4183406e7d1915b7fcd6995f48), [`4374459e`](https://github.com/wbkd/react-flow/commit/4374459ef9fec797bbc0407231f09a1acacd245b)]: - - @reactflow/core@11.7.2 - -## 11.5.1 - -### Patch Changes - -- Updated dependencies [[`cf7a7d3d`](https://github.com/wbkd/react-flow/commit/cf7a7d3dad1e73215a72a5dc72e21fd50208cdbb), [`07b975bb`](https://github.com/wbkd/react-flow/commit/07b975bbee3580249e36a19582213b250f78093c), [`c80d269b`](https://github.com/wbkd/react-flow/commit/c80d269b85a0054221f4639c328fc36a3befbe70), [`a3fa164c`](https://github.com/wbkd/react-flow/commit/a3fa164c34cc820c79bb031c9fd97b72a3546614)]: - - @reactflow/core@11.7.1 - -## 11.5.0 - -### Minor Changes - -- [#2944](https://github.com/wbkd/react-flow/pull/2944) Thanks [@Elringus](https://github.com/Elringus)! - add `inversePan` and `zoomStep` props - -### Patch Changes - -- Updated dependencies [[`098eee3d`](https://github.com/wbkd/react-flow/commit/098eee3d41dabc870777b081796401ff13b5a776), [`fe8cac0a`](https://github.com/wbkd/react-flow/commit/fe8cac0adb359109e0e9eafe8b9261ba354076bb), [`4a4ca171`](https://github.com/wbkd/react-flow/commit/4a4ca171955f5c8d58b23e3ad48406f1a21dc402), [`923a54c4`](https://github.com/wbkd/react-flow/commit/923a54c481b90954806202817ba844cfa7203a38), [`4d97a0ed`](https://github.com/wbkd/react-flow/commit/4d97a0ed168ce643fc0c99fa6b47cf1296d66065), [`c22e1c28`](https://github.com/wbkd/react-flow/commit/c22e1c28c5555a638c2a8e82c3bfc986b3965d36)]: - - @reactflow/core@11.7.0 - -## 11.4.1 - -### Patch Changes - -- Updated dependencies - -## 11.4.0 - -### Minor Changes - -- [#2906](https://github.com/wbkd/react-flow/pull/2906) [`4a30185a`](https://github.com/wbkd/react-flow/commit/4a30185a12899691ff61259f0db84bc5494cb573) Thanks [@hayleigh-dot-dev](https://github.com/hayleigh-dot-dev)! - Add `nodeComponent` prop for passing custom component for the nodes - -### Patch Changes - -- [#2895](https://github.com/wbkd/react-flow/pull/2895) [`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425) - add data-testid for controls, minimap and background - -- Updated dependencies [[`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425), [`83fc4675`](https://github.com/wbkd/react-flow/commit/83fc467545527729633e817dbccfe59d0040da4b), [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798), [`5fabd272`](https://github.com/wbkd/react-flow/commit/5fabd2720f6367f75f79a45822d8f675a3b8e1cf), [`8f080bd5`](https://github.com/wbkd/react-flow/commit/8f080bd5e0e7e6c71f51eee9c9f2bc4b25182861), [`b8886514`](https://github.com/wbkd/react-flow/commit/b88865140c72fa7e92a883498768000cb2cc96a7), [`16bf89f2`](https://github.com/wbkd/react-flow/commit/16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533)]: - - @reactflow/core@11.6.0 - -## 11.3.8 - -### Patch Changes - -- Updated dependencies [[`72216ff6`](https://github.com/wbkd/react-flow/commit/72216ff62014acd2d73999053c72bd7aeed351f6), [`959b1114`](https://github.com/wbkd/react-flow/commit/959b111448bba4686040473e46988be9e7befbe6), [`0d259b02`](https://github.com/wbkd/react-flow/commit/0d259b028558aab650546f3371a85f3bce45252f), [`f3de9335`](https://github.com/wbkd/react-flow/commit/f3de9335af6cd96cd77dc77f24a944eef85384e5), [`23424ea6`](https://github.com/wbkd/react-flow/commit/23424ea6750f092210f83df17a00c89adb910d96), [`021f5a92`](https://github.com/wbkd/react-flow/commit/021f5a9210f47a968e50446cd2f9dae1f97880a4)]: - - @reactflow/core@11.5.5 - -## 11.3.7 - -### Patch Changes - -- Updated dependencies [[`383a074a`](https://github.com/wbkd/react-flow/commit/383a074aeae6dbec8437fa08c7c8d8240838a84e)]: - - @reactflow/core@11.5.4 - -## 11.3.6 - -### Patch Changes - -- Updated dependencies [[`be8097ac`](https://github.com/wbkd/react-flow/commit/be8097acadca3054c3b236ce4296fc516010ef8c), [`1527795d`](https://github.com/wbkd/react-flow/commit/1527795d18c3af38c8ec7059436ea0fbf6c27bbd), [`3b6348a8`](https://github.com/wbkd/react-flow/commit/3b6348a8d1573afb39576327318bc172e33393c2)]: - - @reactflow/core@11.5.3 - -## 11.3.5 - -### Patch Changes - -- [#2792](https://github.com/wbkd/react-flow/pull/2792) [`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a) - Accept React 17 types as dev dependency - -- Updated dependencies [[`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a)]: - - @reactflow/core@11.5.2 - -## 11.3.4 - -### Patch Changes - -- Updated dependencies [[`71153534`](https://github.com/wbkd/react-flow/commit/7115353418ebc7f7c81ab0e861200972bbf7dbd5)]: - - @reactflow/core@11.5.1 - -## 11.3.3 - -### Patch Changes - -- Updated dependencies [[`e96309b6`](https://github.com/wbkd/react-flow/commit/e96309b6a57b1071faeebf7b0547fef7fd418694), [`85003b01`](https://github.com/wbkd/react-flow/commit/85003b01add71ea852bd5b0d2f1e7496050a6b52), [`4c516882`](https://github.com/wbkd/react-flow/commit/4c516882d2bbf426c1832a53ad40763cc1abef92)]: - - @reactflow/core@11.5.0 - -## 11.3.2 - -### Patch Changes - -- [#2741](https://github.com/wbkd/react-flow/pull/2741) [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39) - chore(dependencies): update and cleanup - -- Updated dependencies [[`e34a3072`](https://github.com/wbkd/react-flow/commit/e34a30726dc55184f59adc4f16ca5215a7c42805), [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39)]: - - @reactflow/core@11.4.2 - -## 11.3.1 - -### Patch Changes - -- Updated dependencies [[`82988485`](https://github.com/wbkd/react-flow/commit/82988485b730a9e32acbdae1ddcc81b33ddccaba), [`d91e619a`](https://github.com/wbkd/react-flow/commit/d91e619a70a95db99a621ede59bc05b5a7766086)]: - - @reactflow/core@11.4.1 - -## 11.3.0 - -### Patch Changes - -- [#2660](https://github.com/wbkd/react-flow/pull/2660) [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0) - Add `getNodes` function to the store so that you don't need to do `Array.from(store.getState().nodeInternals.values())` anymore. -- [#2659](https://github.com/wbkd/react-flow/pull/2659) [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9) - Use translateExtent correctly - -- Updated dependencies [[`ab2ff374`](https://github.com/wbkd/react-flow/commit/ab2ff3740618da48bd4350597e816c397f3d78ff), [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`7ef29108`](https://github.com/wbkd/react-flow/commit/7ef2910808aaaee029894363d52efc0c378a7654), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0 - -## 11.3.0-next.1 - -### Minor Changes - -- panOnDrag: Use numbers for prop ([1,2] = drag via middle or right mouse button) -- selection: do not include hidden nodes -- minimap: fix onNodeClick for nodes outside the viewport -- keys: allow multi select when input is focused - -### Patch Changes - -- Updated dependencies []: - - @reactflow/core@11.4.0-next.1 - -## 11.3.0-next.0 - -### Minor Changes - -- [#2678](https://github.com/wbkd/react-flow/pull/2678) [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493) Thanks [@moklick](https://github.com/moklick)! - ## New Features - - New props for the ReactFlow component to customize the controls of the viewport and the selection box better: - - 1. `selectionOnDrag` prop: Selection box without extra button press (need to set `panOnDrag={false} or `panOnDrag="RightClick"`) - 2. `panOnDrag="RightClick"` option - 3. `panActivationKeyCode="Space"` key code for activating dragging (useful when using `selectionOnDrag`) - 4. `selectionMode={SelectionMode.Full}`: you can chose if the selection box needs to contain a node fully (`SelectionMode.Full`) or partially (`SelectionMode.Partial`) to select it - 5. `onSelectionStart` and `onSelectionEnd` events - -### Patch Changes - -- [#2660](https://github.com/wbkd/react-flow/pull/2660) [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0) Thanks [@moklick](https://github.com/moklick)! - Add `getNodes` function to the store so that you don't need to do `Array.from(store.getState().nodeInternals.values())` anymore. - -- [#2659](https://github.com/wbkd/react-flow/pull/2659) [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9) Thanks [@moklick](https://github.com/moklick)! - Use translateExtent correctly - -- Updated dependencies [[`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0-next.0 - -## 11.2.3 - -### Patch Changes - -- [#2646](https://github.com/wbkd/react-flow/pull/2646) [`e6b5d90f`](https://github.com/wbkd/react-flow/commit/e6b5d90f61c8ee60e817bba232a162cae2ab3e2a) - Cleanup get node position with origin usage - -- Updated dependencies [[`e6b5d90f`](https://github.com/wbkd/react-flow/commit/e6b5d90f61c8ee60e817bba232a162cae2ab3e2a), [`6ee44e07`](https://github.com/wbkd/react-flow/commit/6ee44e076eaa6908d07578a757a5187642b732ae), [`aa69c207`](https://github.com/wbkd/react-flow/commit/aa69c20765e6978f4f9c8cc63ed7110dbf6d9d9d), [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18), [`0df02f35`](https://github.com/wbkd/react-flow/commit/0df02f35f8d6c54dae36af18278feadc77acb2d6)]: - - @reactflow/core@11.3.2 - -## 11.2.2 - -### Patch Changes - -- [`7ece618d`](https://github.com/wbkd/react-flow/commit/7ece618d94b76183c1ecd45b16f6ab168168351b) Thanks [@lounsbrough](https://github.com/lounsbrough)! - Fix minimap node position - -## 11.2.1 - -### Patch Changes - -- [#2595](https://github.com/wbkd/react-flow/pull/2595) [`c828bfda`](https://github.com/wbkd/react-flow/commit/c828bfda0a8c4774bc43588640c7cca0cfdcb3f4) Thanks [@chrtze](https://github.com/chrtze)! - Fix and improve the behaviour when using nodeOrigin in combination with subflows - -- Updated dependencies [[`c828bfda`](https://github.com/wbkd/react-flow/commit/c828bfda0a8c4774bc43588640c7cca0cfdcb3f4), [`b0302ce4`](https://github.com/wbkd/react-flow/commit/b0302ce4261a992bee841bae84af347d03be690f), [`b2c72813`](https://github.com/wbkd/react-flow/commit/b2c728137d1b53e38883f044fa447585c377a6af)]: - - @reactflow/core@11.3.1 - -## 11.2.0 - -### Minor Changes - -- [#2562](https://github.com/wbkd/react-flow/pull/2562) [`d745aa33`](https://github.com/wbkd/react-flow/commit/d745aa33fcd1333e12929c862f9a3d6de53f7179) Thanks [@moklick](https://github.com/moklick)! - Add maskStrokeColor and maskStrokeWidth props -- [#2545](https://github.com/wbkd/react-flow/pull/2545) [`8f63f751`](https://github.com/wbkd/react-flow/commit/8f63f751e302d3c935865760d2134350c31ab93f) Thanks [@chrtze](https://github.com/chrtze)! - add a new property "ariaLabel" to configure or remove the aria-label of the minimap component - -### Patch Changes - -- Updated dependencies [[`92cf497e`](https://github.com/wbkd/react-flow/commit/92cf497eb72f21af592a53f5af9770c9f1e6d940), [`98116d43`](https://github.com/wbkd/react-flow/commit/98116d431f9fcdcc9b23a5b606a94ec0740b64cd), [`a39224b3`](https://github.com/wbkd/react-flow/commit/a39224b3a80afbdb83fc4490dd5f4f2be23cd4dd), [`5e8b67dd`](https://github.com/wbkd/react-flow/commit/5e8b67dd41f9bb60dcd7f5d14cc34b42c970e967), [`2a1c7db6`](https://github.com/wbkd/react-flow/commit/2a1c7db6b27ac0f4f81dcef2d593f4753c4321c7)]: - - @reactflow/core@11.3.0 - -## 11.1.0 - -### Minor Changes - -- [#2530](https://github.com/wbkd/react-flow/pull/2530) [`8ba4dd5d`](https://github.com/wbkd/react-flow/commit/8ba4dd5d1d4b2e6f107c148de62aec0b688d8b21) Thanks [@moklick](https://github.com/moklick)! - Feat: Add pan and zoom to mini map - -### Patch Changes - -- Updated dependencies [[`740659c0`](https://github.com/wbkd/react-flow/commit/740659c0e788c7572d4a1e64e1d33d60712233fc), [`7902a3ce`](https://github.com/wbkd/react-flow/commit/7902a3ce3188426d5cd07cf0943a68f679e67948), [`b25d499e`](https://github.com/wbkd/react-flow/commit/b25d499ec05b5c6f21ac552d03650eb37433552e), [`4fc1253e`](https://github.com/wbkd/react-flow/commit/4fc1253eadf9b7dd392d8dc2348f44fa8d08f931), [`8ba4dd5d`](https://github.com/wbkd/react-flow/commit/8ba4dd5d1d4b2e6f107c148de62aec0b688d8b21)]: - - @reactflow/core@11.2.0 - -## 11.0.3 - -### Patch Changes - -- cleanup types -- Updated dependencies: - - @reactflow/core@11.1.2 - -## 11.0.2 - -### Patch Changes - -- Updated dependencies: - - @reactflow/core@11.1.1 - -## 11.0.1 - -### Patch Changes - -- Updated dependencies [[`def11008`](https://github.com/wbkd/react-flow/commit/def11008d88749fec40e6fcba8bc41eea2511bab), [`d00faa6b`](https://github.com/wbkd/react-flow/commit/d00faa6b3e77388bfd655d4c02e9a5375bc515e4)]: - - @reactflow/core@11.1.0 - -## 11.0.0 - -### Major Changes - -- **Better [Accessibility](/docs/guides/accessibility)** - - Nodes and edges are focusable, selectable, moveable and deleteable with the keyboard. - - `aria-` default attributes for all elements and controllable via `ariaLabel` options - - Keyboard controls can be disabled with the new `disableKeyboardA11y` prop -- **Better selectable edges** via new edge option: `interactionWidth` - renders invisible edge that makes it easier to interact -- **Better routing for smoothstep and step edges**: https://twitter.com/reactflowdev/status/1567535405284614145 -- **Nicer edge updating behaviour**: https://twitter.com/reactflowdev/status/1564966917517021184 -- **Node origin**: The new `nodeOrigin` prop lets you control the origin of a node. Useful for layouting. -- **New background pattern**: `BackgroundVariant.Cross` variant -- **[`useOnViewportChange`](/docs/api/hooks/use-on-viewport-change) hook** - handle viewport changes within a component -- **[`useOnSelectionChange`](/docs/api/hooks/use-on-selection-change) hook** - handle selection changes within a component -- **[`useNodesInitialized`](/docs/api/hooks/use-nodes-initialized) hook** - returns true if all nodes are initialized and if there is more than one node -- **Deletable option** for Nodes and edges -- **New Event handlers**: `onPaneMouseEnter`, `onPaneMouseMove` and `onPaneMouseLeave` -- **Edge `pathOptions`** for `smoothstep` and `default` edges -- **Nicer cursor defaults**: Cursor is grabbing, while dragging a node or panning -- **Pane moveable** with middle mouse button -- **Pan over nodes** when they are not draggable (`draggable=false` or `nodesDraggable` false) -- **[``](/docs/api/edges/base-edge) component** that makes it easier to build custom edges -- **[Separately installable packages](/docs/overview/packages/)** - - @reactflow/core - - @reactflow/background - - @reactflow/controls - - @reactflow/minimap - -### Patch Changes - -- Updated dependencies: - - @reactflow/core@11.0.0 diff --git a/packages/minimap/README.md b/packages/minimap/README.md deleted file mode 100644 index 2dba17d90..000000000 --- a/packages/minimap/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# @reactflow/minimap - -Mini map component for React Flow. - -## Installation - -```sh -npm install @reactflow/minimap -``` - diff --git a/packages/minimap/package.json b/packages/minimap/package.json deleted file mode 100644 index 3f9904f43..000000000 --- a/packages/minimap/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "@reactflow/minimap", - "version": "11.5.2", - "description": "Minimap component for React Flow.", - "keywords": [ - "react", - "node-based UI", - "graph", - "diagram", - "workflow", - "react-flow" - ], - "files": [ - "dist" - ], - "source": "src/index.tsx", - "main": "dist/umd/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": [ - "*.css" - ], - "publishConfig": { - "access": "public" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/wbkd/react-flow.git", - "directory": "packages/minimap" - }, - "scripts": { - "dev": "concurrently \"rollup --config node:@reactflow/rollup-config --watch\" pnpm:css-watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production && npm run css", - "css": "postcss src/*.css --config ../../tooling/postcss-config/postcss.config.js --dir dist", - "css-watch": "pnpm css --watch", - "lint": "eslint --ext .js,.jsx,.ts,.tsx src", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@reactflow/core": "workspace:*", - "@types/d3-selection": "^3.0.3", - "@types/d3-zoom": "^3.0.1", - "classcat": "^5.0.3", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0", - "zustand": "^4.3.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - }, - "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", - "@types/node": "^18.7.16", - "@types/react": ">=17", - "react": "^18.2.0", - "typescript": "^4.9.4" - }, - "rollup": { - "globals": { - "zustand": "Zustand", - "zustand/shallow": "zustandShallow", - "classcat": "cc" - }, - "name": "ReactFlowMinimap" - } -} diff --git a/packages/minimap/src/style.css b/packages/minimap/src/style.css deleted file mode 100644 index dbb9a9313..000000000 --- a/packages/minimap/src/style.css +++ /dev/null @@ -1,3 +0,0 @@ -.react-flow__minimap { - background-color: #fff; -} diff --git a/packages/minimap/tsconfig.json b/packages/minimap/tsconfig.json deleted file mode 100644 index 8a8e74cee..000000000 --- a/packages/minimap/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@reactflow/tsconfig/react.json", - "display": "@reactflow/minimap", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/node-resizer/.eslintrc.js b/packages/node-resizer/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/node-resizer/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/node-resizer/CHANGELOG.md b/packages/node-resizer/CHANGELOG.md deleted file mode 100644 index b8cfb5cb1..000000000 --- a/packages/node-resizer/CHANGELOG.md +++ /dev/null @@ -1,123 +0,0 @@ -# @reactflow/node-resizer - -## 2.1.0 - -### Minor Changes - -- [#2900](https://github.com/wbkd/react-flow/pull/2900) [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798) Thanks [@stffabi](https://github.com/stffabi)! - add `maxWidth` and `maxHeight` props -- [#2900](https://github.com/wbkd/react-flow/pull/2900) [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798) - add `keepAspectRatio` prop - -### Patch Changes - -- Updated dependencies [[`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425), [`83fc4675`](https://github.com/wbkd/react-flow/commit/83fc467545527729633e817dbccfe59d0040da4b), [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798), [`5fabd272`](https://github.com/wbkd/react-flow/commit/5fabd2720f6367f75f79a45822d8f675a3b8e1cf), [`8f080bd5`](https://github.com/wbkd/react-flow/commit/8f080bd5e0e7e6c71f51eee9c9f2bc4b25182861), [`b8886514`](https://github.com/wbkd/react-flow/commit/b88865140c72fa7e92a883498768000cb2cc96a7), [`16bf89f2`](https://github.com/wbkd/react-flow/commit/16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533)]: - - @reactflow/core@11.6.0 - -## 2.0.1 - -### Patch Changes - -- [#2792](https://github.com/wbkd/react-flow/pull/2792) [`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a) - Accept React 17 types as dev dependency - -- Updated dependencies [[`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a)]: - - @reactflow/core@11.5.2 - -## 2.0.0 - -After this update it should be easier to update the node resizer (no need to update the reactflow package anymore). - -New props: - -- `shouldResize`: user can pass a function that determines if resize should be executed -- `direction`: gets passed as an attribute on resize - -### Major Changes - -- [#2749](https://github.com/wbkd/react-flow/pull/2749) [`e347dd82`](https://github.com/wbkd/react-flow/commit/e347dd82d342bf9c4884ca667afaa5cf639283e5) - Add `shouldResize`, rename and cleanup types - `ResizeEventParams` is now `ResizeParams` - -### Patch Changes - -- Updated dependencies [[`e96309b6`](https://github.com/wbkd/react-flow/commit/e96309b6a57b1071faeebf7b0547fef7fd418694), [`85003b01`](https://github.com/wbkd/react-flow/commit/85003b01add71ea852bd5b0d2f1e7496050a6b52), [`4c516882`](https://github.com/wbkd/react-flow/commit/4c516882d2bbf426c1832a53ad40763cc1abef92)]: - - @reactflow/core@11.5.0 - -## 1.2.2 - -### Patch Changes - -- [#2741](https://github.com/wbkd/react-flow/pull/2741) [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39) - chore(dependencies): update and cleanup - -- Updated dependencies [[`e34a3072`](https://github.com/wbkd/react-flow/commit/e34a30726dc55184f59adc4f16ca5215a7c42805), [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39)]: - - @reactflow/core@11.4.2 - -## 1.2.1 - -### Patch Changes - -- Updated dependencies [[`82988485`](https://github.com/wbkd/react-flow/commit/82988485b730a9e32acbdae1ddcc81b33ddccaba), [`d91e619a`](https://github.com/wbkd/react-flow/commit/d91e619a70a95db99a621ede59bc05b5a7766086)]: - - @reactflow/core@11.4.1 - -## 1.2.0 - -### Patch Changes - -- Updated dependencies [[`ab2ff374`](https://github.com/wbkd/react-flow/commit/ab2ff3740618da48bd4350597e816c397f3d78ff), [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`7ef29108`](https://github.com/wbkd/react-flow/commit/7ef2910808aaaee029894363d52efc0c378a7654), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0 - -## 1.2.0-next.1 - -### Minor Changes - -- panOnDrag: Use numbers for prop ([1,2] = drag via middle or right mouse button) -- selection: do not include hidden nodes -- minimap: fix onNodeClick for nodes outside the viewport -- keys: allow multi select when input is focused - -### Patch Changes - -- Updated dependencies []: - - @reactflow/core@11.4.0-next.1 - -## 1.1.1-next.0 - -### Patch Changes - -- Updated dependencies [[`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0-next.0 - -## 1.1.0 - -### Minor Changes - -- Add `onResizeStart`, `onResize`, `onResizeEnd` handlers -- Fix resizing flag -- Cleanup types - -## 1.0.3 - -### Patch Changes - -- cleanup - -## 1.0.2 - -### Patch Changes - -- fix `minWidth` and `minHeight` so that it can be used dynamically - -## 1.0.1 - -### Patch Changes - -- pass `minWidth` and `minHeight` from `NodeResizer` component to `NodeResizeControl` - -## 1.0.0 - -This is a new package that exports components to build a UI for resizing a node 🎉 It exports a [``](https://reactflow.dev/docs/api/nodes/node-resizer/) component and a [``](https://reactflow.dev/docs/api/nodes/node-resizer/#noderesizecontrol--component) component. - -### Major Changes - -- [#2626](https://github.com/wbkd/react-flow/pull/2626) [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18) - Add a node resizer component that can be used to resize a custom node - -### Patch Changes - -- Updated dependencies [[`e6b5d90f`](https://github.com/wbkd/react-flow/commit/e6b5d90f61c8ee60e817bba232a162cae2ab3e2a), [`6ee44e07`](https://github.com/wbkd/react-flow/commit/6ee44e076eaa6908d07578a757a5187642b732ae), [`aa69c207`](https://github.com/wbkd/react-flow/commit/aa69c20765e6978f4f9c8cc63ed7110dbf6d9d9d), [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18), [`0df02f35`](https://github.com/wbkd/react-flow/commit/0df02f35f8d6c54dae36af18278feadc77acb2d6)]: - - @reactflow/core@11.3.2 diff --git a/packages/node-resizer/README.md b/packages/node-resizer/README.md deleted file mode 100644 index d9ec14d46..000000000 --- a/packages/node-resizer/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# @reactflow/node-resizer - -A resizer component for React Flow that can be attached to a node. - -## Installation - -```sh -npm install @reactflow/node-resizer -``` diff --git a/packages/node-resizer/package.json b/packages/node-resizer/package.json deleted file mode 100644 index 9c6d779e4..000000000 --- a/packages/node-resizer/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "@reactflow/node-resizer", - "version": "2.1.0", - "description": "A helper component for resizing nodes.", - "keywords": [ - "react", - "node-based UI", - "graph", - "diagram", - "workflow", - "react-flow" - ], - "files": [ - "dist" - ], - "source": "src/index.tsx", - "main": "dist/umd/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": [ - "*.css" - ], - "publishConfig": { - "access": "public" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/wbkd/react-flow.git", - "directory": "packages/node-resizer" - }, - "scripts": { - "dev": "concurrently \"rollup --config node:@reactflow/rollup-config --watch\" pnpm:css-watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production && npm run css", - "css": "postcss src/*.css --config ../../tooling/postcss-config/postcss.config.js --dir dist", - "css-watch": "pnpm css --watch", - "lint": "eslint --ext .js,.jsx,.ts,.tsx src", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@reactflow/core": "workspace:^11.6.0", - "@reactflow/utils": "workspace:*", - "classcat": "^5.0.4", - "d3-drag": "^3.0.0", - "d3-selection": "^3.0.0", - "zustand": "^4.3.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - }, - "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", - "@types/d3-drag": "^3.0.1", - "@types/d3-selection": "^3.0.3", - "@types/node": "^18.7.16", - "@types/react": ">=17", - "@types/react-dom": ">=17", - "react": "^18.2.0", - "typescript": "^4.9.4" - }, - "rollup": { - "globals": { - "zustand": "Zustand", - "zustand/shallow": "zustandShallow", - "classcat": "cc" - }, - "name": "ReactFlowNodeResizer" - } -} diff --git a/packages/node-resizer/tsconfig.json b/packages/node-resizer/tsconfig.json deleted file mode 100644 index d0e5a1ce5..000000000 --- a/packages/node-resizer/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@reactflow/tsconfig/react.json", - "display": "@reactflow/node-resizer", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/node-toolbar/.eslintrc.js b/packages/node-toolbar/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/node-toolbar/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/node-toolbar/CHANGELOG.md b/packages/node-toolbar/CHANGELOG.md deleted file mode 100644 index f2f8c21a8..000000000 --- a/packages/node-toolbar/CHANGELOG.md +++ /dev/null @@ -1,167 +0,0 @@ -# @reactflow/node-toolbar - -## 1.2.1 - -### Patch Changes - -- Updated dependencies [[`70ec97f7`](https://github.com/wbkd/react-flow/commit/70ec97f7daec6d5401215cae3edac04aea88a3ba), [`d2d1aebc`](https://github.com/wbkd/react-flow/commit/d2d1aebc0f7fea4183406e7d1915b7fcd6995f48), [`4374459e`](https://github.com/wbkd/react-flow/commit/4374459ef9fec797bbc0407231f09a1acacd245b)]: - - @reactflow/core@11.7.2 - -## 1.2.0 - -### Minor Changes - -- [#3052](https://github.com/wbkd/react-flow/pull/3052) [`55e05cf7`](https://github.com/wbkd/react-flow/commit/55e05cf76ae21863691153e76dbd51d1eecd2c60) Thanks [@Noam3kCH](https://github.com/Noam3kCH)! - feat(align): add prop to align bar at start, center or end - -### Patch Changes - -- Updated dependencies [[`cf7a7d3d`](https://github.com/wbkd/react-flow/commit/cf7a7d3dad1e73215a72a5dc72e21fd50208cdbb), [`07b975bb`](https://github.com/wbkd/react-flow/commit/07b975bbee3580249e36a19582213b250f78093c), [`c80d269b`](https://github.com/wbkd/react-flow/commit/c80d269b85a0054221f4639c328fc36a3befbe70), [`a3fa164c`](https://github.com/wbkd/react-flow/commit/a3fa164c34cc820c79bb031c9fd97b72a3546614)]: - - @reactflow/core@11.7.1 - -## 1.1.11 - -### Patch Changes - -- Updated dependencies [[`098eee3d`](https://github.com/wbkd/react-flow/commit/098eee3d41dabc870777b081796401ff13b5a776), [`fe8cac0a`](https://github.com/wbkd/react-flow/commit/fe8cac0adb359109e0e9eafe8b9261ba354076bb), [`4a4ca171`](https://github.com/wbkd/react-flow/commit/4a4ca171955f5c8d58b23e3ad48406f1a21dc402), [`923a54c4`](https://github.com/wbkd/react-flow/commit/923a54c481b90954806202817ba844cfa7203a38), [`4d97a0ed`](https://github.com/wbkd/react-flow/commit/4d97a0ed168ce643fc0c99fa6b47cf1296d66065), [`c22e1c28`](https://github.com/wbkd/react-flow/commit/c22e1c28c5555a638c2a8e82c3bfc986b3965d36)]: - - @reactflow/core@11.7.0 - -## 1.1.10 - -### Patch Changes - -- Updated dependencies - -## 1.1.9 - -### Patch Changes - -- Updated dependencies [[`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425), [`83fc4675`](https://github.com/wbkd/react-flow/commit/83fc467545527729633e817dbccfe59d0040da4b), [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798), [`5fabd272`](https://github.com/wbkd/react-flow/commit/5fabd2720f6367f75f79a45822d8f675a3b8e1cf), [`8f080bd5`](https://github.com/wbkd/react-flow/commit/8f080bd5e0e7e6c71f51eee9c9f2bc4b25182861), [`b8886514`](https://github.com/wbkd/react-flow/commit/b88865140c72fa7e92a883498768000cb2cc96a7), [`16bf89f2`](https://github.com/wbkd/react-flow/commit/16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533)]: - - @reactflow/core@11.6.0 - -## 1.1.8 - -### Patch Changes - -- Updated dependencies [[`72216ff6`](https://github.com/wbkd/react-flow/commit/72216ff62014acd2d73999053c72bd7aeed351f6), [`959b1114`](https://github.com/wbkd/react-flow/commit/959b111448bba4686040473e46988be9e7befbe6), [`0d259b02`](https://github.com/wbkd/react-flow/commit/0d259b028558aab650546f3371a85f3bce45252f), [`f3de9335`](https://github.com/wbkd/react-flow/commit/f3de9335af6cd96cd77dc77f24a944eef85384e5), [`23424ea6`](https://github.com/wbkd/react-flow/commit/23424ea6750f092210f83df17a00c89adb910d96), [`021f5a92`](https://github.com/wbkd/react-flow/commit/021f5a9210f47a968e50446cd2f9dae1f97880a4)]: - - @reactflow/core@11.5.5 - -## 1.1.7 - -### Patch Changes - -- Updated dependencies [[`383a074a`](https://github.com/wbkd/react-flow/commit/383a074aeae6dbec8437fa08c7c8d8240838a84e)]: - - @reactflow/core@11.5.4 - -## 1.1.6 - -### Patch Changes - -- Updated dependencies [[`be8097ac`](https://github.com/wbkd/react-flow/commit/be8097acadca3054c3b236ce4296fc516010ef8c), [`1527795d`](https://github.com/wbkd/react-flow/commit/1527795d18c3af38c8ec7059436ea0fbf6c27bbd), [`3b6348a8`](https://github.com/wbkd/react-flow/commit/3b6348a8d1573afb39576327318bc172e33393c2)]: - - @reactflow/core@11.5.3 - -## 1.1.5 - -### Patch Changes - -- [#2792](https://github.com/wbkd/react-flow/pull/2792) [`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a) - Accept React 17 types as dev dependency - -- Updated dependencies [[`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a)]: - - @reactflow/core@11.5.2 - -## 1.1.4 - -### Patch Changes - -- Updated dependencies [[`71153534`](https://github.com/wbkd/react-flow/commit/7115353418ebc7f7c81ab0e861200972bbf7dbd5)]: - - @reactflow/core@11.5.1 - -## 1.1.3 - -### Patch Changes - -- Updated dependencies [[`e96309b6`](https://github.com/wbkd/react-flow/commit/e96309b6a57b1071faeebf7b0547fef7fd418694), [`85003b01`](https://github.com/wbkd/react-flow/commit/85003b01add71ea852bd5b0d2f1e7496050a6b52), [`4c516882`](https://github.com/wbkd/react-flow/commit/4c516882d2bbf426c1832a53ad40763cc1abef92)]: - - @reactflow/core@11.5.0 - -## 1.1.2 - -### Patch Changes - -- [#2741](https://github.com/wbkd/react-flow/pull/2741) [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39) - chore(dependencies): update and cleanup - -- Updated dependencies [[`e34a3072`](https://github.com/wbkd/react-flow/commit/e34a30726dc55184f59adc4f16ca5215a7c42805), [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39)]: - - @reactflow/core@11.4.2 - -## 1.1.1 - -### Patch Changes - -- Updated dependencies [[`82988485`](https://github.com/wbkd/react-flow/commit/82988485b730a9e32acbdae1ddcc81b33ddccaba), [`d91e619a`](https://github.com/wbkd/react-flow/commit/d91e619a70a95db99a621ede59bc05b5a7766086)]: - - @reactflow/core@11.4.1 - -## 1.1.0 - -### Patch Changes - -- [#2660](https://github.com/wbkd/react-flow/pull/2660) [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0) - Add `getNodes` function to the store so that you don't need to do `Array.from(store.getState().nodeInternals.values())` anymore. - -- Updated dependencies [[`ab2ff374`](https://github.com/wbkd/react-flow/commit/ab2ff3740618da48bd4350597e816c397f3d78ff), [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`7ef29108`](https://github.com/wbkd/react-flow/commit/7ef2910808aaaee029894363d52efc0c378a7654), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0 - -## 1.1.0-next.1 - -### Minor Changes - -- panOnDrag: Use numbers for prop ([1,2] = drag via middle or right mouse button) - selection: do not include hidden nodes - minimap: fix onNodeClick for nodes outside the viewport - keys: allow multi select when input is focused - -### Patch Changes - -- Updated dependencies []: - - @reactflow/core@11.4.0-next.1 - -## 1.1.0-next.0 - -### Minor Changes - -- [#2678](https://github.com/wbkd/react-flow/pull/2678) [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493) Thanks [@moklick](https://github.com/moklick)! - ## New Features - - New props for the ReactFlow component to customize the controls of the viewport and the selection box better: - - 1. `selectionOnDrag` prop: Selection box without extra button press (need to set `panOnDrag={false} or `panOnDrag="RightClick"`) - 2. `panOnDrag="RightClick"` option - 3. `panActivationKeyCode="Space"` key code for activating dragging (useful when using `selectionOnDrag`) - 4. `selectionMode={SelectionMode.Full}`: you can chose if the selection box needs to contain a node fully (`SelectionMode.Full`) or partially (`SelectionMode.Partial`) to select it - 5. `onSelectionStart` and `onSelectionEnd` events - -### Patch Changes - -- [#2660](https://github.com/wbkd/react-flow/pull/2660) [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0) Thanks [@moklick](https://github.com/moklick)! - Add `getNodes` function to the store so that you don't need to do `Array.from(store.getState().nodeInternals.values())` anymore. - -- Updated dependencies [[`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0-next.0 - -## 1.0.2 - -### Patch Changes - -- [#2626](https://github.com/wbkd/react-flow/pull/2626) [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18) - Get nodeId from React Flow context if it is not passed explicitly as prop - -- Updated dependencies [[`e6b5d90f`](https://github.com/wbkd/react-flow/commit/e6b5d90f61c8ee60e817bba232a162cae2ab3e2a), [`6ee44e07`](https://github.com/wbkd/react-flow/commit/6ee44e076eaa6908d07578a757a5187642b732ae), [`aa69c207`](https://github.com/wbkd/react-flow/commit/aa69c20765e6978f4f9c8cc63ed7110dbf6d9d9d), [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18), [`0df02f35`](https://github.com/wbkd/react-flow/commit/0df02f35f8d6c54dae36af18278feadc77acb2d6)]: - - @reactflow/core@11.3.2 - -## 1.0.1 - -### Patch Changes - -- [#2594](https://github.com/wbkd/react-flow/pull/2594) [`ec94d9ec`](https://github.com/wbkd/react-flow/commit/ec94d9ecdc964d6d66c04e9242f195614bbfdbbe) Thanks [@chrtze](https://github.com/chrtze)! - Allow multiple node ids to be passed for enabling multi selection toolbars - -- Updated dependencies [[`c828bfda`](https://github.com/wbkd/react-flow/commit/c828bfda0a8c4774bc43588640c7cca0cfdcb3f4), [`b0302ce4`](https://github.com/wbkd/react-flow/commit/b0302ce4261a992bee841bae84af347d03be690f), [`b2c72813`](https://github.com/wbkd/react-flow/commit/b2c728137d1b53e38883f044fa447585c377a6af)]: - - @reactflow/core@11.3.1 - -## 1.0.0 - -### Major Changes - -- [#2563](https://github.com/wbkd/react-flow/pull/2563) [`98116d43`](https://github.com/wbkd/react-flow/commit/98116d431f9fcdcc9b23a5b606a94ec0740b64cd) Thanks [@chrtze](https://github.com/chrtze)! - Export a new component "NodeToolbar" that renders a fixed element attached to a node diff --git a/packages/node-toolbar/README.md b/packages/node-toolbar/README.md deleted file mode 100644 index 210d62ac0..000000000 --- a/packages/node-toolbar/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# @reactflow/node-toolbar - -A toolbar component for React Flow that can be attached to a node. - -## Installation - -```sh -npm install @reactflow/node-toolbar -``` - diff --git a/packages/node-toolbar/package.json b/packages/node-toolbar/package.json deleted file mode 100644 index 53344f04a..000000000 --- a/packages/node-toolbar/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "@reactflow/node-toolbar", - "version": "1.2.1", - "description": "A toolbar component for React Flow that can be attached to a node.", - "keywords": [ - "react", - "node-based UI", - "graph", - "diagram", - "workflow", - "react-flow" - ], - "files": [ - "dist" - ], - "source": "src/index.tsx", - "main": "dist/umd/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": [ - "*.css" - ], - "publishConfig": { - "access": "public" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/wbkd/react-flow.git", - "directory": "packages/node-toolbar" - }, - "scripts": { - "dev": "concurrently \"rollup --config node:@reactflow/rollup-config --watch\" pnpm:css-watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production", - "lint": "eslint --ext .js,.jsx,.ts,.tsx src", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@reactflow/core": "workspace:*", - "classcat": "^5.0.3", - "zustand": "^4.3.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - }, - "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", - "@types/node": "^18.7.16", - "@types/react": ">=17", - "@types/react-dom": ">=17", - "react": "^18.2.0", - "typescript": "^4.9.4" - }, - "rollup": { - "globals": { - "zustand": "Zustand", - "zustand/shallow": "zustandShallow", - "classcat": "cc" - }, - "name": "ReactFlowNodeToolbar" - } -} diff --git a/packages/node-toolbar/tsconfig.json b/packages/node-toolbar/tsconfig.json deleted file mode 100644 index 994d3bf0e..000000000 --- a/packages/node-toolbar/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@reactflow/tsconfig/react.json", - "display": "@reactflow/node-toolbar", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/react/.eslintrc.js b/packages/react/.eslintrc.js new file mode 100644 index 000000000..4e7ac3548 --- /dev/null +++ b/packages/react/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['@xyflow/eslint-config'], +}; diff --git a/packages/core/CHANGELOG.md b/packages/react/CHANGELOG.md similarity index 100% rename from packages/core/CHANGELOG.md rename to packages/react/CHANGELOG.md diff --git a/packages/core/README.md b/packages/react/README.md similarity index 100% rename from packages/core/README.md rename to packages/react/README.md diff --git a/packages/core/package.json b/packages/react/package.json similarity index 75% rename from packages/core/package.json rename to packages/react/package.json index 5faf08179..b3a0dc322 100644 --- a/packages/core/package.json +++ b/packages/react/package.json @@ -1,5 +1,5 @@ { - "name": "@reactflow/core", + "name": "@xyflow/react", "version": "11.7.2", "description": "Core components and util functions of React Flow.", "keywords": [ @@ -8,7 +8,8 @@ "graph", "diagram", "workflow", - "react-flow" + "react-flow", + "xyflow" ], "files": [ "dist" @@ -30,21 +31,19 @@ "directory": "packages/core" }, "scripts": { - "dev": "concurrently \"rollup --config node:@reactflow/rollup-config --watch\" pnpm:css-watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production && npm run css", + "dev": "concurrently \"rollup --config node:@xyflow/rollup-config --watch\" pnpm:css-watch", + "build": "rollup --config node:@xyflow/rollup-config --environment NODE_ENV:production && npm run css", "css": "postcss src/styles/{base,style}.css --config ./../../tooling/postcss-config/postcss.config.js --dir dist", "css-watch": "pnpm css --watch", "lint": "eslint --ext .js,.jsx,.ts,.tsx src", "typecheck": "tsc --noEmit" }, "dependencies": { - "@reactflow/edge-utils": "workspace:*", - "@reactflow/system": "workspace:*", - "@reactflow/utils": "workspace:*", "@types/d3": "^7.4.0", "@types/d3-drag": "^3.0.1", "@types/d3-selection": "^3.0.3", "@types/d3-zoom": "^3.0.1", + "@xyflow/system": "workspace:*", "classcat": "^5.0.3", "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", @@ -56,9 +55,9 @@ "react-dom": ">=17" }, "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", + "@xyflow/eslint-config": "workspace:*", + "@xyflow/rollup-config": "workspace:*", + "@xyflow/tsconfig": "workspace:*", "@types/node": "^18.7.16", "@types/react": ">=17", "@types/react-dom": ">=17", diff --git a/packages/background/src/Background.tsx b/packages/react/src/additional-components/Background/Background.tsx similarity index 94% rename from packages/background/src/Background.tsx rename to packages/react/src/additional-components/Background/Background.tsx index e0efd77bb..31a280d08 100644 --- a/packages/background/src/Background.tsx +++ b/packages/react/src/additional-components/Background/Background.tsx @@ -1,8 +1,9 @@ import { memo, useRef } from 'react'; import cc from 'classcat'; -import { useStore, ReactFlowState } from '@reactflow/core'; import { shallow } from 'zustand/shallow'; +import { useStore } from '../../hooks/useStore'; +import { type ReactFlowState } from '../../types'; import { BackgroundProps, BackgroundVariant } from './types'; import { DotPattern, LinePattern } from './Patterns'; @@ -64,7 +65,7 @@ function Background({ data-testid="rf__background" > )} - + ); } diff --git a/packages/background/src/Patterns.tsx b/packages/react/src/additional-components/Background/Patterns.tsx similarity index 100% rename from packages/background/src/Patterns.tsx rename to packages/react/src/additional-components/Background/Patterns.tsx diff --git a/packages/background/src/index.tsx b/packages/react/src/additional-components/Background/index.tsx similarity index 100% rename from packages/background/src/index.tsx rename to packages/react/src/additional-components/Background/index.tsx diff --git a/packages/background/src/types.ts b/packages/react/src/additional-components/Background/types.ts similarity index 100% rename from packages/background/src/types.ts rename to packages/react/src/additional-components/Background/types.ts diff --git a/packages/controls/src/ControlButton.tsx b/packages/react/src/additional-components/Controls/ControlButton.tsx similarity index 100% rename from packages/controls/src/ControlButton.tsx rename to packages/react/src/additional-components/Controls/ControlButton.tsx diff --git a/packages/controls/src/Controls.tsx b/packages/react/src/additional-components/Controls/Controls.tsx similarity index 93% rename from packages/controls/src/Controls.tsx rename to packages/react/src/additional-components/Controls/Controls.tsx index cf8a246f2..99139b81f 100644 --- a/packages/controls/src/Controls.tsx +++ b/packages/react/src/additional-components/Controls/Controls.tsx @@ -1,7 +1,11 @@ import { memo, useEffect, useState, type FC, type PropsWithChildren } from 'react'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; -import { useStore, useStoreApi, useReactFlow, Panel, type ReactFlowState } from '@reactflow/core'; + +import { useStore, useStoreApi } from '../../hooks/useStore'; +import useReactFlow from '../../hooks/useReactFlow'; +import Panel from '../../components/Panel'; +import { type ReactFlowState } from '../../types'; import PlusIcon from './Icons/Plus'; import MinusIcon from './Icons/Minus'; diff --git a/packages/controls/src/Icons/FitView.tsx b/packages/react/src/additional-components/Controls/Icons/FitView.tsx similarity index 100% rename from packages/controls/src/Icons/FitView.tsx rename to packages/react/src/additional-components/Controls/Icons/FitView.tsx diff --git a/packages/controls/src/Icons/Lock.tsx b/packages/react/src/additional-components/Controls/Icons/Lock.tsx similarity index 100% rename from packages/controls/src/Icons/Lock.tsx rename to packages/react/src/additional-components/Controls/Icons/Lock.tsx diff --git a/packages/controls/src/Icons/Minus.tsx b/packages/react/src/additional-components/Controls/Icons/Minus.tsx similarity index 100% rename from packages/controls/src/Icons/Minus.tsx rename to packages/react/src/additional-components/Controls/Icons/Minus.tsx diff --git a/packages/controls/src/Icons/Plus.tsx b/packages/react/src/additional-components/Controls/Icons/Plus.tsx similarity index 100% rename from packages/controls/src/Icons/Plus.tsx rename to packages/react/src/additional-components/Controls/Icons/Plus.tsx diff --git a/packages/controls/src/Icons/Unlock.tsx b/packages/react/src/additional-components/Controls/Icons/Unlock.tsx similarity index 100% rename from packages/controls/src/Icons/Unlock.tsx rename to packages/react/src/additional-components/Controls/Icons/Unlock.tsx diff --git a/packages/controls/src/index.tsx b/packages/react/src/additional-components/Controls/index.tsx similarity index 100% rename from packages/controls/src/index.tsx rename to packages/react/src/additional-components/Controls/index.tsx diff --git a/packages/react/src/additional-components/Controls/style.css b/packages/react/src/additional-components/Controls/style.css new file mode 100644 index 000000000..e69de29bb diff --git a/packages/controls/src/types.ts b/packages/react/src/additional-components/Controls/types.ts similarity index 82% rename from packages/controls/src/types.ts rename to packages/react/src/additional-components/Controls/types.ts index 3cfcad29e..2d93540ce 100644 --- a/packages/controls/src/types.ts +++ b/packages/react/src/additional-components/Controls/types.ts @@ -1,5 +1,7 @@ import type { ButtonHTMLAttributes, HTMLAttributes } from 'react'; -import type { FitViewOptions, PanelPosition } from '@reactflow/core'; +import type { PanelPosition } from '@xyflow/system'; + +import type { FitViewOptions } from '../../types'; export type ControlProps = HTMLAttributes & { showZoom?: boolean; diff --git a/packages/minimap/src/MiniMap.tsx b/packages/react/src/additional-components/MiniMap/MiniMap.tsx similarity index 97% rename from packages/minimap/src/MiniMap.tsx rename to packages/react/src/additional-components/MiniMap/MiniMap.tsx index dcefec439..125f40e9c 100644 --- a/packages/minimap/src/MiniMap.tsx +++ b/packages/react/src/additional-components/MiniMap/MiniMap.tsx @@ -6,16 +6,16 @@ import { shallow } from 'zustand/shallow'; import { type D3ZoomEvent, zoom } from 'd3-zoom'; import { select, pointer } from 'd3-selection'; import { - useStore, getRectOfNodes, - Panel, getBoundsOfRects, - useStoreApi, getNodePositionWithOrigin, CoordinateExtent, - type ReactFlowState, type Rect, -} from '@reactflow/core'; +} from '@xyflow/system'; + +import { useStore, useStoreApi } from '../../hooks/useStore'; +import Panel from '../../components/Panel'; +import type { ReactFlowState } from '../../types'; import MiniMapNode from './MiniMapNode'; import type { MiniMapProps, GetMiniMapNodeAttribute } from './types'; diff --git a/packages/minimap/src/MiniMapNode.tsx b/packages/react/src/additional-components/MiniMap/MiniMapNode.tsx similarity index 100% rename from packages/minimap/src/MiniMapNode.tsx rename to packages/react/src/additional-components/MiniMap/MiniMapNode.tsx diff --git a/packages/minimap/src/index.tsx b/packages/react/src/additional-components/MiniMap/index.tsx similarity index 100% rename from packages/minimap/src/index.tsx rename to packages/react/src/additional-components/MiniMap/index.tsx diff --git a/packages/minimap/src/types.ts b/packages/react/src/additional-components/MiniMap/types.ts similarity index 92% rename from packages/minimap/src/types.ts rename to packages/react/src/additional-components/MiniMap/types.ts index f86722ede..c51ca69ca 100644 --- a/packages/minimap/src/types.ts +++ b/packages/react/src/additional-components/MiniMap/types.ts @@ -1,6 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { ComponentType, CSSProperties, HTMLAttributes, MouseEvent } from 'react'; -import type { Node, PanelPosition, XYPosition } from '@reactflow/core'; +import type { PanelPosition, XYPosition } from '@xyflow/system'; + +import type { Node } from '../../types'; export type GetMiniMapNodeAttribute = (node: Node) => string; diff --git a/packages/node-resizer/src/NodeResizer.tsx b/packages/react/src/additional-components/NodeResizer/NodeResizer.tsx similarity index 100% rename from packages/node-resizer/src/NodeResizer.tsx rename to packages/react/src/additional-components/NodeResizer/NodeResizer.tsx diff --git a/packages/node-resizer/src/ResizeControl.tsx b/packages/react/src/additional-components/NodeResizer/ResizeControl.tsx similarity index 95% rename from packages/node-resizer/src/ResizeControl.tsx rename to packages/react/src/additional-components/NodeResizer/ResizeControl.tsx index 715186058..cbf75c676 100644 --- a/packages/node-resizer/src/ResizeControl.tsx +++ b/packages/react/src/additional-components/NodeResizer/ResizeControl.tsx @@ -2,10 +2,17 @@ import { useRef, useEffect, memo } from 'react'; import cc from 'classcat'; import { drag } from 'd3-drag'; import { select } from 'd3-selection'; -import { getPointerPosition } from '@reactflow/utils'; -import { useStoreApi, NodeChange, NodeDimensionChange, useNodeId, NodePositionChange, clamp } from '@reactflow/core'; - -import { ResizeDragEvent, ResizeControlProps, ResizeControlLineProps, ResizeControlVariant } from './types'; +import { getPointerPosition, clamp } from '@xyflow/system'; + +import { useStoreApi } from '../../hooks/useStore'; +import { useNodeId } from '../../contexts/NodeIdContext'; +import type { NodeChange, NodeDimensionChange, NodePositionChange } from '../../types'; +import { + type ResizeDragEvent, + type ResizeControlProps, + type ResizeControlLineProps, + ResizeControlVariant, +} from './types'; import { getDirection } from './utils'; const initPrevValues = { width: 0, height: 0, x: 0, y: 0 }; diff --git a/packages/node-resizer/src/index.tsx b/packages/react/src/additional-components/NodeResizer/index.tsx similarity index 100% rename from packages/node-resizer/src/index.tsx rename to packages/react/src/additional-components/NodeResizer/index.tsx diff --git a/packages/node-resizer/src/types.ts b/packages/react/src/additional-components/NodeResizer/types.ts similarity index 100% rename from packages/node-resizer/src/types.ts rename to packages/react/src/additional-components/NodeResizer/types.ts diff --git a/packages/node-resizer/src/utils.ts b/packages/react/src/additional-components/NodeResizer/utils.ts similarity index 100% rename from packages/node-resizer/src/utils.ts rename to packages/react/src/additional-components/NodeResizer/utils.ts diff --git a/packages/node-toolbar/src/NodeToolbar.tsx b/packages/react/src/additional-components/NodeToolbar/NodeToolbar.tsx similarity index 93% rename from packages/node-toolbar/src/NodeToolbar.tsx rename to packages/react/src/additional-components/NodeToolbar/NodeToolbar.tsx index 3b02b8bf5..50d67f12d 100644 --- a/packages/node-toolbar/src/NodeToolbar.tsx +++ b/packages/react/src/additional-components/NodeToolbar/NodeToolbar.tsx @@ -1,18 +1,11 @@ import { useCallback, CSSProperties } from 'react'; -import { - Node, - ReactFlowState, - useStore, - getRectOfNodes, - Transform, - Rect, - Position, - internalsSymbol, - useNodeId, -} from '@reactflow/core'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; +import { getRectOfNodes, Transform, Rect, Position, internalsSymbol } from '@xyflow/system'; +import { Node, ReactFlowState } from '../../types'; +import { useStore } from '../../hooks/useStore'; +import { useNodeId } from '../../contexts/NodeIdContext'; import NodeToolbarPortal from './NodeToolbarPortal'; import { Align, NodeToolbarProps } from './types'; diff --git a/packages/node-toolbar/src/NodeToolbarPortal.tsx b/packages/react/src/additional-components/NodeToolbar/NodeToolbarPortal.tsx similarity index 80% rename from packages/node-toolbar/src/NodeToolbarPortal.tsx rename to packages/react/src/additional-components/NodeToolbar/NodeToolbarPortal.tsx index 732362e58..4b8d8d025 100644 --- a/packages/node-toolbar/src/NodeToolbarPortal.tsx +++ b/packages/react/src/additional-components/NodeToolbar/NodeToolbarPortal.tsx @@ -1,6 +1,8 @@ import { ReactNode } from 'react'; import { createPortal } from 'react-dom'; -import { ReactFlowState, useStore } from '@reactflow/core'; + +import type { ReactFlowState } from '../../types'; +import { useStore } from '../../hooks/useStore'; const selector = (state: ReactFlowState) => state.domNode?.querySelector('.react-flow__renderer'); diff --git a/packages/node-toolbar/src/index.tsx b/packages/react/src/additional-components/NodeToolbar/index.tsx similarity index 100% rename from packages/node-toolbar/src/index.tsx rename to packages/react/src/additional-components/NodeToolbar/index.tsx diff --git a/packages/node-toolbar/src/types.ts b/packages/react/src/additional-components/NodeToolbar/types.ts similarity index 85% rename from packages/node-toolbar/src/types.ts rename to packages/react/src/additional-components/NodeToolbar/types.ts index 7ff2087b5..294785761 100644 --- a/packages/node-toolbar/src/types.ts +++ b/packages/react/src/additional-components/NodeToolbar/types.ts @@ -1,5 +1,5 @@ -import { Position } from '@reactflow/core'; import type { HTMLAttributes } from 'react'; +import type { Position } from '@xyflow/system'; export type NodeToolbarProps = HTMLAttributes & { nodeId?: string | string[]; diff --git a/packages/react/src/additional-components/index.ts b/packages/react/src/additional-components/index.ts new file mode 100644 index 000000000..94a1595ed --- /dev/null +++ b/packages/react/src/additional-components/index.ts @@ -0,0 +1,5 @@ +export * from './Background'; +export * from './Controls'; +export * from './MiniMap'; +export * from './NodeResizer'; +export * from './NodeToolbar'; diff --git a/packages/core/src/components/A11yDescriptions/index.tsx b/packages/react/src/components/A11yDescriptions/index.tsx similarity index 100% rename from packages/core/src/components/A11yDescriptions/index.tsx rename to packages/react/src/components/A11yDescriptions/index.tsx diff --git a/packages/core/src/components/Attribution/index.tsx b/packages/react/src/components/Attribution/index.tsx similarity index 90% rename from packages/core/src/components/Attribution/index.tsx rename to packages/react/src/components/Attribution/index.tsx index 641dc8c7d..8c2aa4843 100644 --- a/packages/core/src/components/Attribution/index.tsx +++ b/packages/react/src/components/Attribution/index.tsx @@ -1,4 +1,4 @@ -import type { PanelPosition, ProOptions } from '@reactflow/system'; +import type { PanelPosition, ProOptions } from '@xyflow/system'; import Panel from '../Panel'; diff --git a/packages/core/src/components/ConnectionLine/index.tsx b/packages/react/src/components/ConnectionLine/index.tsx similarity index 98% rename from packages/core/src/components/ConnectionLine/index.tsx rename to packages/react/src/components/ConnectionLine/index.tsx index 0d083762a..757e1fba9 100644 --- a/packages/core/src/components/ConnectionLine/index.tsx +++ b/packages/react/src/components/ConnectionLine/index.tsx @@ -6,10 +6,11 @@ import { Position, ConnectionLineType, ConnectionMode, + getBezierPath, + getSmoothStepPath, type ConnectionStatus, type HandleType, -} from '@reactflow/system'; -import { getBezierPath, getSmoothStepPath } from '@reactflow/edge-utils'; +} from '@xyflow/system'; import { useStore } from '../../hooks/useStore'; import { getSimpleBezierPath } from '../Edges/SimpleBezierEdge'; diff --git a/packages/core/src/components/EdgeLabelRenderer/index.tsx b/packages/react/src/components/EdgeLabelRenderer/index.tsx similarity index 100% rename from packages/core/src/components/EdgeLabelRenderer/index.tsx rename to packages/react/src/components/EdgeLabelRenderer/index.tsx diff --git a/packages/core/src/components/Edges/BaseEdge.tsx b/packages/react/src/components/Edges/BaseEdge.tsx similarity index 96% rename from packages/core/src/components/Edges/BaseEdge.tsx rename to packages/react/src/components/Edges/BaseEdge.tsx index d658bb596..dd496f7eb 100644 --- a/packages/core/src/components/Edges/BaseEdge.tsx +++ b/packages/react/src/components/Edges/BaseEdge.tsx @@ -1,4 +1,4 @@ -import { isNumeric } from '@reactflow/utils'; +import { isNumeric } from '@xyflow/system'; import type { BaseEdgeProps } from '../../types'; diff --git a/packages/core/src/components/Edges/BezierEdge.tsx b/packages/react/src/components/Edges/BezierEdge.tsx similarity index 88% rename from packages/core/src/components/Edges/BezierEdge.tsx rename to packages/react/src/components/Edges/BezierEdge.tsx index fd04e1bd1..8f446393d 100644 --- a/packages/core/src/components/Edges/BezierEdge.tsx +++ b/packages/react/src/components/Edges/BezierEdge.tsx @@ -1,6 +1,5 @@ import { memo } from 'react'; -import { Position } from '@reactflow/system'; -import { getBezierPath } from '@reactflow/edge-utils'; +import { Position, getBezierPath } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { BezierEdgeProps } from '../../types'; diff --git a/packages/core/src/components/Edges/EdgeAnchor.tsx b/packages/react/src/components/Edges/EdgeAnchor.tsx similarity index 96% rename from packages/core/src/components/Edges/EdgeAnchor.tsx rename to packages/react/src/components/Edges/EdgeAnchor.tsx index 3ea97546d..575023b31 100644 --- a/packages/core/src/components/Edges/EdgeAnchor.tsx +++ b/packages/react/src/components/Edges/EdgeAnchor.tsx @@ -1,6 +1,6 @@ import type { FC, MouseEvent as ReactMouseEvent, SVGAttributes } from 'react'; import cc from 'classcat'; -import { Position } from '@reactflow/system'; +import { Position } from '@xyflow/system'; const shiftX = (x: number, shift: number, position: Position): number => { if (position === Position.Left) return x - shift; diff --git a/packages/core/src/components/Edges/EdgeText.tsx b/packages/react/src/components/Edges/EdgeText.tsx similarity index 97% rename from packages/core/src/components/Edges/EdgeText.tsx rename to packages/react/src/components/Edges/EdgeText.tsx index e1d712497..7926e81df 100644 --- a/packages/core/src/components/Edges/EdgeText.tsx +++ b/packages/react/src/components/Edges/EdgeText.tsx @@ -1,6 +1,6 @@ import { memo, useRef, useState, useEffect, type FC, type PropsWithChildren } from 'react'; import cc from 'classcat'; -import type { Rect } from '@reactflow/system'; +import type { Rect } from '@xyflow/system'; import type { EdgeTextProps } from '../../types'; diff --git a/packages/core/src/components/Edges/SimpleBezierEdge.tsx b/packages/react/src/components/Edges/SimpleBezierEdge.tsx similarity index 96% rename from packages/core/src/components/Edges/SimpleBezierEdge.tsx rename to packages/react/src/components/Edges/SimpleBezierEdge.tsx index 548ae8da7..d9fa50c42 100644 --- a/packages/core/src/components/Edges/SimpleBezierEdge.tsx +++ b/packages/react/src/components/Edges/SimpleBezierEdge.tsx @@ -1,6 +1,5 @@ import { memo } from 'react'; -import { Position } from '@reactflow/system'; -import { getBezierEdgeCenter } from '@reactflow/edge-utils'; +import { Position, getBezierEdgeCenter } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { EdgeProps } from '../../types'; diff --git a/packages/core/src/components/Edges/SmoothStepEdge.tsx b/packages/react/src/components/Edges/SmoothStepEdge.tsx similarity index 92% rename from packages/core/src/components/Edges/SmoothStepEdge.tsx rename to packages/react/src/components/Edges/SmoothStepEdge.tsx index 048d8cac0..be635a4ef 100644 --- a/packages/core/src/components/Edges/SmoothStepEdge.tsx +++ b/packages/react/src/components/Edges/SmoothStepEdge.tsx @@ -1,6 +1,5 @@ import { memo } from 'react'; -import { Position } from '@reactflow/system'; -import { getSmoothStepPath } from '@reactflow/edge-utils'; +import { Position, getSmoothStepPath } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { SmoothStepEdgeProps } from '../../types'; diff --git a/packages/core/src/components/Edges/StepEdge.tsx b/packages/react/src/components/Edges/StepEdge.tsx similarity index 100% rename from packages/core/src/components/Edges/StepEdge.tsx rename to packages/react/src/components/Edges/StepEdge.tsx diff --git a/packages/core/src/components/Edges/StraightEdge.tsx b/packages/react/src/components/Edges/StraightEdge.tsx similarity index 94% rename from packages/core/src/components/Edges/StraightEdge.tsx rename to packages/react/src/components/Edges/StraightEdge.tsx index f9448d2eb..06f4a1614 100644 --- a/packages/core/src/components/Edges/StraightEdge.tsx +++ b/packages/react/src/components/Edges/StraightEdge.tsx @@ -1,5 +1,5 @@ import { memo } from 'react'; -import { getStraightPath } from '@reactflow/edge-utils'; +import { getStraightPath } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { EdgeProps } from '../../types'; diff --git a/packages/core/src/components/Edges/index.ts b/packages/react/src/components/Edges/index.ts similarity index 100% rename from packages/core/src/components/Edges/index.ts rename to packages/react/src/components/Edges/index.ts diff --git a/packages/core/src/components/Edges/utils.ts b/packages/react/src/components/Edges/utils.ts similarity index 82% rename from packages/core/src/components/Edges/utils.ts rename to packages/react/src/components/Edges/utils.ts index 222c975a0..a51b7613b 100644 --- a/packages/core/src/components/Edges/utils.ts +++ b/packages/react/src/components/Edges/utils.ts @@ -1,5 +1,5 @@ -import { MouseEvent as ReactMouseEvent } from 'react'; -import { StoreApi } from 'zustand'; +import type { MouseEvent as ReactMouseEvent } from 'react'; +import type { StoreApi } from 'zustand'; import type { Edge, ReactFlowState } from '../../types'; diff --git a/packages/core/src/components/Edges/wrapEdge.tsx b/packages/react/src/components/Edges/wrapEdge.tsx similarity index 98% rename from packages/core/src/components/Edges/wrapEdge.tsx rename to packages/react/src/components/Edges/wrapEdge.tsx index 1c780a9bd..8fd7db222 100644 --- a/packages/core/src/components/Edges/wrapEdge.tsx +++ b/packages/react/src/components/Edges/wrapEdge.tsx @@ -1,7 +1,6 @@ import { memo, useState, useMemo, useRef, type ComponentType, type KeyboardEvent } from 'react'; import cc from 'classcat'; -import { getMarkerId, elementSelectionKeys, XYHandle } from '@reactflow/utils'; -import type { Connection } from '@reactflow/system'; +import { getMarkerId, elementSelectionKeys, XYHandle, type Connection } from '@xyflow/system'; import { useStoreApi } from '../../hooks/useStore'; import { ARIA_EDGE_DESC_KEY } from '../A11yDescriptions'; diff --git a/packages/core/src/components/Handle/index.tsx b/packages/react/src/components/Handle/index.tsx similarity index 96% rename from packages/core/src/components/Handle/index.tsx rename to packages/react/src/components/Handle/index.tsx index 2c7fe7d84..b2accaa82 100644 --- a/packages/core/src/components/Handle/index.tsx +++ b/packages/react/src/components/Handle/index.tsx @@ -1,8 +1,16 @@ import { memo, HTMLAttributes, forwardRef, MouseEvent as ReactMouseEvent, TouchEvent as ReactTouchEvent } from 'react'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; -import { errorMessages, Position, type HandleProps, type Connection, type HandleType } from '@reactflow/system'; -import { XYHandle, getHostForElement, isMouseEvent } from '@reactflow/utils'; +import { + errorMessages, + Position, + XYHandle, + getHostForElement, + isMouseEvent, + type HandleProps, + type Connection, + type HandleType, +} from '@xyflow/system'; import { useStore, useStoreApi } from '../../hooks/useStore'; import { useNodeId } from '../../contexts/NodeIdContext'; @@ -99,7 +107,6 @@ const Handle = forwardRef( connectionRadius: currentStore.connectionRadius, domNode: currentStore.domNode, nodes: currentStore.getNodes(), - transform: currentStore.transform, lib: currentStore.lib, isTarget, handleId, @@ -111,6 +118,7 @@ const Handle = forwardRef( updateConnection: currentStore.updateConnection, onConnect: onConnectExtended, isValidConnection: isValidConnection || currentStore.isValidConnection, + getTransform: () => store.getState().transform, }); } diff --git a/packages/core/src/components/Nodes/DefaultNode.tsx b/packages/react/src/components/Nodes/DefaultNode.tsx similarity index 89% rename from packages/core/src/components/Nodes/DefaultNode.tsx rename to packages/react/src/components/Nodes/DefaultNode.tsx index e82bd112e..611e61656 100644 --- a/packages/core/src/components/Nodes/DefaultNode.tsx +++ b/packages/react/src/components/Nodes/DefaultNode.tsx @@ -1,5 +1,5 @@ import { memo } from 'react'; -import { Position, type NodeProps } from '@reactflow/system'; +import { Position, type NodeProps } from '@xyflow/system'; import Handle from '../../components/Handle'; diff --git a/packages/core/src/components/Nodes/GroupNode.tsx b/packages/react/src/components/Nodes/GroupNode.tsx similarity index 100% rename from packages/core/src/components/Nodes/GroupNode.tsx rename to packages/react/src/components/Nodes/GroupNode.tsx diff --git a/packages/core/src/components/Nodes/InputNode.tsx b/packages/react/src/components/Nodes/InputNode.tsx similarity index 85% rename from packages/core/src/components/Nodes/InputNode.tsx rename to packages/react/src/components/Nodes/InputNode.tsx index 21e4ba5da..354da2cef 100644 --- a/packages/core/src/components/Nodes/InputNode.tsx +++ b/packages/react/src/components/Nodes/InputNode.tsx @@ -1,5 +1,5 @@ import { memo } from 'react'; -import { Position, type NodeProps } from '@reactflow/system'; +import { Position, type NodeProps } from '@xyflow/system'; import Handle from '../../components/Handle'; diff --git a/packages/core/src/components/Nodes/OutputNode.tsx b/packages/react/src/components/Nodes/OutputNode.tsx similarity index 85% rename from packages/core/src/components/Nodes/OutputNode.tsx rename to packages/react/src/components/Nodes/OutputNode.tsx index 360c11136..8d52ba1ed 100644 --- a/packages/core/src/components/Nodes/OutputNode.tsx +++ b/packages/react/src/components/Nodes/OutputNode.tsx @@ -1,5 +1,5 @@ import { memo } from 'react'; -import { Position, type NodeProps } from '@reactflow/system'; +import { Position, type NodeProps } from '@xyflow/system'; import Handle from '../../components/Handle'; diff --git a/packages/core/src/components/Nodes/utils.ts b/packages/react/src/components/Nodes/utils.ts similarity index 93% rename from packages/core/src/components/Nodes/utils.ts rename to packages/react/src/components/Nodes/utils.ts index 1d83c071d..9fab47ac4 100644 --- a/packages/core/src/components/Nodes/utils.ts +++ b/packages/react/src/components/Nodes/utils.ts @@ -1,5 +1,5 @@ -import { MouseEvent, RefObject } from 'react'; -import { StoreApi } from 'zustand'; +import type { MouseEvent, RefObject } from 'react'; +import type { StoreApi } from 'zustand'; import type { Node, ReactFlowState } from '../../types'; diff --git a/packages/core/src/components/Nodes/wrapNode.tsx b/packages/react/src/components/Nodes/wrapNode.tsx similarity index 98% rename from packages/core/src/components/Nodes/wrapNode.tsx rename to packages/react/src/components/Nodes/wrapNode.tsx index 06abf386a..4d8fb8a0d 100644 --- a/packages/core/src/components/Nodes/wrapNode.tsx +++ b/packages/react/src/components/Nodes/wrapNode.tsx @@ -1,7 +1,6 @@ import { useEffect, useRef, memo, type ComponentType, type MouseEvent, type KeyboardEvent } from 'react'; import cc from 'classcat'; -import { elementSelectionKeys, isInputDOMNode } from '@reactflow/utils'; -import type { NodeProps, XYPosition } from '@reactflow/system'; +import { elementSelectionKeys, isInputDOMNode, type NodeProps, type XYPosition } from '@xyflow/system'; import { useStoreApi } from '../../hooks/useStore'; import { Provider } from '../../contexts/NodeIdContext'; diff --git a/packages/core/src/components/NodesSelection/index.tsx b/packages/react/src/components/NodesSelection/index.tsx similarity index 94% rename from packages/core/src/components/NodesSelection/index.tsx rename to packages/react/src/components/NodesSelection/index.tsx index d6888fa6e..3765a2cac 100644 --- a/packages/core/src/components/NodesSelection/index.tsx +++ b/packages/react/src/components/NodesSelection/index.tsx @@ -3,11 +3,10 @@ * made a selection with on or several nodes */ -import { memo, useRef, useEffect } from 'react'; -import type { MouseEvent, KeyboardEvent } from 'react'; +import { memo, useRef, useEffect, type MouseEvent, type KeyboardEvent } from 'react'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; -import { getRectOfNodes } from '@reactflow/utils'; +import { getRectOfNodes } from '@xyflow/system'; import { useStore, useStoreApi } from '../../hooks/useStore'; import useDrag from '../../hooks/useDrag'; diff --git a/packages/core/src/components/Panel/index.tsx b/packages/react/src/components/Panel/index.tsx similarity index 93% rename from packages/core/src/components/Panel/index.tsx rename to packages/react/src/components/Panel/index.tsx index db3063312..7bcf6f97b 100644 --- a/packages/core/src/components/Panel/index.tsx +++ b/packages/react/src/components/Panel/index.tsx @@ -1,6 +1,6 @@ import type { HTMLAttributes, ReactNode } from 'react'; import cc from 'classcat'; -import type { PanelPosition } from '@reactflow/system'; +import type { PanelPosition } from '@xyflow/system'; import { useStore } from '../../hooks/useStore'; import type { ReactFlowState } from '../../types'; diff --git a/packages/core/src/components/ReactFlowProvider/index.tsx b/packages/react/src/components/ReactFlowProvider/index.tsx similarity index 93% rename from packages/core/src/components/ReactFlowProvider/index.tsx rename to packages/react/src/components/ReactFlowProvider/index.tsx index 7f70e7b4b..d3c283c20 100644 --- a/packages/core/src/components/ReactFlowProvider/index.tsx +++ b/packages/react/src/components/ReactFlowProvider/index.tsx @@ -1,5 +1,5 @@ import { useRef, type FC, type PropsWithChildren } from 'react'; -import { StoreApi } from 'zustand'; +import { type StoreApi } from 'zustand'; import { Provider } from '../../contexts/RFStoreContext'; import { createRFStore } from '../../store'; diff --git a/packages/core/src/components/SelectionListener/index.tsx b/packages/react/src/components/SelectionListener/index.tsx similarity index 100% rename from packages/core/src/components/SelectionListener/index.tsx rename to packages/react/src/components/SelectionListener/index.tsx diff --git a/packages/core/src/components/StoreUpdater/index.tsx b/packages/react/src/components/StoreUpdater/index.tsx similarity index 99% rename from packages/core/src/components/StoreUpdater/index.tsx rename to packages/react/src/components/StoreUpdater/index.tsx index 6833f4c71..bd6e7e07e 100644 --- a/packages/core/src/components/StoreUpdater/index.tsx +++ b/packages/react/src/components/StoreUpdater/index.tsx @@ -1,7 +1,7 @@ import { useEffect } from 'react'; import { StoreApi } from 'zustand'; import { shallow } from 'zustand/shallow'; -import type { CoordinateExtent } from '@reactflow/system'; +import type { CoordinateExtent } from '@xyflow/system'; import { useStore, useStoreApi } from '../../hooks/useStore'; import type { Node, Edge, ReactFlowState, ReactFlowProps, ReactFlowStore } from '../../types'; diff --git a/packages/core/src/components/UserSelection/index.tsx b/packages/react/src/components/UserSelection/index.tsx similarity index 100% rename from packages/core/src/components/UserSelection/index.tsx rename to packages/react/src/components/UserSelection/index.tsx diff --git a/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx b/packages/react/src/container/EdgeRenderer/MarkerDefinitions.tsx similarity index 95% rename from packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx rename to packages/react/src/container/EdgeRenderer/MarkerDefinitions.tsx index 2bfdd15d0..8a0524acf 100644 --- a/packages/core/src/container/EdgeRenderer/MarkerDefinitions.tsx +++ b/packages/react/src/container/EdgeRenderer/MarkerDefinitions.tsx @@ -1,6 +1,5 @@ import { memo, useCallback } from 'react'; -import type { MarkerProps } from '@reactflow/system'; -import { createMarkerIds } from '@reactflow/utils'; +import { type MarkerProps, createMarkerIds } from '@xyflow/system'; import { useStore } from '../../hooks/useStore'; import { useMarkerSymbol } from './MarkerSymbols'; diff --git a/packages/core/src/container/EdgeRenderer/MarkerSymbols.tsx b/packages/react/src/container/EdgeRenderer/MarkerSymbols.tsx similarity index 93% rename from packages/core/src/container/EdgeRenderer/MarkerSymbols.tsx rename to packages/react/src/container/EdgeRenderer/MarkerSymbols.tsx index 4c2f20792..8ae3bb520 100644 --- a/packages/core/src/container/EdgeRenderer/MarkerSymbols.tsx +++ b/packages/react/src/container/EdgeRenderer/MarkerSymbols.tsx @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import { errorMessages, MarkerType, type EdgeMarker } from '@reactflow/system'; +import { errorMessages, MarkerType, type EdgeMarker } from '@xyflow/system'; import { useStoreApi } from '../../hooks/useStore'; diff --git a/packages/core/src/container/EdgeRenderer/index.tsx b/packages/react/src/container/EdgeRenderer/index.tsx similarity index 98% rename from packages/core/src/container/EdgeRenderer/index.tsx rename to packages/react/src/container/EdgeRenderer/index.tsx index 37aba2d00..c5ba21022 100644 --- a/packages/core/src/container/EdgeRenderer/index.tsx +++ b/packages/react/src/container/EdgeRenderer/index.tsx @@ -1,7 +1,7 @@ import { memo, ReactNode } from 'react'; import { shallow } from 'zustand/shallow'; import cc from 'classcat'; -import { errorMessages, ConnectionMode, Position } from '@reactflow/system'; +import { errorMessages, ConnectionMode, Position, getHandle } from '@xyflow/system'; import { useStore } from '../../hooks/useStore'; import useVisibleEdges from '../../hooks/useVisibleEdges'; @@ -9,7 +9,6 @@ import MarkerDefinitions from './MarkerDefinitions'; import { getEdgePositions, getNodeData } from './utils'; import { GraphViewProps } from '../GraphView'; import type { Edge, ReactFlowState } from '../../types'; -import { getHandle } from '@reactflow/edge-utils'; type EdgeRendererProps = Pick< GraphViewProps, diff --git a/packages/core/src/container/EdgeRenderer/utils.ts b/packages/react/src/container/EdgeRenderer/utils.ts similarity index 96% rename from packages/core/src/container/EdgeRenderer/utils.ts rename to packages/react/src/container/EdgeRenderer/utils.ts index 1f87ec535..403e5f80b 100644 --- a/packages/core/src/container/EdgeRenderer/utils.ts +++ b/packages/react/src/container/EdgeRenderer/utils.ts @@ -2,18 +2,18 @@ import type { ComponentType } from 'react'; import { internalsSymbol, Position, + rectToBox, + getHandlePosition, type HandleElement, type NodeHandleBounds, type Rect, type Transform, type XYPosition, -} from '@reactflow/system'; -import { rectToBox } from '@reactflow/utils'; +} from '@xyflow/system'; import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; import wrapEdge from '../../components/Edges/wrapEdge'; import type { EdgeProps, EdgeTypes, EdgeTypesWrapped, Node } from '../../types'; -import { getHandlePosition } from '@reactflow/edge-utils'; export type CreateEdgeTypes = (edgeTypes: EdgeTypes) => EdgeTypesWrapped; diff --git a/packages/core/src/container/FlowRenderer/index.tsx b/packages/react/src/container/FlowRenderer/index.tsx similarity index 100% rename from packages/core/src/container/FlowRenderer/index.tsx rename to packages/react/src/container/FlowRenderer/index.tsx diff --git a/packages/core/src/container/GraphView/index.tsx b/packages/react/src/container/GraphView/index.tsx similarity index 100% rename from packages/core/src/container/GraphView/index.tsx rename to packages/react/src/container/GraphView/index.tsx diff --git a/packages/core/src/container/NodeRenderer/index.tsx b/packages/react/src/container/NodeRenderer/index.tsx similarity index 97% rename from packages/core/src/container/NodeRenderer/index.tsx rename to packages/react/src/container/NodeRenderer/index.tsx index 85ce766ed..66b9de29a 100644 --- a/packages/core/src/container/NodeRenderer/index.tsx +++ b/packages/react/src/container/NodeRenderer/index.tsx @@ -1,7 +1,6 @@ import { memo, useMemo, useEffect, useRef, type ComponentType } from 'react'; import { shallow } from 'zustand/shallow'; -import { internalsSymbol, errorMessages, Position } from '@reactflow/system'; -import { clampPosition, getPositionWithOrigin } from '@reactflow/utils'; +import { internalsSymbol, errorMessages, Position, clampPosition, getPositionWithOrigin } from '@xyflow/system'; import useVisibleNodes from '../../hooks/useVisibleNodes'; import { useStore } from '../../hooks/useStore'; diff --git a/packages/core/src/container/NodeRenderer/utils.ts b/packages/react/src/container/NodeRenderer/utils.ts similarity index 96% rename from packages/core/src/container/NodeRenderer/utils.ts rename to packages/react/src/container/NodeRenderer/utils.ts index 5d3911e8f..758d3908a 100644 --- a/packages/core/src/container/NodeRenderer/utils.ts +++ b/packages/react/src/container/NodeRenderer/utils.ts @@ -1,5 +1,5 @@ import type { ComponentType } from 'react'; -import type { NodeProps } from '@reactflow/system'; +import type { NodeProps } from '@xyflow/system'; import DefaultNode from '../../components/Nodes/DefaultNode'; import InputNode from '../../components/Nodes/InputNode'; diff --git a/packages/core/src/container/Pane/index.tsx b/packages/react/src/container/Pane/index.tsx similarity index 98% rename from packages/core/src/container/Pane/index.tsx rename to packages/react/src/container/Pane/index.tsx index c89978d50..981a155b5 100644 --- a/packages/core/src/container/Pane/index.tsx +++ b/packages/react/src/container/Pane/index.tsx @@ -5,8 +5,7 @@ import { memo, useRef, type MouseEvent as ReactMouseEvent, type ReactNode } from 'react'; import { shallow } from 'zustand/shallow'; import cc from 'classcat'; -import { getNodesInside, getEventPosition } from '@reactflow/utils'; -import { SelectionMode } from '@reactflow/system'; +import { getNodesInside, getEventPosition, SelectionMode } from '@xyflow/system'; import UserSelection from '../../components/UserSelection'; import { containerStyle } from '../../styles'; diff --git a/packages/core/src/container/ReactFlow/Wrapper.tsx b/packages/react/src/container/ReactFlow/Wrapper.tsx similarity index 100% rename from packages/core/src/container/ReactFlow/Wrapper.tsx rename to packages/react/src/container/ReactFlow/Wrapper.tsx diff --git a/packages/core/src/container/ReactFlow/index.tsx b/packages/react/src/container/ReactFlow/index.tsx similarity index 99% rename from packages/core/src/container/ReactFlow/index.tsx rename to packages/react/src/container/ReactFlow/index.tsx index dd43c43c7..db7ddbef1 100644 --- a/packages/core/src/container/ReactFlow/index.tsx +++ b/packages/react/src/container/ReactFlow/index.tsx @@ -5,10 +5,10 @@ import { ConnectionMode, PanOnScrollMode, SelectionMode, + infiniteExtent, type NodeOrigin, type Viewport, -} from '@reactflow/system'; -import { infiniteExtent } from '@reactflow/utils'; +} from '@xyflow/system'; import Attribution from '../../components/Attribution'; import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; diff --git a/packages/core/src/container/ReactFlow/utils.ts b/packages/react/src/container/ReactFlow/utils.ts similarity index 92% rename from packages/core/src/container/ReactFlow/utils.ts rename to packages/react/src/container/ReactFlow/utils.ts index 305b05c23..3f49243f6 100644 --- a/packages/core/src/container/ReactFlow/utils.ts +++ b/packages/react/src/container/ReactFlow/utils.ts @@ -1,7 +1,6 @@ import { useMemo, useRef } from 'react'; import { shallow } from 'zustand/shallow'; -import { errorMessages } from '@reactflow/system'; -import { devWarn } from '@reactflow/utils'; +import { errorMessages, devWarn } from '@xyflow/system'; import { CreateEdgeTypes } from '../EdgeRenderer/utils'; import { CreateNodeTypes } from '../NodeRenderer/utils'; diff --git a/packages/core/src/container/Viewport/index.tsx b/packages/react/src/container/Viewport/index.tsx similarity index 100% rename from packages/core/src/container/Viewport/index.tsx rename to packages/react/src/container/Viewport/index.tsx diff --git a/packages/core/src/container/ZoomPane/index.tsx b/packages/react/src/container/ZoomPane/index.tsx similarity index 89% rename from packages/core/src/container/ZoomPane/index.tsx rename to packages/react/src/container/ZoomPane/index.tsx index 27f2888f4..f04ed0f47 100644 --- a/packages/core/src/container/ZoomPane/index.tsx +++ b/packages/react/src/container/ZoomPane/index.tsx @@ -1,8 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { useEffect, useRef } from 'react'; import { shallow } from 'zustand/shallow'; -import { XYPanZoom } from '@reactflow/utils'; -import { PanOnScrollMode, type Transform, type PanZoomInstance } from '@reactflow/system'; +import { XYPanZoom, PanOnScrollMode, type Transform, type PanZoomInstance } from '@xyflow/system'; import useKeyPress from '../../hooks/useKeyPress'; import useResizeHandler from '../../hooks/useResizeHandler'; @@ -23,9 +22,7 @@ type ZoomPaneProps = Omit< const selector = (s: ReactFlowState) => ({ userSelectionActive: s.userSelectionActive, - onViewportChangeStart: s.onViewportChangeStart, - onViewportChange: s.onViewportChange, - onViewportChangeEnd: s.onViewportChangeEnd, + lib: s.lib, }); const ZoomPane = ({ @@ -49,7 +46,7 @@ const ZoomPane = ({ }: ZoomPaneProps) => { const store = useStoreApi(); const zoomPane = useRef(null); - const { userSelectionActive } = useStore(selector, shallow); + const { userSelectionActive, lib } = useStore(selector, shallow); const zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode); const panZoom = useRef(); @@ -82,7 +79,7 @@ const ZoomPane = ({ }, }); - const { x, y, zoom } = panZoom.current.getViewport(); + const { x, y, zoom } = panZoom.current!.getViewport(); store.setState({ panZoom: panZoom.current, @@ -111,6 +108,7 @@ const ZoomPane = ({ noPanClassName, userSelectionActive, noWheelClassName, + lib, }); }, [ onPaneContextMenu, @@ -126,6 +124,7 @@ const ZoomPane = ({ noPanClassName, userSelectionActive, noWheelClassName, + lib, ]); return ( diff --git a/packages/core/src/contexts/NodeIdContext.ts b/packages/react/src/contexts/NodeIdContext.ts similarity index 100% rename from packages/core/src/contexts/NodeIdContext.ts rename to packages/react/src/contexts/NodeIdContext.ts diff --git a/packages/core/src/contexts/RFStoreContext.ts b/packages/react/src/contexts/RFStoreContext.ts similarity index 100% rename from packages/core/src/contexts/RFStoreContext.ts rename to packages/react/src/contexts/RFStoreContext.ts diff --git a/packages/core/src/custom.d.ts b/packages/react/src/custom.d.ts similarity index 100% rename from packages/core/src/custom.d.ts rename to packages/react/src/custom.d.ts diff --git a/packages/core/src/hooks/useDrag.ts b/packages/react/src/hooks/useDrag.ts similarity index 96% rename from packages/core/src/hooks/useDrag.ts rename to packages/react/src/hooks/useDrag.ts index 49da1e2cb..e5f6ebb9a 100644 --- a/packages/core/src/hooks/useDrag.ts +++ b/packages/react/src/hooks/useDrag.ts @@ -1,5 +1,5 @@ import { useEffect, useRef, useState, type RefObject } from 'react'; -import { XYDrag, type XYDragInstance } from '@reactflow/utils'; +import { XYDrag, type XYDragInstance } from '@xyflow/system'; import { handleNodeClick } from '../components/Nodes/utils'; import { useStoreApi } from './useStore'; diff --git a/packages/core/src/hooks/useEdges.ts b/packages/react/src/hooks/useEdges.ts similarity index 100% rename from packages/core/src/hooks/useEdges.ts rename to packages/react/src/hooks/useEdges.ts diff --git a/packages/core/src/hooks/useGlobalKeyHandler.ts b/packages/react/src/hooks/useGlobalKeyHandler.ts similarity index 86% rename from packages/core/src/hooks/useGlobalKeyHandler.ts rename to packages/react/src/hooks/useGlobalKeyHandler.ts index fff9a4f49..c592a34de 100644 --- a/packages/core/src/hooks/useGlobalKeyHandler.ts +++ b/packages/react/src/hooks/useGlobalKeyHandler.ts @@ -1,15 +1,17 @@ import { useEffect } from 'react'; -import type { KeyCode } from '@reactflow/system'; +import type { KeyCode } from '@xyflow/system'; import { useStoreApi } from '../hooks/useStore'; import useKeyPress from './useKeyPress'; import useReactFlow from './useReactFlow'; -interface HookParams { + +export default ({ + deleteKeyCode, + multiSelectionKeyCode, +}: { deleteKeyCode: KeyCode | null; multiSelectionKeyCode: KeyCode | null; -} - -export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => { +}): void => { const store = useStoreApi(); const { deleteElements } = useReactFlow(); diff --git a/packages/core/src/hooks/useKeyPress.ts b/packages/react/src/hooks/useKeyPress.ts similarity index 96% rename from packages/core/src/hooks/useKeyPress.ts rename to packages/react/src/hooks/useKeyPress.ts index efddc507c..5259b19cd 100644 --- a/packages/core/src/hooks/useKeyPress.ts +++ b/packages/react/src/hooks/useKeyPress.ts @@ -1,13 +1,13 @@ import { useState, useEffect, useRef, useMemo } from 'react'; -import { isInputDOMNode } from '@reactflow/utils'; -import type { KeyCode } from '@reactflow/system'; +import { isInputDOMNode, type KeyCode } from '@xyflow/system'; type Keys = Array; type PressedKeys = Set; type KeyOrCode = 'key' | 'code'; -export interface UseKeyPressOptions { + +export type UseKeyPressOptions = { target: Window | Document | HTMLElement | ShadowRoot | null; -} +}; const doc = typeof document !== 'undefined' ? document : null; @@ -45,7 +45,6 @@ export default (keyCode: KeyCode | null = null, options: UseKeyPressOptions = { useEffect(() => { if (keyCode !== null) { const downHandler = (event: KeyboardEvent) => { - modifierPressed.current = event.ctrlKey || event.metaKey || event.shiftKey; if (!modifierPressed.current && isInputDOMNode(event)) { diff --git a/packages/core/src/hooks/useNodes.ts b/packages/react/src/hooks/useNodes.ts similarity index 99% rename from packages/core/src/hooks/useNodes.ts rename to packages/react/src/hooks/useNodes.ts index 6f1087451..8d71b435a 100644 --- a/packages/core/src/hooks/useNodes.ts +++ b/packages/react/src/hooks/useNodes.ts @@ -1,7 +1,6 @@ import { shallow } from 'zustand/shallow'; import { useStore } from '../hooks/useStore'; - import type { Node, ReactFlowState } from '../types'; const nodesSelector = (state: ReactFlowState) => state.getNodes(); diff --git a/packages/core/src/hooks/useNodesEdgesState.ts b/packages/react/src/hooks/useNodesEdgesState.ts similarity index 100% rename from packages/core/src/hooks/useNodesEdgesState.ts rename to packages/react/src/hooks/useNodesEdgesState.ts diff --git a/packages/core/src/hooks/useNodesInitialized.ts b/packages/react/src/hooks/useNodesInitialized.ts similarity index 93% rename from packages/core/src/hooks/useNodesInitialized.ts rename to packages/react/src/hooks/useNodesInitialized.ts index 16dd14a2e..ea779fb6a 100644 --- a/packages/core/src/hooks/useNodesInitialized.ts +++ b/packages/react/src/hooks/useNodesInitialized.ts @@ -1,4 +1,4 @@ -import { internalsSymbol } from '@reactflow/system'; +import { internalsSymbol } from '@xyflow/system'; import { useStore } from './useStore'; import type { ReactFlowState } from '../types'; diff --git a/packages/core/src/hooks/useOnInitHandler.ts b/packages/react/src/hooks/useOnInitHandler.ts similarity index 100% rename from packages/core/src/hooks/useOnInitHandler.ts rename to packages/react/src/hooks/useOnInitHandler.ts diff --git a/packages/core/src/hooks/useOnSelectionChange.ts b/packages/react/src/hooks/useOnSelectionChange.ts similarity index 100% rename from packages/core/src/hooks/useOnSelectionChange.ts rename to packages/react/src/hooks/useOnSelectionChange.ts diff --git a/packages/core/src/hooks/useOnViewportChange.ts b/packages/react/src/hooks/useOnViewportChange.ts similarity index 91% rename from packages/core/src/hooks/useOnViewportChange.ts rename to packages/react/src/hooks/useOnViewportChange.ts index 46516a314..00ac15a79 100644 --- a/packages/core/src/hooks/useOnViewportChange.ts +++ b/packages/react/src/hooks/useOnViewportChange.ts @@ -1,5 +1,5 @@ import { useEffect } from 'react'; -import type { OnViewportChange } from '@reactflow/system'; +import type { OnViewportChange } from '@xyflow/system'; import { useStoreApi } from './useStore'; diff --git a/packages/core/src/hooks/useReactFlow.ts b/packages/react/src/hooks/useReactFlow.ts similarity index 98% rename from packages/core/src/hooks/useReactFlow.ts rename to packages/react/src/hooks/useReactFlow.ts index 6f8a72f9f..f5e152318 100644 --- a/packages/core/src/hooks/useReactFlow.ts +++ b/packages/react/src/hooks/useReactFlow.ts @@ -1,6 +1,5 @@ import { useCallback, useMemo } from 'react'; -import { getElementsToRemove, getOverlappingArea, isRectObject, nodeToRect } from '@reactflow/utils'; -import type { Rect } from '@reactflow/system'; +import { getElementsToRemove, getOverlappingArea, isRectObject, nodeToRect, type Rect } from '@xyflow/system'; import useViewportHelper from './useViewportHelper'; import { useStoreApi } from '../hooks/useStore'; diff --git a/packages/core/src/hooks/useResizeHandler.ts b/packages/react/src/hooks/useResizeHandler.ts similarity index 91% rename from packages/core/src/hooks/useResizeHandler.ts rename to packages/react/src/hooks/useResizeHandler.ts index 3857d4f1b..863ee2613 100644 --- a/packages/core/src/hooks/useResizeHandler.ts +++ b/packages/react/src/hooks/useResizeHandler.ts @@ -1,6 +1,5 @@ import { useEffect, type MutableRefObject } from 'react'; -import { errorMessages } from '@reactflow/system'; -import { getDimensions } from '@reactflow/utils'; +import { errorMessages, getDimensions } from '@xyflow/system'; import { useStoreApi } from '../hooks/useStore'; diff --git a/packages/core/src/hooks/useStore.ts b/packages/react/src/hooks/useStore.ts similarity index 95% rename from packages/core/src/hooks/useStore.ts rename to packages/react/src/hooks/useStore.ts index 5159882d3..e7fc934b7 100644 --- a/packages/core/src/hooks/useStore.ts +++ b/packages/react/src/hooks/useStore.ts @@ -1,6 +1,6 @@ import { useContext, useMemo } from 'react'; import { useStore as useZustandStore, type StoreApi } from 'zustand'; -import { errorMessages } from '@reactflow/system'; +import { errorMessages } from '@xyflow/system'; import StoreContext from '../contexts/RFStoreContext'; import type { ReactFlowState } from '../types'; diff --git a/packages/core/src/hooks/useUpdateNodeInternals.ts b/packages/react/src/hooks/useUpdateNodeInternals.ts similarity index 97% rename from packages/core/src/hooks/useUpdateNodeInternals.ts rename to packages/react/src/hooks/useUpdateNodeInternals.ts index c5971934f..9b4bcf61f 100644 --- a/packages/core/src/hooks/useUpdateNodeInternals.ts +++ b/packages/react/src/hooks/useUpdateNodeInternals.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import type { UpdateNodeInternals, NodeDimensionUpdate } from '@reactflow/system'; +import type { UpdateNodeInternals, NodeDimensionUpdate } from '@xyflow/system'; import { useStoreApi } from '../hooks/useStore'; diff --git a/packages/core/src/hooks/useUpdateNodePositions.ts b/packages/react/src/hooks/useUpdateNodePositions.ts similarity index 97% rename from packages/core/src/hooks/useUpdateNodePositions.ts rename to packages/react/src/hooks/useUpdateNodePositions.ts index 70e1a523e..a65f14eed 100644 --- a/packages/core/src/hooks/useUpdateNodePositions.ts +++ b/packages/react/src/hooks/useUpdateNodePositions.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import { calcNextPosition } from '@reactflow/utils'; +import { calcNextPosition } from '@xyflow/system'; import { useStoreApi } from '../hooks/useStore'; diff --git a/packages/core/src/hooks/useViewport.ts b/packages/react/src/hooks/useViewport.ts similarity index 89% rename from packages/core/src/hooks/useViewport.ts rename to packages/react/src/hooks/useViewport.ts index 13b214c51..c7153fac6 100644 --- a/packages/core/src/hooks/useViewport.ts +++ b/packages/react/src/hooks/useViewport.ts @@ -1,5 +1,5 @@ import { shallow } from 'zustand/shallow'; -import type { Viewport } from '@reactflow/system'; +import type { Viewport } from '@xyflow/system'; import { useStore } from '../hooks/useStore'; import type { ReactFlowState } from '../types'; diff --git a/packages/core/src/hooks/useViewportHelper.ts b/packages/react/src/hooks/useViewportHelper.ts similarity index 95% rename from packages/core/src/hooks/useViewportHelper.ts rename to packages/react/src/hooks/useViewportHelper.ts index 96d47471a..67301e04b 100644 --- a/packages/core/src/hooks/useViewportHelper.ts +++ b/packages/react/src/hooks/useViewportHelper.ts @@ -1,6 +1,5 @@ import { useMemo } from 'react'; -import { pointToRendererPoint, getTransformForBounds, fitView } from '@reactflow/utils'; -import type { XYPosition } from '@reactflow/system'; +import { pointToRendererPoint, getTransformForBounds, fitView, type XYPosition } from '@xyflow/system'; import { useStoreApi, useStore } from '../hooks/useStore'; import type { ViewportHelperFunctions, ReactFlowState } from '../types'; diff --git a/packages/core/src/hooks/useVisibleEdges.ts b/packages/react/src/hooks/useVisibleEdges.ts similarity index 96% rename from packages/core/src/hooks/useVisibleEdges.ts rename to packages/react/src/hooks/useVisibleEdges.ts index ac888780d..aa57ee2fe 100644 --- a/packages/core/src/hooks/useVisibleEdges.ts +++ b/packages/react/src/hooks/useVisibleEdges.ts @@ -1,6 +1,5 @@ import { useCallback } from 'react'; -import { internalsSymbol } from '@reactflow/system'; -import { isNumeric } from '@reactflow/utils'; +import { internalsSymbol, isNumeric } from '@xyflow/system'; import { useStore } from '../hooks/useStore'; import { isEdgeVisible } from '../container/EdgeRenderer/utils'; diff --git a/packages/core/src/hooks/useVisibleNodes.ts b/packages/react/src/hooks/useVisibleNodes.ts similarity index 91% rename from packages/core/src/hooks/useVisibleNodes.ts rename to packages/react/src/hooks/useVisibleNodes.ts index 1a1d6c5d3..c0fdb56a4 100644 --- a/packages/core/src/hooks/useVisibleNodes.ts +++ b/packages/react/src/hooks/useVisibleNodes.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import { getNodesInside } from '@reactflow/utils'; +import { getNodesInside } from '@xyflow/system'; import { useStore } from '../hooks/useStore'; import type { Node, ReactFlowState } from '../types'; diff --git a/packages/core/src/index.ts b/packages/react/src/index.ts similarity index 88% rename from packages/core/src/index.ts rename to packages/react/src/index.ts index a48b55e86..45f05f119 100644 --- a/packages/core/src/index.ts +++ b/packages/react/src/index.ts @@ -23,19 +23,20 @@ export { default as useOnViewportChange, type UseOnViewportChangeOptions } from export { default as useOnSelectionChange, type UseOnSelectionChangeOptions } from './hooks/useOnSelectionChange'; export { default as useNodesInitialized, type UseNodesInitializedOptions } from './hooks/useNodesInitialized'; export { useNodeId } from './contexts/NodeIdContext'; -export * from '@reactflow/edge-utils'; -export * from '@reactflow/system'; -export { - getTransformForBounds, - getRectOfNodes, - getNodePositionWithOrigin, - rectToBox, - boxToRect, - getBoundsOfRects, - clamp, -} from '@reactflow/utils'; +export * from '@xyflow/system'; +// export { +// getTransformForBounds, +// getRectOfNodes, +// getNodePositionWithOrigin, +// rectToBox, +// boxToRect, +// getBoundsOfRects, +// clamp, +// } from '@xyflow/system'; export { applyNodeChanges, applyEdgeChanges } from './utils/changes'; export { isNode, isEdge, getIncomers, getOutgoers, addEdge, updateEdge, getConnectedEdges } from './utils/general'; +export * from './additional-components'; + export * from './types'; diff --git a/packages/core/src/store/index.ts b/packages/react/src/store/index.ts similarity index 98% rename from packages/core/src/store/index.ts rename to packages/react/src/store/index.ts index 6aae84b02..c5cfbc65e 100644 --- a/packages/core/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -1,6 +1,12 @@ import { createStore } from 'zustand'; -import { clampPosition, getDimensions, fitView, getHandleBounds } from '@reactflow/utils'; -import { internalsSymbol, type CoordinateExtent } from '@reactflow/system'; +import { + clampPosition, + getDimensions, + fitView, + getHandleBounds, + internalsSymbol, + type CoordinateExtent, +} from '@xyflow/system'; import { applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes'; import { createNodeInternals, updateAbsoluteNodePositions, updateNodesAndEdgesSelections } from './utils'; diff --git a/packages/core/src/store/initialState.ts b/packages/react/src/store/initialState.ts similarity index 92% rename from packages/core/src/store/initialState.ts rename to packages/react/src/store/initialState.ts index 4a34de55d..9bca96d29 100644 --- a/packages/core/src/store/initialState.ts +++ b/packages/react/src/store/initialState.ts @@ -1,5 +1,4 @@ -import { devWarn, infiniteExtent } from '@reactflow/utils'; -import { ConnectionMode } from '@reactflow/system'; +import { devWarn, infiniteExtent, ConnectionMode } from '@xyflow/system'; import type { ReactFlowStore } from '../types'; diff --git a/packages/core/src/store/utils.ts b/packages/react/src/store/utils.ts similarity index 96% rename from packages/core/src/store/utils.ts rename to packages/react/src/store/utils.ts index d6d69825e..b78ed2576 100644 --- a/packages/core/src/store/utils.ts +++ b/packages/react/src/store/utils.ts @@ -1,6 +1,11 @@ import type { StoreApi } from 'zustand'; -import { internalsSymbol, type XYZPosition, type NodeOrigin } from '@reactflow/system'; -import { isNumeric, getNodePositionWithOrigin } from '@reactflow/utils'; +import { + internalsSymbol, + isNumeric, + getNodePositionWithOrigin, + type XYZPosition, + type NodeOrigin, +} from '@xyflow/system'; import type { Edge, EdgeSelectionChange, Node, NodeInternals, NodeSelectionChange, ReactFlowState } from '../types'; diff --git a/packages/core/src/styles/base.css b/packages/react/src/styles/base.css similarity index 100% rename from packages/core/src/styles/base.css rename to packages/react/src/styles/base.css diff --git a/packages/core/src/styles/index.ts b/packages/react/src/styles/index.ts similarity index 100% rename from packages/core/src/styles/index.ts rename to packages/react/src/styles/index.ts diff --git a/packages/core/src/styles/init.css b/packages/react/src/styles/init.css similarity index 98% rename from packages/core/src/styles/init.css rename to packages/react/src/styles/init.css index f676e4453..6b4f5b870 100644 --- a/packages/core/src/styles/init.css +++ b/packages/react/src/styles/init.css @@ -232,3 +232,7 @@ pointer-events: none; user-select: none; } + +.react-flow__minimap { + background-color: #fff; +} diff --git a/packages/node-resizer/src/style.css b/packages/react/src/styles/node-resizer.css similarity index 99% rename from packages/node-resizer/src/style.css rename to packages/react/src/styles/node-resizer.css index 0df9c1fbc..f0113a53e 100644 --- a/packages/node-resizer/src/style.css +++ b/packages/react/src/styles/node-resizer.css @@ -80,6 +80,7 @@ left: 0; border-left-width: 1px; } + .react-flow__resize-control.line.right { left: 100%; border-right-width: 1px; @@ -97,6 +98,7 @@ top: 0; border-top-width: 1px; } + .react-flow__resize-control.line.bottom { border-bottom-width: 1px; top: 100%; diff --git a/packages/core/src/styles/style.css b/packages/react/src/styles/style.css similarity index 66% rename from packages/core/src/styles/style.css rename to packages/react/src/styles/style.css index 9850564d5..4ac170c49 100644 --- a/packages/core/src/styles/style.css +++ b/packages/react/src/styles/style.css @@ -1,5 +1,6 @@ /* this gets exported as style.css and can be used for the default theming */ @import './init.css'; +@import './node-resizer.css'; .react-flow__edge { &.updating { @@ -70,3 +71,40 @@ border: 1px solid white; border-radius: 100%; } + +.react-flow__controls { + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.08); + + &-button { + border: none; + background: #fefefe; + border-bottom: 1px solid #eee; + box-sizing: content-box; + display: flex; + justify-content: center; + align-items: center; + width: 16px; + height: 16px; + cursor: pointer; + user-select: none; + padding: 5px; + + &:hover { + background: #f4f4f4; + } + + svg { + width: 100%; + max-width: 12px; + max-height: 12px; + } + + &:disabled { + pointer-events: none; + + svg { + fill-opacity: 0.4; + } + } + } +} diff --git a/packages/core/src/types/changes.ts b/packages/react/src/types/changes.ts similarity index 95% rename from packages/core/src/types/changes.ts rename to packages/react/src/types/changes.ts index a486e7cf0..69ee0f1fa 100644 --- a/packages/core/src/types/changes.ts +++ b/packages/react/src/types/changes.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ - -import type { XYPosition, Dimensions } from '@reactflow/system'; +import type { XYPosition, Dimensions } from '@xyflow/system'; import type { Node, Edge } from '.'; diff --git a/packages/core/src/types/component-props.ts b/packages/react/src/types/component-props.ts similarity index 99% rename from packages/core/src/types/component-props.ts rename to packages/react/src/types/component-props.ts index 760f13383..f49b5097c 100644 --- a/packages/core/src/types/component-props.ts +++ b/packages/react/src/types/component-props.ts @@ -19,7 +19,7 @@ import type { SelectionMode, OnError, IsValidConnection, -} from '@reactflow/system'; +} from '@xyflow/system'; import type { OnSelectionChangeFunc, diff --git a/packages/core/src/types/edges.ts b/packages/react/src/types/edges.ts similarity index 99% rename from packages/core/src/types/edges.ts rename to packages/react/src/types/edges.ts index 4e524f4ea..b071f42cb 100644 --- a/packages/core/src/types/edges.ts +++ b/packages/react/src/types/edges.ts @@ -12,7 +12,7 @@ import type { ConnectionLineType, HandleElement, ConnectionStatus, -} from '@reactflow/system'; +} from '@xyflow/system'; import { Node } from '.'; diff --git a/packages/core/src/types/general.ts b/packages/react/src/types/general.ts similarity index 98% rename from packages/core/src/types/general.ts rename to packages/react/src/types/general.ts index b8bb015c4..8108c3ddf 100644 --- a/packages/core/src/types/general.ts +++ b/packages/react/src/types/general.ts @@ -12,7 +12,7 @@ import { SetCenter, FitBounds, Project, -} from '@reactflow/system'; +} from '@xyflow/system'; import type { NodeChange, EdgeChange, Node, WrapNodeProps, Edge, EdgeProps, WrapEdgeProps, ReactFlowInstance } from '.'; diff --git a/packages/core/src/types/index.ts b/packages/react/src/types/index.ts similarity index 100% rename from packages/core/src/types/index.ts rename to packages/react/src/types/index.ts diff --git a/packages/core/src/types/instance.ts b/packages/react/src/types/instance.ts similarity index 97% rename from packages/core/src/types/instance.ts rename to packages/react/src/types/instance.ts index af83e1e38..239d339f3 100644 --- a/packages/core/src/types/instance.ts +++ b/packages/react/src/types/instance.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-namespace */ -import type { Rect, Viewport } from '@reactflow/system'; +import type { Rect, Viewport } from '@xyflow/system'; import type { Node, Edge, ViewportHelperFunctions } from '.'; export type ReactFlowJsonObject = { diff --git a/packages/core/src/types/nodes.ts b/packages/react/src/types/nodes.ts similarity index 96% rename from packages/core/src/types/nodes.ts rename to packages/react/src/types/nodes.ts index 4f19ac31e..ee948e544 100644 --- a/packages/core/src/types/nodes.ts +++ b/packages/react/src/types/nodes.ts @@ -1,5 +1,5 @@ import type { CSSProperties, MouseEvent as ReactMouseEvent } from 'react'; -import type { BaseNode } from '@reactflow/system'; +import type { BaseNode } from '@xyflow/system'; export type Node = BaseNode< NodeData, diff --git a/packages/core/src/types/store.ts b/packages/react/src/types/store.ts similarity index 99% rename from packages/core/src/types/store.ts rename to packages/react/src/types/store.ts index a07603293..12240ff9d 100644 --- a/packages/core/src/types/store.ts +++ b/packages/react/src/types/store.ts @@ -24,7 +24,7 @@ import { type OnMoveEnd, type IsValidConnection, type UpdateConnection, -} from '@reactflow/system'; +} from '@xyflow/system'; import type { Edge, diff --git a/packages/core/src/utils/changes.ts b/packages/react/src/utils/changes.ts similarity index 100% rename from packages/core/src/utils/changes.ts rename to packages/react/src/utils/changes.ts diff --git a/packages/core/src/utils/general.ts b/packages/react/src/utils/general.ts similarity index 95% rename from packages/core/src/utils/general.ts rename to packages/react/src/utils/general.ts index ff323a444..e13247c19 100644 --- a/packages/core/src/utils/general.ts +++ b/packages/react/src/utils/general.ts @@ -6,7 +6,8 @@ import { getIncomersBase, updateEdgeBase, getConnectedEdgesBase, -} from '@reactflow/utils'; +} from '@xyflow/system'; + import type { Edge, Node } from '../types'; export const isNode = isNodeBase; diff --git a/packages/core/src/utils/index.ts b/packages/react/src/utils/index.ts similarity index 100% rename from packages/core/src/utils/index.ts rename to packages/react/src/utils/index.ts diff --git a/packages/reactflow/tsconfig.json b/packages/react/tsconfig.json similarity index 51% rename from packages/reactflow/tsconfig.json rename to packages/react/tsconfig.json index d04cdef51..85011689e 100644 --- a/packages/reactflow/tsconfig.json +++ b/packages/react/tsconfig.json @@ -1,6 +1,6 @@ { - "extends": "@reactflow/tsconfig/react.json", - "display": "reactflow", + "extends": "@xyflow/tsconfig/react.json", + "display": "@xyflow/react", "include": ["**/*.ts", "**/*.tsx"], "exclude": ["node_modules", "dist"] } diff --git a/packages/reactflow/.eslintrc.js b/packages/reactflow/.eslintrc.js deleted file mode 100644 index 31cfbd113..000000000 --- a/packages/reactflow/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@reactflow/eslint-config'], -}; diff --git a/packages/reactflow/CHANGELOG.md b/packages/reactflow/CHANGELOG.md deleted file mode 100644 index c29273ddd..000000000 --- a/packages/reactflow/CHANGELOG.md +++ /dev/null @@ -1,496 +0,0 @@ -# reactflow - -## 11.7.2 - -### Patch Changes - -- [#3063](https://github.com/wbkd/react-flow/pull/3063) [`33915b88`](https://github.com/wbkd/react-flow/commit/33915b88c2ae701847870346b381f9cfa86c6459) - controls: disable zoom buttons when min/max is reached -- [#3060](https://github.com/wbkd/react-flow/pull/3060) [`70ec97f7`](https://github.com/wbkd/react-flow/commit/70ec97f7daec6d5401215cae3edac04aea88a3ba) - fix useNodes and useEdges bug with infinite re-renderings -- [#3064](https://github.com/wbkd/react-flow/pull/3064) [`d2d1aebc`](https://github.com/wbkd/react-flow/commit/d2d1aebc0f7fea4183406e7d1915b7fcd6995f48) - refactor useUpdateNodeInternals: only call updateNodeDimensions once -- [#3059](https://github.com/wbkd/react-flow/pull/3059) [`4374459e`](https://github.com/wbkd/react-flow/commit/4374459ef9fec797bbc0407231f09a1acacd245b) - fix useUpdateNodeInternals: update type -- Updated dependencies [[`70ec97f7`](https://github.com/wbkd/react-flow/commit/70ec97f7daec6d5401215cae3edac04aea88a3ba), [`33915b88`](https://github.com/wbkd/react-flow/commit/33915b88c2ae701847870346b381f9cfa86c6459), [`d2d1aebc`](https://github.com/wbkd/react-flow/commit/d2d1aebc0f7fea4183406e7d1915b7fcd6995f48), [`4374459e`](https://github.com/wbkd/react-flow/commit/4374459ef9fec797bbc0407231f09a1acacd245b)]: - - @reactflow/core@11.7.2 - - @reactflow/controls@11.1.13 - - @reactflow/background@11.2.2 - - @reactflow/minimap@11.5.2 - - @reactflow/node-toolbar@1.2.1 - -## 11.7.1 - -### Patch Changes - -- [#3043](https://github.com/wbkd/react-flow/pull/3043) [`cf7a7d3d`](https://github.com/wbkd/react-flow/commit/cf7a7d3dad1e73215a72a5dc72e21fd50208cdbb) - handles: handles on top of each other, reduce re-renderings -- [#3046](https://github.com/wbkd/react-flow/pull/3046) [`07b975bb`](https://github.com/wbkd/react-flow/commit/07b975bbee3580249e36a19582213b250f78093c) - base-edge: pass id to base edge path -- [#3007](https://github.com/wbkd/react-flow/pull/3007) [`c80d269b`](https://github.com/wbkd/react-flow/commit/c80d269b85a0054221f4639c328fc36a3befbe70) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - allow array of ids as updateNodeInternals arg -- [#3029](https://github.com/wbkd/react-flow/pull/3029) [`a3fa164c`](https://github.com/wbkd/react-flow/commit/a3fa164c34cc820c79bb031c9fd97b72a3546614) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - autopan: only update nodes when transform change happen -- [#3052](https://github.com/wbkd/react-flow/pull/3052) [`55e05cf7`](https://github.com/wbkd/react-flow/commit/55e05cf76ae21863691153e76dbd51d1eecd2c60) Thanks [@Noam3kCH](https://github.com/Noam3kCH)! - node-toolbar: add prop to align bar at start, center or end - -- Updated dependencies [[`cf7a7d3d`](https://github.com/wbkd/react-flow/commit/cf7a7d3dad1e73215a72a5dc72e21fd50208cdbb), [`07b975bb`](https://github.com/wbkd/react-flow/commit/07b975bbee3580249e36a19582213b250f78093c), [`55e05cf7`](https://github.com/wbkd/react-flow/commit/55e05cf76ae21863691153e76dbd51d1eecd2c60), [`c80d269b`](https://github.com/wbkd/react-flow/commit/c80d269b85a0054221f4639c328fc36a3befbe70), [`46526b4e`](https://github.com/wbkd/react-flow/commit/46526b4e02b83d74726701e3ba73d0be8cf80787), [`a3fa164c`](https://github.com/wbkd/react-flow/commit/a3fa164c34cc820c79bb031c9fd97b72a3546614)]: - - @reactflow/core@11.7.1 - - @reactflow/node-toolbar@1.2.0 - - @reactflow/controls@11.1.12 - - @reactflow/background@11.2.1 - - @reactflow/minimap@11.5.1 - -## 11.7.0 - -Most notable updates: - -- `@reactflow/node-resizer` is now part of this package. No need to install it separately anymore. -- Handles: `isConnectableStart` and `isConnectableEnd` props to configure if you can start or end a connection at a certain handle -- Edges: `updatable` option to enable updates for specific edges -- MiniMap: `inversePan` and `zoomStep` props -- Background: `id` and `offset` props - this enables you to combine different patterns (useful if you want a graph paper like background for example) -- useNodesInitialized: options to configure if hidden nodes should be included (false by default) - -Big thanks to [@Elringus](https://github.com/Elringus) and [@bcakmakoglu](https://github.com/bcakmakoglu)! - -### Minor Changes - -- [#2964](https://github.com/wbkd/react-flow/pull/2964) [`2fb4c2c8`](https://github.com/wbkd/react-flow/commit/2fb4c2c82343751ff536da262de74bd9080321b4) - add @reactflow/node-resizer package -- [#2960](https://github.com/wbkd/react-flow/pull/2960) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - edges: add `updatable` option -- [#2958](https://github.com/wbkd/react-flow/pull/2958) [`4d97a0ed`](https://github.com/wbkd/react-flow/commit/4d97a0ed168ce643fc0c99fa6b47cf1296d66065) - handles: add `isConnectableStart` and `isConnectableEnd` props -- [#2956](https://github.com/wbkd/react-flow/pull/2956) [`923a54c4`](https://github.com/wbkd/react-flow/commit/923a54c481b90954806202817ba844cfa7203a38) - add options for `useNodesInitialized`, ignore hidden nodes by default -- [#2944](https://github.com/wbkd/react-flow/pull/2944) Thanks [@Elringus](https://github.com/Elringus)! - add `inversePan` and `zoomStep` props -- [#2941](https://github.com/wbkd/react-flow/pull/2941) Thanks [@Elringus](https://github.com/Elringus)! - background: add `id` and `offset` props - -### Patch Changes - -- [#2926](https://github.com/wbkd/react-flow/pull/2926) Thanks [@Elringus](https://github.com/Elringus)! - fix non-passive wheel event listener violation -- [#2933](https://github.com/wbkd/react-flow/pull/2933) [`fe8cac0a`](https://github.com/wbkd/react-flow/commit/fe8cac0adb359109e0e9eafe8b9261ba354076bb) - prefix error keys with "error" -- [#2939](https://github.com/wbkd/react-flow/pull/2939) [`4a4ca171`](https://github.com/wbkd/react-flow/commit/4a4ca171955f5c8d58b23e3ad48406f1a21dc402) - add connection result to store - -### Patch Changes - -- Updated dependencies [[`098eee3d`](https://github.com/wbkd/react-flow/commit/098eee3d41dabc870777b081796401ff13b5a776), [`fe8cac0a`](https://github.com/wbkd/react-flow/commit/fe8cac0adb359109e0e9eafe8b9261ba354076bb), [`4a4ca171`](https://github.com/wbkd/react-flow/commit/4a4ca171955f5c8d58b23e3ad48406f1a21dc402), [`c1448c2f`](https://github.com/wbkd/react-flow/commit/c1448c2f7415dd3b4b2c54e05404c5ab24e8978d), [`923a54c4`](https://github.com/wbkd/react-flow/commit/923a54c481b90954806202817ba844cfa7203a38), [`4d97a0ed`](https://github.com/wbkd/react-flow/commit/4d97a0ed168ce643fc0c99fa6b47cf1296d66065), [`771c7a5d`](https://github.com/wbkd/react-flow/commit/771c7a5d133ce96e9f7471394c15189e0657ce01), [`c22e1c28`](https://github.com/wbkd/react-flow/commit/c22e1c28c5555a638c2a8e82c3bfc986b3965d36)]: - - @reactflow/core@11.7.0 - - @reactflow/minimap@11.5.0 - - @reactflow/background@11.2.0 - - @reactflow/controls@11.1.11 - - @reactflow/node-toolbar@1.1.11 - -## 11.6.1 - -### Patch Changes - -- Always create new edge object (fixes an issue with Redux toolkit and other immutable helper libs) - -## 11.6.0 - -This release introduces a new `isValidConnection` prop for the ReactFlow component. You no longer need to pass it to all your Handle components but can pass it once. We also added a new option for the `updateEdge` function that allows you to specify if you want to replace an id when updating it. More over the `MiniMap` got a new `nodeComponent` prop to pass a custom component for the mini map nodes. - -### Minor Changes - -- [#2877](https://github.com/wbkd/react-flow/pull/2877) [`b8886514`](https://github.com/wbkd/react-flow/commit/b88865140c72fa7e92a883498768000cb2cc96a7) - add `isValidConnection` prop for ReactFlow component -- [#2847](https://github.com/wbkd/react-flow/pull/2847) [`16bf89f2`](https://github.com/wbkd/react-flow/commit/16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Add option to enable/disable replacing edge id when using `updateEdge` -- [#2906](https://github.com/wbkd/react-flow/pull/2906) [`4a30185a`](https://github.com/wbkd/react-flow/commit/4a30185a12899691ff61259f0db84bc5494cb573) Thanks [@hayleigh-dot-dev](https://github.com/hayleigh-dot-dev)! - Minimap: add nodeComponent prop for passing custom component - -### Patch Changes - -- [#2895](https://github.com/wbkd/react-flow/pull/2895) [`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425) - add data-testid for controls, minimap and background -- [#2894](https://github.com/wbkd/react-flow/pull/2894) [`83fc4675`](https://github.com/wbkd/react-flow/commit/83fc467545527729633e817dbccfe59d0040da4b) - fix(nodes): blur when node gets unselected -- [#2892](https://github.com/wbkd/react-flow/pull/2892) [`5fabd272`](https://github.com/wbkd/react-flow/commit/5fabd2720f6367f75f79a45822d8f675a3b8e1cf) Thanks [@danielgek](https://github.com/danielgek) - track modifier keys on useKeypress -- [#2893](https://github.com/wbkd/react-flow/pull/2893) [`8f080bd5`](https://github.com/wbkd/react-flow/commit/8f080bd5e0e7e6c71f51eee9c9f2bc4b25182861) - fix: check if handle is connectable - -- Updated dependencies [[`3d5764ca`](https://github.com/wbkd/react-flow/commit/3d5764cac6548984a30cbf85899024e62fd69425), [`4a30185a`](https://github.com/wbkd/react-flow/commit/4a30185a12899691ff61259f0db84bc5494cb573), [`83fc4675`](https://github.com/wbkd/react-flow/commit/83fc467545527729633e817dbccfe59d0040da4b), [`b1190837`](https://github.com/wbkd/react-flow/commit/b11908370bc438ca8d4179497cd4eb1f8c656798), [`5fabd272`](https://github.com/wbkd/react-flow/commit/5fabd2720f6367f75f79a45822d8f675a3b8e1cf), [`8f080bd5`](https://github.com/wbkd/react-flow/commit/8f080bd5e0e7e6c71f51eee9c9f2bc4b25182861), [`b8886514`](https://github.com/wbkd/react-flow/commit/b88865140c72fa7e92a883498768000cb2cc96a7), [`16bf89f2`](https://github.com/wbkd/react-flow/commit/16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533)]: - - @reactflow/background@11.1.9 - - @reactflow/controls@11.1.9 - - @reactflow/core@11.6.0 - - @reactflow/minimap@11.4.0 - - @reactflow/node-toolbar@1.1.9 - -## 11.5.6 - -### Patch Changes - -- [#2834](https://github.com/wbkd/react-flow/pull/2834) [`23424ea6`](https://github.com/wbkd/react-flow/commit/23424ea6750f092210f83df17a00c89adb910d96) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Add `nodes` to fit view options to allow fitting view only around specified set of nodes -- [#2836](https://github.com/wbkd/react-flow/pull/2836) [`959b1114`](https://github.com/wbkd/react-flow/commit/959b111448bba4686040473e46988be9e7befbe6) - Fix: connections for handles with bigger handles than connection radius -- [#2819](https://github.com/wbkd/react-flow/pull/2819) [`0d259b02`](https://github.com/wbkd/react-flow/commit/0d259b028558aab650546f3371a85f3bce45252f) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Avoid triggering edge update if not using left mouse button -- [#2832](https://github.com/wbkd/react-flow/pull/2832) [`f3de9335`](https://github.com/wbkd/react-flow/commit/f3de9335af6cd96cd77dc77f24a944eef85384e5) - fitView: return type boolean -- [#2838](https://github.com/wbkd/react-flow/pull/2838) [`021f5a92`](https://github.com/wbkd/react-flow/commit/021f5a9210f47a968e50446cd2f9dae1f97880a4) - refactor: use key press handle modifier keys + input -- [#2839](https://github.com/wbkd/react-flow/pull/2839) [`72216ff6`](https://github.com/wbkd/react-flow/commit/72216ff62014acd2d73999053c72bd7aeed351f6) - fix PropsWithChildren: pass default generic for v17 types - -- Updated dependencies [[`72216ff6`](https://github.com/wbkd/react-flow/commit/72216ff62014acd2d73999053c72bd7aeed351f6), [`959b1114`](https://github.com/wbkd/react-flow/commit/959b111448bba4686040473e46988be9e7befbe6), [`0d259b02`](https://github.com/wbkd/react-flow/commit/0d259b028558aab650546f3371a85f3bce45252f), [`f3de9335`](https://github.com/wbkd/react-flow/commit/f3de9335af6cd96cd77dc77f24a944eef85384e5), [`23424ea6`](https://github.com/wbkd/react-flow/commit/23424ea6750f092210f83df17a00c89adb910d96), [`021f5a92`](https://github.com/wbkd/react-flow/commit/021f5a9210f47a968e50446cd2f9dae1f97880a4)]: - - @reactflow/core@11.5.5 - - @reactflow/background@11.1.8 - - @reactflow/controls@11.1.8 - - @reactflow/minimap@11.3.8 - - @reactflow/node-toolbar@1.1.8 - -## 11.5.5 - -### Patch Changes - -- [`383a074a`](https://github.com/wbkd/react-flow/commit/383a074aeae6dbec8437fa08c7c8d8240838a84e) Thanks [@bcakmakoglu](https://github.com/bcakmakoglu)! - Check if prevClosestHandle exists in onPointerUp. Fixes connections getting stuck on last handle and connecting, even when out of connectionRadius - -- Updated dependencies [[`383a074a`](https://github.com/wbkd/react-flow/commit/383a074aeae6dbec8437fa08c7c8d8240838a84e)]: - - @reactflow/core@11.5.4 - - @reactflow/background@11.1.7 - - @reactflow/controls@11.1.7 - - @reactflow/minimap@11.3.7 - - @reactflow/node-toolbar@1.1.7 - -## 11.5.4 - -This release fixes some issues with the newly introduced connection radius feature. We are now not only checking the radius but the handle itself too (like in the old version). That means that you can connect to a handle that is bigger than the connection radius. We are also not snapping connections anymore when they are not valid and pass a status class to the connection line that says if the current connection is valid or not. More over we fixed a connection issue with iOS. - -### Patch Changes - -- [#2800](https://github.com/wbkd/react-flow/pull/2800) [`be8097ac`](https://github.com/wbkd/react-flow/commit/be8097acadca3054c3b236ce4296fc516010ef8c) - When node is not draggable, you can't move it with a selection either -- [#2803](https://github.com/wbkd/react-flow/pull/2803) [`1527795d`](https://github.com/wbkd/react-flow/commit/1527795d18c3af38c8ec7059436ea0fbf6c27bbd) - connection: add status class (valid or invalid) while in connection radius -- [#2801](https://github.com/wbkd/react-flow/pull/2801) [`3b6348a8`](https://github.com/wbkd/react-flow/commit/3b6348a8d1573afb39576327318bc172e33393c2) - fix(ios): connection error + dont snap invalid connection lines, check handle and connection radius - -- Updated dependencies [[`be8097ac`](https://github.com/wbkd/react-flow/commit/be8097acadca3054c3b236ce4296fc516010ef8c), [`1527795d`](https://github.com/wbkd/react-flow/commit/1527795d18c3af38c8ec7059436ea0fbf6c27bbd), [`3b6348a8`](https://github.com/wbkd/react-flow/commit/3b6348a8d1573afb39576327318bc172e33393c2)]: - - @reactflow/core@11.5.3 - - @reactflow/background@11.1.6 - - @reactflow/controls@11.1.6 - - @reactflow/minimap@11.3.6 - - @reactflow/node-toolbar@1.1.6 - -## 11.5.3 - -### Patch Changes - -- [#2792](https://github.com/wbkd/react-flow/pull/2792) [`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a) - Accept React 17 types as dev dependency - -- Updated dependencies [[`d8c679b4`](https://github.com/wbkd/react-flow/commit/d8c679b4c90c5b57d4b51e4aaa988243d6eaff5a)]: - - @reactflow/background@11.1.5 - - @reactflow/controls@11.1.5 - - @reactflow/core@11.5.2 - - @reactflow/minimap@11.3.5 - - @reactflow/node-toolbar@1.1.5 - -## 11.5.2 - -### Patch Changes - -- [#2783](https://github.com/wbkd/react-flow/pull/2783) [`71153534`](https://github.com/wbkd/react-flow/commit/7115353418ebc7f7c81ab0e861200972bbf7dbd5) - connections: check handle below mouse before using connection radius - -- Updated dependencies [[`71153534`](https://github.com/wbkd/react-flow/commit/7115353418ebc7f7c81ab0e861200972bbf7dbd5)]: - - @reactflow/core@11.5.1 - - @reactflow/background@11.1.4 - - @reactflow/controls@11.1.4 - - @reactflow/minimap@11.3.4 - - @reactflow/node-toolbar@1.1.4 - -## 11.5.1 - -### Minor Changes - -- use latest node-toolbar package to prevent dependency issues - -## 11.5.0 - -Lot's of improvements are coming with this release! - -- **Connecting radius**: No need to drop a connection line on top of handle anymore. You only need to be close to the handle. That radius can be configured with the `connectionRadius` prop. -- **Auto pan**: When you drag a node, a selection or the connection line to the border of the pane, it will pan into that direction. That makes it easier to connect far away nodes for example. If you don't like it you can set `autoPnaOnNodeDrag` and `autoPanOnConnect` to false. -- **Touch devices**: It's finally possibleto connect nodes with the connection line on touch devices. In combination with the new auto pan and connection radius the overall UX is way better. -- **Errors**: We added an `onError` prop to get notified when an error like "couldn't find source handle" happens. This is useful if you want to log errors for example. -- **Node type**: We added a second param to the generic `Node` type. You can not only pass `NodeData` but also the type as a second param: - -```ts -type MyCustomNode = Node; -``` - -This makes it easier to work with different custom nodes and data types. - -### Minor Changes - -- [#2754](https://github.com/wbkd/react-flow/pull/2754) [`e96309b6`](https://github.com/wbkd/react-flow/commit/e96309b6a57b1071faeebf7b0547fef7fd418694) - Add auto pan for connecting and node dragging and `connectionRadius` -- [#2773](https://github.com/wbkd/react-flow/pull/2773) - Add `onError` prop to get notified when an error happens - -### Patch Changes - -- [#2763](https://github.com/wbkd/react-flow/pull/2763) [`85003b01`](https://github.com/wbkd/react-flow/commit/85003b01add71ea852bd5b0d2f1e7496050a6b52) - Connecting nodes: Enable connections on touch devices -- [#2620](https://github.com/wbkd/react-flow/pull/2620) - Thanks [RichSchulz](https://github.com/RichSchulz)! - Types: improve typing for node type - -- Updated dependencies [[`e96309b6`](https://github.com/wbkd/react-flow/commit/e96309b6a57b1071faeebf7b0547fef7fd418694), [`85003b01`](https://github.com/wbkd/react-flow/commit/85003b01add71ea852bd5b0d2f1e7496050a6b52), [`4c516882`](https://github.com/wbkd/react-flow/commit/4c516882d2bbf426c1832a53ad40763cc1abef92)]: - - @reactflow/core@11.5.0 - - @reactflow/background@11.1.3 - - @reactflow/controls@11.1.3 - - @reactflow/minimap@11.3.3 - -## 11.4.2 - -### Patch Changes - -- [#2741](https://github.com/wbkd/react-flow/pull/2741) [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39) - chore(dependencies): update and cleanup - -- Updated dependencies [[`e34a3072`](https://github.com/wbkd/react-flow/commit/e34a30726dc55184f59adc4f16ca5215a7c42805), [`e2aff6c1`](https://github.com/wbkd/react-flow/commit/e2aff6c1e4ce54b57b724b2624367ee5fefd1c39)]: - - @reactflow/background@11.1.2 - - @reactflow/core@11.4.2 - - @reactflow/minimap@11.3.2 - - @reactflow/node-toolbar@1.1.2 - - @reactflow/controls@11.1.2 - -## 11.4.1 - -### Patch Changes - -- [#2738](https://github.com/wbkd/react-flow/pull/2738) [`82988485`](https://github.com/wbkd/react-flow/commit/82988485b730a9e32acbdae1ddcc81b33ddccaba) - fix: fitView for subflows, context menu on right mouse pan -- [#2740](https://github.com/wbkd/react-flow/pull/2740) [`d91e619a`](https://github.com/wbkd/react-flow/commit/d91e619a70a95db99a621ede59bc05b5a7766086) Thanks [@michaelspiss](https://github.com/michaelspiss)! - EdgeRenderer: check all handles for connection mode loose - -- Updated dependencies [[`82988485`](https://github.com/wbkd/react-flow/commit/82988485b730a9e32acbdae1ddcc81b33ddccaba), [`d91e619a`](https://github.com/wbkd/react-flow/commit/d91e619a70a95db99a621ede59bc05b5a7766086)]: - - @reactflow/core@11.4.1 - - @reactflow/background@11.1.1 - - @reactflow/controls@11.1.1 - - @reactflow/minimap@11.3.1 - - @reactflow/node-toolbar@1.1.1 - -## 11.4.0 - -## 11.4.0 - -## New Features - -New props for the ReactFlow component to customize the controls of the viewport and the selection box better: - -1. `selectionOnDrag` prop: Selection box without extra button press (need to set `panOnDrag={false}` or `panOnDrag={[1, 2]}`) -2. `panOnDrag={[0, 1, 2]}` option to configure specific mouse buttons for panning -3. `panActivationKeyCode="Space"` key code for activating dragging (useful when using `selectionOnDrag`) -4. `selectionMode={SelectionMode.Full}`: you can chose if the selection box needs to contain a node fully (`SelectionMode.Full`) or partially (`SelectionMode.Partial`) to select it -5. `onSelectionStart` and `onSelectionEnd` events -6. `elevateNodesOnSelect`: Defines if z-index should be increased when node is selected -7. New store function `getNodes`. You can now do `store.getState().getNodes()` instead of `Array.from(store.getNodes().nodeInternals.values())`. - -Thanks to @jackfishwick who helped a lot with the new panning and selection options. - -### Minor Changes - -- [#2678](https://github.com/wbkd/react-flow/pull/2678) [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493) - - Add new props to configure viewport controls (`selectionOnDrag`, `panActivationKeyCode`, ..) -- [#2661](https://github.com/wbkd/react-flow/pull/2661) [`7ef29108`](https://github.com/wbkd/react-flow/commit/7ef2910808aaaee029894363d52efc0c378a7654) - - panOnDrag: Use numbers for prop ([1,2] = drag via middle or right mouse button) - - selection: do not include hidden nodes - - minimap: fix onNodeClick for nodes outside the viewport - - keys: allow multi select when input is focused - -### Patch Changes - -- [#2695](https://github.com/wbkd/react-flow/pull/2695) [`ab2ff374`](https://github.com/wbkd/react-flow/commit/ab2ff3740618da48bd4350597e816c397f3d78ff) - Add elevateNodesOnSelect prop -- [#2660](https://github.com/wbkd/react-flow/pull/2660) [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0) - Add `getNodes` function to the store so that you don't need to do `Array.from(store.getState().nodeInternals.values())` anymore. -- [#2659](https://github.com/wbkd/react-flow/pull/2659) [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9) - Use translateExtent correctly -- [#2657](https://github.com/wbkd/react-flow/pull/2657) [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c) - Only trigger drag event when change happened - -- Updated dependencies [[`ab2ff374`](https://github.com/wbkd/react-flow/commit/ab2ff3740618da48bd4350597e816c397f3d78ff), [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`7ef29108`](https://github.com/wbkd/react-flow/commit/7ef2910808aaaee029894363d52efc0c378a7654), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0 - - @reactflow/minimap@11.3.0 - - @reactflow/node-toolbar@1.1.0 - - @reactflow/background@11.1.0 - - @reactflow/controls@11.1.0 - -## 11.4.0-next.1 - -### Minor Changes - -- panOnDrag: Use numbers for prop ([1,2] = drag via middle or right mouse button) - selection: do not include hidden nodes - minimap: fix onNodeClick for nodes outside the viewport - keys: allow multi select when input is focused - -### Patch Changes - -- Updated dependencies []: - - @reactflow/background@11.1.0-next.1 - - @reactflow/controls@11.1.0-next.1 - - @reactflow/core@11.4.0-next.1 - - @reactflow/minimap@11.3.0-next.1 - - @reactflow/node-toolbar@1.1.0-next.1 - -## 11.4.0-next.0 - -### Minor Changes - -- [#2678](https://github.com/wbkd/react-flow/pull/2678) [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493) Thanks [@moklick](https://github.com/moklick)! - ## New Features - - New props for the ReactFlow component to customize the controls of the viewport and the selection box better: - - 1. `selectionOnDrag` prop: Selection box without extra button press (need to set `panOnDrag={false} or `panOnDrag="RightClick"`) - 2. `panOnDrag="RightClick"` option - 3. `panActivationKeyCode="Space"` key code for activating dragging (useful when using `selectionOnDrag`) - 4. `selectionMode={SelectionMode.Full}`: you can chose if the selection box needs to contain a node fully (`SelectionMode.Full`) or partially (`SelectionMode.Partial`) to select it - 5. `onSelectionStart` and `onSelectionEnd` events - -### Patch Changes - -- [#2660](https://github.com/wbkd/react-flow/pull/2660) [`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0) Thanks [@moklick](https://github.com/moklick)! - Add `getNodes` function to the store so that you don't need to do `Array.from(store.getState().nodeInternals.values())` anymore. - -- [#2659](https://github.com/wbkd/react-flow/pull/2659) [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9) Thanks [@moklick](https://github.com/moklick)! - Use translateExtent correctly - -- [#2657](https://github.com/wbkd/react-flow/pull/2657) [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c) Thanks [@moklick](https://github.com/moklick)! - Only trigger drag event when change happened - -- Updated dependencies [[`50032c3d`](https://github.com/wbkd/react-flow/commit/50032c3d953bd819d0afe48e4b61f77f987cc8d0), [`baa8689e`](https://github.com/wbkd/react-flow/commit/baa8689ef629d22da4cbbef955e0c83d21df0493), [`4244bae2`](https://github.com/wbkd/react-flow/commit/4244bae25a36cb4904dc1fbba26e1c4d5d463cb9), [`23afb3ab`](https://github.com/wbkd/react-flow/commit/23afb3abebdb42fad284f68bec164afac609563c)]: - - @reactflow/core@11.4.0-next.0 - - @reactflow/minimap@11.3.0-next.0 - - @reactflow/node-toolbar@1.1.0-next.0 - - @reactflow/background@11.0.8-next.0 - - @reactflow/controls@11.0.8-next.0 - -## 11.3.3 - -In this update we did some changes so that we could implement the new [``](https://reactflow.dev/docs/api/nodes/node-resizer/) component (not part of the `reactflow` package!) more smoothly. - -### Patch Changes - -- Updated dependencies [[`e6b5d90f`](https://github.com/wbkd/react-flow/commit/e6b5d90f61c8ee60e817bba232a162cae2ab3e2a), [`6ee44e07`](https://github.com/wbkd/react-flow/commit/6ee44e076eaa6908d07578a757a5187642b732ae), [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18), [`aa69c207`](https://github.com/wbkd/react-flow/commit/aa69c20765e6978f4f9c8cc63ed7110dbf6d9d9d), [`d29c401d`](https://github.com/wbkd/react-flow/commit/d29c401d598dbf2dcd5609b7adb8d029906a6f18), [`0df02f35`](https://github.com/wbkd/react-flow/commit/0df02f35f8d6c54dae36af18278feadc77acb2d6)]: - - @reactflow/core@11.3.2 - - @reactflow/minimap@11.2.3 - - @reactflow/node-toolbar@1.0.2 - - @reactflow/background@11.0.7 - - @reactflow/controls@11.0.7 - -## 11.3.2 - -### Patch Changes - -- [`7ece618d`](https://github.com/wbkd/react-flow/commit/7ece618d94b76183c1ecd45b16f6ab168168351b) Thanks [@lounsbrough](https://github.com/lounsbrough)! - Fix minimap node position - -- Updated dependencies [[`7ece618d`](https://github.com/wbkd/react-flow/commit/7ece618d94b76183c1ecd45b16f6ab168168351b)]: - - @reactflow/minimap@11.2.2 - -## 11.3.1 - -### Patch Changes - -- [#2595](https://github.com/wbkd/react-flow/pull/2595) [`c828bfda`](https://github.com/wbkd/react-flow/commit/c828bfda0a8c4774bc43588640c7cca0cfdcb3f4) Thanks [@chrtze](https://github.com/chrtze)! - Fix and improve the behaviour when using nodeOrigin in combination with subflows -- [#2602](https://github.com/wbkd/react-flow/pull/2602) [`b0302ce4`](https://github.com/wbkd/react-flow/commit/b0302ce4261a992bee841bae84af347d03be690f) Thanks [@sdegueldre](https://github.com/sdegueldre)! - Don't use try catch in wrapper for checking if provider is available -- [#2601](https://github.com/wbkd/react-flow/pull/2601) [`b2c72813`](https://github.com/wbkd/react-flow/commit/b2c728137d1b53e38883f044fa447585c377a6af) Thanks [@hoondeveloper](https://github.com/hoondeveloper)! - fix isRectObject function -- [#2594](https://github.com/wbkd/react-flow/pull/2594) [`ec94d9ec`](https://github.com/wbkd/react-flow/commit/ec94d9ecdc964d6d66c04e9242f195614bbfdbbe) Thanks [@chrtze](https://github.com/chrtze)! - Allow multiple node ids to be passed for enabling multi selection toolbars - -- Updated dependencies [[`c828bfda`](https://github.com/wbkd/react-flow/commit/c828bfda0a8c4774bc43588640c7cca0cfdcb3f4), [`b0302ce4`](https://github.com/wbkd/react-flow/commit/b0302ce4261a992bee841bae84af347d03be690f), [`b2c72813`](https://github.com/wbkd/react-flow/commit/b2c728137d1b53e38883f044fa447585c377a6af), [`ec94d9ec`](https://github.com/wbkd/react-flow/commit/ec94d9ecdc964d6d66c04e9242f195614bbfdbbe)]: - - @reactflow/core@11.3.1 - - @reactflow/minimap@11.2.1 - - @reactflow/node-toolbar@1.0.1 - - @reactflow/background@11.0.6 - - @reactflow/controls@11.0.6 - -## 11.3.0 - -### Minor Changes - -- [#2562](https://github.com/wbkd/react-flow/pull/2562) [`d745aa33`](https://github.com/wbkd/react-flow/commit/d745aa33fcd1333e12929c862f9a3d6de53f7179) Thanks [@moklick](https://github.com/moklick)! - Minimap: Add `maskStrokeColor` and `maskStrokeWidth` props -- [#2563](https://github.com/wbkd/react-flow/pull/2563) [`98116d43`](https://github.com/wbkd/react-flow/commit/98116d431f9fcdcc9b23a5b606a94ec0740b64cd) Thanks [@chrtze](https://github.com/chrtze)! - Core: Add `` component that renders a fixed element attached to a node -- [#2545](https://github.com/wbkd/react-flow/pull/2545) [`8f63f751`](https://github.com/wbkd/react-flow/commit/8f63f751e302d3c935865760d2134350c31ab93f) Thanks [@chrtze](https://github.com/chrtze)! - Minimap: Add `ariaLabel` prop to configure or remove the aria-label - -### Patch Changes - -- [#2561](https://github.com/wbkd/react-flow/pull/2561) [`92cf497e`](https://github.com/wbkd/react-flow/commit/92cf497eb72f21af592a53f5af9770c9f1e6d940) Thanks [@moklick](https://github.com/moklick)! - Core: Fix multi selection and fitView when nodeOrigin is used -- [#2560](https://github.com/wbkd/react-flow/pull/2560) [`a39224b3`](https://github.com/wbkd/react-flow/commit/a39224b3a80afbdb83fc4490dd5f4f2be23cd4dd) Thanks [@neo](https://github.com/neo)! - Core: Always elevate zIndex when node is selected -- [#2573](https://github.com/wbkd/react-flow/pull/2573) [`5e8b67dd`](https://github.com/wbkd/react-flow/commit/5e8b67dd41f9bb60dcd7f5d14cc34b42c970e967) Thanks [@moklick](https://github.com/moklick)! - Core: Fix disappearing connection line for loose flows -- [#2558](https://github.com/wbkd/react-flow/pull/2558) [`2a1c7db6`](https://github.com/wbkd/react-flow/commit/2a1c7db6b27ac0f4f81dcef2d593f4753c4321c7) Thanks [@moklick](https://github.com/moklick)! - Core: Handle multiple instances on a page for EdgeLabelRenderer - -- Updated dependencies [[`d745aa33`](https://github.com/wbkd/react-flow/commit/d745aa33fcd1333e12929c862f9a3d6de53f7179), [`92cf497e`](https://github.com/wbkd/react-flow/commit/92cf497eb72f21af592a53f5af9770c9f1e6d940), [`98116d43`](https://github.com/wbkd/react-flow/commit/98116d431f9fcdcc9b23a5b606a94ec0740b64cd), [`8f63f751`](https://github.com/wbkd/react-flow/commit/8f63f751e302d3c935865760d2134350c31ab93f), [`a39224b3`](https://github.com/wbkd/react-flow/commit/a39224b3a80afbdb83fc4490dd5f4f2be23cd4dd), [`5e8b67dd`](https://github.com/wbkd/react-flow/commit/5e8b67dd41f9bb60dcd7f5d14cc34b42c970e967), [`2a1c7db6`](https://github.com/wbkd/react-flow/commit/2a1c7db6b27ac0f4f81dcef2d593f4753c4321c7), [`c793433c`](https://github.com/wbkd/react-flow/commit/c793433cafc214281ae97c9a32f5ac2fe453c34f)]: - - @reactflow/minimap@11.2.0 - - @reactflow/core@11.3.0 - - @reactflow/node-toolbar@1.0.0 - - @reactflow/background@11.0.5 - - @reactflow/controls@11.0.5 - -## 11.2.0 - -### Minor Changes - -- [#2535](https://github.com/wbkd/react-flow/pull/2535) [`7902a3ce`](https://github.com/wbkd/react-flow/commit/7902a3ce3188426d5cd07cf0943a68f679e67948) Thanks [@moklick](https://github.com/moklick)! - Feat: Add edge label renderer -- [#2536](https://github.com/wbkd/react-flow/pull/2536) [`b25d499e`](https://github.com/wbkd/react-flow/commit/b25d499ec05b5c6f21ac552d03650eb37433552e) Thanks [@pengfu](https://github.com/pengfu)! - Feat: add deleteElements helper function -- [#2539](https://github.com/wbkd/react-flow/pull/2539) [`4fc1253e`](https://github.com/wbkd/react-flow/commit/4fc1253eadf9b7dd392d8dc2348f44fa8d08f931) Thanks [@moklick](https://github.com/moklick)! - Feat: add intersection helpers -- [#2530](https://github.com/wbkd/react-flow/pull/2530) [`8ba4dd5d`](https://github.com/wbkd/react-flow/commit/8ba4dd5d1d4b2e6f107c148de62aec0b688d8b21) Thanks [@moklick](https://github.com/moklick)! - Feat: Add pan and zoom to mini map - -### Patch Changes - -- [#2538](https://github.com/wbkd/react-flow/pull/2538) [`740659c0`](https://github.com/wbkd/react-flow/commit/740659c0e788c7572d4a1e64e1d33d60712233fc) Thanks [@neo](https://github.com/neo)! - Refactor: put React Flow in isolated stacking context - -- Updated dependencies [[`740659c0`](https://github.com/wbkd/react-flow/commit/740659c0e788c7572d4a1e64e1d33d60712233fc), [`7902a3ce`](https://github.com/wbkd/react-flow/commit/7902a3ce3188426d5cd07cf0943a68f679e67948), [`b25d499e`](https://github.com/wbkd/react-flow/commit/b25d499ec05b5c6f21ac552d03650eb37433552e), [`4fc1253e`](https://github.com/wbkd/react-flow/commit/4fc1253eadf9b7dd392d8dc2348f44fa8d08f931), [`8ba4dd5d`](https://github.com/wbkd/react-flow/commit/8ba4dd5d1d4b2e6f107c148de62aec0b688d8b21)]: - - @reactflow/core@11.2.0 - - @reactflow/minimap@11.1.0 - - @reactflow/background@11.0.4 - - @reactflow/controls@11.0.4 - -## 11.1.2 - -Housekeeping release with some fixes and some cleanups for the types. - -### Patch Changes - -- make pro options acc type optional -- cleanup types -- fix rf id handling -- always render nodes when dragging=true -- don't apply animations to helper edge -- Updated dependencies: - - @reactflow/core@11.1.2 - - @reactflow/background@11.0.3 - - @reactflow/controls@11.0.3 - - @reactflow/minimap@11.0.3 - -## 11.1.1 - -### Patch Changes - -- [`c44413d`](https://github.com/wbkd/react-flow/commit/c44413d816604ae2d6ad81ed227c3dfde1a7bd8a) Thanks [@moklick](https://github.com/moklick)! - chore(panel): dont break user selection above panel -- [`48c402c`](https://github.com/wbkd/react-flow/commit/48c402c4d3bd9e16dc91cd4c549324e57b6d5c57) Thanks [@moklick](https://github.com/moklick)! - refactor(aria-descriptions): render when disableKeyboardA11y is true -- [`3a1a365`](https://github.com/wbkd/react-flow/commit/3a1a365a63fc4564d9a8d96309908986fcc86f95) Thanks [@moklick](https://github.com/moklick)! - fix(useOnSelectionChange): repair hook closes #2484 -- [`5d35094`](https://github.com/wbkd/react-flow/commit/5d350942d33ded626b3387206f0b0dee368efdfb) Thanks [@neo](https://github.com/neo)! - Add css files as sideEffects - -- Updated dependencies: - - @reactflow/background@11.0.2 - - @reactflow/core@11.1.1 - - @reactflow/controls@11.0.2 - - @reactflow/minimap@11.0.2 - -## 11.1.0 - -### Minor Changes - -- [`def11008`](https://github.com/wbkd/react-flow/commit/def11008d88749fec40e6fcba8bc41eea2511bab) Thanks [@moklick](https://github.com/moklick)! - New props: nodesFocusable and edgesFocusable - -### Patch Changes - -- [`d00faa6b`](https://github.com/wbkd/react-flow/commit/d00faa6b3e77388bfd655d4c02e9a5375bc515e4) Thanks [@moklick](https://github.com/moklick)! - Make nopan class name overwritable with class name option - -- Updated dependencies [[`def11008`](https://github.com/wbkd/react-flow/commit/def11008d88749fec40e6fcba8bc41eea2511bab), [`def11008`](https://github.com/wbkd/react-flow/commit/def11008d88749fec40e6fcba8bc41eea2511bab), [`d00faa6b`](https://github.com/wbkd/react-flow/commit/d00faa6b3e77388bfd655d4c02e9a5375bc515e4)]: - - @reactflow/background@11.0.1 - - @reactflow/core@11.1.0 - - @reactflow/controls@11.0.1 - - @reactflow/minimap@11.0.1 - -## 11.0.0 - -Finally it's here! A new version that comes with lots of improvements and the new package name `reactflow`. -From now on you can install it via `npm install reactflow`. - -## Major Changes - -- Importing CSS via `reactflow/dist/style.css` is mandatory -- **Better [Accessibility](/docs/guides/accessibility)** - - Nodes and edges are focusable, selectable, moveable and deleteable with the keyboard. - - `aria-` default attributes for all elements and controllable via `ariaLabel` options - - Keyboard controls can be disabled with the new `disableKeyboardA11y` prop -- **Better selectable edges** via new edge option: `interactionWidth` - renders invisible edge that makes it easier to interact -- **Better routing for smoothstep and step edges**: https://twitter.com/reactflowdev/status/1567535405284614145 -- **Nicer edge updating behaviour**: https://twitter.com/reactflowdev/status/1564966917517021184 -- **Node origin**: The new `nodeOrigin` prop lets you control the origin of a node. Useful for layouting. -- **New background pattern**: `BackgroundVariant.Cross` variant -- **[`useOnViewportChange`](/docs/api/hooks/use-on-viewport-change) hook** - handle viewport changes within a component -- **[`useOnSelectionChange`](/docs/api/hooks/use-on-selection-change) hook** - handle selection changes within a component -- **[`useNodesInitialized`](/docs/api/hooks/use-nodes-initialized) hook** - returns true if all nodes are initialized and if there is more than one node -- **Deletable option** for Nodes and edges -- **New Event handlers**: `onPaneMouseEnter`, `onPaneMouseMove` and `onPaneMouseLeave` -- **Edge `pathOptions`** for `smoothstep` and `default` edges -- **Nicer cursor defaults**: Cursor is grabbing, while dragging a node or panning -- **Pane moveable** with middle mouse button -- **Pan over nodes** when they are not draggable (`draggable=false` or `nodesDraggable` false) -- **[``](/docs/api/edges/base-edge) component** that makes it easier to build custom edges -- **[Separately installable packages](/docs/overview/packages/)** - - @reactflow/core - - @reactflow/background - - @reactflow/controls - - @reactflow/minimap - -### Patch Changes - -- Updated dependencies: - - @reactflow/background@11.0.0 - - @reactflow/controls@11.0.0 - - @reactflow/core@11.0.0 - - @reactflow/minimap@11.0.0 diff --git a/packages/reactflow/README.md b/packages/reactflow/README.md deleted file mode 100644 index c41f2e7ed..000000000 --- a/packages/reactflow/README.md +++ /dev/null @@ -1,128 +0,0 @@ -![readme-header](https://user-images.githubusercontent.com/3797215/156259138-fb9f59f8-52f2-474a-b78c-6570867e4ead.svg#gh-light-mode-only) - -
- -![GitHub License MIT](https://img.shields.io/github/license/wbkd/react-flow?color=%23ff0072) -![npm downloads](https://img.shields.io/npm/dt/reactflow?color=%23FF0072&label=downloads) -![GitHub Repo stars](https://img.shields.io/github/stars/wbkd/react-flow?color=%23FF0072) -![GitHub release (latest by date)](https://img.shields.io/github/v/release/wbkd/react-flow?color=%23FF0072) - -A highly customizable React component for building interactive graphs and node-based editors. - -[🚀 Getting Started](https://reactflow.dev/docs/getting-started/installation) | [📖 Documentation](https://reactflow.dev/docs/api/react-flow-props) | [📺 Examples](https://reactflow.dev/docs/examples/overview) | [☎️ Discord](https://discord.gg/RVmnytFmGW) | [💎 React Flow Pro](https://pro.reactflow.dev/pricing) - -
- ---- - -## Key Features - -- **Easy to use:** Seamless zooming and panning, single- and multi selection of graph elements and keyboard shortcuts are supported out of the box -- **Customizable:** Different [node](https://reactflow.dev/docs/api/nodes/node-types) and [edge types](https://reactflow.dev/docs/api/edges/edge-types) and support for custom nodes with multiple handles and custom edges -- **Fast rendering:** Only nodes that have changed are re-rendered and only those in the viewport are displayed -- **Hooks and Utils:** [Hooks](https://reactflow.dev/docs/api/hooks/use-react-flow) for handling nodes, edges and the viewport and graph [helper functions](https://reactflow.dev/docs/api/graph-util-functions) -- **Plugin Components:** [Background](https://reactflow.dev/docs/api/plugin-components/background), [MiniMap](https://reactflow.dev/docs/api/plugin-components/minimap) and [Controls](https://reactflow.dev/docs/api/plugin-components/controls) -- **Reliable**: Written in [Typescript](https://www.typescriptlang.org/) and tested with [cypress](https://www.cypress.io/) - -## Commercial Usage - -**Are you using React Flow for a personal project?** Great! No sponsorship needed, you can support us by reporting any bugs you find, sending us screenshots of your projects, and starring us on Github 🌟 - -**Are you using React Flow at your organization and making money from it?** Awesome! We rely on your support to keep React Flow developed and maintained under an MIT License, just how we like it. You can do that on the [React Flow Pro website](https://pro.reactflow.dev) or through [Github Sponsors](https://github.com/sponsors/wbkd). - -You can find more information in our [React Flow Pro FAQs](https://pro.reactflow.dev/info). - -## Installation - -The easiest way to get the latest version of React Flow is to install it via npm, yarn or pnpm: - -```bash -npm install reactflow -``` - -## Quick Start - -This is only a very basic usage example of React Flow. To see everything that is possible with the library, please refer to the [website](https://reactflow.dev) for [guides](https://reactflow.dev/docs/guides/custom-nodes), [examples](https://reactflow.dev/docs/examples/overview) and [API reference](https://reactflow.dev/docs/api/react-flow-props). - -```jsx -import { useCallback } from 'react'; -import ReactFlow, { - MiniMap, - Controls, - Background, - useNodesState, - useEdgesState, - addEdge, -} from 'reactflow'; - -import 'reactflow/dist/style.css'; - -const initialNodes = [ - { id: '1', position: { x: 0, y: 0 }, data: { label: '1' } }, - { id: '2', position: { x: 0, y: 100 }, data: { label: '2' } }, -]; - -const initialEdges = [{ id: 'e1-2', source: '1', target: '2' }]; - -function Flow() { - const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); - const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); - - const onConnect = useCallback((params) => setEdges((eds) => addEdge(params, eds)), [setEdges]); - - return ( - - - - - - ); -} -``` - -## Development - -Before you can start developing please make sure that you have [pnpm](https://pnpm.io/) installed (`npm i -g pnpm`). Then install the dependencies using pnpm: `pnpm install`. - -For local development, you can use `pnpm dev`. - -## Testing - -Testing is done with cypress. You can find the tests in the [`examples/cypress`](/examples/cypress/) folder. In order to run the tests do: - -```sh -pnpm test -``` - -## Maintainers - -React Flow is developed and maintained by [webkid](https://webkid.io), a web development agency with focus on data driven applications from Berlin. If you need help or want to talk to us about a collaboration, feel free to contact us: - -- Moritz Klack • [Twitter](https://twitter.com/moklick) • [Github](https://github.com/moklick) -- Christopher Möller • [Twitter](https://twitter.com/chrtze) • [Github](https://github.com/chrtze) - -You can also use our [contact form](https://pro.reactflow.dev/contact) or join the [React Flow Discord Server](https://discord.gg/Bqt6xrs). - -## Community Packages - -- [useUndoable](https://github.com/Infinium8/useUndoable) - Hook for undo/redo functionality with an explicit React Flow example -- [react-flow-smart-edge](https://github.com/tisoap/react-flow-smart-edge) - Custom edge that doesn't intersect with nodes -- [Feliz.ReactFlow](https://github.com/tforkmann/Feliz.ReactFlow) - Feliz React Bindings for React Flow - -## Credits - -React Flow was initially developed for [datablocks](https://datablocks.pro), a graph-based editor for transforming, analyzing and visualizing data in the browser. Under the hood, React Flow depends on these great libraries: - -- [d3-zoom](https://github.com/d3/d3-zoom) - used for zoom, pan and drag interactions with the graph canvas -- [d3-drag](https://github.com/d3/d3-drag) - used for making the nodes draggable -- [zustand](https://github.com/pmndrs/zustand) - internal state management - -## License - -React Flow is [MIT licensed](https://github.com/wbkd/react-flow/blob/main/LICENSE). diff --git a/packages/reactflow/package.json b/packages/reactflow/package.json deleted file mode 100644 index 1c3b47eb3..000000000 --- a/packages/reactflow/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "reactflow", - "version": "11.7.2", - "description": "A highly customizable React library for building node-based editors and interactive flow charts", - "keywords": [ - "react", - "node-based UI", - "graph", - "diagram", - "workflow", - "react-flow" - ], - "files": [ - "dist" - ], - "source": "src/index.ts", - "main": "dist/umd/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": [ - "*.css" - ], - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/wbkd/react-flow.git", - "directory": "packages/reactflow" - }, - "scripts": { - "dev": "concurrently \"rollup --config node:@reactflow/rollup-config --watch\" pnpm:css-watch", - "build": "rollup --config node:@reactflow/rollup-config --environment NODE_ENV:production && npm run css", - "css": "postcss src/*.css --config ../../tooling/postcss-config/postcss.config.js --dir dist", - "css-watch": "pnpm css --watch", - "lint": "eslint --ext .js,.jsx,.ts,.tsx src", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@reactflow/background": "workspace:*", - "@reactflow/controls": "workspace:*", - "@reactflow/core": "workspace:*", - "@reactflow/minimap": "workspace:*", - "@reactflow/node-resizer": "workspace:*", - "@reactflow/node-toolbar": "workspace:*" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - }, - "devDependencies": { - "@reactflow/eslint-config": "workspace:*", - "@reactflow/rollup-config": "workspace:*", - "@reactflow/tsconfig": "workspace:*", - "@types/node": "^18.7.16", - "@types/react": ">=17", - "react": "^18.2.0", - "typescript": "^4.9.4" - }, - "rollup": { - "globals": { - "@reactflow/background": "ReactFlowBackground", - "@reactflow/controls": "ReactFlowControls", - "@reactflow/core": "ReactFlowCore", - "@reactflow/minimap": "ReactFlowMinimap", - "@reactflow/node-toolbar": "ReactFlowNodeToolbar" - }, - "name": "ReactFlow" - } -} diff --git a/packages/reactflow/src/base.css b/packages/reactflow/src/base.css deleted file mode 100644 index 9c7489c9d..000000000 --- a/packages/reactflow/src/base.css +++ /dev/null @@ -1,4 +0,0 @@ -@import '@reactflow/core/dist/base.css'; -@import '@reactflow/controls/dist/style.css'; -@import '@reactflow/minimap/dist/style.css'; -@import '@reactflow/node-resizer/dist/style.css'; diff --git a/packages/reactflow/src/index.ts b/packages/reactflow/src/index.ts deleted file mode 100644 index 9fefe1d56..000000000 --- a/packages/reactflow/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from '@reactflow/core'; -export * from '@reactflow/minimap'; -export * from '@reactflow/controls'; -export * from '@reactflow/background'; -export * from '@reactflow/node-toolbar'; -export * from '@reactflow/node-resizer'; - -export { ReactFlow as default } from '@reactflow/core'; diff --git a/packages/reactflow/src/style.css b/packages/reactflow/src/style.css deleted file mode 100644 index 38e265b7f..000000000 --- a/packages/reactflow/src/style.css +++ /dev/null @@ -1,4 +0,0 @@ -@import '@reactflow/core/dist/style.css'; -@import '@reactflow/controls/dist/style.css'; -@import '@reactflow/minimap/dist/style.css'; -@import '@reactflow/node-resizer/dist/style.css'; diff --git a/packages/svelte/package.json b/packages/svelte/package.json index aa9f3d45b..f1bc97798 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,5 +1,5 @@ { - "name": "svelteflow", + "name": "@xyflow/svelte", "version": "0.0.1", "scripts": { "dev": "vite dev", @@ -17,13 +17,11 @@ ".": "./package/index.js" }, "dependencies": { - "@reactflow/edge-utils": "workspace:*", - "@reactflow/system": "workspace:*", - "@reactflow/utils": "workspace:*", "@svelte-put/shortcut": "^2.0.0", "@types/d3-drag": "^3.0.1", "@types/d3-selection": "^3.0.3", "@types/d3-zoom": "^3.0.1", + "@xyflow/system": "workspace:*", "classcat": "^5.0.4", "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 0dd06d256..d0db3da7a 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -1,5 +1,5 @@ import { get } from 'svelte/store'; -import { XYDrag } from '@reactflow/utils'; +import { XYDrag } from '@xyflow/system'; import type { SvelteFlowStore } from '$lib/store/types'; diff --git a/packages/svelte/src/lib/actions/zoom/index.ts b/packages/svelte/src/lib/actions/zoom/index.ts index ebd1f9bb6..e553008ee 100644 --- a/packages/svelte/src/lib/actions/zoom/index.ts +++ b/packages/svelte/src/lib/actions/zoom/index.ts @@ -6,8 +6,8 @@ import type { PanZoomInstance, Transform, Viewport -} from '@reactflow/system'; -import { XYPanZoom } from '@reactflow/utils'; +} from '@xyflow/system'; +import { XYPanZoom } from '@xyflow/system'; type ZoomParams = { transform: Writable; @@ -33,6 +33,7 @@ type ZoomParams = { noPanClassName: string; noWheelClassName: string; userSelectionActive: boolean; + lib: string; }; export default function zoom(domNode: Element, params: ZoomParams) { diff --git a/packages/svelte/src/lib/components/Attribution/types.ts b/packages/svelte/src/lib/components/Attribution/types.ts index 4a6052b4b..e3cff681b 100644 --- a/packages/svelte/src/lib/components/Attribution/types.ts +++ b/packages/svelte/src/lib/components/Attribution/types.ts @@ -1,4 +1,4 @@ -import type { PanelPosition, ProOptions } from '@reactflow/system'; +import type { PanelPosition, ProOptions } from '@xyflow/system'; export type AttributionProps = { proOptions?: ProOptions; diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 957910b58..05835b065 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -1,7 +1,7 @@ - - {#if ariaLabel}{ariaLabel}{/if} + {#if $panZoom} + + {#if ariaLabel}{ariaLabel}{/if} - {#each $nodes as node (node.id)} - {#if node.width && node.height} - {@const pos = getNodePositionWithOrigin(node).positionAbsolute} - - {/if} - {/each} - - + {#each $nodes as node (node.id)} + {#if node.width && node.height} + {@const pos = getNodePositionWithOrigin(node).positionAbsolute} + + {/if} + {/each} + + + {/if} diff --git a/packages/svelte/src/lib/plugins/Minimap/index.ts b/packages/svelte/src/lib/plugins/Minimap/index.ts index b21255c04..192f51cec 100644 --- a/packages/svelte/src/lib/plugins/Minimap/index.ts +++ b/packages/svelte/src/lib/plugins/Minimap/index.ts @@ -1 +1 @@ -export { default as Minimap } from './Minimap.svelte'; +export { default as MiniMap } from './Minimap.svelte'; diff --git a/packages/svelte/src/lib/plugins/Minimap/interactive.ts b/packages/svelte/src/lib/plugins/Minimap/interactive.ts new file mode 100644 index 000000000..9bdbea13f --- /dev/null +++ b/packages/svelte/src/lib/plugins/Minimap/interactive.ts @@ -0,0 +1,41 @@ +import { get, type Writable } from 'svelte/store'; +import { + XYMinimap, + type PanZoomInstance, + type Transform, + type XYMinimapUpdate +} from '@xyflow/system'; + +export type UseInteractiveParams = { + panZoom: PanZoomInstance; + transform: Writable; + getViewScale: () => number; +} & XYMinimapUpdate; + +export default function interactive(domNode: Element, params: UseInteractiveParams) { + const minimap = XYMinimap({ + domNode, + panZoom: params.panZoom, + getTransform: () => get(params.transform), + getViewScale: params.getViewScale + }); + + function update(params: UseInteractiveParams) { + minimap.update({ + translateExtent: params.translateExtent, + width: params.width, + height: params.height, + inversePan: params.inversePan, + zoomStep: params.zoomStep, + pannable: params.pannable, + zoomable: params.zoomable + }); + } + + return { + update, + destroy() { + minimap.destroy(); + } + }; +} diff --git a/packages/svelte/src/lib/plugins/Minimap/types.ts b/packages/svelte/src/lib/plugins/Minimap/types.ts index b4cb00006..c141aac9e 100644 --- a/packages/svelte/src/lib/plugins/Minimap/types.ts +++ b/packages/svelte/src/lib/plugins/Minimap/types.ts @@ -22,6 +22,8 @@ export type MiniMapProps = { height?: number; // onClick?: (event: MouseEvent, position: XYPosition) => void; // onNodeClick?: (event: MouseEvent, node: Node) => void; - // pannable?: boolean; - // zoomable?: boolean; + pannable?: boolean; + zoomable?: boolean; + inversePan?: boolean; + zoomStep?: number; }; diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte index 6cad68154..3a3338fd9 100644 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ b/packages/svelte/src/routes/customnode/+page.svelte @@ -6,7 +6,7 @@ Controls, Background, BackgroundVariant, - Minimap, + MiniMap, createNodes, createEdges, type NodeTypes, @@ -108,7 +108,7 @@ > - +
diff --git a/packages/svelte/src/routes/drag-n-drop/Flow.svelte b/packages/svelte/src/routes/drag-n-drop/Flow.svelte index 3d3c16c9d..7141b5e64 100644 --- a/packages/svelte/src/routes/drag-n-drop/Flow.svelte +++ b/packages/svelte/src/routes/drag-n-drop/Flow.svelte @@ -3,7 +3,7 @@ Controls, Background, BackgroundVariant, - Minimap, + MiniMap, useSvelteFlow, type Node } from '../../lib/index'; @@ -52,7 +52,7 @@ > - + diff --git a/packages/svelte/src/routes/edges/+page.svelte b/packages/svelte/src/routes/edges/+page.svelte index abd48eeca..b8788b9a1 100644 --- a/packages/svelte/src/routes/edges/+page.svelte +++ b/packages/svelte/src/routes/edges/+page.svelte @@ -4,7 +4,7 @@ Controls, Background, BackgroundVariant, - Minimap, + MiniMap, createNodes, createEdges, type NodeTypes, @@ -154,7 +154,7 @@ > - + diff --git a/packages/svelte/src/routes/interaction/+page.svelte b/packages/svelte/src/routes/interaction/+page.svelte index 34f0be844..6729d0a42 100644 --- a/packages/svelte/src/routes/interaction/+page.svelte +++ b/packages/svelte/src/routes/interaction/+page.svelte @@ -6,7 +6,7 @@ createNodes, createEdges, PanOnScrollMode, - Minimap, + MiniMap, type OnMoveEnd, type Node, type Edge, @@ -70,7 +70,7 @@ panOnDrag={panOnDrag} onMoveEnd={onMoveEnd} > - + diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index 3207b2323..ce1219171 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -4,7 +4,7 @@ Controls, Background, BackgroundVariant, - Minimap, + MiniMap, Panel, createNodes, createEdges, @@ -138,7 +138,7 @@ > - + diff --git a/packages/svelte/src/routes/stress/+page.svelte b/packages/svelte/src/routes/stress/+page.svelte index 68585a832..4a5ce390c 100644 --- a/packages/svelte/src/routes/stress/+page.svelte +++ b/packages/svelte/src/routes/stress/+page.svelte @@ -4,7 +4,7 @@ Controls, Background, BackgroundVariant, - Minimap, + MiniMap, createNodes, createEdges, type Node, @@ -59,6 +59,6 @@ > - + \ No newline at end of file diff --git a/packages/svelte/src/routes/subflows/+page.svelte b/packages/svelte/src/routes/subflows/+page.svelte index 9743360a8..de115ba2e 100644 --- a/packages/svelte/src/routes/subflows/+page.svelte +++ b/packages/svelte/src/routes/subflows/+page.svelte @@ -4,7 +4,7 @@ Controls, Background, BackgroundVariant, - Minimap, + MiniMap, createNodes, createEdges, type NodeTypes, @@ -130,7 +130,7 @@ > - + diff --git a/packages/svelte/src/routes/usesvelteflow/Flow.svelte b/packages/svelte/src/routes/usesvelteflow/Flow.svelte index 5effcafcc..fc98236f8 100644 --- a/packages/svelte/src/routes/usesvelteflow/Flow.svelte +++ b/packages/svelte/src/routes/usesvelteflow/Flow.svelte @@ -3,7 +3,7 @@ Controls, Background, BackgroundVariant, - Minimap, + MiniMap, } from '../../lib/index'; import Sidebar from './Sidebar.svelte'; @@ -14,7 +14,7 @@ > - + diff --git a/packages/system/src/index.ts b/packages/system/src/index.ts index 2099ffb86..78da8d4fc 100644 --- a/packages/system/src/index.ts +++ b/packages/system/src/index.ts @@ -3,4 +3,5 @@ export * from './types'; export * from './utils'; export * from './xydrag'; export * from './xyhandle'; +export * from './xyminimap'; export * from './xypanzoom'; diff --git a/packages/system/src/xyhandle/XYHandle.ts b/packages/system/src/xyhandle/XYHandle.ts new file mode 100644 index 000000000..f459f3f01 --- /dev/null +++ b/packages/system/src/xyhandle/XYHandle.ts @@ -0,0 +1,311 @@ +import { pointToRendererPoint, rendererPointToPoint, getHostForElement, calcAutoPan, getEventPosition } from '../utils'; +import { + ConnectionMode, + type OnConnect, + type OnConnectStart, + type HandleType, + type Connection, + type PanBy, + type BaseNode, + type Transform, + type ConnectingHandle, + type OnConnectEnd, + type UpdateConnection, + type IsValidConnection, + type ConnectionHandle, +} from '../types'; + +import { getClosestHandle, getConnectionStatus, getHandleLookup, getHandleType, resetRecentHandle } from './utils'; + +export type OnPointerDownParams = { + autoPanOnConnect: boolean; + connectionMode: ConnectionMode; + connectionRadius: number; + domNode: HTMLDivElement | null; + handleId: string | null; + nodeId: string; + isTarget: boolean; + nodes: BaseNode[]; + lib: string; + edgeUpdaterType?: HandleType; + updateConnection: UpdateConnection; + panBy: PanBy; + cancelConnection: () => void; + onConnectStart?: OnConnectStart; + onConnect?: OnConnect; + onConnectEnd?: OnConnectEnd; + isValidConnection?: IsValidConnection; + onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; + getTransform: () => Transform; +}; + +export type IsValidParams = { + handle: Pick | null; + connectionMode: ConnectionMode; + fromNodeId: string; + fromHandleId: string | null; + fromType: HandleType; + isValidConnection?: IsValidConnection; + doc: Document | ShadowRoot; + lib: string; +}; + +export type XYHandleInstance = { + onPointerDown: (event: MouseEvent | TouchEvent, params: OnPointerDownParams) => void; + isValid: (event: MouseEvent | TouchEvent, params: IsValidParams) => Result; +}; + +type Result = { + handleDomNode: Element | null; + isValid: boolean; + connection: Connection; + endHandle: ConnectingHandle | null; +}; + +const nullConnection: Connection = { source: null, target: null, sourceHandle: null, targetHandle: null }; + +const alwaysValid = () => true; + +function onPointerDown( + event: MouseEvent | TouchEvent, + { + connectionMode, + connectionRadius, + handleId, + nodeId, + edgeUpdaterType, + isTarget, + domNode, + nodes, + lib, + autoPanOnConnect, + panBy, + cancelConnection, + onConnectStart, + onConnect, + onConnectEnd, + isValidConnection = alwaysValid, + onEdgeUpdateEnd, + updateConnection, + getTransform, + }: OnPointerDownParams +) { + // when react-flow is used inside a shadow root we can't use document + const doc = getHostForElement(event.target as HTMLElement); + let autoPanId = 0; + let closestHandle: ConnectionHandle | null; + + const { x, y } = getEventPosition(event); + const clickedHandle = doc?.elementFromPoint(x, y); + const handleType = getHandleType(edgeUpdaterType, clickedHandle); + const containerBounds = domNode?.getBoundingClientRect(); + + if (!containerBounds || !handleType) { + return; + } + + let prevActiveHandle: Element; + let connectionPosition = getEventPosition(event, containerBounds); + let autoPanStarted = false; + let connection: Connection | null = null; + let isValid = false; + let handleDomNode: Element | null = null; + + const handleLookup = getHandleLookup({ + nodes, + nodeId, + handleId, + handleType, + }); + + // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas + function autoPan(): void { + if (!autoPanOnConnect || !containerBounds) { + return; + } + const [x, y] = calcAutoPan(connectionPosition, containerBounds); + + panBy({ x, y }); + autoPanId = requestAnimationFrame(autoPan); + } + + updateConnection({ + connectionPosition, + connectionStatus: null, + // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle + connectionStartHandle: { + nodeId, + handleId, + type: handleType, + }, + connectionEndHandle: null, + }); + + onConnectStart?.(event, { nodeId, handleId, handleType }); + + function onPointerMove(event: MouseEvent | TouchEvent) { + const transform = getTransform(); + connectionPosition = getEventPosition(event, containerBounds); + closestHandle = getClosestHandle( + pointToRendererPoint(connectionPosition, transform, false, [1, 1]), + connectionRadius, + handleLookup + ); + + if (!autoPanStarted) { + autoPan(); + autoPanStarted = true; + } + + const result = isValidHandle(event, { + handle: closestHandle, + connectionMode, + fromNodeId: nodeId, + fromHandleId: handleId, + fromType: isTarget ? 'target' : 'source', + isValidConnection, + doc, + lib, + }); + + handleDomNode = result.handleDomNode; + connection = result.connection; + isValid = result.isValid; + + updateConnection({ + connectionPosition: + closestHandle && isValid + ? rendererPointToPoint( + { + x: closestHandle.x, + y: closestHandle.y, + }, + transform + ) + : connectionPosition, + connectionStatus: getConnectionStatus(!!closestHandle, isValid), + connectionEndHandle: result.endHandle, + }); + + if (!closestHandle && !isValid && !handleDomNode) { + return resetRecentHandle(prevActiveHandle, lib); + } + + if (connection.source !== connection.target && handleDomNode) { + resetRecentHandle(prevActiveHandle, lib); + prevActiveHandle = handleDomNode; + // @todo: remove the old class names "react-flow__handle-" in the next major version + handleDomNode.classList.add('connecting', `${lib}-flow__handle-connecting`); + handleDomNode.classList.toggle('valid', isValid); + handleDomNode.classList.toggle(`${lib}-flow__handle-valid`, isValid); + } + } + + function onPointerUp(event: MouseEvent | TouchEvent) { + if ((closestHandle || handleDomNode) && connection && isValid) { + onConnect?.(connection); + } + + // it's important to get a fresh reference from the store here + // in order to get the latest state of onConnectEnd + onConnectEnd?.(event); + + if (edgeUpdaterType) { + onEdgeUpdateEnd?.(event); + } + + resetRecentHandle(prevActiveHandle, lib); + cancelConnection(); + cancelAnimationFrame(autoPanId); + autoPanStarted = false; + isValid = false; + connection = null; + handleDomNode = null; + + doc.removeEventListener('mousemove', onPointerMove as EventListener); + doc.removeEventListener('mouseup', onPointerUp as EventListener); + + doc.removeEventListener('touchmove', onPointerMove as EventListener); + doc.removeEventListener('touchend', onPointerUp as EventListener); + } + + doc.addEventListener('mousemove', onPointerMove as EventListener); + doc.addEventListener('mouseup', onPointerUp as EventListener); + + doc.addEventListener('touchmove', onPointerMove as EventListener); + doc.addEventListener('touchend', onPointerUp as EventListener); +} + +// checks if and returns connection in fom of an object { source: 123, target: 312 } +function isValidHandle( + event: MouseEvent | TouchEvent, + { + handle, + connectionMode, + fromNodeId, + fromHandleId, + fromType, + doc, + lib, + isValidConnection = alwaysValid, + }: IsValidParams +) { + const isTarget = fromType === 'target'; + const handleDomNode = doc.querySelector( + `.${lib}-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` + ); + const { x, y } = getEventPosition(event); + const handleBelow = doc.elementFromPoint(x, y); + // we always want to prioritize the handle below the mouse cursor over the closest distance handle, + // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor + const handleToCheck = handleBelow?.classList.contains(`${lib}-flow__handle`) ? handleBelow : handleDomNode; + + const result: Result = { + handleDomNode: handleToCheck, + isValid: false, + connection: nullConnection, + endHandle: null, + }; + + if (handleToCheck) { + const handleType = getHandleType(undefined, handleToCheck); + const handleNodeId = handleToCheck.getAttribute('data-nodeid'); + const handleId = handleToCheck.getAttribute('data-handleid'); + const connectable = handleToCheck.classList.contains('connectable'); + const connectableEnd = handleToCheck.classList.contains('connectableend'); + + const connection: Connection = { + source: isTarget ? handleNodeId : fromNodeId, + sourceHandle: isTarget ? handleId : fromHandleId, + target: isTarget ? fromNodeId : handleNodeId, + targetHandle: isTarget ? fromHandleId : handleId, + }; + + result.connection = connection; + + const isConnectable = connectable && connectableEnd; + // in strict mode we don't allow target to target or source to source connections + const isValid = + isConnectable && + (connectionMode === ConnectionMode.Strict + ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') + : handleNodeId !== fromNodeId || handleId !== fromHandleId); + + if (isValid) { + result.endHandle = { + nodeId: handleNodeId as string, + handleId, + type: handleType as HandleType, + }; + + result.isValid = isValidConnection(connection); + } + } + + return result; +} + +export const XYHandle: XYHandleInstance = { + onPointerDown, + isValid: isValidHandle, +}; diff --git a/packages/system/src/xyhandle/index.ts b/packages/system/src/xyhandle/index.ts index f459f3f01..b57175827 100644 --- a/packages/system/src/xyhandle/index.ts +++ b/packages/system/src/xyhandle/index.ts @@ -1,311 +1 @@ -import { pointToRendererPoint, rendererPointToPoint, getHostForElement, calcAutoPan, getEventPosition } from '../utils'; -import { - ConnectionMode, - type OnConnect, - type OnConnectStart, - type HandleType, - type Connection, - type PanBy, - type BaseNode, - type Transform, - type ConnectingHandle, - type OnConnectEnd, - type UpdateConnection, - type IsValidConnection, - type ConnectionHandle, -} from '../types'; - -import { getClosestHandle, getConnectionStatus, getHandleLookup, getHandleType, resetRecentHandle } from './utils'; - -export type OnPointerDownParams = { - autoPanOnConnect: boolean; - connectionMode: ConnectionMode; - connectionRadius: number; - domNode: HTMLDivElement | null; - handleId: string | null; - nodeId: string; - isTarget: boolean; - nodes: BaseNode[]; - lib: string; - edgeUpdaterType?: HandleType; - updateConnection: UpdateConnection; - panBy: PanBy; - cancelConnection: () => void; - onConnectStart?: OnConnectStart; - onConnect?: OnConnect; - onConnectEnd?: OnConnectEnd; - isValidConnection?: IsValidConnection; - onEdgeUpdateEnd?: (evt: MouseEvent | TouchEvent) => void; - getTransform: () => Transform; -}; - -export type IsValidParams = { - handle: Pick | null; - connectionMode: ConnectionMode; - fromNodeId: string; - fromHandleId: string | null; - fromType: HandleType; - isValidConnection?: IsValidConnection; - doc: Document | ShadowRoot; - lib: string; -}; - -export type XYHandleInstance = { - onPointerDown: (event: MouseEvent | TouchEvent, params: OnPointerDownParams) => void; - isValid: (event: MouseEvent | TouchEvent, params: IsValidParams) => Result; -}; - -type Result = { - handleDomNode: Element | null; - isValid: boolean; - connection: Connection; - endHandle: ConnectingHandle | null; -}; - -const nullConnection: Connection = { source: null, target: null, sourceHandle: null, targetHandle: null }; - -const alwaysValid = () => true; - -function onPointerDown( - event: MouseEvent | TouchEvent, - { - connectionMode, - connectionRadius, - handleId, - nodeId, - edgeUpdaterType, - isTarget, - domNode, - nodes, - lib, - autoPanOnConnect, - panBy, - cancelConnection, - onConnectStart, - onConnect, - onConnectEnd, - isValidConnection = alwaysValid, - onEdgeUpdateEnd, - updateConnection, - getTransform, - }: OnPointerDownParams -) { - // when react-flow is used inside a shadow root we can't use document - const doc = getHostForElement(event.target as HTMLElement); - let autoPanId = 0; - let closestHandle: ConnectionHandle | null; - - const { x, y } = getEventPosition(event); - const clickedHandle = doc?.elementFromPoint(x, y); - const handleType = getHandleType(edgeUpdaterType, clickedHandle); - const containerBounds = domNode?.getBoundingClientRect(); - - if (!containerBounds || !handleType) { - return; - } - - let prevActiveHandle: Element; - let connectionPosition = getEventPosition(event, containerBounds); - let autoPanStarted = false; - let connection: Connection | null = null; - let isValid = false; - let handleDomNode: Element | null = null; - - const handleLookup = getHandleLookup({ - nodes, - nodeId, - handleId, - handleType, - }); - - // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas - function autoPan(): void { - if (!autoPanOnConnect || !containerBounds) { - return; - } - const [x, y] = calcAutoPan(connectionPosition, containerBounds); - - panBy({ x, y }); - autoPanId = requestAnimationFrame(autoPan); - } - - updateConnection({ - connectionPosition, - connectionStatus: null, - // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle - connectionStartHandle: { - nodeId, - handleId, - type: handleType, - }, - connectionEndHandle: null, - }); - - onConnectStart?.(event, { nodeId, handleId, handleType }); - - function onPointerMove(event: MouseEvent | TouchEvent) { - const transform = getTransform(); - connectionPosition = getEventPosition(event, containerBounds); - closestHandle = getClosestHandle( - pointToRendererPoint(connectionPosition, transform, false, [1, 1]), - connectionRadius, - handleLookup - ); - - if (!autoPanStarted) { - autoPan(); - autoPanStarted = true; - } - - const result = isValidHandle(event, { - handle: closestHandle, - connectionMode, - fromNodeId: nodeId, - fromHandleId: handleId, - fromType: isTarget ? 'target' : 'source', - isValidConnection, - doc, - lib, - }); - - handleDomNode = result.handleDomNode; - connection = result.connection; - isValid = result.isValid; - - updateConnection({ - connectionPosition: - closestHandle && isValid - ? rendererPointToPoint( - { - x: closestHandle.x, - y: closestHandle.y, - }, - transform - ) - : connectionPosition, - connectionStatus: getConnectionStatus(!!closestHandle, isValid), - connectionEndHandle: result.endHandle, - }); - - if (!closestHandle && !isValid && !handleDomNode) { - return resetRecentHandle(prevActiveHandle, lib); - } - - if (connection.source !== connection.target && handleDomNode) { - resetRecentHandle(prevActiveHandle, lib); - prevActiveHandle = handleDomNode; - // @todo: remove the old class names "react-flow__handle-" in the next major version - handleDomNode.classList.add('connecting', `${lib}-flow__handle-connecting`); - handleDomNode.classList.toggle('valid', isValid); - handleDomNode.classList.toggle(`${lib}-flow__handle-valid`, isValid); - } - } - - function onPointerUp(event: MouseEvent | TouchEvent) { - if ((closestHandle || handleDomNode) && connection && isValid) { - onConnect?.(connection); - } - - // it's important to get a fresh reference from the store here - // in order to get the latest state of onConnectEnd - onConnectEnd?.(event); - - if (edgeUpdaterType) { - onEdgeUpdateEnd?.(event); - } - - resetRecentHandle(prevActiveHandle, lib); - cancelConnection(); - cancelAnimationFrame(autoPanId); - autoPanStarted = false; - isValid = false; - connection = null; - handleDomNode = null; - - doc.removeEventListener('mousemove', onPointerMove as EventListener); - doc.removeEventListener('mouseup', onPointerUp as EventListener); - - doc.removeEventListener('touchmove', onPointerMove as EventListener); - doc.removeEventListener('touchend', onPointerUp as EventListener); - } - - doc.addEventListener('mousemove', onPointerMove as EventListener); - doc.addEventListener('mouseup', onPointerUp as EventListener); - - doc.addEventListener('touchmove', onPointerMove as EventListener); - doc.addEventListener('touchend', onPointerUp as EventListener); -} - -// checks if and returns connection in fom of an object { source: 123, target: 312 } -function isValidHandle( - event: MouseEvent | TouchEvent, - { - handle, - connectionMode, - fromNodeId, - fromHandleId, - fromType, - doc, - lib, - isValidConnection = alwaysValid, - }: IsValidParams -) { - const isTarget = fromType === 'target'; - const handleDomNode = doc.querySelector( - `.${lib}-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` - ); - const { x, y } = getEventPosition(event); - const handleBelow = doc.elementFromPoint(x, y); - // we always want to prioritize the handle below the mouse cursor over the closest distance handle, - // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor - const handleToCheck = handleBelow?.classList.contains(`${lib}-flow__handle`) ? handleBelow : handleDomNode; - - const result: Result = { - handleDomNode: handleToCheck, - isValid: false, - connection: nullConnection, - endHandle: null, - }; - - if (handleToCheck) { - const handleType = getHandleType(undefined, handleToCheck); - const handleNodeId = handleToCheck.getAttribute('data-nodeid'); - const handleId = handleToCheck.getAttribute('data-handleid'); - const connectable = handleToCheck.classList.contains('connectable'); - const connectableEnd = handleToCheck.classList.contains('connectableend'); - - const connection: Connection = { - source: isTarget ? handleNodeId : fromNodeId, - sourceHandle: isTarget ? handleId : fromHandleId, - target: isTarget ? fromNodeId : handleNodeId, - targetHandle: isTarget ? fromHandleId : handleId, - }; - - result.connection = connection; - - const isConnectable = connectable && connectableEnd; - // in strict mode we don't allow target to target or source to source connections - const isValid = - isConnectable && - (connectionMode === ConnectionMode.Strict - ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target') - : handleNodeId !== fromNodeId || handleId !== fromHandleId); - - if (isValid) { - result.endHandle = { - nodeId: handleNodeId as string, - handleId, - type: handleType as HandleType, - }; - - result.isValid = isValidConnection(connection); - } - } - - return result; -} - -export const XYHandle: XYHandleInstance = { - onPointerDown, - isValid: isValidHandle, -}; +export * from './XYHandle'; diff --git a/packages/system/src/xyminimap/index.ts b/packages/system/src/xyminimap/index.ts new file mode 100644 index 000000000..885679b80 --- /dev/null +++ b/packages/system/src/xyminimap/index.ts @@ -0,0 +1,104 @@ +import { type D3ZoomEvent, zoom } from 'd3-zoom'; +import { select, pointer } from 'd3-selection'; + +import type { CoordinateExtent, PanZoomInstance, Transform } from '../types'; + +export type XYMinimapInstance = { + update: (params: XYMinimapUpdate) => void; + destroy: () => void; + pointer: typeof pointer; +}; + +export type XYMinimapParams = { + panZoom: PanZoomInstance; + domNode: Element; + getTransform: () => Transform; + getViewScale: () => number; +}; + +export type XYMinimapUpdate = { + translateExtent: CoordinateExtent; + width: number; + height: number; + inversePan?: boolean; + zoomStep?: number; + pannable?: boolean; + zoomable?: boolean; +}; + +export function XYMinimap({ domNode, panZoom, getTransform, getViewScale }: XYMinimapParams) { + const selection = select(domNode); + + function update({ + translateExtent, + width, + height, + zoomStep = 10, + pannable = true, + zoomable = true, + inversePan = false, + }: XYMinimapUpdate) { + const zoomHandler = (event: D3ZoomEvent) => { + const transform = getTransform(); + + if (event.sourceEvent.type !== 'wheel' || !panZoom) { + return; + } + + const pinchDelta = + -event.sourceEvent.deltaY * + (event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) * + zoomStep; + const nextZoom = transform[2] * Math.pow(2, pinchDelta); + + panZoom.scaleTo(nextZoom); + }; + + const panHandler = (event: D3ZoomEvent) => { + const transform = getTransform(); + + if (event.sourceEvent.type !== 'mousemove' || !panZoom) { + return; + } + + // @TODO: how to calculate the correct next position? Math.max(1, transform[2]) is a workaround. + const moveScale = getViewScale() * Math.max(1, transform[2]) * (inversePan ? -1 : 1); + const position = { + x: transform[0] - event.sourceEvent.movementX * moveScale, + y: transform[1] - event.sourceEvent.movementY * moveScale, + }; + const extent: CoordinateExtent = [ + [0, 0], + [width, height], + ]; + + panZoom.setViewportConstrained( + { + x: position.x, + y: position.y, + zoom: transform[2], + }, + extent, + translateExtent + ); + }; + + const zoomAndPanHandler = zoom() + // @ts-ignore + .on('zoom', pannable ? panHandler : null) + // @ts-ignore + .on('zoom.wheel', zoomable ? zoomHandler : null); + + selection.call(zoomAndPanHandler, {}); + } + + function destroy() { + selection.on('zoom', null); + } + + return { + update, + destroy, + pointer, + }; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d814f2771..d122b28d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,7 +61,6 @@ importers: '@vitejs/plugin-react': 4.0.0 '@vitejs/plugin-react-swc': ^3.3.2 '@xyflow/react': workspace:* - '@xyflow/test': workspace:^0.0.1 classcat: ^5.0.3 cypress: ^10.6.0 cypress-real-events: ^1.7.1 @@ -76,7 +75,6 @@ importers: zustand: ^4.3.1 dependencies: '@xyflow/react': link:../../packages/react - '@xyflow/test': link:../../packages/test classcat: registry.npmjs.org/classcat/5.0.4 dagre: registry.npmjs.org/dagre/0.8.5 localforage: registry.npmjs.org/localforage/1.10.0 @@ -224,35 +222,6 @@ importers: '@xyflow/tsconfig': link:../../tooling/tsconfig typescript: registry.npmjs.org/typescript/4.9.5 - packages/test: - specifiers: - '@types/d3': ^7.4.0 - '@types/d3-drag': ^3.0.1 - '@types/d3-selection': ^3.0.3 - '@types/d3-zoom': ^3.0.1 - '@types/node': ^18.7.16 - '@xyflow/eslint-config': workspace:* - '@xyflow/rollup-config': workspace:* - '@xyflow/tsconfig': workspace:* - d3-drag: ^3.0.0 - d3-selection: ^3.0.0 - d3-zoom: ^3.0.0 - typescript: ^4.9.4 - dependencies: - '@types/d3': registry.npmjs.org/@types/d3/7.4.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 - d3-drag: registry.npmjs.org/d3-drag/3.0.0 - d3-selection: registry.npmjs.org/d3-selection/3.0.0 - d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 - devDependencies: - '@types/node': registry.npmjs.org/@types/node/18.16.16 - '@xyflow/eslint-config': link:../../tooling/eslint-config - '@xyflow/rollup-config': link:../../tooling/rollup-config - '@xyflow/tsconfig': link:../../tooling/tsconfig - typescript: registry.npmjs.org/typescript/4.9.5 - tooling/eslint-config: specifiers: eslint: ^8.22.0 @@ -2083,7 +2052,7 @@ packages: version: 2.10.0 requiresBuild: true dependencies: - '@types/node': registry.npmjs.org/@types/node/18.16.16 + '@types/node': registry.npmjs.org/@types/node/14.18.48 dev: true optional: true From 002156ea331a467edd1d8ec13b364ac829677b45 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 6 Jun 2023 14:27:40 +0200 Subject: [PATCH 0077/1093] refactor(svelte): simplify nodes and edges store handling --- .../SvelteFlowProvider.svelte | 21 +- .../components/SvelteFlowProvider/index.ts | 1 - .../components/SvelteFlowProvider/types.ts | 9 - .../container/SvelteFlow/SvelteFlow.svelte | 82 ++--- .../src/lib/container/SvelteFlow/types.ts | 3 + .../src/lib/container/SvelteFlow/utils.ts | 71 ++++ packages/svelte/src/lib/store/index.ts | 27 +- .../svelte/src/lib/store/initial-store.ts | 11 +- packages/svelte/src/lib/store/types.ts | 9 +- packages/svelte/src/lib/store/utils.ts | 188 +++++++++++ packages/svelte/src/lib/utils/index.ts | 132 +------- .../svelte/src/routes/customnode/+page.svelte | 30 +- .../src/routes/drag-n-drop/+page.svelte | 47 +-- .../svelte/src/routes/drag-n-drop/Flow.svelte | 42 +++ packages/svelte/src/routes/edges/+page.svelte | 280 ++++++++-------- .../src/routes/interaction/+page.svelte | 316 +++++++++--------- .../svelte/src/routes/overview/+page.svelte | 68 ++-- .../svelte/src/routes/stress/+page.svelte | 25 +- .../svelte/src/routes/subflows/+page.svelte | 31 +- .../src/routes/usesvelteflow/+page.svelte | 47 +-- .../src/routes/usesvelteflow/Flow.svelte | 40 +++ .../svelte/src/routes/validation/+page.svelte | 36 +- 22 files changed, 779 insertions(+), 737 deletions(-) delete mode 100644 packages/svelte/src/lib/components/SvelteFlowProvider/types.ts create mode 100644 packages/svelte/src/lib/container/SvelteFlow/utils.ts create mode 100644 packages/svelte/src/lib/store/utils.ts diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte index bc0ae5c4f..4b9388f7e 100644 --- a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte @@ -1,22 +1,9 @@
& { id?: string; + nodes: Writable; + edges: Writable; nodeTypes?: NodeTypes; edgeTypes?: EdgeTypes; selectionKey?: KeyDefinition; diff --git a/packages/svelte/src/lib/container/SvelteFlow/utils.ts b/packages/svelte/src/lib/container/SvelteFlow/utils.ts new file mode 100644 index 000000000..6ed501813 --- /dev/null +++ b/packages/svelte/src/lib/container/SvelteFlow/utils.ts @@ -0,0 +1,71 @@ +import type { SvelteFlowStore } from '$lib/store/types'; +import type { EdgeTypes, NodeTypes } from '$lib/types'; +import type { CoordinateExtent } from '@xyflow/system'; +import type { Writable } from 'svelte/store'; + +// this is helper function for updating the store +// for props where we need to call a specific store action +export function updateStore( + store: SvelteFlowStore, + { + nodeTypes, + edgeTypes, + minZoom, + maxZoom, + translateExtent + }: { + nodeTypes?: NodeTypes; + edgeTypes?: EdgeTypes; + minZoom?: number; + maxZoom?: number; + translateExtent?: CoordinateExtent; + } +) { + if (nodeTypes !== undefined) { + store.setNodeTypes(nodeTypes); + } + + if (edgeTypes !== undefined) { + store.setEdgeTypes(edgeTypes); + } + + if (minZoom !== undefined) { + store.setMinZoom(minZoom); + } + + if (maxZoom !== undefined) { + store.setMaxZoom(maxZoom); + } + + if (translateExtent !== undefined) { + store.setTranslateExtent(translateExtent); + } +} + +const getKeys = (obj: T) => Object.keys(obj) as Array; + +type UnwrapWritable = T extends Writable ? U : T; + +// @todo there must be a better way to define the types here.. +export type UpdatableStoreProps = { + flowId?: UnwrapWritable; + connectionLineType?: UnwrapWritable; + connectionRadius?: UnwrapWritable; + selectionMode?: UnwrapWritable; + snapGrid?: UnwrapWritable; + defaultMarkerColor?: UnwrapWritable; + nodesDraggable?: UnwrapWritable; + nodesConnectable?: UnwrapWritable; + elementsSelectable?: UnwrapWritable; + isValidConnection?: UnwrapWritable; +}; + +export function updateStoreByKeys(store: SvelteFlowStore, keys: UpdatableStoreProps) { + getKeys(keys).forEach((prop) => { + const update = keys[prop]; + if (update !== undefined) { + // @ts-ignore + store[prop].set(update); + } + }); +} diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index d0b16fd0e..7b4e348a7 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -1,4 +1,4 @@ -import { getContext } from 'svelte'; +import { getContext, setContext } from 'svelte'; import { derived, get } from 'svelte/store'; import { internalsSymbol, @@ -25,19 +25,15 @@ import { initConnectionData, initialEdgeTypes, initialNodeTypes, - initialStoreState + getInitialStore } from './initial-store'; import type { SvelteFlowStore } from './types'; +import { syncNodeStores, syncEdgeStores } from './utils'; export const key = Symbol(); -type CreateStoreParams = Pick; - -export function createStore(params: CreateStoreParams): SvelteFlowStore { - const store = { - ...initialStoreState, - ...params - }; +export function createStore(): SvelteFlowStore { + const store = getInitialStore(); function setNodeTypes(nodeTypes: NodeTypes) { store.nodeTypes.set({ @@ -55,6 +51,7 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { function addEdge(edgeParams: Edge | Connection) { const edges = get(store.edges); + store.edges.set(addEdgeUtil(edgeParams, edges)); } @@ -348,6 +345,8 @@ export function createStore(params: CreateStoreParams): SvelteFlowStore { ), // actions + syncNodeStores: (nodes) => syncNodeStores(store.nodes, nodes), + syncEdgeStores: (edges) => syncEdgeStores(store.edges, edges), setNodeTypes, setEdgeTypes, addEdge, @@ -380,3 +379,13 @@ export function useStore(): SvelteFlowStore { return store.getStore(); } + +export function createStoreContext() { + const store = createStore(); + + setContext(key, { + getStore: () => store + }); + + return store; +} diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 574de978a..1df46821e 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -20,7 +20,8 @@ import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; import StepEdge from '$lib/components/edges/StepEdge.svelte'; -import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted, Edge, Node } from '$lib/types'; +import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted } from '$lib/types'; +import { createNodes, createEdges } from './utils'; export const initConnectionData = { connectionStartHandle: null, @@ -42,10 +43,10 @@ export const initialEdgeTypes = { step: StepEdge }; -export const initialStoreState = { +export const getInitialStore = () => ({ flowId: writable(null), - nodes: writable([]), - edges: writable([]), + nodes: createNodes([]), + edges: createEdges([]), edgesLayouted: readable([]), height: writable(500), width: writable(500), @@ -82,4 +83,4 @@ export const initialStoreState = { markers: readable([]), defaultMarkerColor: writable('#b1b1b7'), lib: readable('svelte') -}; +}); diff --git a/packages/svelte/src/lib/store/types.ts b/packages/svelte/src/lib/store/types.ts index 667357027..9156f6f03 100644 --- a/packages/svelte/src/lib/store/types.ts +++ b/packages/svelte/src/lib/store/types.ts @@ -9,10 +9,12 @@ import type { UpdateConnection } from '@xyflow/system'; -import type { initialStoreState } from './initial-store'; +import type { getInitialStore } from './initial-store'; import type { Node, Edge, NodeTypes, EdgeTypes, FitViewOptions } from '$lib/types'; export type SvelteFlowStoreActions = { + syncNodeStores: (nodesStore: Writable) => void; + syncEdgeStores: (edgeStore: Writable) => void; setNodeTypes: (nodeTypes: NodeTypes) => void; setEdgeTypes: (edgeTypes: EdgeTypes) => void; addEdge: (edge: Edge | Connection) => void; @@ -33,9 +35,6 @@ export type SvelteFlowStoreActions = { reset(): void; }; -export type SvelteFlowStoreState = typeof initialStoreState & { - nodes: Writable; - edges: Writable; -}; +export type SvelteFlowStoreState = ReturnType; export type SvelteFlowStore = SvelteFlowStoreState & SvelteFlowStoreActions; diff --git a/packages/svelte/src/lib/store/utils.ts b/packages/svelte/src/lib/store/utils.ts new file mode 100644 index 000000000..5f75947b1 --- /dev/null +++ b/packages/svelte/src/lib/store/utils.ts @@ -0,0 +1,188 @@ +import { + writable, + type Unsubscriber, + type Subscriber, + type Updater, + type Writable, + get +} from 'svelte/store'; +import { + isNumeric, + getNodePositionWithOrigin, + internalsSymbol, + type XYZPosition +} from '@xyflow/system'; + +import type { DefaultEdgeOptions, DefaultNodeOptions, Edge, Node } from '$lib/types'; + +export function syncNodeStores( + nodesStore: ReturnType, + userNodesStore: Writable +) { + const nodesStoreSetter = nodesStore.set; + const userNodesStoreSetter = userNodesStore.set; + + let val = get(userNodesStore); + nodesStore.set(val); + + const _set = (nds: Node[]) => { + const updatedNodes = nodesStoreSetter(nds); + val = updatedNodes; + + userNodesStoreSetter(val); + + return updatedNodes; + }; + + nodesStore.set = userNodesStore.set = _set; + nodesStore.update = userNodesStore.update = (fn: (nds: Node[]) => Node[]) => _set(fn(val)); +} + +export function syncEdgeStores( + edgesStore: ReturnType, + userEdgesStore: Writable +) { + const nodesStoreSetter = edgesStore.set; + const userEdgesStoreSetter = userEdgesStore.set; + + let val = get(userEdgesStore); + edgesStore.set(val); + + const _set = (eds: Edge[]) => { + nodesStoreSetter(eds); + userEdgesStoreSetter(eds); + val = eds; + }; + + edgesStore.set = userEdgesStore.set = _set; + edgesStore.update = userEdgesStore.update = (fn: (nds: Edge[]) => Edge[]) => _set(fn(val)); +} + +export const createNodes = ( + nodes: Node[] +): { + subscribe: (this: void, run: Subscriber) => Unsubscriber; + update: (this: void, updater: Updater) => void; + set: (this: void, value: Node[]) => Node[]; + setDefaultOptions: (opts: DefaultNodeOptions) => void; +} => { + const { subscribe, set, update } = writable([]); + let value = nodes; + let defaults = {}; + + const _set = (nds: Node[]): Node[] => { + const parentNodes: Record = {}; + + const nextNodes = nds.map((n) => { + const node: Node = { ...defaults, ...n, positionAbsolute: n.position }; + const z = (isNumeric(node.zIndex) ? node.zIndex : 0) + (node.selected ? 1 : 0); + + if (node.parentNode) { + parentNodes[node.parentNode] = true; + } + + Object.defineProperty(node, internalsSymbol, { + value: { + handleBounds: node?.[internalsSymbol]?.handleBounds, + z + } + }); + + return node; + }); + + const nodesWithPositions = nextNodes.map((node) => { + if (node.parentNode && !parentNodes[node.parentNode]) { + throw new Error(`Parent node ${node.parentNode} not found`); + } + + if (node.parentNode || parentNodes?.[node.id]) { + const { x, y, z } = calculateXYZPosition(node, nextNodes, { + ...node.position, + z: node[internalsSymbol]?.z ?? 0 + }); + + node.positionAbsolute = { + x, + y + }; + + node[internalsSymbol]!.z = z; + + if (parentNodes?.[node.id]) { + node[internalsSymbol]!.isParent = true; + } + } + + return node; + }); + + value = nodesWithPositions; + + set(value); + + return value; + }; + + const _update: typeof update = (fn: (nds: Node[]) => Node[]) => _set(fn(value)); + + const setDefaultOptions = (options: DefaultNodeOptions) => { + defaults = options; + }; + + _set(value); + + return { + subscribe, + set: _set, + update: _update, + setDefaultOptions + }; +}; + +export const createEdges = ( + edges: Edge[], + defaultOptions?: DefaultEdgeOptions +): Writable & { setDefaultOptions: (opts: DefaultEdgeOptions) => void } => { + const { subscribe, set, update } = writable([]); + let value = edges; + let defaults = defaultOptions || {}; + + const _set: typeof set = (eds: Edge[]) => { + const nextEdges = defaults ? eds.map((edge) => ({ ...defaults, ...edge })) : eds; + value = nextEdges; + set(value); + }; + + const _update: typeof update = (fn: (eds: Edge[]) => Edge[]) => _set(fn(value)); + + const setDefaultOptions = (options: DefaultEdgeOptions) => { + defaults = options; + }; + + _set(value); + + return { + subscribe, + set: _set, + update: _update, + setDefaultOptions + }; +}; + +function calculateXYZPosition(node: Node, nodes: Node[], result: XYZPosition): XYZPosition { + if (!node.parentNode) { + return result; + } + const parentNode = nodes.find((n) => n.id === node.parentNode)!; + const parentNodePosition = getNodePositionWithOrigin(parentNode, parentNode?.origin); + + return calculateXYZPosition(parentNode, nodes, { + x: (result.x ?? 0) + parentNodePosition.x, + y: (result.y ?? 0) + parentNodePosition.y, + z: + (parentNode[internalsSymbol]?.z ?? 0) > (result.z ?? 0) + ? parentNode[internalsSymbol]?.z ?? 0 + : result.z ?? 0 + }); +} diff --git a/packages/svelte/src/lib/utils/index.ts b/packages/svelte/src/lib/utils/index.ts index 4f5d9a8ac..23b294484 100644 --- a/packages/svelte/src/lib/utils/index.ts +++ b/packages/svelte/src/lib/utils/index.ts @@ -1,4 +1,3 @@ -import { writable, type Writable } from 'svelte/store'; import { isNodeBase, isEdgeBase, @@ -6,14 +5,10 @@ import { getOutgoersBase, getIncomersBase, updateEdgeBase, - getConnectedEdgesBase, - isNumeric, - getNodePositionWithOrigin, - internalsSymbol, - type XYZPosition + getConnectedEdgesBase } from '@xyflow/system'; -import type { DefaultEdgeOptions, DefaultNodeOptions, Edge, Node } from '$lib/types'; +import type { Edge, Node } from '$lib/types'; export const isNode = isNodeBase; export const isEdge = isEdgeBase; @@ -22,126 +17,3 @@ export const getIncomers = getIncomersBase; export const addEdge = addEdgeBase; export const updateEdge = updateEdgeBase; export const getConnectedEdges = getConnectedEdgesBase; - -export const createNodes = ( - nodes: Node[], - defaultOptions?: DefaultNodeOptions -): Writable & { setDefaultOptions: (opts: DefaultNodeOptions) => void } => { - const { subscribe, set, update } = writable([]); - let value = nodes; - let defaults = defaultOptions || {}; - - const _set: typeof set = (nds: Node[]) => { - const parentNodes: Record = {}; - - const nextNodes = nds.map((n) => { - const node: Node = { ...defaults, ...n, positionAbsolute: n.position }; - const z = (isNumeric(node.zIndex) ? node.zIndex : 0) + (node.selected ? 1 : 0); - - if (node.parentNode) { - parentNodes[node.parentNode] = true; - } - - Object.defineProperty(node, internalsSymbol, { - value: { - handleBounds: node?.[internalsSymbol]?.handleBounds, - z - } - }); - - return node; - }); - - const nodesWithPositions = nextNodes.map((node) => { - if (node.parentNode && !parentNodes[node.parentNode]) { - throw new Error(`Parent node ${node.parentNode} not found`); - } - - if (node.parentNode || parentNodes?.[node.id]) { - const { x, y, z } = calculateXYZPosition(node, nextNodes, { - ...node.position, - z: node[internalsSymbol]?.z ?? 0 - }); - - node.positionAbsolute = { - x, - y - }; - - node[internalsSymbol]!.z = z; - - if (parentNodes?.[node.id]) { - node[internalsSymbol]!.isParent = true; - } - } - - return node; - }); - - value = nodesWithPositions; - - set(value); - }; - - const _update: typeof update = (fn: (nds: Node[]) => Node[]) => _set(fn(value)); - - const setDefaultOptions = (options: DefaultNodeOptions) => { - defaults = options; - }; - - _set(value); - - return { - subscribe, - set: _set, - update: _update, - setDefaultOptions - }; -}; - -export const createEdges = ( - edges: Edge[], - defaultOptions?: DefaultEdgeOptions -): Writable & { setDefaultOptions: (opts: DefaultEdgeOptions) => void } => { - const { subscribe, set, update } = writable([]); - let value = edges; - let defaults = defaultOptions || {}; - - const _set: typeof set = (eds: Edge[]) => { - const nextEdges = defaults ? eds.map((edge) => ({ ...defaults, ...edge })) : eds; - value = nextEdges; - set(value); - }; - - const _update: typeof update = (fn: (eds: Edge[]) => Edge[]) => _set(fn(value)); - - const setDefaultOptions = (options: DefaultEdgeOptions) => { - defaults = options; - }; - - _set(value); - - return { - subscribe, - set: _set, - update: _update, - setDefaultOptions - }; -}; - -function calculateXYZPosition(node: Node, nodes: Node[], result: XYZPosition): XYZPosition { - if (!node.parentNode) { - return result; - } - const parentNode = nodes.find((n) => n.id === node.parentNode)!; - const parentNodePosition = getNodePositionWithOrigin(parentNode, parentNode?.origin); - - return calculateXYZPosition(parentNode, nodes, { - x: (result.x ?? 0) + parentNodePosition.x, - y: (result.y ?? 0) + parentNodePosition.y, - z: - (parentNode[internalsSymbol]?.z ?? 0) > (result.z ?? 0) - ? parentNode[internalsSymbol]?.z ?? 0 - : result.z ?? 0 - }); -} diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte index 3a3338fd9..7c3f5b86c 100644 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ b/packages/svelte/src/routes/customnode/+page.svelte @@ -2,13 +2,10 @@ import type { ChangeEventHandler } from 'svelte/elements'; import { writable } from 'svelte/store'; import SvelteFlow, { - SvelteFlowProvider, Controls, Background, BackgroundVariant, MiniMap, - createNodes, - createEdges, type NodeTypes, Position } from '../../lib/index'; @@ -23,7 +20,7 @@ const onChange: ChangeEventHandler = (event) => { nodes.update((nds) => nds.map((node) => { - if (node.id !== '2') { + if (node.type !== 'colorNode') { return node; } @@ -42,7 +39,7 @@ ); }; - const nodes = createNodes([ + const nodes = writable([ { id: '1', type: 'input', @@ -73,7 +70,7 @@ }, ]); - const edges = createEdges([ + const edges = writable([ { id: 'e1-2', source: '1', @@ -94,23 +91,20 @@ target: '4', animated: true, }, - ], { animated: true }); + ]); - - - - - - - + + + + + + + + diff --git a/packages/svelte/src/routes/interaction/+page.svelte b/packages/svelte/src/routes/interaction/+page.svelte index 6729d0a42..c5d956e5d 100644 --- a/packages/svelte/src/routes/interaction/+page.svelte +++ b/packages/svelte/src/routes/interaction/+page.svelte @@ -1,10 +1,8 @@ - - - - - + + - -
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index ce1219171..dbaa81ddd 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -1,15 +1,14 @@ - console.log('on node click', event)} + on:node:mouseenter={(event) => console.log('on node enter', event)} + on:node:mouseleave={(event) => console.log('on node leave', event)} + on:edge:click={(event) => console.log('edge click', event)} + on:connect:start={(event) => console.log('on connect start', event)} + on:connect={(event) => console.log('on connect', event)} + on:connect:end={(event) => console.log('on connect end', event)} + on:pane:click={(event) => console.log('on pane click', event)} + on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} > - console.log('on node click', event)} - on:node:mouseenter={(event) => console.log('on node enter', event)} - on:node:mouseleave={(event) => console.log('on node leave', event)} - on:edge:click={(event) => console.log('edge click', event)} - on:connect:start={(event) => console.log('on connect start', event)} - on:connect={(event) => console.log('on connect', event)} - on:connect:end={(event) => console.log('on connect end', event)} - on:pane:click={(event) => console.log('on pane click', event)} - on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} - > - - - - - - - - + + + + + + + \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte index 0438ba050..1966d50eb 100644 --- a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte @@ -18,12 +18,12 @@ {#if interactionWidth} diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 07b980612..5c3adaa39 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -29,8 +29,8 @@ export let markerEnd: $$Props['markerEnd'] = undefined; export let sourceHandleId: $$Props['sourceHandleId'] = undefined; export let targetHandleId: $$Props['targetHandleId'] = undefined; - - // @ todo: support edge updates + + // @ todo: support edge updates const { edges, edgeTypes, flowId, addSelectedEdges } = useStore(); const dispatch = createEventDispatcher(); @@ -45,19 +45,13 @@ addSelectedEdges([id]); } - const edge = $edges.find(e => e.id === id); + const edge = $edges.find((e) => e.id === id); dispatch('edge:click', edge); } - + $transform, + getTransform: () => $transform }); } } diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 828adfd6b..114c09173 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -1,5 +1,4 @@
import { onDestroy } from 'svelte'; - + import { createStoreContext } from '$lib/store'; - + const store = createStoreContext(); onDestroy(() => { diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte index 4a33bcc18..60921eb6b 100644 --- a/packages/svelte/src/lib/components/edges/BezierEdge.svelte +++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte @@ -28,4 +28,3 @@ interactionWidth={$$props.interactionWidth} style={$$props.style} /> - diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte index 247764b67..50f282ff6 100644 --- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -26,4 +26,3 @@ interactionWidth={$$props.interactionWidth} style={$$props.style} /> - diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte index 4ea0cdccc..09421958d 100644 --- a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -17,4 +17,3 @@ {data?.label} - diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index 6c495dd9c..752c9b33d 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -14,7 +14,6 @@ - \ No newline at end of file + diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index cd4105376..45db22288 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1 +1 @@ -
this redirects to /overview
\ No newline at end of file +
this redirects to /overview
diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte index 7c3f5b86c..d5f468bc2 100644 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ b/packages/svelte/src/routes/customnode/+page.svelte @@ -6,8 +6,10 @@ Background, BackgroundVariant, MiniMap, + Position, + type Node, type NodeTypes, - Position + type Edge } from '../../lib/index'; import { CustomNode } from './CustomNode'; @@ -15,8 +17,8 @@ colorNode: CustomNode }; - const bgColor = writable('#1A192B') - + const bgColor = writable('#1A192B'); + const onChange: ChangeEventHandler = (event) => { nodes.update((nds) => nds.map((node) => { @@ -32,75 +34,69 @@ ...node, data: { ...node.data, - color, - }, + color + } }; }) ); }; - const nodes = writable([ - { - id: '1', - type: 'input', - data: { label: 'An input node' }, - position: { x: 0, y: 50 }, - sourcePosition: Position.Right, - }, - { - id: '2', - type: 'colorNode', - data: { onChange: onChange, color: $bgColor }, - style: 'border: 1px solid #777; padding: 10px', - position: { x: 250, y: 50 }, - }, - { - id: '3', - type: 'output', - data: { label: 'Output A' }, - position: { x: 650, y: 25 }, - targetPosition: Position.Left, - }, - { - id: '4', - type: 'output', - data: { label: 'Output B' }, - position: { x: 650, y: 120 }, - targetPosition: Position.Left, - }, + const nodes = writable([ + { + id: '1', + type: 'input', + data: { label: 'An input node' }, + position: { x: 0, y: 50 }, + sourcePosition: Position.Right + }, + { + id: '2', + type: 'colorNode', + data: { onChange: onChange, color: $bgColor }, + style: 'border: 1px solid #777; padding: 10px', + position: { x: 250, y: 50 } + }, + { + id: '3', + type: 'output', + data: { label: 'Output A' }, + position: { x: 650, y: 25 }, + targetPosition: Position.Left + }, + { + id: '4', + type: 'output', + data: { label: 'Output B' }, + position: { x: 650, y: 120 }, + targetPosition: Position.Left + } ]); - const edges = writable([ + const edges = writable([ { id: 'e1-2', source: '1', target: '2', - animated: true, + animated: true }, { id: 'e2a-3', source: '2', sourceHandle: 'a', target: '3', - animated: true, + animated: true }, { id: 'e2b-4', source: '2', sourceHandle: 'b', target: '4', - animated: true, - }, + animated: true + } ]); - + diff --git a/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte b/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte index 1a7717439..fb835834a 100644 --- a/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte +++ b/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte @@ -2,7 +2,7 @@ import { Position } from '@xyflow/system'; import { Handle } from '../../../lib/index'; - export let data: { color: string, onChange: () => void } = { color: '#111', onChange: () => {} }; + export let data: { color: string; onChange: () => void } = { color: '#111', onChange: () => {} }; export let xPos: number = 0; export let yPos: number = 0; @@ -12,10 +12,5 @@ Custom Color Picker Node: {data.color}
- - + + diff --git a/packages/svelte/src/routes/drag-n-drop/Flow.svelte b/packages/svelte/src/routes/drag-n-drop/Flow.svelte index 341f506fb..7545e2542 100644 --- a/packages/svelte/src/routes/drag-n-drop/Flow.svelte +++ b/packages/svelte/src/routes/drag-n-drop/Flow.svelte @@ -10,28 +10,26 @@ } from '../../lib/index'; import Sidebar from './Sidebar.svelte'; - const nodes = writable( - [ - { - id: '1', - type: 'input', - data: { label: 'Input Node' }, - position: { x: 150, y: 5 } - }, - { - id: '2', - type: 'default', - data: { label: 'Node' }, - position: { x: 0, y: 150 } - }, - { - id: '3', - type: 'output', - data: { label: 'Output Node' }, - position: { x: 300, y: 150 } - } - ] - ); + const nodes = writable([ + { + id: '1', + type: 'input', + data: { label: 'Input Node' }, + position: { x: 150, y: 5 } + }, + { + id: '2', + type: 'default', + data: { label: 'Node' }, + position: { x: 0, y: 150 } + }, + { + id: '3', + type: 'output', + data: { label: 'Output Node' }, + position: { x: 300, y: 150 } + } + ]); const edges = writable([ { @@ -54,7 +52,7 @@ const onDragOver = (event: DragEvent) => { event.preventDefault(); - console.log(event) + console.log(event); if (event.dataTransfer) { event.dataTransfer.dropEffect = 'move'; @@ -71,27 +69,21 @@ const type = event.dataTransfer.getData('application/svelteflow'); const position = svelteFlow.project({ x: event.clientX, - y: event.clientY - 40, + y: event.clientY - 40 }); const newNode: Node = { id: `${Math.random()}`, type, position, - data: { label: `${type} node` }, + data: { label: `${type} node` } }; - svelteFlow.nodes.update(nds => nds.concat(newNode)); + svelteFlow.nodes.update((nds) => nds.concat(newNode)); };
- + @@ -104,4 +96,4 @@ height: 100%; display: flex; } - \ No newline at end of file + diff --git a/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte b/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte index 532cfbed0..5e3dabba5 100644 --- a/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte +++ b/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte @@ -1,7 +1,5 @@ - + diff --git a/packages/svelte/src/routes/interaction/+page.svelte b/packages/svelte/src/routes/interaction/+page.svelte index c5d956e5d..9eb872d74 100644 --- a/packages/svelte/src/routes/interaction/+page.svelte +++ b/packages/svelte/src/routes/interaction/+page.svelte @@ -1,5 +1,5 @@ @@ -124,14 +126,17 @@ initialViewport={{ x: 100, y: 100, zoom: 2 }} snapGrid={[25, 25]} on:node:click={(event) => console.log('on node click', event)} - on:node:mouseenter={(event) => console.log('on node enter', event)} + on:node:mouseenter={(event) => console.log('on node enter', event)} on:node:mouseleave={(event) => console.log('on node leave', event)} on:edge:click={(event) => console.log('edge click', event)} on:connect:start={(event) => console.log('on connect start', event)} on:connect={(event) => console.log('on connect', event)} on:connect:end={(event) => console.log('on connect end', event)} on:pane:click={(event) => console.log('on pane click', event)} - on:pane:contextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} + on:pane:contextmenu={(event) => { + event.preventDefault(); + console.log('on pane contextmenu', event); + }} > diff --git a/packages/svelte/src/routes/overview/CustomEdge/Custom.svelte b/packages/svelte/src/routes/overview/CustomEdge/Custom.svelte index 1a881428a..0c41b8925 100644 --- a/packages/svelte/src/routes/overview/CustomEdge/Custom.svelte +++ b/packages/svelte/src/routes/overview/CustomEdge/Custom.svelte @@ -17,7 +17,7 @@ const svelteFlow = useSvelteFlow(); function onClick() { - svelteFlow.edges.update(eds => eds.filter(e => e.id !== $$props.id)); + svelteFlow.edges.update((eds) => eds.filter((e) => e.id !== $$props.id)); } @@ -29,11 +29,10 @@ class="edge-button" on:click={onClick} > - ✕ + ✕ - \ No newline at end of file + diff --git a/packages/svelte/src/routes/stress/+page.svelte b/packages/svelte/src/routes/stress/+page.svelte index 036540e13..83f46af13 100644 --- a/packages/svelte/src/routes/stress/+page.svelte +++ b/packages/svelte/src/routes/stress/+page.svelte @@ -1,5 +1,5 @@ - + diff --git a/packages/svelte/src/routes/subflows/+page.svelte b/packages/svelte/src/routes/subflows/+page.svelte index 440c6289b..1cef9da2b 100644 --- a/packages/svelte/src/routes/subflows/+page.svelte +++ b/packages/svelte/src/routes/subflows/+page.svelte @@ -1,31 +1,32 @@ - + @@ -131,6 +125,6 @@ diff --git a/packages/svelte/src/routes/usesvelteflow/Flow.svelte b/packages/svelte/src/routes/usesvelteflow/Flow.svelte index c0e70bf2f..c89d3b2e6 100644 --- a/packages/svelte/src/routes/usesvelteflow/Flow.svelte +++ b/packages/svelte/src/routes/usesvelteflow/Flow.svelte @@ -1,11 +1,6 @@
- + @@ -64,4 +55,4 @@ height: 100%; display: flex; } - \ No newline at end of file + diff --git a/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte b/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte index de82de39f..0ba728aab 100644 --- a/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte +++ b/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte @@ -1,9 +1,17 @@ \ No newline at end of file + From 32ddd6fac94f3046e99e1d77cfb2d178d681e9f5 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 6 Jun 2023 15:47:50 +0200 Subject: [PATCH 0080/1093] chore(svelte): cleanup deps --- packages/svelte/package.json | 10 +- pnpm-lock.yaml | 171 +---------------------------------- 2 files changed, 3 insertions(+), 178 deletions(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index bc8d7b6fd..54cfddb87 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -18,16 +18,8 @@ }, "dependencies": { "@svelte-put/shortcut": "^2.0.0", - "@types/d3-drag": "^3.0.1", - "@types/d3-selection": "^3.0.3", - "@types/d3-zoom": "^3.0.1", "@xyflow/system": "workspace:*", - "classcat": "^5.0.4", - "d3-drag": "^3.0.0", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "classcat": "^5.0.4" }, "devDependencies": { "@sveltejs/adapter-auto": "^2.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aea5fb54b..1784c0190 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: devDependencies: '@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.8 '@changesets/cli': registry.npmjs.org/@changesets/cli/2.26.1 - '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.8_loqfnwogukjtmydbmg57mzzpb4 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.59.8_kigkzfftsmftz3xok324pyvzui + '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.9_3i5bqcvz3xm47mwpahnwyqmg7m + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.59.9_kigkzfftsmftz3xok324pyvzui autoprefixer: registry.npmjs.org/autoprefixer/10.4.14_postcss@8.4.24 concurrently: registry.npmjs.org/concurrently/7.6.0 cypress: registry.npmjs.org/cypress/10.11.0 @@ -142,23 +142,15 @@ importers: '@sveltejs/adapter-auto': ^2.1.0 '@sveltejs/kit': ^1.20.1 '@sveltejs/package': ^2.0.2 - '@types/d3-drag': ^3.0.1 - '@types/d3-selection': ^3.0.3 - '@types/d3-zoom': ^3.0.1 '@typescript-eslint/eslint-plugin': ^5.59.9 '@typescript-eslint/parser': ^5.59.9 '@xyflow/system': workspace:* classcat: ^5.0.4 - d3-drag: ^3.0.0 - d3-selection: ^3.0.0 - d3-zoom: ^3.0.0 eslint: ^8.42.0 eslint-config-prettier: ^8.8.0 eslint-plugin-svelte3: ^4.0.0 prettier: ^2.8.8 prettier-plugin-svelte: ^2.10.1 - react: ^18.2.0 - react-dom: ^18.2.0 svelte: ^3.59.1 svelte-check: ^3.4.3 tslib: ^2.4.1 @@ -166,16 +158,8 @@ importers: vite: ^4.3.9 dependencies: '@svelte-put/shortcut': registry.npmjs.org/@svelte-put/shortcut/2.0.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 '@xyflow/system': link:../system classcat: registry.npmjs.org/classcat/5.0.4 - d3-drag: registry.npmjs.org/d3-drag/3.0.0 - d3-selection: registry.npmjs.org/d3-selection/3.0.0 - d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 - react: registry.npmjs.org/react/18.2.0 - react-dom: registry.npmjs.org/react-dom/18.2.0_react@18.2.0 devDependencies: '@sveltejs/adapter-auto': registry.npmjs.org/@sveltejs/adapter-auto/2.1.0_@sveltejs+kit@1.20.1 '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.20.1_svelte@3.59.1+vite@4.3.9 @@ -2056,37 +2040,6 @@ packages: dev: true optional: true - registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.8_loqfnwogukjtmydbmg57mzzpb4: - resolution: {integrity: sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.8 - name: '@typescript-eslint/eslint-plugin' - version: 5.59.8 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.5.1 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.59.8_kigkzfftsmftz3xok324pyvzui - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.59.8 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.59.8_kigkzfftsmftz3xok324pyvzui - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.59.8_kigkzfftsmftz3xok324pyvzui - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.42.0 - grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 - ignore: registry.npmjs.org/ignore/5.2.4 - natural-compare-lite: registry.npmjs.org/natural-compare-lite/1.4.0 - semver: registry.npmjs.org/semver/7.5.1 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.5 - typescript: registry.npmjs.org/typescript/4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.9_3i5bqcvz3xm47mwpahnwyqmg7m: resolution: {integrity: sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz} id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.59.9 @@ -2118,29 +2071,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/parser/5.59.8_kigkzfftsmftz3xok324pyvzui: - resolution: {integrity: sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/5.59.8 - name: '@typescript-eslint/parser' - version: 5.59.8 - 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.59.8 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5 - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.42.0 - typescript: registry.npmjs.org/typescript/4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/parser/5.59.9_kigkzfftsmftz3xok324pyvzui: resolution: {integrity: sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.9.tgz} id: registry.npmjs.org/@typescript-eslint/parser/5.59.9 @@ -2164,16 +2094,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/scope-manager/5.59.8: - resolution: {integrity: sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz} - name: '@typescript-eslint/scope-manager' - version: 5.59.8 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.8 - dev: true - registry.npmjs.org/@typescript-eslint/scope-manager/5.59.9: resolution: {integrity: sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz} name: '@typescript-eslint/scope-manager' @@ -2184,29 +2104,6 @@ packages: '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.9 dev: true - registry.npmjs.org/@typescript-eslint/type-utils/5.59.8_kigkzfftsmftz3xok324pyvzui: - resolution: {integrity: sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/5.59.8 - name: '@typescript-eslint/type-utils' - version: 5.59.8 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5 - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.59.8_kigkzfftsmftz3xok324pyvzui - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.42.0 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.5 - typescript: registry.npmjs.org/typescript/4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/type-utils/5.59.9_kigkzfftsmftz3xok324pyvzui: resolution: {integrity: sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz} id: registry.npmjs.org/@typescript-eslint/type-utils/5.59.9 @@ -2230,13 +2127,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/types/5.59.8: - resolution: {integrity: sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz} - name: '@typescript-eslint/types' - version: 5.59.8 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - registry.npmjs.org/@typescript-eslint/types/5.59.9: resolution: {integrity: sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.9.tgz} name: '@typescript-eslint/types' @@ -2244,30 +2134,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5: - resolution: {integrity: sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8 - name: '@typescript-eslint/typescript-estree' - version: 5.59.8 - 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.59.8 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.8 - debug: registry.npmjs.org/debug/4.3.4 - 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.1 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.5 - typescript: registry.npmjs.org/typescript/4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.9_typescript@4.9.5: resolution: {integrity: sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz} id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.9 @@ -2292,29 +2158,6 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/utils/5.59.8_kigkzfftsmftz3xok324pyvzui: - resolution: {integrity: sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/5.59.8 - name: '@typescript-eslint/utils' - version: 5.59.8 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - 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.42.0 - '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.12 - '@types/semver': registry.npmjs.org/@types/semver/7.5.0 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.59.8 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.59.8_typescript@4.9.5 - eslint: registry.npmjs.org/eslint/8.42.0 - eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 - semver: registry.npmjs.org/semver/7.5.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - registry.npmjs.org/@typescript-eslint/utils/5.59.9_kigkzfftsmftz3xok324pyvzui: resolution: {integrity: sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.9.tgz} id: registry.npmjs.org/@typescript-eslint/utils/5.59.9 @@ -2338,16 +2181,6 @@ packages: - typescript dev: true - registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.8: - resolution: {integrity: sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz} - name: '@typescript-eslint/visitor-keys' - version: 5.59.8 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.59.8 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 - dev: true - registry.npmjs.org/@typescript-eslint/visitor-keys/5.59.9: resolution: {integrity: sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz} name: '@typescript-eslint/visitor-keys' From 98d9d3e51a23c8e7f724d9bd8de25883cf09e3f9 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 6 Jun 2023 19:44:39 +0200 Subject: [PATCH 0081/1093] feat(svelte): cleanup styling, use css variables --- .../additional-components/MiniMap/MiniMap.tsx | 4 +- .../lib/components/BaseEdge/BaseEdge.svelte | 28 ++++++-- .../ConnectionLine/ConnectionLine.svelte | 2 +- .../components/EdgeWrapper/EdgeWrapper.svelte | 21 ------ .../src/lib/components/Handle/Handle.svelte | 6 +- .../NodeSelection/NodeSelection.svelte | 2 +- .../components/NodeWrapper/NodeWrapper.svelte | 10 +-- .../lib/components/Selection/Selection.svelte | 2 +- .../container/SvelteFlow/SvelteFlow.svelte | 31 +++++++++ .../lib/plugins/Background/Background.svelte | 14 ++-- .../lib/plugins/Background/DotPattern.svelte | 10 ++- .../lib/plugins/Background/LinePattern.svelte | 10 ++- .../src/lib/plugins/Background/types.ts | 4 +- .../lib/plugins/Controls/ControlButton.svelte | 25 ++++++- .../src/lib/plugins/Controls/Controls.svelte | 32 ++++++--- .../svelte/src/lib/plugins/Controls/types.ts | 4 ++ .../src/lib/plugins/Minimap/Minimap.svelte | 65 +++++++++++-------- .../lib/plugins/Minimap/MinimapNode.svelte | 6 +- .../svelte/src/lib/plugins/Minimap/types.ts | 1 - .../svelte/src/routes/overview/+page.svelte | 14 +++- 20 files changed, 190 insertions(+), 101 deletions(-) diff --git a/packages/react/src/additional-components/MiniMap/MiniMap.tsx b/packages/react/src/additional-components/MiniMap/MiniMap.tsx index 245f75bf0..464cf5e69 100644 --- a/packages/react/src/additional-components/MiniMap/MiniMap.tsx +++ b/packages/react/src/additional-components/MiniMap/MiniMap.tsx @@ -130,8 +130,8 @@ function MiniMap({ const onSvgClick = onClick ? (event: MouseEvent) => { - const rfCoord = minimapInstance.current?.pointer(event); - onClick(event, { x: rfCoord?.[0] ?? 0, y: rfCoord?.[1] ?? 0 }); + const [x, y] = minimapInstance.current?.pointer(event) || [0, 0]; + onClick(event, { x, y }); } : undefined; diff --git a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte index 1966d50eb..8bd375b71 100644 --- a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte @@ -5,7 +5,7 @@ type $$Props = BaseEdgeProps; export let id: $$Props['id'] = undefined; - export let path: $$Props['path'] = ''; + export let path: $$Props['path']; export let label: $$Props['label'] = undefined; export let labelX: $$Props['labelX'] = undefined; export let labelY: $$Props['labelY'] = undefined; @@ -19,19 +19,19 @@ {#if interactionWidth} {/if} @@ -40,7 +40,7 @@
{label} @@ -53,4 +53,24 @@ position: absolute; background: white; } + + .svelte-flow__edge-path { + stroke: var(--edge-color); + stroke-width: 1; + } + + :global(.selected) .svelte-flow__edge-path { + stroke: var(--edge-color-selected); + } + + :global(.animated) .svelte-flow__edge-path { + stroke-dasharray: 5; + animation: dashdraw 0.5s linear infinite; + } + + @keyframes dashdraw { + from { + stroke-dashoffset: 10; + } + } diff --git a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte index 770b72415..29723ca22 100644 --- a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte +++ b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte @@ -32,7 +32,7 @@ .svelte-flow__edge-path, .svelte-flow__connection-path { - stroke: #b1b1b7; + stroke: var(--connection-line-color); stroke-width: 1; fill: none; } diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 5c3adaa39..9ee06fca9 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -81,25 +81,4 @@ pointer-events: visibleStroke; cursor: pointer; } - - .svelte-flow__edge :global(.svelte-flow__edge-path) { - stroke: #ccc; - stroke-width: 1; - fill: none; - } - - .selected :global(.svelte-flow__edge-path) { - stroke: #555; - } - - .animated :global(.svelte-flow__edge-path) { - stroke-dasharray: 5; - animation: dashdraw 0.5s linear infinite; - } - - @keyframes dashdraw { - from { - stroke-dashoffset: 10; - } - } diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 76e90ecdd..6238546d2 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -79,7 +79,7 @@ data-handleid={handleId} data-nodeid={nodeId} data-handlepos={position} - data-id={`${nodeId}-${id}-${type}`} + data-id="{nodeId}-{id}-{type}" class={cc([ 'svelte-flow__handle', `svelte-flow__handle-${position}`, @@ -108,8 +108,8 @@ min-height: 5px; width: 6px; height: 6px; - background: #1a192b; - border: 1px solid white; + background: var(--handle-background-color); + border: 1px solid var(--handle-border-color); border-radius: 100%; } diff --git a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte index eb7671a4b..ea9ec2025 100644 --- a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte @@ -15,7 +15,7 @@ {#if selectedNodes && $selectionRectMode === 'nodes'}
dispatchEvent('node:mouseenter')} @@ -116,12 +116,12 @@ diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index 7984d2e83..c5bfec397 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -1,10 +1,4 @@ - + + + diff --git a/packages/svelte/src/lib/plugins/Background/LinePattern.svelte b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte index 64c7dad7d..edd4f5173 100644 --- a/packages/svelte/src/lib/plugins/Background/LinePattern.svelte +++ b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte @@ -1,11 +1,17 @@ + + diff --git a/packages/svelte/src/lib/plugins/Background/types.ts b/packages/svelte/src/lib/plugins/Background/types.ts index 6668be91d..6f44057d7 100644 --- a/packages/svelte/src/lib/plugins/Background/types.ts +++ b/packages/svelte/src/lib/plugins/Background/types.ts @@ -5,11 +5,11 @@ export enum BackgroundVariant { } export type BackgroundProps = { - color?: string; + bgColor?: string; + patternColor?: string; class?: string; gap?: number | [number, number]; size?: number; lineWidth?: number; variant?: BackgroundVariant; - style?: string; }; diff --git a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte index d8260902c..9b52c14ee 100644 --- a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte +++ b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte @@ -2,6 +2,11 @@ import cc from 'classcat'; let className: string; + let bgColor: string | undefined = undefined; + let bgColorHover: string | undefined = undefined; + let color: string | undefined = undefined; + let colorHover: string | undefined = undefined; + let borderColor: string | undefined = undefined; export { className as class }; @@ -10,6 +15,11 @@ type="button" on:click class={cc(['svelte-flow__controls-button', className])} + style:--controls-button-background-color-props={bgColor} + style:--controls-button-background-color-hover-props={bgColorHover} + style:--controls-button-color-props={color} + style:--controls-button-color-hover-props={colorHover} + style:--controls-button-border-color-props={borderColor} {...$$restProps} > @@ -18,8 +28,13 @@ diff --git a/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte index 42909cf7a..c9658f8a6 100644 --- a/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte +++ b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte @@ -10,12 +10,8 @@ export let shapeRendering: string; export let strokeColor: string; export let strokeWidth: number = 2; - export let style: Record; let className: string = ''; export { className as class }; - - const { background, backgroundColor } = style || {}; - const fill = (color || background || backgroundColor) as string; From ddaa719c30245700fa18f305aae48d7c5e34f015 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 7 Jun 2023 15:28:25 +0200 Subject: [PATCH 0082/1093] fix(svelte): connection radius --- packages/svelte/src/lib/components/Handle/Handle.svelte | 2 +- packages/svelte/src/lib/store/initial-store.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 6238546d2..d1ab49aae 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -79,7 +79,7 @@ data-handleid={handleId} data-nodeid={nodeId} data-handlepos={position} - data-id="{nodeId}-{id}-{type}" + data-id="{nodeId}-{id || null}-{type}" class={cc([ 'svelte-flow__handle', `svelte-flow__handle-${position}`, diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 1df46821e..e329e2eaa 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -73,7 +73,7 @@ export const getInitialStore = () => ({ domNode: writable(null), connectionPath: readable(null), connection: writable(initConnectionData), - connectionRadius: writable(25), + connectionRadius: writable(20), connectionLineType: writable(ConnectionLineType.Bezier), isValidConnection: writable(() => true), nodesDraggable: writable(true), From f73aee9b062bb21ba5ac4de547695c08b4c8578b Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 8 Jun 2023 12:24:44 +0200 Subject: [PATCH 0083/1093] chore(svelte): cleanup interaction example --- .../src/routes/interaction/+page.svelte | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/svelte/src/routes/interaction/+page.svelte b/packages/svelte/src/routes/interaction/+page.svelte index 9eb872d74..8b6a96d1a 100644 --- a/packages/svelte/src/routes/interaction/+page.svelte +++ b/packages/svelte/src/routes/interaction/+page.svelte @@ -75,7 +75,7 @@ id="draggable" type="checkbox" bind:checked={isDraggable} - class="react-flow__draggable" + class="svelte-flow__draggable" />
@@ -86,7 +86,7 @@ id="connectable" type="checkbox" bind:checked={isConnectable} - class="react-flow__connectable" + class="svelte-flow__connectable" />
@@ -97,7 +97,7 @@ id="selectable" type="checkbox" bind:checked={isSelectable} - class="react-flow__selectable" + class="svelte-flow__selectable" />
@@ -108,7 +108,7 @@ id="zoomonscroll" type="checkbox" bind:checked={zoomOnScroll} - class="react-flow__zoomonscroll" + class="svelte-flow__zoomonscroll" />
@@ -119,7 +119,7 @@ id="zoomonpinch" type="checkbox" bind:checked={zoomOnPinch} - class="react-flow__zoomonpinch" + class="svelte-flow__zoomonpinch" />
@@ -130,7 +130,7 @@ id="panonscroll" type="checkbox" bind:checked={panOnScroll} - class="react-flow__panonscroll" + class="svelte-flow__panonscroll" />
@@ -143,7 +143,7 @@ on:change={(event) => { panOnScrollMode = PanOnScrollMode.Free; }} - class="react-flow__panonscrollmode" + class="svelte-flow__panonscrollmode" > @@ -158,7 +158,7 @@ id="zoomondbl" type="checkbox" bind:checked={zoomOnDoubleClick} - class="react-flow__zoomondbl" + class="svelte-flow__zoomondbl" />
@@ -169,7 +169,7 @@ id="panondrag" type="checkbox" bind:checked={panOnDrag} - class="react-flow__panondrag" + class="svelte-flow__panondrag" />
@@ -180,7 +180,7 @@ id="capturezoompaneclick" type="checkbox" bind:checked={captureZoomClick} - class="react-flow__capturezoompaneclick" + class="svelte-flow__capturezoompaneclick" />
@@ -191,7 +191,7 @@ id="capturezoompanescroll" type="checkbox" bind:checked={captureZoomScroll} - class="react-flow__capturezoompanescroll" + class="svelte-flow__capturezoompanescroll" />
@@ -202,7 +202,7 @@ id="captureelementclick" type="checkbox" bind:checked={captureElementClick} - class="react-flow__captureelementclick" + class="svelte-flow__captureelementclick" />
From 8b0c8a7ec3fa2451645a2b71807a86229790770d Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 8 Jun 2023 12:25:33 +0200 Subject: [PATCH 0084/1093] chore(svelte): cleanup edge types --- packages/svelte/src/lib/types/edges.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 64a2c3520..abc524970 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -48,8 +48,6 @@ export type EdgeLayouted = Omit & { targetPosition: Position; sourceHandleId?: string; targetHandleId?: string; - markerStart?: string; - markerEnd?: string; }; export type EdgeProps = Pick< From 565489758b9b12c69560298e7b57c2a2008cd21b Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 8 Jun 2023 12:26:38 +0200 Subject: [PATCH 0085/1093] refactor(react): improve performance by fixing minimap --- .../additional-components/MiniMap/MiniMap.tsx | 66 +++++-------------- .../MiniMap/MiniMapNode.tsx | 11 ++-- .../MiniMap/MiniMapNodes.tsx | 65 ++++++++++++++++++ .../additional-components/MiniMap/types.ts | 11 +++- 4 files changed, 96 insertions(+), 57 deletions(-) create mode 100644 packages/react/src/additional-components/MiniMap/MiniMapNodes.tsx diff --git a/packages/react/src/additional-components/MiniMap/MiniMap.tsx b/packages/react/src/additional-components/MiniMap/MiniMap.tsx index 464cf5e69..b0fc80ff7 100644 --- a/packages/react/src/additional-components/MiniMap/MiniMap.tsx +++ b/packages/react/src/additional-components/MiniMap/MiniMap.tsx @@ -1,25 +1,16 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { memo, useEffect, useRef, type MouseEvent } from 'react'; +import { memo, useEffect, useRef, type MouseEvent, useCallback } from 'react'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; -import { - getRectOfNodes, - getBoundsOfRects, - getNodePositionWithOrigin, - XYMinimap, - type Rect, - type XYMinimapInstance, -} from '@xyflow/system'; +import { getRectOfNodes, getBoundsOfRects, XYMinimap, type Rect, type XYMinimapInstance } from '@xyflow/system'; import { useStore, useStoreApi } from '../../hooks/useStore'; import Panel from '../../components/Panel'; import type { ReactFlowState } from '../../types'; -import MiniMapNode from './MiniMapNode'; -import type { MiniMapProps, GetMiniMapNodeAttribute } from './types'; - -declare const window: any; +import type { MiniMapProps } from './types'; +import MiniMapNodes from './MiniMapNodes'; const defaultWidth = 200; const defaultHeight = 150; @@ -34,7 +25,6 @@ const selector = (s: ReactFlowState) => { }; return { - nodes: nodes.filter((node) => !node.hidden && node.width && node.height), viewBB, boundingRect: nodes.length > 0 ? getBoundsOfRects(getRectOfNodes(nodes, s.nodeOrigin), viewBB) : viewBB, rfId: s.rfId, @@ -46,8 +36,6 @@ const selector = (s: ReactFlowState) => { }; }; -const getAttrFunction = (func: any): GetMiniMapNodeAttribute => (func instanceof Function ? func : () => func); - const ARIA_LABEL_KEY = 'react-flow__minimap-desc'; function MiniMap({ @@ -60,7 +48,7 @@ function MiniMap({ nodeStrokeWidth = 2, // We need to rename the prop to be `CapitalCase` so that JSX will render it as // a component properly. - nodeComponent: NodeComponent = MiniMapNode, + nodeComponent, maskColor = 'rgb(240, 240, 240, 0.6)', maskStrokeColor = 'none', maskStrokeWidth = 1, @@ -75,15 +63,9 @@ function MiniMap({ }: MiniMapProps) { const store = useStoreApi(); const svg = useRef(null); - const { boundingRect, viewBB, nodes, rfId, nodeOrigin, panZoom, translateExtent, flowWidth, flowHeight } = useStore( - selector, - shallow - ); + const { boundingRect, viewBB, rfId, panZoom, translateExtent, flowWidth, flowHeight } = useStore(selector, shallow); const elementWidth = (style?.width as number) ?? defaultWidth; const elementHeight = (style?.height as number) ?? defaultHeight; - const nodeColorFunc = getAttrFunction(nodeColor); - const nodeStrokeColorFunc = getAttrFunction(nodeStrokeColor); - const nodeClassNameFunc = getAttrFunction(nodeClassName); const scaledWidth = boundingRect.width / elementWidth; const scaledHeight = boundingRect.height / elementHeight; const viewScale = Math.max(scaledWidth, scaledHeight); @@ -94,7 +76,6 @@ function MiniMap({ const y = boundingRect.y - (viewHeight - boundingRect.height) / 2 - offset; const width = viewWidth + offset * 2; const height = viewHeight + offset * 2; - const shapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision'; const labelledBy = `${ARIA_LABEL_KEY}-${rfId}`; const viewScaleRef = useRef(0); const minimapInstance = useRef(); @@ -136,10 +117,10 @@ function MiniMap({ : undefined; const onSvgNodeClick = onNodeClick - ? (event: MouseEvent, nodeId: string) => { + ? useCallback((event: MouseEvent, nodeId: string) => { const node = store.getState().nodeInternals.get(nodeId)!; onNodeClick(event, node); - } + }, []) : undefined; return ( @@ -159,28 +140,15 @@ function MiniMap({ onClick={onSvgClick} > {ariaLabel && {ariaLabel}} - {nodes.map((node) => { - const { x, y } = getNodePositionWithOrigin(node, node.origin || nodeOrigin).positionAbsolute; - - return ( - - ); - })} + { +}: MiniMapNodeProps) { const { background, backgroundColor } = style || {}; const fill = (color || background || backgroundColor) as string; @@ -36,8 +37,6 @@ const MiniMapNode = ({ onClick={onClick ? (event) => onClick(event, id) : undefined} /> ); -}; - -MiniMapNode.displayName = 'MiniMapNode'; +} export default memo(MiniMapNode); diff --git a/packages/react/src/additional-components/MiniMap/MiniMapNodes.tsx b/packages/react/src/additional-components/MiniMap/MiniMapNodes.tsx new file mode 100644 index 000000000..adbd98108 --- /dev/null +++ b/packages/react/src/additional-components/MiniMap/MiniMapNodes.tsx @@ -0,0 +1,65 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { memo } from 'react'; +import { shallow } from 'zustand/shallow'; +import { getNodePositionWithOrigin } from '@xyflow/system'; + +import { useStore } from '../../hooks/useStore'; +import type { ReactFlowState } from '../../types'; +import MiniMapNode from './MiniMapNode'; +import type { MiniMapNodes, GetMiniMapNodeAttribute } from './types'; + +declare const window: any; + +const selector = (s: ReactFlowState) => s.nodeOrigin; +const selectorNodes = (s: ReactFlowState) => s.getNodes().filter((node) => !node.hidden && node.width && node.height); +const getAttrFunction = (func: any): GetMiniMapNodeAttribute => (func instanceof Function ? func : () => func); + +function MiniMapNodes({ + nodeStrokeColor = 'transparent', + nodeColor = '#e2e2e2', + nodeClassName = '', + nodeBorderRadius = 5, + nodeStrokeWidth = 2, + // We need to rename the prop to be `CapitalCase` so that JSX will render it as + // a component properly. + nodeComponent: NodeComponent = MiniMapNode, + onClick, +}: MiniMapNodes) { + const nodes = useStore(selectorNodes, shallow); + const nodeOrigin = useStore(selector); + const nodeColorFunc = getAttrFunction(nodeColor); + const nodeStrokeColorFunc = getAttrFunction(nodeStrokeColor); + const nodeClassNameFunc = getAttrFunction(nodeClassName); + + const shapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision'; + + return ( + <> + {nodes.map((node) => { + const { x, y } = getNodePositionWithOrigin(node, node.origin || nodeOrigin).positionAbsolute; + + return ( + + ); + })} + + ); +} + +export default memo(MiniMapNodes); diff --git a/packages/react/src/additional-components/MiniMap/types.ts b/packages/react/src/additional-components/MiniMap/types.ts index c51ca69ca..870cbf0bd 100644 --- a/packages/react/src/additional-components/MiniMap/types.ts +++ b/packages/react/src/additional-components/MiniMap/types.ts @@ -26,7 +26,14 @@ export type MiniMapProps = Omit, ' zoomStep?: number; }; -export interface MiniMapNodeProps { +export type MiniMapNodes = Pick< + MiniMapProps, + 'nodeColor' | 'nodeStrokeColor' | 'nodeClassName' | 'nodeBorderRadius' | 'nodeStrokeWidth' | 'nodeComponent' +> & { + onClick?: (event: MouseEvent, nodeId: string) => void; +}; + +export type MiniMapNodeProps = { id: string; x: number; y: number; @@ -40,4 +47,4 @@ export interface MiniMapNodeProps { strokeWidth: number; style?: CSSProperties; onClick?: (event: MouseEvent, id: string) => void; -} +}; From 864dc262c2d03be0a1f88ca8a738e315d79e340b Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 8 Jun 2023 12:27:06 +0200 Subject: [PATCH 0086/1093] refactor(react): simplify nodes selection --- .../react/src/components/NodesSelection/index.tsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/react/src/components/NodesSelection/index.tsx b/packages/react/src/components/NodesSelection/index.tsx index 3765a2cac..125425c1b 100644 --- a/packages/react/src/components/NodesSelection/index.tsx +++ b/packages/react/src/components/NodesSelection/index.tsx @@ -14,24 +14,27 @@ import { arrowKeyDiffs } from '../Nodes/wrapNode'; import useUpdateNodePositions from '../../hooks/useUpdateNodePositions'; import type { Node, ReactFlowState } from '../../types'; -export interface NodesSelectionProps { +export type NodesSelectionProps = { onSelectionContextMenu?: (event: MouseEvent, nodes: Node[]) => void; noPanClassName?: string; disableKeyboardA11y: boolean; -} +}; const selector = (s: ReactFlowState) => { const selectedNodes = s.getNodes().filter((n) => n.selected); + const { width, height, x, y } = getRectOfNodes(selectedNodes, s.nodeOrigin); + return { - ...getRectOfNodes(selectedNodes, s.nodeOrigin), - transformString: `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`, + width, + height, userSelectionActive: s.userSelectionActive, + transformString: `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]}) translate(${x}px,${y}px)`, }; }; function NodesSelection({ onSelectionContextMenu, noPanClassName, disableKeyboardA11y }: NodesSelectionProps) { const store = useStoreApi(); - const { width, height, x: left, y: top, transformString, userSelectionActive } = useStore(selector, shallow); + const { width, height, transformString, userSelectionActive } = useStore(selector, shallow); const updatePositions = useUpdateNodePositions(); const nodeRef = useRef(null); @@ -88,8 +91,6 @@ function NodesSelection({ onSelectionContextMenu, noPanClassName, disableKeyboar style={{ width, height, - top, - left, }} />
From 4707a07c8b441b58ae53df7e3340a179fd23fd02 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 8 Jun 2023 12:27:37 +0200 Subject: [PATCH 0087/1093] refactor(react): improve performance by simplify edge renderer --- .../react/src/components/Edges/wrapEdge.tsx | 63 +++++--- .../src/container/EdgeRenderer/index.tsx | 59 ++----- packages/react/src/hooks/useVisibleEdges.ts | 144 ++++++++++++++---- packages/react/src/types/edges.ts | 29 ++-- packages/system/src/xyhandle/XYHandle.ts | 2 +- 5 files changed, 172 insertions(+), 125 deletions(-) diff --git a/packages/react/src/components/Edges/wrapEdge.tsx b/packages/react/src/components/Edges/wrapEdge.tsx index 8172dfb65..3562b0f64 100644 --- a/packages/react/src/components/Edges/wrapEdge.tsx +++ b/packages/react/src/components/Edges/wrapEdge.tsx @@ -1,14 +1,14 @@ -import { memo, useState, useMemo, useRef, type ComponentType, type KeyboardEvent } from 'react'; +import { memo, useState, useMemo, useRef, type ComponentType, type KeyboardEvent, useEffect } from 'react'; import cc from 'classcat'; import { getMarkerId, elementSelectionKeys, XYHandle, type Connection } from '@xyflow/system'; -import { useStoreApi } from '../../hooks/useStore'; +import { useStoreApi, useStore } from '../../hooks/useStore'; import { ARIA_EDGE_DESC_KEY } from '../A11yDescriptions'; import { EdgeAnchor } from './EdgeAnchor'; import { getMouseHandler } from './utils'; import type { EdgeProps, WrapEdgeProps } from '../../types'; - -const alwaysValidConnection = () => true; +import { getEdgePosition } from '../../hooks/useVisibleEdges'; +import { shallow } from 'zustand/shallow'; export default (EdgeComponent: ComponentType) => { const EdgeWrapper = ({ @@ -29,12 +29,6 @@ export default (EdgeComponent: ComponentType) => { style, source, target, - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, isSelectable, hidden, sourceHandleId, @@ -60,11 +54,34 @@ export default (EdgeComponent: ComponentType) => { const [updateHover, setUpdateHover] = useState(false); const [updating, setUpdating] = useState(false); const store = useStoreApi(); + const edgePosition = useStore((state) => { + const sourceNode = state.nodeInternals.get(source); + const targetNode = state.nodeInternals.get(target); + + if (!sourceNode || !targetNode) { + return null; + } + + const pos = getEdgePosition({ + sourceNode, + targetNode, + sourceHandle: sourceHandleId || null, + targetHandle: targetHandleId || null, + connectionMode: state.connectionMode, + onError: state.onError, + }); + + return pos; + }, shallow); + + useEffect(() => { + // console.log(edgePosition); + }, [edgePosition]); const markerStartUrl = useMemo(() => `url(#${getMarkerId(markerStart, rfId)})`, [markerStart, rfId]); const markerEndUrl = useMemo(() => `url(#${getMarkerId(markerEnd, rfId)})`, [markerEnd, rfId]); - if (hidden) { + if (hidden || !edgePosition) { return null; } @@ -211,12 +228,12 @@ export default (EdgeComponent: ComponentType) => { labelBgBorderRadius={labelBgBorderRadius} data={data} style={style} - sourceX={sourceX} - sourceY={sourceY} - targetX={targetX} - targetY={targetY} - sourcePosition={sourcePosition} - targetPosition={targetPosition} + sourceX={edgePosition.sourceX} + sourceY={edgePosition.sourceY} + targetX={edgePosition.targetX} + targetY={edgePosition.targetY} + sourcePosition={edgePosition.sourcePosition} + targetPosition={edgePosition.targetPosition} sourceHandleId={sourceHandleId} targetHandleId={targetHandleId} markerStart={markerStartUrl} @@ -229,9 +246,9 @@ export default (EdgeComponent: ComponentType) => { <> {(isUpdatable === 'source' || isUpdatable === true) && ( ) => { )} {(isUpdatable === 'target' || isUpdatable === true) && ( ({ - nodesConnectable: s.nodesConnectable, + width: s.width, + height: s.height, edgesFocusable: s.edgesFocusable, edgesUpdatable: s.edgesUpdatable, elementsSelectable: s.elementsSelectable, - width: s.width, - height: s.height, connectionMode: s.connectionMode, - nodeInternals: s.nodeInternals, onError: s.onError, }); @@ -65,9 +62,8 @@ const EdgeRenderer = ({ onEdgeUpdateEnd, children, }: EdgeRendererProps) => { - const { edgesFocusable, edgesUpdatable, elementsSelectable, width, height, connectionMode, nodeInternals, onError } = - useStore(selector, shallow); - const edgeTree = useVisibleEdges(onlyRenderVisibleElements, nodeInternals, elevateEdgesOnSelect); + const { width, height, edgesFocusable, edgesUpdatable, elementsSelectable, onError } = useStore(selector, shallow); + const edgeTree = useVisibleEdges(onlyRenderVisibleElements, elevateEdgesOnSelect); if (!width) { return null; @@ -85,14 +81,7 @@ const EdgeRenderer = ({ > {isMaxLevel && } - {edges.map((edge: Edge) => { - const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(nodeInternals.get(edge.source)); - const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(nodeInternals.get(edge.target)); - - if (!sourceIsValid || !targetIsValid) { - return null; - } - + {edges.map((edge) => { let edgeType = edge.type || 'default'; if (!edgeTypes[edgeType]) { @@ -100,16 +89,7 @@ const EdgeRenderer = ({ edgeType = 'default'; } - const EdgeComponent = edgeTypes[edgeType] || edgeTypes.default; - // when connection type is loose we can define all handles as sources and connect source -> source - const targetNodeHandles = - connectionMode === ConnectionMode.Strict - ? targetHandleBounds!.target - : (targetHandleBounds!.target ?? []).concat(targetHandleBounds!.source ?? []); - const sourceHandle = getHandle(sourceHandleBounds!.source!, edge.sourceHandle); - const targetHandle = getHandle(targetNodeHandles!, edge.targetHandle); - const sourcePosition = sourceHandle?.position || Position.Bottom; - const targetPosition = targetHandle?.position || Position.Top; + const EdgeComponent = edgeTypes[edgeType]; const isFocusable = !!(edge.focusable || (edgesFocusable && typeof edge.focusable === 'undefined')); const isUpdatable = typeof onEdgeUpdate !== 'undefined' && @@ -119,27 +99,12 @@ const EdgeRenderer = ({ (elementsSelectable && typeof edge.selectable === 'undefined') ); - if (!sourceHandle || !targetHandle) { - onError?.('008', errorMessages['error008'](sourceHandle, edge)); - - return null; - } - - const { sourceX, sourceY, targetX, targetY } = getEdgePositions( - sourceNodeRect, - sourceHandle, - sourcePosition, - targetNodeRect, - targetHandle, - targetPosition - ); - return ( >((tree, edge) => { @@ -51,42 +67,104 @@ function groupEdgesByZLevel(edges: Edge[], nodeInternals: NodeInternals, elevate return edgeTree; } -function useVisibleEdges(onlyRenderVisible: boolean, nodeInternals: NodeInternals, elevateEdgesOnSelect: boolean) { +type LayoutEdgeParams = { + sourceNode: BaseNode; + sourceHandle: string | null; + targetNode: BaseNode; + targetHandle: string | null; + connectionMode: ConnectionMode; + onError?: OnError; +}; + +export function getEdgePosition(params: LayoutEdgeParams): EdgePosition | null { + const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(params.sourceNode); + const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(params.targetNode); + + if (!sourceIsValid || !targetIsValid) { + return null; + } + + // when connection type is loose we can define all handles as sources and connect source -> source + const targetNodeHandles = + params.connectionMode === ConnectionMode.Strict + ? targetHandleBounds!.target + : (targetHandleBounds!.target ?? []).concat(targetHandleBounds!.source ?? []); + const sourceHandle = getHandle(sourceHandleBounds!.source!, params.sourceHandle); + const targetHandle = getHandle(targetNodeHandles!, params.targetHandle); + const sourcePosition = sourceHandle?.position || Position.Bottom; + const targetPosition = targetHandle?.position || Position.Top; + + if (!sourceHandle || !targetHandle) { + params.onError?.('008', errorMessages['error008'](sourceHandle, {} as Edge)); + + return null; + } + + const { sourceX, sourceY, targetX, targetY } = getEdgePositions( + sourceNodeRect, + sourceHandle, + sourcePosition, + targetNodeRect, + targetHandle, + targetPosition + ); + + return { + sourceX, + sourceY, + targetX, + targetY, + sourcePosition, + targetPosition, + }; +} + +function useVisibleEdges(onlyRenderVisible: boolean, elevateEdgesOnSelect: boolean): GroupedEdges[] { const edges = useStore( useCallback( (s: ReactFlowState) => { - if (!onlyRenderVisible) { - return s.edges; - } - - return s.edges.filter((e) => { - const sourceNode = nodeInternals.get(e.source); - const targetNode = nodeInternals.get(e.target); - - return ( - sourceNode?.width && - sourceNode?.height && - targetNode?.width && - targetNode?.height && - isEdgeVisible({ - sourcePos: sourceNode.positionAbsolute || { x: 0, y: 0 }, - targetPos: targetNode.positionAbsolute || { x: 0, y: 0 }, - sourceWidth: sourceNode.width, - sourceHeight: sourceNode.height, - targetWidth: targetNode.width, - targetHeight: targetNode.height, - width: s.width, - height: s.height, - transform: s.transform, + const visibleEdges = onlyRenderVisible + ? s.edges.filter((e) => { + const sourceNode = s.nodeInternals.get(e.source); + const targetNode = s.nodeInternals.get(e.target); + + return ( + sourceNode?.width && + sourceNode?.height && + targetNode?.width && + targetNode?.height && + isEdgeVisible({ + sourcePos: sourceNode.positionAbsolute || { x: 0, y: 0 }, + targetPos: targetNode.positionAbsolute || { x: 0, y: 0 }, + sourceWidth: sourceNode.width, + sourceHeight: sourceNode.height, + targetWidth: targetNode.width, + targetHeight: targetNode.height, + width: s.width, + height: s.height, + transform: s.transform, + }) + ); }) - ); - }); + : s.edges; + + return groupEdgesByZLevel(visibleEdges, s.nodeInternals, elevateEdgesOnSelect); }, - [onlyRenderVisible, nodeInternals] - ) + [onlyRenderVisible, elevateEdgesOnSelect] + ), + (groupA, groupB) => { + const unEqual = groupA.some( + (item, index) => + item.isMaxLevel !== groupB[index].isMaxLevel || + item.level !== groupB[index].level || + !shallow(item.edges, groupB[index].edges) + ); + + return !unEqual; + } ); - return groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect); + return edges; } export default useVisibleEdges; diff --git a/packages/react/src/types/edges.ts b/packages/react/src/types/edges.ts index b071f42cb..6f13d97c0 100644 --- a/packages/react/src/types/edges.ts +++ b/packages/react/src/types/edges.ts @@ -54,12 +54,6 @@ export type WrapEdgeProps = Omit, 'sourceHandle' | 'targetHandl onEdgeDoubleClick?: EdgeMouseHandler; sourceHandleId?: string | null; targetHandleId?: string | null; - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; - sourcePosition: Position; - targetPosition: Position; onEdgeUpdate?: OnEdgeUpdateFunc; onContextMenu?: EdgeMouseHandler; onMouseEnter?: EdgeMouseHandler; @@ -88,18 +82,8 @@ export type EdgeProps = Pick< Edge, 'id' | 'animated' | 'data' | 'style' | 'selected' | 'source' | 'target' > & - Pick< - WrapEdgeProps, - | 'sourceX' - | 'sourceY' - | 'targetX' - | 'targetY' - | 'sourcePosition' - | 'targetPosition' - | 'sourceHandleId' - | 'targetHandleId' - | 'interactionWidth' - > & + Pick & + EdgePosition & EdgeLabelOptions & { markerStart?: string; markerEnd?: string; @@ -140,3 +124,12 @@ export type ConnectionLineComponentProps = { }; export type ConnectionLineComponent = ComponentType; + +export type EdgePosition = { + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; + sourcePosition: Position; + targetPosition: Position; +}; diff --git a/packages/system/src/xyhandle/XYHandle.ts b/packages/system/src/xyhandle/XYHandle.ts index f459f3f01..16d6e99fa 100644 --- a/packages/system/src/xyhandle/XYHandle.ts +++ b/packages/system/src/xyhandle/XYHandle.ts @@ -90,7 +90,7 @@ function onPointerDown( getTransform, }: OnPointerDownParams ) { - // when react-flow is used inside a shadow root we can't use document + // when xyflow is used inside a shadow root we can't use document const doc = getHostForElement(event.target as HTMLElement); let autoPanId = 0; let closestHandle: ConnectionHandle | null; From c1e24990282171c1f9d0193fe4616ac06d99051b Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 8 Jun 2023 15:46:35 +0200 Subject: [PATCH 0088/1093] refactor(svelte/react): use edge layouting vanilla helpers --- .../vite-app/src/examples/Stress/index.tsx | 1 + .../react/src/components/Edges/wrapEdge.tsx | 12 +- .../react/src/container/EdgeRenderer/utils.ts | 113 +--------------- packages/react/src/hooks/useVisibleEdges.ts | 120 +---------------- packages/react/src/types/edges.ts | 10 +- .../components/EdgeWrapper/EdgeWrapper.svelte | 26 ++-- .../EdgeRenderer/EdgeRenderer.svelte | 23 +++- .../src/lib/container/EdgeRenderer/utils.ts | 58 -------- packages/svelte/src/lib/store/edge-tree.ts | 88 +++++++++++++ .../svelte/src/lib/store/edges-layouted.ts | 69 ---------- packages/svelte/src/lib/store/index.ts | 11 +- .../svelte/src/lib/store/initial-store.ts | 8 +- packages/svelte/src/lib/store/types.ts | 4 +- packages/svelte/src/lib/types/edges.ts | 46 +++---- .../svelte/src/routes/stress/+page.svelte | 4 +- .../svelte/src/routes/subflows/+page.svelte | 4 +- packages/system/src/constants.ts | 13 +- packages/system/src/types/edges.ts | 11 ++ packages/system/src/utils/edges/general.ts | 124 +++++++++++++++++- packages/system/src/utils/edges/index.ts | 1 + packages/system/src/utils/edges/positions.ts | 82 ++++++++++++ 21 files changed, 392 insertions(+), 436 deletions(-) delete mode 100644 packages/svelte/src/lib/container/EdgeRenderer/utils.ts create mode 100644 packages/svelte/src/lib/store/edge-tree.ts delete mode 100644 packages/svelte/src/lib/store/edges-layouted.ts create mode 100644 packages/system/src/utils/edges/positions.ts diff --git a/examples/vite-app/src/examples/Stress/index.tsx b/examples/vite-app/src/examples/Stress/index.tsx index 125c27646..ec1fd2fa0 100644 --- a/examples/vite-app/src/examples/Stress/index.tsx +++ b/examples/vite-app/src/examples/Stress/index.tsx @@ -74,6 +74,7 @@ const StressFlow = () => { onConnect={onConnect} onNodesChange={onNodesChange} onEdgesChange={onEdgeChange} + minZoom={0.2} > diff --git a/packages/react/src/components/Edges/wrapEdge.tsx b/packages/react/src/components/Edges/wrapEdge.tsx index 3562b0f64..ea66d9882 100644 --- a/packages/react/src/components/Edges/wrapEdge.tsx +++ b/packages/react/src/components/Edges/wrapEdge.tsx @@ -1,14 +1,13 @@ -import { memo, useState, useMemo, useRef, type ComponentType, type KeyboardEvent, useEffect } from 'react'; +import { memo, useState, useMemo, useRef, type ComponentType, type KeyboardEvent } from 'react'; import cc from 'classcat'; -import { getMarkerId, elementSelectionKeys, XYHandle, type Connection } from '@xyflow/system'; +import { shallow } from 'zustand/shallow'; +import { getMarkerId, elementSelectionKeys, XYHandle, type Connection, getEdgePosition } from '@xyflow/system'; import { useStoreApi, useStore } from '../../hooks/useStore'; import { ARIA_EDGE_DESC_KEY } from '../A11yDescriptions'; import { EdgeAnchor } from './EdgeAnchor'; import { getMouseHandler } from './utils'; import type { EdgeProps, WrapEdgeProps } from '../../types'; -import { getEdgePosition } from '../../hooks/useVisibleEdges'; -import { shallow } from 'zustand/shallow'; export default (EdgeComponent: ComponentType) => { const EdgeWrapper = ({ @@ -63,6 +62,7 @@ export default (EdgeComponent: ComponentType) => { } const pos = getEdgePosition({ + id, sourceNode, targetNode, sourceHandle: sourceHandleId || null, @@ -74,10 +74,6 @@ export default (EdgeComponent: ComponentType) => { return pos; }, shallow); - useEffect(() => { - // console.log(edgePosition); - }, [edgePosition]); - const markerStartUrl = useMemo(() => `url(#${getMarkerId(markerStart, rfId)})`, [markerStart, rfId]); const markerEndUrl = useMemo(() => `url(#${getMarkerId(markerEnd, rfId)})`, [markerEnd, rfId]); diff --git a/packages/react/src/container/EdgeRenderer/utils.ts b/packages/react/src/container/EdgeRenderer/utils.ts index 403e5f80b..0e8f39d3b 100644 --- a/packages/react/src/container/EdgeRenderer/utils.ts +++ b/packages/react/src/container/EdgeRenderer/utils.ts @@ -1,19 +1,8 @@ import type { ComponentType } from 'react'; -import { - internalsSymbol, - Position, - rectToBox, - getHandlePosition, - type HandleElement, - type NodeHandleBounds, - type Rect, - type Transform, - type XYPosition, -} from '@xyflow/system'; import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; import wrapEdge from '../../components/Edges/wrapEdge'; -import type { EdgeProps, EdgeTypes, EdgeTypesWrapped, Node } from '../../types'; +import type { EdgeProps, EdgeTypes, EdgeTypesWrapped } from '../../types'; export type CreateEdgeTypes = (edgeTypes: EdgeTypes) => EdgeTypesWrapped; @@ -40,103 +29,3 @@ export function createEdgeTypes(edgeTypes: EdgeTypes): EdgeTypesWrapped { ...specialTypes, }; } - -interface EdgePositions { - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; -} - -export const getEdgePositions = ( - sourceNodeRect: Rect, - sourceHandle: HandleElement, - sourcePosition: Position, - targetNodeRect: Rect, - targetHandle: HandleElement, - targetPosition: Position -): EdgePositions => { - const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle); - const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle); - - return { - sourceX: sourceHandlePos.x, - sourceY: sourceHandlePos.y, - targetX: targetHandlePos.x, - targetY: targetHandlePos.y, - }; -}; - -interface IsEdgeVisibleParams { - sourcePos: XYPosition; - targetPos: XYPosition; - sourceWidth: number; - sourceHeight: number; - targetWidth: number; - targetHeight: number; - width: number; - height: number; - transform: Transform; -} - -export function isEdgeVisible({ - sourcePos, - targetPos, - sourceWidth, - sourceHeight, - targetWidth, - targetHeight, - width, - height, - transform, -}: IsEdgeVisibleParams): boolean { - const edgeBox = { - x: Math.min(sourcePos.x, targetPos.x), - y: Math.min(sourcePos.y, targetPos.y), - x2: Math.max(sourcePos.x + sourceWidth, targetPos.x + targetWidth), - y2: Math.max(sourcePos.y + sourceHeight, targetPos.y + targetHeight), - }; - - if (edgeBox.x === edgeBox.x2) { - edgeBox.x2 += 1; - } - - if (edgeBox.y === edgeBox.y2) { - edgeBox.y2 += 1; - } - - const viewBox = rectToBox({ - x: (0 - transform[0]) / transform[2], - y: (0 - transform[1]) / transform[2], - width: width / transform[2], - height: height / transform[2], - }); - - const xOverlap = Math.max(0, Math.min(viewBox.x2, edgeBox.x2) - Math.max(viewBox.x, edgeBox.x)); - const yOverlap = Math.max(0, Math.min(viewBox.y2, edgeBox.y2) - Math.max(viewBox.y, edgeBox.y)); - const overlappingArea = Math.ceil(xOverlap * yOverlap); - - return overlappingArea > 0; -} - -export function getNodeData(node?: Node): [Rect, NodeHandleBounds | null, boolean] { - const handleBounds = node?.[internalsSymbol]?.handleBounds || null; - - const isValid = - handleBounds && - node?.width && - node?.height && - typeof node?.positionAbsolute?.x !== 'undefined' && - typeof node?.positionAbsolute?.y !== 'undefined'; - - return [ - { - x: node?.positionAbsolute?.x || 0, - y: node?.positionAbsolute?.y || 0, - width: node?.width || 0, - height: node?.height || 0, - }, - handleBounds, - !!isValid, - ]; -} diff --git a/packages/react/src/hooks/useVisibleEdges.ts b/packages/react/src/hooks/useVisibleEdges.ts index e59fd3376..10a387fb2 100644 --- a/packages/react/src/hooks/useVisibleEdges.ts +++ b/packages/react/src/hooks/useVisibleEdges.ts @@ -1,125 +1,11 @@ import { useCallback } from 'react'; -import { - BaseNode, - internalsSymbol, - isNumeric, - errorMessages, - ConnectionMode, - Position, - getHandle, - OnError, -} from '@xyflow/system'; +import { GroupedEdges, groupEdgesByZLevel, isEdgeVisible } from '@xyflow/system'; import { useStore } from '../hooks/useStore'; -import { getEdgePositions, getNodeData, isEdgeVisible } from '../container/EdgeRenderer/utils'; -import { type ReactFlowState, type NodeInternals, type Edge, EdgePosition } from '../types'; +import { Edge, type ReactFlowState } from '../types'; import { shallow } from 'zustand/shallow'; -const defaultEdgeTree = [{ level: 0, isMaxLevel: true, edges: [] }]; - -type GroupedEdges = { - edges: Edge[]; - level: number; - isMaxLevel: boolean; -}; - -function groupEdgesByZLevel(edges: Edge[], nodeInternals: NodeInternals, elevateEdgesOnSelect = false): GroupedEdges[] { - let maxLevel = -1; - - const levelLookup = edges.reduce>((tree, edge) => { - const hasZIndex = isNumeric(edge.zIndex); - let z = hasZIndex ? edge.zIndex! : 0; - - if (elevateEdgesOnSelect) { - z = hasZIndex - ? edge.zIndex! - : Math.max( - nodeInternals.get(edge.source)?.[internalsSymbol]?.z || 0, - nodeInternals.get(edge.target)?.[internalsSymbol]?.z || 0 - ); - } - - if (tree[z]) { - tree[z].push(edge); - } else { - tree[z] = [edge]; - } - - maxLevel = z > maxLevel ? z : maxLevel; - - return tree; - }, {}); - - const edgeTree = Object.entries(levelLookup).map(([key, edges]) => { - const level = +key; - - return { - edges, - level, - isMaxLevel: level === maxLevel, - }; - }); - - if (edgeTree.length === 0) { - return defaultEdgeTree; - } - - return edgeTree; -} - -type LayoutEdgeParams = { - sourceNode: BaseNode; - sourceHandle: string | null; - targetNode: BaseNode; - targetHandle: string | null; - connectionMode: ConnectionMode; - onError?: OnError; -}; - -export function getEdgePosition(params: LayoutEdgeParams): EdgePosition | null { - const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(params.sourceNode); - const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(params.targetNode); - - if (!sourceIsValid || !targetIsValid) { - return null; - } - - // when connection type is loose we can define all handles as sources and connect source -> source - const targetNodeHandles = - params.connectionMode === ConnectionMode.Strict - ? targetHandleBounds!.target - : (targetHandleBounds!.target ?? []).concat(targetHandleBounds!.source ?? []); - const sourceHandle = getHandle(sourceHandleBounds!.source!, params.sourceHandle); - const targetHandle = getHandle(targetNodeHandles!, params.targetHandle); - const sourcePosition = sourceHandle?.position || Position.Bottom; - const targetPosition = targetHandle?.position || Position.Top; - - if (!sourceHandle || !targetHandle) { - params.onError?.('008', errorMessages['error008'](sourceHandle, {} as Edge)); - - return null; - } - - const { sourceX, sourceY, targetX, targetY } = getEdgePositions( - sourceNodeRect, - sourceHandle, - sourcePosition, - targetNodeRect, - targetHandle, - targetPosition - ); - - return { - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - }; -} - -function useVisibleEdges(onlyRenderVisible: boolean, elevateEdgesOnSelect: boolean): GroupedEdges[] { +function useVisibleEdges(onlyRenderVisible: boolean, elevateEdgesOnSelect: boolean): GroupedEdges[] { const edges = useStore( useCallback( (s: ReactFlowState) => { diff --git a/packages/react/src/types/edges.ts b/packages/react/src/types/edges.ts index 6f13d97c0..e470b9189 100644 --- a/packages/react/src/types/edges.ts +++ b/packages/react/src/types/edges.ts @@ -12,6 +12,7 @@ import type { ConnectionLineType, HandleElement, ConnectionStatus, + EdgePosition, } from '@xyflow/system'; import { Node } from '.'; @@ -124,12 +125,3 @@ export type ConnectionLineComponentProps = { }; export type ConnectionLineComponent = ComponentType; - -export type EdgePosition = { - sourceX: number; - sourceY: number; - targetX: number; - targetY: number; - sourcePosition: Position; - targetPosition: Position; -}; diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 9ee06fca9..d1191a452 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -1,10 +1,10 @@ - - {#each $edgesLayouted as edge (edge.id)} - - {/each} +{#each $edgeTree as group (group.level)} + + {#if group.isMaxLevel} {/if} + + {#each group.edges as edge (edge.id)} + {@const edgeType = edge.type || 'default'} + {@const selectable = !!( + edge.selectable || + ($elementsSelectable && typeof edge.selectable === 'undefined') + )} - - + + {/each} + + +{/each} \ No newline at end of file + diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 3ab141035..442178b6d 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -27,6 +27,8 @@ export let positionOrigin: NodeWrapperProps['positionOrigin'] = undefined; export let sourcePosition: NodeWrapperProps['sourcePosition'] = undefined; export let targetPosition: NodeWrapperProps['targetPosition'] = undefined; + export let zIndex: NodeWrapperProps['zIndex']; + export let dragHandle: NodeWrapperProps['dragHandle'] = undefined; let className: string = ''; export { className as class }; @@ -41,8 +43,7 @@ type = 'default'; } - const nodeComponent: typeof SvelteComponentTyped> = - $nodeTypes[type!] || DefaultNode; + const nodeComponent: typeof SvelteComponentTyped = $nodeTypes[type!] || DefaultNode; const selectNodesOnDrag = false; const dispatch = createEventDispatcher(); @@ -105,6 +106,11 @@ {selected} {sourcePosition} {targetPosition} + {type} + {zIndex} + {dragging} + {dragHandle} + isConnectable={connectable} xPos={positionAbsolute?.x ?? 0} yPos={positionAbsolute?.y ?? 0} on:connect:start diff --git a/packages/svelte/src/lib/components/NodeWrapper/types.ts b/packages/svelte/src/lib/components/NodeWrapper/types.ts index 70281719e..6bb3759e9 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/types.ts +++ b/packages/svelte/src/lib/components/NodeWrapper/types.ts @@ -18,9 +18,11 @@ export type NodeWrapperProps = Pick< | 'height' | 'sourcePosition' | 'targetPosition' + | 'dragHandle' > & { positionOrigin?: XYPosition; 'on:nodeclick'?: (event: MouseEvent) => void; resizeObserver?: ResizeObserver | null; isParent?: boolean; + zIndex: number; }; diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index 685e163f8..21a7d7bf2 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -63,6 +63,8 @@ sourcePosition={node.sourcePosition} targetPosition={node.targetPosition} dragging={node.dragging} + zIndex={node[internalsSymbol]?.z ?? 0} + dragHandle={node.dragHandle} {resizeObserver} on:node:click on:node:mouseenter diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 9f5cc0f4d..b6833b139 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -69,7 +69,3 @@ export type SvelteFlowProps = DOMAttributes & { 'on:pane:click'?: CustomEvent; 'on:pane:contextmenu'?: CustomEvent; }; - -export type SvelteFlowSlots = { - default: { slotValue: string }; -}; diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index df6a59e10..ff5f385f1 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -1,22 +1,81 @@ -import { SvelteFlow } from '$lib/container/SvelteFlow'; +// main component +export { SvelteFlow } from '$lib/container/SvelteFlow'; +export * from '$lib/container/SvelteFlow/types'; -export * from '$lib/container/SvelteFlow'; +// components export * from '$lib/container/Panel'; - export * from '$lib/components/SvelteFlowProvider'; export * from '$lib/components/EdgeLabelRenderer'; export * from '$lib/components/BaseEdge'; export * from '$lib/components/Handle'; +// plugins export * from '$lib/plugins/Controls'; export * from '$lib/plugins/Background'; export * from '$lib/plugins/Minimap'; -export * from '$lib/types'; +// utils export * from '$lib/utils'; - export * from '$lib/hooks/useSvelteFlow'; -export * from '@xyflow/system'; +// types +export type { Edge, EdgeProps, EdgeTypes, DefaultEdgeOptions } from '$lib/types/edges'; +export type { HandleComponentProps, FitViewOptions } from '$lib/types/general'; +export type { Node, NodeTypes, DefaultNodeOptions } from '$lib/types/nodes'; + +// system types +export { + type SmoothStepPathOptions, + type BezierPathOptions, + ConnectionLineType, + type EdgeMarker, + type EdgeMarkerType, + MarkerType, + type OnMove, + type OnMoveStart, + type OnMoveEnd, + type Connection, + type ConnectionStatus, + ConnectionMode, + type OnConnectStartParams, + type OnConnectStart, + type OnConnect, + type OnConnectEnd, + type IsValidConnection, + type Viewport, + type SnapGrid, + PanOnScrollMode, + type ViewportHelperFunctionOptions, + type SetCenterOptions, + type FitBoundsOptions, + type PanelPosition, + type ProOptions, + SelectionMode, + type SelectionRect, + type OnError, + type NodeOrigin, + type OnNodeDrag, + type OnSelectionDrag, + Position, + type XYPosition, + type XYZPosition, + type Dimensions, + type Rect, + type Box, + type Transform, + type CoordinateExtent +} from '@xyflow/system'; -export default SvelteFlow; +// system utils +export { + type GetBezierPathParams, + getBezierEdgeCenter, + getBezierPath, + getEdgeCenter, + type GetSmoothStepPathParams, + getSmoothStepPath, + type GetStraightPathParams, + getStraightPath, + getTransformForBounds, + getRectOfNodes +} from '@xyflow/system'; diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte index d5f468bc2..384c04206 100644 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ b/packages/svelte/src/routes/customnode/+page.svelte @@ -1,7 +1,8 @@ - + diff --git a/packages/system/src/types/general.ts b/packages/system/src/types/general.ts index 379ca7e92..ba1c6e3c3 100644 --- a/packages/system/src/types/general.ts +++ b/packages/system/src/types/general.ts @@ -21,12 +21,12 @@ export type SetViewport = (viewport: Viewport, options?: ViewportHelperFunctionO export type SetCenter = (x: number, y: number, options?: SetCenterOptions) => void; export type FitBounds = (bounds: Rect, options?: FitBoundsOptions) => void; -export interface Connection { +export type Connection = { source: string | null; target: string | null; sourceHandle: string | null; targetHandle: string | null; -} +}; export type ConnectionStatus = 'valid' | 'invalid'; From f35ddc485cb44b69fe6a91bdca4d48b7c9172e5c Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 15 Jun 2023 15:16:33 +0200 Subject: [PATCH 0105/1093] chore(svelte): cleanup examples --- packages/react/src/index.ts | 1 + packages/svelte/package.json | 273 +----------------- .../lib/components/nodes/DefaultNode.svelte | 4 - .../src/lib/components/nodes/InputNode.svelte | 5 - .../lib/components/nodes/OutputNode.svelte | 5 - packages/svelte/src/lib/index.ts | 1 + .../customnode/CustomNode/Custom.svelte | 7 +- .../routes/overview/CustomNode/Custom.svelte | 4 +- .../subflows/DebugNode/DebugNode.svelte | 5 +- 9 files changed, 14 insertions(+), 291 deletions(-) diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index fc550dc5c..ecb717915 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -61,6 +61,7 @@ export { SelectionMode, type SelectionRect, type OnError, + type NodeProps, type NodeOrigin, type OnNodeDrag, type OnSelectionDrag, diff --git a/packages/svelte/package.json b/packages/svelte/package.json index a0fd19b58..9611f11e6 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -17,7 +17,8 @@ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "lint": "prettier --plugin-search-dir . --check . && eslint .", - "format": "prettier --plugin-search-dir . --write ." + "format": "prettier --plugin-search-dir . --write .", + "typecheck": "pnpm check" }, "type": "module", "module": "index.ts", @@ -57,273 +58,5 @@ }, "files": [ "dist" - ], - "typesVersions": { - ">4.0": { - "actions/drag": [ - "./dist/actions/drag/index.d.ts" - ], - "actions/drag/utils": [ - "./dist/actions/drag/utils.d.ts" - ], - "actions/portal": [ - "./dist/actions/portal/index.d.ts" - ], - "actions/zoom": [ - "./dist/actions/zoom/index.d.ts" - ], - "components/Attribution/Attribution.svelte": [ - "./dist/components/Attribution/Attribution.svelte.d.ts" - ], - "components/Attribution": [ - "./dist/components/Attribution/index.d.ts" - ], - "components/Attribution/types": [ - "./dist/components/Attribution/types.d.ts" - ], - "components/BaseEdge/BaseEdge.svelte": [ - "./dist/components/BaseEdge/BaseEdge.svelte.d.ts" - ], - "components/BaseEdge": [ - "./dist/components/BaseEdge/index.d.ts" - ], - "components/BaseEdge/types": [ - "./dist/components/BaseEdge/types.d.ts" - ], - "components/ConnectionLine/ConnectionLine.svelte": [ - "./dist/components/ConnectionLine/ConnectionLine.svelte.d.ts" - ], - "components/ConnectionLine": [ - "./dist/components/ConnectionLine/index.d.ts" - ], - "components/EdgeLabelRenderer/EdgeLabelRenderer.svelte": [ - "./dist/components/EdgeLabelRenderer/EdgeLabelRenderer.svelte.d.ts" - ], - "components/EdgeLabelRenderer": [ - "./dist/components/EdgeLabelRenderer/index.d.ts" - ], - "components/EdgeWrapper/EdgeWrapper.svelte": [ - "./dist/components/EdgeWrapper/EdgeWrapper.svelte.d.ts" - ], - "components/EdgeWrapper": [ - "./dist/components/EdgeWrapper/index.d.ts" - ], - "components/Handle/Handle.svelte": [ - "./dist/components/Handle/Handle.svelte.d.ts" - ], - "components/Handle/handler": [ - "./dist/components/Handle/handler.d.ts" - ], - "components/Handle": [ - "./dist/components/Handle/index.d.ts" - ], - "components/Handle/utils": [ - "./dist/components/Handle/utils.d.ts" - ], - "components/KeyHandler/KeyHandler.svelte": [ - "./dist/components/KeyHandler/KeyHandler.svelte.d.ts" - ], - "components/KeyHandler": [ - "./dist/components/KeyHandler/index.d.ts" - ], - "components/KeyHandler/types": [ - "./dist/components/KeyHandler/types.d.ts" - ], - "components/NodeSelection/NodeSelection.svelte": [ - "./dist/components/NodeSelection/NodeSelection.svelte.d.ts" - ], - "components/NodeSelection": [ - "./dist/components/NodeSelection/index.d.ts" - ], - "components/NodeWrapper/NodeWrapper.svelte": [ - "./dist/components/NodeWrapper/NodeWrapper.svelte.d.ts" - ], - "components/NodeWrapper": [ - "./dist/components/NodeWrapper/index.d.ts" - ], - "components/NodeWrapper/types": [ - "./dist/components/NodeWrapper/types.d.ts" - ], - "components/Selection/Selection.svelte": [ - "./dist/components/Selection/Selection.svelte.d.ts" - ], - "components/Selection": [ - "./dist/components/Selection/index.d.ts" - ], - "components/SvelteFlowProvider/SvelteFlowProvider.svelte": [ - "./dist/components/SvelteFlowProvider/SvelteFlowProvider.svelte.d.ts" - ], - "components/SvelteFlowProvider": [ - "./dist/components/SvelteFlowProvider/index.d.ts" - ], - "components/SvelteFlowProvider/types": [ - "./dist/components/SvelteFlowProvider/types.d.ts" - ], - "components/UserSelection/UserSelection.svelte": [ - "./dist/components/UserSelection/UserSelection.svelte.d.ts" - ], - "components/UserSelection": [ - "./dist/components/UserSelection/index.d.ts" - ], - "components/edges/BezierEdge.svelte": [ - "./dist/components/edges/BezierEdge.svelte.d.ts" - ], - "components/edges/SmoothStepEdge.svelte": [ - "./dist/components/edges/SmoothStepEdge.svelte.d.ts" - ], - "components/edges/StraightEdge.svelte": [ - "./dist/components/edges/StraightEdge.svelte.d.ts" - ], - "components/nodes/DefaultNode.svelte": [ - "./dist/components/nodes/DefaultNode.svelte.d.ts" - ], - "components/nodes/InputNode.svelte": [ - "./dist/components/nodes/InputNode.svelte.d.ts" - ], - "components/nodes/OutputNode.svelte": [ - "./dist/components/nodes/OutputNode.svelte.d.ts" - ], - "container/EdgeRenderer/EdgeRenderer.svelte": [ - "./dist/container/EdgeRenderer/EdgeRenderer.svelte.d.ts" - ], - "container/EdgeRenderer": [ - "./dist/container/EdgeRenderer/index.d.ts" - ], - "container/EdgeRenderer/utils": [ - "./dist/container/EdgeRenderer/utils.d.ts" - ], - "container/NodeRenderer/NodeRenderer.svelte": [ - "./dist/container/NodeRenderer/NodeRenderer.svelte.d.ts" - ], - "container/NodeRenderer": [ - "./dist/container/NodeRenderer/index.d.ts" - ], - "container/Pane/Pane.svelte": [ - "./dist/container/Pane/Pane.svelte.d.ts" - ], - "container/Pane": [ - "./dist/container/Pane/index.d.ts" - ], - "container/Panel/Panel.svelte": [ - "./dist/container/Panel/Panel.svelte.d.ts" - ], - "container/Panel": [ - "./dist/container/Panel/index.d.ts" - ], - "container/Panel/types": [ - "./dist/container/Panel/types.d.ts" - ], - "container/SvelteFlow/SvelteFlow.svelte": [ - "./dist/container/SvelteFlow/SvelteFlow.svelte.d.ts" - ], - "container/SvelteFlow": [ - "./dist/container/SvelteFlow/index.d.ts" - ], - "container/SvelteFlow/types": [ - "./dist/container/SvelteFlow/types.d.ts" - ], - "container/Viewport/Viewport.svelte": [ - "./dist/container/Viewport/Viewport.svelte.d.ts" - ], - "container/Viewport": [ - "./dist/container/Viewport/index.d.ts" - ], - "container/Zoom/Zoom.svelte": [ - "./dist/container/Zoom/Zoom.svelte.d.ts" - ], - "container/Zoom": [ - "./dist/container/Zoom/index.d.ts" - ], - "hooks/useSvelteFlow": [ - "./dist/hooks/useSvelteFlow.d.ts" - ], - "index": [ - "./dist/index.d.ts" - ], - "plugins/Background/Background.svelte": [ - "./dist/plugins/Background/Background.svelte.d.ts" - ], - "plugins/Background/DotPattern.svelte": [ - "./dist/plugins/Background/DotPattern.svelte.d.ts" - ], - "plugins/Background/LinePattern.svelte": [ - "./dist/plugins/Background/LinePattern.svelte.d.ts" - ], - "plugins/Background": [ - "./dist/plugins/Background/index.d.ts" - ], - "plugins/Background/types": [ - "./dist/plugins/Background/types.d.ts" - ], - "plugins/Controls/ControlButton.svelte": [ - "./dist/plugins/Controls/ControlButton.svelte.d.ts" - ], - "plugins/Controls/Controls.svelte": [ - "./dist/plugins/Controls/Controls.svelte.d.ts" - ], - "plugins/Controls/Icons/Fit.svelte": [ - "./dist/plugins/Controls/Icons/Fit.svelte.d.ts" - ], - "plugins/Controls/Icons/Lock.svelte": [ - "./dist/plugins/Controls/Icons/Lock.svelte.d.ts" - ], - "plugins/Controls/Icons/Minus.svelte": [ - "./dist/plugins/Controls/Icons/Minus.svelte.d.ts" - ], - "plugins/Controls/Icons/Plus.svelte": [ - "./dist/plugins/Controls/Icons/Plus.svelte.d.ts" - ], - "plugins/Controls/Icons/Unlock.svelte": [ - "./dist/plugins/Controls/Icons/Unlock.svelte.d.ts" - ], - "plugins/Controls": [ - "./dist/plugins/Controls/index.d.ts" - ], - "plugins/Controls/types": [ - "./dist/plugins/Controls/types.d.ts" - ], - "plugins/Minimap/Minimap.svelte": [ - "./dist/plugins/Minimap/Minimap.svelte.d.ts" - ], - "plugins/Minimap/MinimapNode.svelte": [ - "./dist/plugins/Minimap/MinimapNode.svelte.d.ts" - ], - "plugins/Minimap": [ - "./dist/plugins/Minimap/index.d.ts" - ], - "plugins/Minimap/types": [ - "./dist/plugins/Minimap/types.d.ts" - ], - "store/connection-path": [ - "./dist/store/connection-path.d.ts" - ], - "store/edges-layouted": [ - "./dist/store/edges-layouted.d.ts" - ], - "store": [ - "./dist/store/index.d.ts" - ], - "store/initial-store": [ - "./dist/store/initial-store.d.ts" - ], - "store/types": [ - "./dist/store/types.d.ts" - ], - "types/edges": [ - "./dist/types/edges.d.ts" - ], - "types/general": [ - "./dist/types/general.d.ts" - ], - "types": [ - "./dist/types/index.d.ts" - ], - "types/nodes": [ - "./dist/types/nodes.d.ts" - ], - "utils": [ - "./dist/utils/index.d.ts" - ] - } - } + ] } diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte index 09421958d..4ce51198c 100644 --- a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -5,13 +5,9 @@ interface $$Props extends NodeProps<{ label: string }> {} - export let id: $$Props['id']; export let data: $$Props['data'] = { label: 'Node' }; export let targetPosition: $$Props['targetPosition'] = Position.Top; export let sourcePosition: $$Props['sourcePosition'] = Position.Bottom; - export let xPos: $$Props['xPos']; - export let yPos: $$Props['yPos']; - export let selected: $$Props['selected'] = false; diff --git a/packages/svelte/src/lib/components/nodes/InputNode.svelte b/packages/svelte/src/lib/components/nodes/InputNode.svelte index 87ba1d944..c28c5c9e0 100644 --- a/packages/svelte/src/lib/components/nodes/InputNode.svelte +++ b/packages/svelte/src/lib/components/nodes/InputNode.svelte @@ -5,13 +5,8 @@ interface $$Props extends NodeProps<{ label: string }> {} - export let id: $$Props['id']; export let data: $$Props['data'] = { label: 'Node' }; - export let targetPosition: $$Props['targetPosition'] = Position.Top; export let sourcePosition: $$Props['sourcePosition'] = Position.Bottom; - export let xPos: $$Props['xPos']; - export let yPos: $$Props['yPos']; - export let selected: $$Props['selected'] = false; {data?.label} diff --git a/packages/svelte/src/lib/components/nodes/OutputNode.svelte b/packages/svelte/src/lib/components/nodes/OutputNode.svelte index b5c775f46..7b9b071b3 100644 --- a/packages/svelte/src/lib/components/nodes/OutputNode.svelte +++ b/packages/svelte/src/lib/components/nodes/OutputNode.svelte @@ -5,13 +5,8 @@ interface $$Props extends NodeProps<{ label: string }> {} - export let id: $$Props['id']; export let data: $$Props['data'] = { label: 'Node' }; export let targetPosition: $$Props['targetPosition'] = Position.Top; - export let sourcePosition: $$Props['sourcePosition'] = Position.Bottom; - export let xPos: $$Props['xPos']; - export let yPos: $$Props['yPos']; - export let selected: $$Props['selected'] = false; {data?.label} diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index ff5f385f1..d6861045c 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -53,6 +53,7 @@ export { SelectionMode, type SelectionRect, type OnError, + type NodeProps, type NodeOrigin, type OnNodeDrag, type OnSelectionDrag, diff --git a/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte b/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte index fb835834a..3158de2af 100644 --- a/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte +++ b/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte @@ -1,10 +1,9 @@ diff --git a/packages/svelte/src/routes/overview/CustomNode/Custom.svelte b/packages/svelte/src/routes/overview/CustomNode/Custom.svelte index c23714fe9..e636cdfe6 100644 --- a/packages/svelte/src/routes/overview/CustomNode/Custom.svelte +++ b/packages/svelte/src/routes/overview/CustomNode/Custom.svelte @@ -1,5 +1,7 @@ diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 442178b6d..47168597a 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -69,7 +69,7 @@ addSelectedNodes([id]); } - dispatchEvent('node:click'); + dispatchEvent('nodeclick'); } @@ -95,9 +95,9 @@ style:transform="translate({positionOrigin?.x ?? 0}px, {positionOrigin?.y ?? 0}px)" {style} on:click={onSelectNodeHandler} - on:mouseenter={() => dispatchEvent('node:mouseenter')} - on:mouseleave={() => dispatchEvent('node:mouseleave')} - on:mousemove={() => dispatchEvent('node:mousemove')} + on:mouseenter={() => dispatchEvent('nodemouseenter')} + on:mouseleave={() => dispatchEvent('nodemouseleave')} + on:mousemove={() => dispatchEvent('nodemousemove')} >
diff --git a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte index 4ce51198c..6d8e06dbf 100644 --- a/packages/svelte/src/lib/components/nodes/DefaultNode.svelte +++ b/packages/svelte/src/lib/components/nodes/DefaultNode.svelte @@ -10,6 +10,6 @@ export let sourcePosition: $$Props['sourcePosition'] = Position.Bottom; - + {data?.label} - + diff --git a/packages/svelte/src/lib/components/nodes/InputNode.svelte b/packages/svelte/src/lib/components/nodes/InputNode.svelte index c28c5c9e0..4eb41ddd3 100644 --- a/packages/svelte/src/lib/components/nodes/InputNode.svelte +++ b/packages/svelte/src/lib/components/nodes/InputNode.svelte @@ -10,4 +10,4 @@ {data?.label} - + diff --git a/packages/svelte/src/lib/components/nodes/OutputNode.svelte b/packages/svelte/src/lib/components/nodes/OutputNode.svelte index 7b9b071b3..83b3745c1 100644 --- a/packages/svelte/src/lib/components/nodes/OutputNode.svelte +++ b/packages/svelte/src/lib/components/nodes/OutputNode.svelte @@ -10,4 +10,4 @@ {data?.label} - + diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index f8a23e18e..9563cf532 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -17,7 +17,7 @@ ($elementsSelectable && typeof edge.selectable === 'undefined') )} - + {/each} diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index 21a7d7bf2..43db7eeb1 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -66,13 +66,13 @@ zIndex={node[internalsSymbol]?.z ?? 0} dragHandle={node.dragHandle} {resizeObserver} - on:node:click - on:node:mouseenter - on:node:mousemove - on:node:mouseleave - on:connect:start + on:nodeclick + on:nodemouseenter + on:nodemousemove + on:nodemouseleave + on:connectstart on:connect - on:connect:end + on:connectend /> {/each}
diff --git a/packages/svelte/src/lib/container/Pane/Pane.svelte b/packages/svelte/src/lib/container/Pane/Pane.svelte index 46baa1824..c3ea2931c 100644 --- a/packages/svelte/src/lib/container/Pane/Pane.svelte +++ b/packages/svelte/src/lib/container/Pane/Pane.svelte @@ -63,7 +63,7 @@ $: hasActiveSelection = $elementsSelectable && (isSelecting || $selectionRectMode === 'user'); function onClick(event: MouseEvent) { - dispatch('pane:click', event); + dispatch('paneclick', event); unselectNodesAndEdges(); selectionRectMode.set(null); @@ -164,7 +164,7 @@ return; } - dispatch('pane:contextmenu', event); + dispatch('panecontextmenu', event); }; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 592c3a613..adb6359cf 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -139,19 +139,19 @@ {panOnScroll} {panOnDrag} > - + - +
diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index b6833b139..ef6571811 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -58,14 +58,14 @@ export type SvelteFlowProps = DOMAttributes & { onMove?: OnMove; onMoveEnd?: OnMoveEnd; - 'on:node:click'?: CustomEvent; - 'on:node:mouseenter'?: CustomEvent; - 'on:node:mousemove'?: CustomEvent; - 'on:node:mouseleave'?: CustomEvent; - 'on:edge:click'?: CustomEvent; - 'on:connect:start'?: CustomEvent; + 'on:nodeclick'?: CustomEvent; + 'on:nodemouseenter'?: CustomEvent; + 'on:nodemousemove'?: CustomEvent; + 'on:nodemouseleave'?: CustomEvent; + 'on:edgeclick'?: CustomEvent; + 'on:connectstart'?: CustomEvent; 'on:connect'?: CustomEvent; - 'on:connect:end'?: CustomEvent; - 'on:pane:click'?: CustomEvent; - 'on:pane:contextmenu'?: CustomEvent; + 'on:connectend'?: CustomEvent; + 'on:paneclick'?: CustomEvent; + 'on:panecontextmenu'?: CustomEvent; }; diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index 384f18219..9285f50f0 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -127,15 +127,15 @@ selectionMode={SelectionMode.Full} initialViewport={{ x: 100, y: 100, zoom: 2 }} snapGrid={[25, 25]} - on:node:click={(event) => console.log('on node click', event)} - on:node:mouseenter={(event) => console.log('on node enter', event)} - on:node:mouseleave={(event) => console.log('on node leave', event)} - on:edge:click={(event) => console.log('edge click', event)} - on:connect:start={(event) => console.log('on connect start', event)} + on:nodeclick={(event) => console.log('on node click', event)} + on:nodemouseenter={(event) => console.log('on node enter', event)} + on:nodemouseleave={(event) => console.log('on node leave', event)} + on:edgeclick={(event) => console.log('edge click', event)} + on:connectstart={(event) => console.log('on connect start', event)} on:connect={(event) => console.log('on connect', event)} - on:connect:end={(event) => console.log('on connect end', event)} - on:pane:click={(event) => console.log('on pane click', event)} - on:pane:contextmenu={(event) => { + on:connectend={(event) => console.log('on connect end', event)} + on:paneclick={(event) => console.log('on pane click', event)} + on:panecontextmenu={(event) => { event.preventDefault(); console.log('on pane contextmenu', event); }} From 5324e510609824bce18ea00a73ddd35f74ecb46d Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 28 Jun 2023 16:33:00 +0200 Subject: [PATCH 0117/1093] chore(provider): dont use store create helper --- packages/svelte/package.json | 2 +- .../SvelteFlowProvider/SvelteFlowProvider.svelte | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index cac16e32b..d68ea9759 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.7", + "version": "0.0.8", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", diff --git a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte index 2fdb25c6d..aacc69c47 100644 --- a/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte +++ b/packages/svelte/src/lib/components/SvelteFlowProvider/SvelteFlowProvider.svelte @@ -1,9 +1,13 @@ - + & EdgePosition & { sourceHandleId?: string | null; From 193f49cf878fe8ed73c35ffe8fc1b6a1934635b1 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 14 Aug 2023 16:31:37 +0200 Subject: [PATCH 0130/1093] refactor(on-error): use onError for node and edge type creation --- .../react/src/container/EdgeRenderer/index.tsx | 4 ++-- .../react/src/container/GraphView/index.tsx | 16 +++++++++++----- .../{ReactFlow => GraphView}/utils.ts | 6 ++++-- .../react/src/container/NodeRenderer/index.tsx | 7 ++++--- .../react/src/container/ReactFlow/index.tsx | 18 +++--------------- 5 files changed, 24 insertions(+), 27 deletions(-) rename packages/react/src/container/{ReactFlow => GraphView}/utils.ts (83%) diff --git a/packages/react/src/container/EdgeRenderer/index.tsx b/packages/react/src/container/EdgeRenderer/index.tsx index f23a1b67c..858d7a5c8 100644 --- a/packages/react/src/container/EdgeRenderer/index.tsx +++ b/packages/react/src/container/EdgeRenderer/index.tsx @@ -7,11 +7,10 @@ import { useStore } from '../../hooks/useStore'; import useVisibleEdges from '../../hooks/useVisibleEdges'; import MarkerDefinitions from './MarkerDefinitions'; import { GraphViewProps } from '../GraphView'; -import type { ReactFlowState } from '../../types'; +import type { EdgeTypesWrapped, ReactFlowState } from '../../types'; type EdgeRendererProps = Pick< GraphViewProps, - | 'edgeTypes' | 'onEdgeClick' | 'onEdgeDoubleClick' | 'defaultMarkerColor' @@ -29,6 +28,7 @@ type EdgeRendererProps = Pick< | 'rfId' | 'disableKeyboardA11y' > & { + edgeTypes: EdgeTypesWrapped; elevateEdgesOnSelect: boolean; children: ReactNode; }; diff --git a/packages/react/src/container/GraphView/index.tsx b/packages/react/src/container/GraphView/index.tsx index 47e94b3b8..214602750 100644 --- a/packages/react/src/container/GraphView/index.tsx +++ b/packages/react/src/container/GraphView/index.tsx @@ -6,7 +6,10 @@ import EdgeRenderer from '../EdgeRenderer'; import ViewportWrapper from '../Viewport'; import useOnInitHandler from '../../hooks/useOnInitHandler'; import ConnectionLine from '../../components/ConnectionLine'; -import type { EdgeTypesWrapped, NodeTypesWrapped, ReactFlowProps } from '../../types'; +import type { NodeTypesWrapped, ReactFlowProps } from '../../types'; +import { createNodeTypes } from '../NodeRenderer/utils'; +import { createEdgeTypes } from '../EdgeRenderer/utils'; +import { useNodeOrEdgeTypes } from './utils'; export type GraphViewProps = Omit< ReactFlowProps, @@ -15,6 +18,8 @@ export type GraphViewProps = Omit< Required< Pick< ReactFlowProps, + | 'nodeTypes' + | 'edgeTypes' | 'selectionKeyCode' | 'deleteKeyCode' | 'multiSelectionKeyCode' @@ -33,8 +38,6 @@ export type GraphViewProps = Omit< | 'nodeOrigin' > > & { - nodeTypes: NodeTypesWrapped; - edgeTypes: EdgeTypesWrapped; rfId: string; }; @@ -102,6 +105,9 @@ const GraphView = ({ nodeExtent, rfId, }: GraphViewProps) => { + const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes); + const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes); + useOnInitHandler(onInit); return ( @@ -142,7 +148,7 @@ const GraphView = ({ > (null); + const store = useStoreApi(); const typesParsed = useMemo(() => { if (process.env.NODE_ENV === 'development') { const typeKeys = Object.keys(nodeOrEdgeTypes); if (shallow(typesKeysRef.current, typeKeys)) { - devWarn('002', errorMessages['error002']()); + store.getState().onError?.('002', errorMessages['error002']()); } typesKeysRef.current = typeKeys; diff --git a/packages/react/src/container/NodeRenderer/index.tsx b/packages/react/src/container/NodeRenderer/index.tsx index 66b9de29a..f09f65639 100644 --- a/packages/react/src/container/NodeRenderer/index.tsx +++ b/packages/react/src/container/NodeRenderer/index.tsx @@ -6,11 +6,10 @@ import useVisibleNodes from '../../hooks/useVisibleNodes'; import { useStore } from '../../hooks/useStore'; import { containerStyle } from '../../styles'; import { GraphViewProps } from '../GraphView'; -import type { ReactFlowState, WrapNodeProps } from '../../types'; +import type { NodeTypesWrapped, ReactFlowState, WrapNodeProps } from '../../types'; type NodeRendererProps = Pick< GraphViewProps, - | 'nodeTypes' | 'onNodeClick' | 'onNodeDoubleClick' | 'onNodeMouseEnter' @@ -24,7 +23,9 @@ type NodeRendererProps = Pick< | 'disableKeyboardA11y' | 'nodeOrigin' | 'nodeExtent' ->; +> & { + nodeTypes: NodeTypesWrapped; +}; const selector = (s: ReactFlowState) => ({ nodesDraggable: s.nodesDraggable, diff --git a/packages/react/src/container/ReactFlow/index.tsx b/packages/react/src/container/ReactFlow/index.tsx index 4eb910a1f..5bc47f044 100644 --- a/packages/react/src/container/ReactFlow/index.tsx +++ b/packages/react/src/container/ReactFlow/index.tsx @@ -20,19 +20,9 @@ import GroupNode from '../../components/Nodes/GroupNode'; import SelectionListener from '../../components/SelectionListener'; import StoreUpdater from '../../components/StoreUpdater'; import A11yDescriptions from '../../components/A11yDescriptions'; -import { createEdgeTypes } from '../EdgeRenderer/utils'; -import { createNodeTypes } from '../NodeRenderer/utils'; import GraphView from '../GraphView'; import Wrapper from './Wrapper'; -import { useNodeOrEdgeTypes } from './utils'; -import type { - EdgeTypes, - EdgeTypesWrapped, - NodeTypes, - NodeTypesWrapped, - ReactFlowProps, - ReactFlowRefType, -} from '../../types'; +import type { EdgeTypes, NodeTypes, ReactFlowProps, ReactFlowRefType } from '../../types'; const defaultNodeTypes: NodeTypes = { input: InputNode, @@ -177,8 +167,6 @@ const ReactFlow = forwardRef( }, ref ) => { - const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes) as NodeTypesWrapped; - const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes) as EdgeTypesWrapped; const rfId = id || '1'; return ( @@ -200,8 +188,8 @@ const ReactFlow = forwardRef( onNodeMouseLeave={onNodeMouseLeave} onNodeContextMenu={onNodeContextMenu} onNodeDoubleClick={onNodeDoubleClick} - nodeTypes={nodeTypesWrapped} - edgeTypes={edgeTypesWrapped} + nodeTypes={nodeTypes} + edgeTypes={edgeTypes} connectionLineType={connectionLineType} connectionLineStyle={connectionLineStyle} connectionLineComponent={connectionLineComponent} From aa43a6de0207f49b1d0b5fd07978fd8eff0830f8 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 14 Aug 2023 16:37:41 +0200 Subject: [PATCH 0131/1093] chore(pkg): add exports --- packages/react/package.json | 11 ++++++++++- packages/system/package.json | 9 ++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/react/package.json b/packages/react/package.json index de645d6ff..01c2d07de 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -16,8 +16,17 @@ ], "source": "src/index.ts", "main": "dist/umd/index.js", - "module": "dist/esm/index.js", + "module": "dist/esm/index.mjs", "types": "dist/esm/index.d.ts", + "exports": { + ".": { + "types": "./dist/esm/index.d.ts", + "import": "./dist/esm/index.mjs", + "require": "./dist/umd/index.js" + }, + "./dist/base.css": "./dist/base.css", + "./dist/style.css": "./dist/style.css" + }, "sideEffects": [ "*.css" ], diff --git a/packages/system/package.json b/packages/system/package.json index 1043ceba2..d59801ed4 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -16,8 +16,15 @@ ], "source": "src/index.ts", "main": "dist/umd/index.js", - "module": "dist/esm/index.js", + "module": "dist/esm/index.mjs", "types": "dist/esm/index.d.ts", + "exports": { + ".": { + "types": "./dist/esm/index.d.ts", + "import": "./dist/esm/index.mjs", + "require": "./dist/umd/index.js" + } + }, "sideEffects": false, "license": "MIT", "publishConfig": { From e8c361ac9d0c55b1e58104373981ae68c49a0c1a Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 14 Aug 2023 16:42:11 +0200 Subject: [PATCH 0132/1093] chore(zustand): use latest API --- packages/react/package.json | 2 +- packages/react/src/hooks/useStore.ts | 3 +- packages/react/src/store/index.ts | 497 ++++++++++++++------------- pnpm-lock.yaml | 249 ++++++++++---- 4 files changed, 436 insertions(+), 315 deletions(-) diff --git a/packages/react/package.json b/packages/react/package.json index 01c2d07de..dae94edf4 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -57,7 +57,7 @@ "d3-drag": "^3.0.0", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0", - "zustand": "^4.3.3" + "zustand": "^4.4.0" }, "peerDependencies": { "react": ">=17", diff --git a/packages/react/src/hooks/useStore.ts b/packages/react/src/hooks/useStore.ts index e7fc934b7..eb075d00a 100644 --- a/packages/react/src/hooks/useStore.ts +++ b/packages/react/src/hooks/useStore.ts @@ -1,5 +1,6 @@ import { useContext, useMemo } from 'react'; -import { useStore as useZustandStore, type StoreApi } from 'zustand'; +import { useStoreWithEqualityFn as useZustandStore } from 'zustand/traditional'; +import type { StoreApi } from 'zustand'; import { errorMessages } from '@xyflow/system'; import StoreContext from '../contexts/RFStoreContext'; diff --git a/packages/react/src/store/index.ts b/packages/react/src/store/index.ts index 0b6772e25..51ba3eff1 100644 --- a/packages/react/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -1,4 +1,4 @@ -import { createStore } from 'zustand'; +import { createWithEqualityFn } from 'zustand/traditional'; import { clampPosition, fitView as fitViewSystem, @@ -25,261 +25,264 @@ import type { } from '../types'; const createRFStore = () => - createStore((set, get) => ({ - ...initialState, - setNodes: (nodes: Node[]) => { - const { nodes: storeNodes, nodeOrigin, elevateNodesOnSelect } = get(); - const nextNodes = updateNodes(nodes, storeNodes, { nodeOrigin, elevateNodesOnSelect }); - - set({ nodes: nextNodes }); - }, - getNodes: () => { - return get().nodes; - }, - setEdges: (edges: Edge[]) => { - const { defaultEdgeOptions = {} } = get(); - set({ edges: edges.map((e) => ({ ...defaultEdgeOptions, ...e })) }); - }, - setDefaultNodesAndEdges: (nodes?: Node[], edges?: Edge[]) => { - const hasDefaultNodes = typeof nodes !== 'undefined'; - const hasDefaultEdges = typeof edges !== 'undefined'; - - const nextNodes = hasDefaultNodes - ? updateNodes(nodes, [], { - nodeOrigin: get().nodeOrigin, - elevateNodesOnSelect: get().elevateNodesOnSelect, - }) - : []; - const nextEdges = hasDefaultEdges ? edges : []; - - set({ nodes: nextNodes, edges: nextEdges, hasDefaultNodes, hasDefaultEdges }); - }, - updateNodeDimensions: (updates) => { - const { onNodesChange, fitView, nodes, fitViewOnInit, fitViewDone, fitViewOnInitOptions, domNode, nodeOrigin } = - get(); - const changes: NodeDimensionChange[] = []; - - const updatedNodes = updateNodeDimensionsSystem( - updates, - nodes, - domNode, - nodeOrigin, - (id: string, dimensions: Dimensions) => { - changes.push({ - id: id, - type: 'dimensions', - dimensions, - }); + createWithEqualityFn( + (set, get) => ({ + ...initialState, + setNodes: (nodes: Node[]) => { + const { nodes: storeNodes, nodeOrigin, elevateNodesOnSelect } = get(); + const nextNodes = updateNodes(nodes, storeNodes, { nodeOrigin, elevateNodesOnSelect }); + + set({ nodes: nextNodes }); + }, + getNodes: () => { + return get().nodes; + }, + setEdges: (edges: Edge[]) => { + const { defaultEdgeOptions = {} } = get(); + set({ edges: edges.map((e) => ({ ...defaultEdgeOptions, ...e })) }); + }, + setDefaultNodesAndEdges: (nodes?: Node[], edges?: Edge[]) => { + const hasDefaultNodes = typeof nodes !== 'undefined'; + const hasDefaultEdges = typeof edges !== 'undefined'; + + const nextNodes = hasDefaultNodes + ? updateNodes(nodes, [], { + nodeOrigin: get().nodeOrigin, + elevateNodesOnSelect: get().elevateNodesOnSelect, + }) + : []; + const nextEdges = hasDefaultEdges ? edges : []; + + set({ nodes: nextNodes, edges: nextEdges, hasDefaultNodes, hasDefaultEdges }); + }, + updateNodeDimensions: (updates) => { + const { onNodesChange, fitView, nodes, fitViewOnInit, fitViewDone, fitViewOnInitOptions, domNode, nodeOrigin } = + get(); + const changes: NodeDimensionChange[] = []; + + const updatedNodes = updateNodeDimensionsSystem( + updates, + nodes, + domNode, + nodeOrigin, + (id: string, dimensions: Dimensions) => { + changes.push({ + id: id, + type: 'dimensions', + dimensions, + }); + } + ); + + if (!updatedNodes) { + return; } - ); - - if (!updatedNodes) { - return; - } - - const nextNodes = updateAbsolutePositions(updatedNodes, nodeOrigin); - - const nextFitViewDone = - fitViewDone || - (fitViewOnInit && - fitView({ - ...fitViewOnInitOptions, - nodes: nextNodes, - })); - - set({ nodes: nextNodes, fitViewDone: nextFitViewDone }); - - if (changes?.length > 0) { - onNodesChange?.(changes); - } - }, - updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => { - const changes = nodeDragItems.map((node) => { - const change: NodePositionChange = { - id: node.id, - type: 'position', - dragging, - }; - if (positionChanged) { - change.positionAbsolute = node.positionAbsolute; - change.position = node.position; + const nextNodes = updateAbsolutePositions(updatedNodes, nodeOrigin); + + const nextFitViewDone = + fitViewDone || + (fitViewOnInit && + fitView({ + ...fitViewOnInitOptions, + nodes: nextNodes, + })); + + set({ nodes: nextNodes, fitViewDone: nextFitViewDone }); + + if (changes?.length > 0) { + onNodesChange?.(changes); } + }, + updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => { + const changes = nodeDragItems.map((node) => { + const change: NodePositionChange = { + id: node.id, + type: 'position', + dragging, + }; - return change; - }); + if (positionChanged) { + change.positionAbsolute = node.positionAbsolute; + change.position = node.position; + } - get().triggerNodeChanges(changes); - }, + return change; + }); - triggerNodeChanges: (changes) => { - const { onNodesChange, nodes, hasDefaultNodes, nodeOrigin, elevateNodesOnSelect } = get(); + get().triggerNodeChanges(changes); + }, - if (changes?.length) { - if (hasDefaultNodes) { - const updatedNodes = applyNodeChanges(changes, nodes); - const nextNodes = updateNodes(updatedNodes, nodes, { - nodeOrigin, - elevateNodesOnSelect, - }); - set({ nodes: nextNodes }); + triggerNodeChanges: (changes) => { + const { onNodesChange, nodes, hasDefaultNodes, nodeOrigin, elevateNodesOnSelect } = get(); + + if (changes?.length) { + if (hasDefaultNodes) { + const updatedNodes = applyNodeChanges(changes, nodes); + const nextNodes = updateNodes(updatedNodes, nodes, { + nodeOrigin, + elevateNodesOnSelect, + }); + set({ nodes: nextNodes }); + } + + onNodesChange?.(changes); + } + }, + + addSelectedNodes: (selectedNodeIds) => { + const { multiSelectionActive, edges, nodes } = get(); + let changedNodes: NodeSelectionChange[]; + let changedEdges: EdgeSelectionChange[] | null = null; + + if (multiSelectionActive) { + changedNodes = selectedNodeIds.map((nodeId) => createSelectionChange(nodeId, true)) as NodeSelectionChange[]; + } else { + changedNodes = getSelectionChanges(nodes, selectedNodeIds); + changedEdges = getSelectionChanges(edges, []); } - onNodesChange?.(changes); - } - }, - - addSelectedNodes: (selectedNodeIds) => { - const { multiSelectionActive, edges, nodes } = get(); - let changedNodes: NodeSelectionChange[]; - let changedEdges: EdgeSelectionChange[] | null = null; - - if (multiSelectionActive) { - changedNodes = selectedNodeIds.map((nodeId) => createSelectionChange(nodeId, true)) as NodeSelectionChange[]; - } else { - changedNodes = getSelectionChanges(nodes, selectedNodeIds); - changedEdges = getSelectionChanges(edges, []); - } - - updateNodesAndEdgesSelections({ - changedNodes, - changedEdges, - get, - set, - }); - }, - addSelectedEdges: (selectedEdgeIds) => { - const { multiSelectionActive, edges, nodes } = get(); - let changedEdges: EdgeSelectionChange[]; - let changedNodes: NodeSelectionChange[] | null = null; - - if (multiSelectionActive) { - changedEdges = selectedEdgeIds.map((edgeId) => createSelectionChange(edgeId, true)) as EdgeSelectionChange[]; - } else { - changedEdges = getSelectionChanges(edges, selectedEdgeIds); - changedNodes = getSelectionChanges(nodes, []); - } - - updateNodesAndEdgesSelections({ - changedNodes, - changedEdges, - get, - set, - }); - }, - unselectNodesAndEdges: ({ nodes, edges }: UnselectNodesAndEdgesParams = {}) => { - const { edges: storeEdges, nodes: storeNodes } = get(); - const nodesToUnselect = nodes ? nodes : storeNodes; - const edgesToUnselect = edges ? edges : storeEdges; - - const changedNodes = nodesToUnselect.map((n) => { - n.selected = false; - return createSelectionChange(n.id, false); - }) as NodeSelectionChange[]; - const changedEdges = edgesToUnselect.map((edge) => - createSelectionChange(edge.id, false) - ) as EdgeSelectionChange[]; - - updateNodesAndEdgesSelections({ - changedNodes, - changedEdges, - get, - set, - }); - }, - setMinZoom: (minZoom) => { - const { panZoom, maxZoom } = get(); - panZoom?.setScaleExtent([minZoom, maxZoom]); - - set({ minZoom }); - }, - setMaxZoom: (maxZoom) => { - const { panZoom, minZoom } = get(); - panZoom?.setScaleExtent([minZoom, maxZoom]); - - set({ maxZoom }); - }, - setTranslateExtent: (translateExtent) => { - get().panZoom?.setTranslateExtent(translateExtent); - - set({ translateExtent }); - }, - resetSelectedElements: () => { - const { edges, nodes } = get(); - - const nodesToUnselect = nodes - .filter((e) => e.selected) - .map((n) => createSelectionChange(n.id, false)) as NodeSelectionChange[]; - const edgesToUnselect = edges - .filter((e) => e.selected) - .map((e) => createSelectionChange(e.id, false)) as EdgeSelectionChange[]; - - updateNodesAndEdgesSelections({ - changedNodes: nodesToUnselect, - changedEdges: edgesToUnselect, - get, - set, - }); - }, - setNodeExtent: (nodeExtent) => { - const { nodes } = get(); - - set({ - nodeExtent, - nodes: nodes.map((node) => { - const positionAbsolute = clampPosition(node.position, nodeExtent); - - return { - ...node, - positionAbsolute, - }; + updateNodesAndEdgesSelections({ + changedNodes, + changedEdges, + get, + set, + }); + }, + addSelectedEdges: (selectedEdgeIds) => { + const { multiSelectionActive, edges, nodes } = get(); + let changedEdges: EdgeSelectionChange[]; + let changedNodes: NodeSelectionChange[] | null = null; + + if (multiSelectionActive) { + changedEdges = selectedEdgeIds.map((edgeId) => createSelectionChange(edgeId, true)) as EdgeSelectionChange[]; + } else { + changedEdges = getSelectionChanges(edges, selectedEdgeIds); + changedNodes = getSelectionChanges(nodes, []); + } + + updateNodesAndEdgesSelections({ + changedNodes, + changedEdges, + get, + set, + }); + }, + unselectNodesAndEdges: ({ nodes, edges }: UnselectNodesAndEdgesParams = {}) => { + const { edges: storeEdges, nodes: storeNodes } = get(); + const nodesToUnselect = nodes ? nodes : storeNodes; + const edgesToUnselect = edges ? edges : storeEdges; + + const changedNodes = nodesToUnselect.map((n) => { + n.selected = false; + return createSelectionChange(n.id, false); + }) as NodeSelectionChange[]; + const changedEdges = edgesToUnselect.map((edge) => + createSelectionChange(edge.id, false) + ) as EdgeSelectionChange[]; + + updateNodesAndEdgesSelections({ + changedNodes, + changedEdges, + get, + set, + }); + }, + setMinZoom: (minZoom) => { + const { panZoom, maxZoom } = get(); + panZoom?.setScaleExtent([minZoom, maxZoom]); + + set({ minZoom }); + }, + setMaxZoom: (maxZoom) => { + const { panZoom, minZoom } = get(); + panZoom?.setScaleExtent([minZoom, maxZoom]); + + set({ maxZoom }); + }, + setTranslateExtent: (translateExtent) => { + get().panZoom?.setTranslateExtent(translateExtent); + + set({ translateExtent }); + }, + resetSelectedElements: () => { + const { edges, nodes } = get(); + + const nodesToUnselect = nodes + .filter((e) => e.selected) + .map((n) => createSelectionChange(n.id, false)) as NodeSelectionChange[]; + const edgesToUnselect = edges + .filter((e) => e.selected) + .map((e) => createSelectionChange(e.id, false)) as EdgeSelectionChange[]; + + updateNodesAndEdgesSelections({ + changedNodes: nodesToUnselect, + changedEdges: edgesToUnselect, + get, + set, + }); + }, + setNodeExtent: (nodeExtent) => { + const { nodes } = get(); + + set({ + nodeExtent, + nodes: nodes.map((node) => { + const positionAbsolute = clampPosition(node.position, nodeExtent); + + return { + ...node, + positionAbsolute, + }; + }), + }); + }, + panBy: (delta): boolean => { + const { transform, width, height, panZoom, translateExtent } = get(); + return panBySystem({ delta, panZoom, transform, translateExtent, width, height }); + }, + fitView: (options?: FitViewOptions): boolean => { + const { panZoom, nodes, width, height, minZoom, maxZoom, nodeOrigin } = get(); + const fitViewNodes = options?.nodes || nodes; + + if (!panZoom) { + return false; + } + + return fitViewSystem( + { + nodes: fitViewNodes as Node[], + width, + height, + panZoom, + minZoom, + maxZoom, + nodeOrigin, + }, + options + ); + }, + cancelConnection: () => + set({ + connectionStatus: initialState.connectionStatus, + connectionStartHandle: initialState.connectionStartHandle, + connectionEndHandle: initialState.connectionEndHandle, }), - }); - }, - panBy: (delta): boolean => { - const { transform, width, height, panZoom, translateExtent } = get(); - return panBySystem({ delta, panZoom, transform, translateExtent, width, height }); - }, - fitView: (options?: FitViewOptions): boolean => { - const { panZoom, nodes, width, height, minZoom, maxZoom, nodeOrigin } = get(); - const fitViewNodes = options?.nodes || nodes; - - if (!panZoom) { - return false; - } - - return fitViewSystem( - { - nodes: fitViewNodes as Node[], - width, - height, - panZoom, - minZoom, - maxZoom, - nodeOrigin, - }, - options - ); - }, - cancelConnection: () => - set({ - connectionStatus: initialState.connectionStatus, - connectionStartHandle: initialState.connectionStartHandle, - connectionEndHandle: initialState.connectionEndHandle, - }), - updateConnection: (params) => { - const { connectionStatus, connectionStartHandle, connectionEndHandle, connectionPosition } = get(); - - const currentConnection = { - connectionPosition: params.connectionPosition ?? connectionPosition, - connectionStatus: params.connectionStatus ?? connectionStatus, - connectionStartHandle: params.connectionStartHandle ?? connectionStartHandle, - connectionEndHandle: params.connectionEndHandle ?? connectionEndHandle, - }; - - set(currentConnection); - }, - reset: () => set({ ...initialState }), - })); + updateConnection: (params) => { + const { connectionStatus, connectionStartHandle, connectionEndHandle, connectionPosition } = get(); + + const currentConnection = { + connectionPosition: params.connectionPosition ?? connectionPosition, + connectionStatus: params.connectionStatus ?? connectionStatus, + connectionStartHandle: params.connectionStartHandle ?? connectionStartHandle, + connectionEndHandle: params.connectionEndHandle ?? connectionEndHandle, + }; + + set(currentConnection); + }, + reset: () => set({ ...initialState }), + }), + Object.is + ); export { createRFStore }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9d348e7a..b1b4d1c3c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -169,8 +169,8 @@ importers: specifier: '>=17' version: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) zustand: - specifier: ^4.3.3 - version: registry.npmjs.org/zustand@4.3.8(react@18.2.0) + specifier: ^4.4.0 + version: registry.npmjs.org/zustand@4.4.0(@types/react@18.2.12)(react@18.2.0) devDependencies: '@types/node': specifier: ^18.7.16 @@ -244,7 +244,7 @@ importers: version: registry.npmjs.org/svelte@4.2.0 svelte-check: specifier: ^3.5.0 - version: registry.npmjs.org/svelte-check@3.5.0(postcss@8.4.24)(svelte@4.2.0) + version: registry.npmjs.org/svelte-check@3.5.0(postcss@8.4.27)(svelte@4.2.0) svelte-eslint-parser: specifier: ^0.32.2 version: registry.npmjs.org/svelte-eslint-parser@0.32.2(svelte@4.2.0) @@ -390,7 +390,7 @@ packages: debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) gensync: registry.npmjs.org/gensync@1.0.0-beta.2 json5: registry.npmjs.org/json5@2.2.3 - semver: registry.npmjs.org/semver@6.3.0 + semver: registry.npmjs.org/semver@6.3.1 transitivePeerDependencies: - supports-color dev: true @@ -421,7 +421,7 @@ packages: '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option@7.22.5 browserslist: registry.npmjs.org/browserslist@4.21.8 lru-cache: registry.npmjs.org/lru-cache@5.1.1 - semver: registry.npmjs.org/semver@6.3.0 + semver: registry.npmjs.org/semver@6.3.1 dev: true registry.npmjs.org/@babel/helper-environment-visitor@7.22.5: @@ -1180,7 +1180,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: registry.npmjs.org/eslint@8.42.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + 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.43.0): @@ -1193,7 +1193,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: registry.npmjs.org/eslint@8.43.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true registry.npmjs.org/@eslint-community/regexpp@4.5.1: @@ -1203,6 +1203,13 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true + registry.npmjs.org/@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz} + name: '@eslint-community/regexpp' + version: 4.6.2 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + registry.npmjs.org/@eslint/eslintrc@2.0.3: resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz} name: '@eslint/eslintrc' @@ -2089,7 +2096,6 @@ packages: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz} name: '@types/prop-types' version: 15.7.5 - dev: true registry.npmjs.org/@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz} @@ -2113,7 +2119,6 @@ packages: '@types/prop-types': registry.npmjs.org/@types/prop-types@15.7.5 '@types/scheduler': registry.npmjs.org/@types/scheduler@0.16.3 csstype: registry.npmjs.org/csstype@3.1.2 - dev: true 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} @@ -2125,7 +2130,6 @@ packages: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz} name: '@types/scheduler' version: 0.16.3 - dev: true registry.npmjs.org/@types/semver@6.2.3: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/semver/-/semver-6.2.3.tgz} @@ -2206,7 +2210,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.5.1 + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.6.2 '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.3.0(eslint@8.42.0)(typescript@5.1.3) '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0 '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.3.0(eslint@8.42.0)(typescript@5.1.3) @@ -2369,7 +2373,7 @@ packages: 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.1 + 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: @@ -2452,7 +2456,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.60.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0: @@ -2462,7 +2466,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dependencies: '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true registry.npmjs.org/@vitejs/plugin-react-swc@3.3.2(vite@4.3.9): @@ -2647,7 +2651,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 is-string: registry.npmjs.org/is-string@1.0.7 dev: true @@ -2667,7 +2671,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 es-shim-unscopables: registry.npmjs.org/es-shim-unscopables@1.0.0 dev: true @@ -2679,7 +2683,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 es-shim-unscopables: registry.npmjs.org/es-shim-unscopables@1.0.0 dev: true @@ -2690,11 +2694,25 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 es-shim-unscopables: registry.npmjs.org/es-shim-unscopables@1.0.0 get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 dev: true + registry.npmjs.org/arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz} + name: arraybuffer.prototype.slice + version: 1.0.1 + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: registry.npmjs.org/array-buffer-byte-length@1.0.0 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + is-array-buffer: registry.npmjs.org/is-array-buffer@3.0.2 + is-shared-array-buffer: registry.npmjs.org/is-shared-array-buffer@1.0.2 + dev: true + registry.npmjs.org/arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz} name: arrify @@ -3283,7 +3301,6 @@ packages: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz} name: csstype version: 3.1.2 - dev: true registry.npmjs.org/csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz} @@ -3713,13 +3730,14 @@ packages: is-arrayish: registry.npmjs.org/is-arrayish@0.2.1 dev: true - registry.npmjs.org/es-abstract@1.21.2: - resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz} + registry.npmjs.org/es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz} name: es-abstract - version: 1.21.2 + version: 1.22.1 engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: registry.npmjs.org/array-buffer-byte-length@1.0.0 + arraybuffer.prototype.slice: registry.npmjs.org/arraybuffer.prototype.slice@1.0.1 available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 call-bind: registry.npmjs.org/call-bind@1.0.2 es-set-tostringtag: registry.npmjs.org/es-set-tostringtag@2.0.1 @@ -3740,19 +3758,23 @@ packages: is-regex: registry.npmjs.org/is-regex@1.1.4 is-shared-array-buffer: registry.npmjs.org/is-shared-array-buffer@1.0.2 is-string: registry.npmjs.org/is-string@1.0.7 - is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 is-weakref: registry.npmjs.org/is-weakref@1.0.2 object-inspect: registry.npmjs.org/object-inspect@1.12.3 object-keys: registry.npmjs.org/object-keys@1.1.1 object.assign: registry.npmjs.org/object.assign@4.1.4 regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags@1.5.0 + safe-array-concat: registry.npmjs.org/safe-array-concat@1.0.0 safe-regex-test: registry.npmjs.org/safe-regex-test@1.0.0 string.prototype.trim: registry.npmjs.org/string.prototype.trim@1.2.7 string.prototype.trimend: registry.npmjs.org/string.prototype.trimend@1.0.6 string.prototype.trimstart: registry.npmjs.org/string.prototype.trimstart@1.0.6 + typed-array-buffer: registry.npmjs.org/typed-array-buffer@1.0.0 + typed-array-byte-length: registry.npmjs.org/typed-array-byte-length@1.0.0 + typed-array-byte-offset: registry.npmjs.org/typed-array-byte-offset@1.0.0 typed-array-length: registry.npmjs.org/typed-array-length@1.0.4 unbox-primitive: registry.npmjs.org/unbox-primitive@1.0.2 - which-typed-array: registry.npmjs.org/which-typed-array@1.1.9 + which-typed-array: registry.npmjs.org/which-typed-array@1.1.11 dev: true registry.npmjs.org/es-set-tostringtag@2.0.1: @@ -3915,7 +3937,7 @@ packages: doctrine: registry.npmjs.org/doctrine@2.1.0 eslint: registry.npmjs.org/eslint@8.42.0 estraverse: registry.npmjs.org/estraverse@5.3.0 - jsx-ast-utils: registry.npmjs.org/jsx-ast-utils@3.3.3 + jsx-ast-utils: registry.npmjs.org/jsx-ast-utils@3.3.5 minimatch: registry.npmjs.org/minimatch@3.1.2 object.entries: registry.npmjs.org/object.entries@1.1.6 object.fromentries: registry.npmjs.org/object.fromentries@2.0.6 @@ -3997,6 +4019,13 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + registry.npmjs.org/eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} + name: eslint-visitor-keys + version: 3.4.3 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + registry.npmjs.org/eslint@8.42.0: resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz} name: eslint @@ -4310,6 +4339,19 @@ packages: micromatch: registry.npmjs.org/micromatch@4.0.5 dev: true + registry.npmjs.org/fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz} + name: fast-glob + version: 3.3.1 + 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 @@ -4548,7 +4590,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 functions-have-names: registry.npmjs.org/functions-have-names@1.2.3 dev: true @@ -4718,7 +4760,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.2.12 + fast-glob: registry.npmjs.org/fast-glob@3.3.1 ignore: registry.npmjs.org/ignore@5.2.4 merge2: registry.npmjs.org/merge2@1.4.1 slash: registry.npmjs.org/slash@3.0.0 @@ -4731,7 +4773,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.2.12 + fast-glob: registry.npmjs.org/fast-glob@3.3.1 ignore: registry.npmjs.org/ignore@5.2.4 merge2: registry.npmjs.org/merge2@1.4.1 slash: registry.npmjs.org/slash@4.0.0 @@ -4973,7 +5015,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 - is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 dev: true registry.npmjs.org/is-arrayish@0.2.1: @@ -5042,6 +5084,14 @@ packages: has: registry.npmjs.org/has@1.0.3 dev: true + registry.npmjs.org/is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz} + name: is-core-module + version: 2.13.0 + dependencies: + has: registry.npmjs.org/has@1.0.3 + dev: true + registry.npmjs.org/is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz} name: is-date-object @@ -5195,17 +5245,13 @@ packages: has-symbols: registry.npmjs.org/has-symbols@1.0.3 dev: true - registry.npmjs.org/is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz} + registry.npmjs.org/is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz} name: is-typed-array - version: 1.1.10 + version: 1.1.12 engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 - call-bind: registry.npmjs.org/call-bind@1.0.2 - for-each: registry.npmjs.org/for-each@0.3.3 - gopd: registry.npmjs.org/gopd@1.0.1 - has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 + which-typed-array: registry.npmjs.org/which-typed-array@1.1.11 dev: true registry.npmjs.org/is-typedarray@1.0.0: @@ -5236,6 +5282,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + registry.npmjs.org/isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz} + name: isarray + version: 2.0.5 + dev: true + registry.npmjs.org/isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz} name: isexe @@ -5366,14 +5418,16 @@ packages: verror: registry.npmjs.org/verror@1.10.0 dev: true - registry.npmjs.org/jsx-ast-utils@3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz} + registry.npmjs.org/jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz} name: jsx-ast-utils - version: 3.3.3 + version: 3.3.5 engines: {node: '>=4.0'} dependencies: array-includes: registry.npmjs.org/array-includes@3.1.6 + array.prototype.flat: registry.npmjs.org/array.prototype.flat@1.3.1 object.assign: registry.npmjs.org/object.assign@4.1.4 + object.values: registry.npmjs.org/object.values@1.1.6 dev: true registry.npmjs.org/kind-of@6.0.3: @@ -5911,7 +5965,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true registry.npmjs.org/object.fromentries@2.0.6: @@ -5922,7 +5976,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true registry.npmjs.org/object.hasown@1.1.2: @@ -5931,7 +5985,7 @@ packages: version: 1.1.2 dependencies: define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true registry.npmjs.org/object.values@1.1.6: @@ -5942,7 +5996,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true registry.npmjs.org/once@1.4.0: @@ -6729,7 +6783,7 @@ packages: version: 2.0.0-next.4 hasBin: true dependencies: - is-core-module: registry.npmjs.org/is-core-module@2.12.1 + is-core-module: registry.npmjs.org/is-core-module@2.13.0 path-parse: registry.npmjs.org/path-parse@1.0.7 supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag@1.0.0 dev: true @@ -6821,6 +6875,18 @@ packages: mri: registry.npmjs.org/mri@1.2.0 dev: true + registry.npmjs.org/safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz} + name: safe-array-concat + version: 1.0.0 + engines: {node: '>=0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + isarray: registry.npmjs.org/isarray@2.0.5 + dev: true + registry.npmjs.org/safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} name: safe-buffer @@ -6868,13 +6934,6 @@ packages: hasBin: true dev: true - registry.npmjs.org/semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-6.3.0.tgz} - name: semver - version: 6.3.0 - hasBin: true - dev: true - registry.npmjs.org/semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-6.3.1.tgz} name: semver @@ -7233,7 +7292,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 has-symbols: registry.npmjs.org/has-symbols@1.0.3 internal-slot: registry.npmjs.org/internal-slot@1.0.5 @@ -7249,7 +7308,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true registry.npmjs.org/string.prototype.trimend@1.0.6: @@ -7259,7 +7318,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true registry.npmjs.org/string.prototype.trimstart@1.0.6: @@ -7269,7 +7328,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 define-properties: registry.npmjs.org/define-properties@1.2.0 - es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true registry.npmjs.org/strip-ansi@6.0.1: @@ -7345,7 +7404,7 @@ packages: engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/svelte-check@3.5.0(postcss@8.4.24)(svelte@4.2.0): + registry.npmjs.org/svelte-check@3.5.0(postcss@8.4.27)(svelte@4.2.0): 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 name: svelte-check @@ -7361,7 +7420,7 @@ packages: picocolors: registry.npmjs.org/picocolors@1.0.0 sade: registry.npmjs.org/sade@1.8.1 svelte: registry.npmjs.org/svelte@4.2.0 - svelte-preprocess: registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.24)(svelte@4.2.0)(typescript@5.1.3) + svelte-preprocess: registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.27)(svelte@4.2.0)(typescript@5.1.3) typescript: registry.npmjs.org/typescript@5.1.3 transitivePeerDependencies: - '@babel/core' @@ -7388,7 +7447,7 @@ packages: optional: true dependencies: eslint-scope: registry.npmjs.org/eslint-scope@7.2.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 espree: registry.npmjs.org/espree@9.5.2 postcss: registry.npmjs.org/postcss@8.4.24 postcss-scss: registry.npmjs.org/postcss-scss@4.0.6(postcss@8.4.24) @@ -7427,7 +7486,7 @@ packages: svelte: registry.npmjs.org/svelte@4.2.0 dev: true - registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.24)(svelte@4.2.0)(typescript@5.1.3): + registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.27)(svelte@4.2.0)(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 name: svelte-preprocess @@ -7471,7 +7530,7 @@ packages: '@types/pug': registry.npmjs.org/@types/pug@2.0.6 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.24 + postcss: registry.npmjs.org/postcss@8.4.27 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.0 @@ -7815,6 +7874,42 @@ packages: engines: {node: '>=8'} dev: true + registry.npmjs.org/typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz} + name: typed-array-buffer + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 + dev: true + + registry.npmjs.org/typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz} + name: typed-array-byte-length + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + has-proto: registry.npmjs.org/has-proto@1.0.1 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 + dev: true + + registry.npmjs.org/typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz} + name: typed-array-byte-offset + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + has-proto: registry.npmjs.org/has-proto@1.0.1 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 + dev: true + registry.npmjs.org/typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz} name: typed-array-length @@ -7822,7 +7917,7 @@ packages: dependencies: call-bind: registry.npmjs.org/call-bind@1.0.2 for-each: registry.npmjs.org/for-each@0.3.3 - is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 dev: true registry.npmjs.org/typescript@4.9.5: @@ -8064,10 +8159,10 @@ packages: path-exists: registry.npmjs.org/path-exists@4.0.0 dev: true - registry.npmjs.org/which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz} + registry.npmjs.org/which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz} name: which-typed-array - version: 1.1.9 + version: 1.1.11 engines: {node: '>= 0.4'} dependencies: available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 @@ -8075,7 +8170,6 @@ packages: for-each: registry.npmjs.org/for-each@0.3.3 gopd: registry.npmjs.org/gopd@1.0.1 has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 - is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 dev: true registry.npmjs.org/which@1.3.1: @@ -8262,3 +8356,26 @@ packages: 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/zustand@4.4.0(@types/react@18.2.12)(react@18.2.0): + resolution: {integrity: sha512-2dq6wq4dSxbiPTamGar0NlIG/av0wpyWZJGeQYtUOLegIUvhM2Bf86ekPlmgpUtS5uR7HyetSiktYrGsdsyZgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.4.0.tgz} + id: registry.npmjs.org/zustand/4.4.0 + name: zustand + version: 4.4.0 + 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.12 + 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 From 3122d06987b5262b8c751b6bd39eb368dab240c8 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 14 Aug 2023 16:47:42 +0200 Subject: [PATCH 0133/1093] chore(rf-provider): use correct type --- packages/react/src/components/ReactFlowProvider/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react/src/components/ReactFlowProvider/index.tsx b/packages/react/src/components/ReactFlowProvider/index.tsx index d3c283c20..db4f69d2b 100644 --- a/packages/react/src/components/ReactFlowProvider/index.tsx +++ b/packages/react/src/components/ReactFlowProvider/index.tsx @@ -1,12 +1,13 @@ import { useRef, type FC, type PropsWithChildren } from 'react'; import { type StoreApi } from 'zustand'; +import { UseBoundStoreWithEqualityFn } from 'zustand/traditional'; import { Provider } from '../../contexts/RFStoreContext'; import { createRFStore } from '../../store'; import type { ReactFlowState } from '../../types'; const ReactFlowProvider: FC> = ({ children }) => { - const storeRef = useRef | null>(null); + const storeRef = useRef> | null>(null); if (!storeRef.current) { storeRef.current = createRFStore(); From 6cc6598014a848b38d3e1efe218b0d6f18e64fce Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 15 Aug 2023 16:32:22 +0200 Subject: [PATCH 0134/1093] chore(cypress): use latest version --- examples/vite-app/cypress/e2e/basic.cy.ts | 13 +- examples/vite-app/cypress/e2e/controls.cy.ts | 2 +- .../vite-app/cypress/e2e/draghandle.cy.ts | 2 +- examples/vite-app/cypress/e2e/empty.cy.ts | 2 +- examples/vite-app/cypress/e2e/figma.cy.ts | 2 +- examples/vite-app/cypress/e2e/hidden.cy.ts | 2 +- .../vite-app/cypress/e2e/interaction.cy.ts | 2 +- examples/vite-app/cypress/e2e/minimap.cy.ts | 2 +- examples/vite-app/package.json | 10 +- pnpm-lock.yaml | 5953 ++++++++++------- 10 files changed, 3396 insertions(+), 2594 deletions(-) diff --git a/examples/vite-app/cypress/e2e/basic.cy.ts b/examples/vite-app/cypress/e2e/basic.cy.ts index c6f027c9a..8328a307d 100644 --- a/examples/vite-app/cypress/e2e/basic.cy.ts +++ b/examples/vite-app/cypress/e2e/basic.cy.ts @@ -1,4 +1,4 @@ -describe('Basic Flow Rendering', () => { +describe('Basic Flow Rendering', { testIsolation: false }, () => { before(() => { cy.visit('/'); }); @@ -29,7 +29,7 @@ describe('Basic Flow Rendering', () => { }); it('selects a node by click', () => { - cy.get('.react-flow__node:first').click({ force: true }).should('have.class', 'selected'); + cy.get('.react-flow__node:first').as('node').click({ force: true }).should('have.class', 'selected'); }); it('deselects node', () => { @@ -38,7 +38,8 @@ describe('Basic Flow Rendering', () => { }); it('selects an edge by click', () => { - cy.get('.react-flow__edge:first').click({ force: true }).should('have.class', 'selected'); + cy.get('.react-flow__edge:first').as('edge').click({ force: true }); + cy.get('.react-flow__edge:first').should('have.class', 'selected'); }); it('deselects edge', () => { @@ -59,7 +60,6 @@ describe('Basic Flow Rendering', () => { cy.wait(200); cy.get('.react-flow__node').eq(1).should('have.class', 'selected'); - cy.get('.react-flow__node').eq(3).should('have.not.class', 'selected'); cy.get('.react-flow__nodesselection-rect'); @@ -82,7 +82,7 @@ describe('Basic Flow Rendering', () => { cy.wait(200); cy.get('.react-flow__nodesselection-rect'); - cy.get('body').type('{shift}', { release: true }); + cy.get('body').type('{shift}', { release: true, force: true }); }); it('removes selection', () => { @@ -124,7 +124,8 @@ describe('Basic Flow Rendering', () => { .wait(200) .trigger('mouseup', { force: true, button: 0 }); - cy.get('.react-flow__edge').should('have.length', 3); + cy.get('.react-flow__edge').as('edge'); + cy.get('@edge').should('have.length', 3); }); // @TODO: why does this fail since react18? diff --git a/examples/vite-app/cypress/e2e/controls.cy.ts b/examples/vite-app/cypress/e2e/controls.cy.ts index 07d0548ed..9a81651cf 100644 --- a/examples/vite-app/cypress/e2e/controls.cy.ts +++ b/examples/vite-app/cypress/e2e/controls.cy.ts @@ -1,4 +1,4 @@ -describe('Controls Testing', () => { +describe('Controls Testing', { testIsolation: false }, () => { before(() => { cy.visit('/'); }); diff --git a/examples/vite-app/cypress/e2e/draghandle.cy.ts b/examples/vite-app/cypress/e2e/draghandle.cy.ts index 259fbf8a9..8c6b915be 100644 --- a/examples/vite-app/cypress/e2e/draghandle.cy.ts +++ b/examples/vite-app/cypress/e2e/draghandle.cy.ts @@ -1,4 +1,4 @@ -describe('DragHandle Flow Rendering', () => { +describe('DragHandle Flow Rendering', { testIsolation: false }, () => { before(() => { cy.visit('/DragHandle'); }); diff --git a/examples/vite-app/cypress/e2e/empty.cy.ts b/examples/vite-app/cypress/e2e/empty.cy.ts index 74cba86d4..dd18f9f90 100644 --- a/examples/vite-app/cypress/e2e/empty.cy.ts +++ b/examples/vite-app/cypress/e2e/empty.cy.ts @@ -1,4 +1,4 @@ -describe('Empty Flow Rendering', () => { +describe('Empty Flow Rendering', { testIsolation: false }, () => { before(() => { cy.visit('/Empty'); }); diff --git a/examples/vite-app/cypress/e2e/figma.cy.ts b/examples/vite-app/cypress/e2e/figma.cy.ts index e3c8563f9..3ffdd965c 100644 --- a/examples/vite-app/cypress/e2e/figma.cy.ts +++ b/examples/vite-app/cypress/e2e/figma.cy.ts @@ -1,4 +1,4 @@ -describe('Figma Flow UI', () => { +describe('Figma Flow UI', { testIsolation: false }, () => { before(() => { cy.visit('/figma'); }); diff --git a/examples/vite-app/cypress/e2e/hidden.cy.ts b/examples/vite-app/cypress/e2e/hidden.cy.ts index 2039d742d..316ce2782 100644 --- a/examples/vite-app/cypress/e2e/hidden.cy.ts +++ b/examples/vite-app/cypress/e2e/hidden.cy.ts @@ -1,4 +1,4 @@ -describe('Hidden Flow Rendering', () => { +describe('Hidden Flow Rendering', { testIsolation: false }, () => { before(() => { cy.visit('/Hidden'); }); diff --git a/examples/vite-app/cypress/e2e/interaction.cy.ts b/examples/vite-app/cypress/e2e/interaction.cy.ts index 1ad4bf2a0..b9d699f57 100644 --- a/examples/vite-app/cypress/e2e/interaction.cy.ts +++ b/examples/vite-app/cypress/e2e/interaction.cy.ts @@ -1,4 +1,4 @@ -describe('Interaction Flow Rendering', () => { +describe('Interaction Flow Rendering', { testIsolation: false }, () => { before(() => { cy.visit('/Interaction'); }); diff --git a/examples/vite-app/cypress/e2e/minimap.cy.ts b/examples/vite-app/cypress/e2e/minimap.cy.ts index 0f0464bdb..2f7ca4b7b 100644 --- a/examples/vite-app/cypress/e2e/minimap.cy.ts +++ b/examples/vite-app/cypress/e2e/minimap.cy.ts @@ -1,4 +1,4 @@ -describe('Minimap Testing', () => { +describe('Minimap Testing', { testIsolation: false }, () => { before(() => { cy.visit('/'); }); diff --git a/examples/vite-app/package.json b/examples/vite-app/package.json index 3e2e707a6..73d91382b 100644 --- a/examples/vite-app/package.json +++ b/examples/vite-app/package.json @@ -21,19 +21,19 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.3.0", - "zustand": "^4.3.1" + "zustand": "^4.4.1" }, "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.0", + "@vitejs/plugin-react": "4.0.4", "@vitejs/plugin-react-swc": "^3.3.2", - "cypress": "12.14.0", - "cypress-real-events": "1.8.1", + "cypress": "12.17.3", + "cypress-real-events": "1.10.0", "start-server-and-test": "^1.14.0", "typescript": "5.1.3", - "vite": "4.3.9" + "vite": "4.4.9" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5d29613c..c1aabe73f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,462 +1,579 @@ -lockfileVersion: 5.4 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false importers: .: - specifiers: - '@changesets/changelog-github': ^0.4.7 - '@changesets/cli': ^2.25.0 - '@typescript-eslint/eslint-plugin': latest - '@typescript-eslint/parser': latest - autoprefixer: ^10.4.8 - concurrently: ^7.6.0 - eslint: ^8.22.0 - eslint-config-prettier: ^8.5.0 - eslint-plugin-prettier: ^4.2.1 - eslint-plugin-react: latest - postcss: ^8.4.21 - postcss-cli: ^10.1.0 - postcss-combine-duplicated-selectors: ^10.0.3 - postcss-import: ^15.1.0 - postcss-nested: ^6.0.0 - prettier: ^2.7.1 - react: ^18.2.0 - react-dom: ^18.2.0 - rimraf: ^3.0.2 - rollup: ^3.23.0 - turbo: ^1.10.0 - typescript: 5.1.3 devDependencies: - '@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.8 - '@changesets/cli': registry.npmjs.org/@changesets/cli/2.26.1 - '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.60.0_xj5ev3uwennxkmahqnxqanffxm - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u - autoprefixer: registry.npmjs.org/autoprefixer/10.4.14_postcss@8.4.24 - concurrently: registry.npmjs.org/concurrently/7.6.0 - eslint: registry.npmjs.org/eslint/8.42.0 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.42.0 - eslint-plugin-prettier: registry.npmjs.org/eslint-plugin-prettier/4.2.1_vnriwwub2rhvoyn4ckagrc4lpi - eslint-plugin-react: registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.42.0 - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-cli: registry.npmjs.org/postcss-cli/10.1.0_postcss@8.4.24 - postcss-combine-duplicated-selectors: registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3_postcss@8.4.24 - postcss-import: registry.npmjs.org/postcss-import/15.1.0_postcss@8.4.24 - postcss-nested: registry.npmjs.org/postcss-nested/6.0.1_postcss@8.4.24 - prettier: registry.npmjs.org/prettier/2.8.8 - react: registry.npmjs.org/react/18.2.0 - react-dom: registry.npmjs.org/react-dom/18.2.0_react@18.2.0 - rimraf: registry.npmjs.org/rimraf/3.0.2 - rollup: registry.npmjs.org/rollup/3.25.1 - turbo: registry.npmjs.org/turbo/1.10.3 - typescript: registry.npmjs.org/typescript/5.1.3 + '@changesets/changelog-github': + specifier: ^0.4.7 + version: registry.npmjs.org/@changesets/changelog-github@0.4.8 + '@changesets/cli': + specifier: ^2.25.0 + version: registry.npmjs.org/@changesets/cli@2.26.1 + '@typescript-eslint/eslint-plugin': + specifier: latest + version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/parser': + specifier: latest + version: registry.npmjs.org/@typescript-eslint/parser@6.3.0(eslint@8.42.0)(typescript@5.1.3) + autoprefixer: + specifier: ^10.4.8 + version: registry.npmjs.org/autoprefixer@10.4.14(postcss@8.4.24) + concurrently: + specifier: ^7.6.0 + version: registry.npmjs.org/concurrently@7.6.0 + eslint: + specifier: ^8.22.0 + version: registry.npmjs.org/eslint@8.42.0 + eslint-config-prettier: + specifier: ^8.5.0 + version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.42.0) + eslint-plugin-prettier: + specifier: ^4.2.1 + version: registry.npmjs.org/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.42.0)(prettier@2.8.8) + eslint-plugin-react: + specifier: latest + version: registry.npmjs.org/eslint-plugin-react@7.33.1(eslint@8.42.0) + postcss: + specifier: ^8.4.21 + version: registry.npmjs.org/postcss@8.4.24 + postcss-cli: + specifier: ^10.1.0 + version: registry.npmjs.org/postcss-cli@10.1.0(postcss@8.4.24) + postcss-combine-duplicated-selectors: + specifier: ^10.0.3 + version: registry.npmjs.org/postcss-combine-duplicated-selectors@10.0.3(postcss@8.4.24) + postcss-import: + specifier: ^15.1.0 + version: registry.npmjs.org/postcss-import@15.1.0(postcss@8.4.24) + postcss-nested: + specifier: ^6.0.0 + version: registry.npmjs.org/postcss-nested@6.0.1(postcss@8.4.24) + prettier: + specifier: ^2.7.1 + version: registry.npmjs.org/prettier@2.8.8 + 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) + rimraf: + specifier: ^3.0.2 + version: registry.npmjs.org/rimraf@3.0.2 + rollup: + specifier: ^3.23.0 + version: registry.npmjs.org/rollup@3.25.1 + turbo: + specifier: ^1.10.0 + version: registry.npmjs.org/turbo@1.10.3 + typescript: + specifier: 5.1.3 + version: registry.npmjs.org/typescript@5.1.3 examples/vite-app: - specifiers: - '@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.0 - '@vitejs/plugin-react-swc': ^3.3.2 - '@xyflow/react': workspace:* - classcat: ^5.0.3 - cypress: 12.14.0 - cypress-real-events: 1.8.1 - dagre: ^0.8.5 - localforage: ^1.10.0 - react: ^18.2.0 - react-dom: ^18.2.0 - react-router-dom: ^6.3.0 - start-server-and-test: ^1.14.0 - typescript: 5.1.3 - vite: 4.3.9 - zustand: ^4.3.1 - dependencies: - '@xyflow/react': link:../../packages/react - classcat: registry.npmjs.org/classcat/5.0.4 - dagre: registry.npmjs.org/dagre/0.8.5 - localforage: registry.npmjs.org/localforage/1.10.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-dom: registry.npmjs.org/react-router-dom/6.12.1_biqbaboplfbrettd7655fr4n2y - zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 + dependencies: + '@xyflow/react': + specifier: workspace:* + version: link:../../packages/react + classcat: + specifier: ^5.0.3 + version: registry.npmjs.org/classcat@5.0.4 + dagre: + specifier: ^0.8.5 + version: registry.npmjs.org/dagre@0.8.5 + localforage: + specifier: ^1.10.0 + version: registry.npmjs.org/localforage@1.10.0 + 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) + react-router-dom: + specifier: ^6.3.0 + version: registry.npmjs.org/react-router-dom@6.12.1(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.12)(react@18.2.0) devDependencies: - '@cypress/skip-test': registry.npmjs.org/@cypress/skip-test/2.6.1 - '@types/dagre': registry.npmjs.org/@types/dagre/0.7.48 - '@types/react': registry.npmjs.org/@types/react/18.2.12 - '@types/react-dom': registry.npmjs.org/@types/react-dom/18.2.5 - '@vitejs/plugin-react': registry.npmjs.org/@vitejs/plugin-react/4.0.0_vite@4.3.9 - '@vitejs/plugin-react-swc': registry.npmjs.org/@vitejs/plugin-react-swc/3.3.2_vite@4.3.9 - cypress: registry.npmjs.org/cypress/12.14.0 - cypress-real-events: registry.npmjs.org/cypress-real-events/1.8.1_cypress@12.14.0 - start-server-and-test: registry.npmjs.org/start-server-and-test/1.15.4 - typescript: registry.npmjs.org/typescript/5.1.3 - vite: registry.npmjs.org/vite/4.3.9 + '@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 + '@types/react': + specifier: ^18.0.17 + version: registry.npmjs.org/@types/react@18.2.12 + '@types/react-dom': + specifier: ^18.0.6 + version: registry.npmjs.org/@types/react-dom@18.2.5 + '@vitejs/plugin-react': + specifier: 4.0.4 + version: registry.npmjs.org/@vitejs/plugin-react@4.0.4(vite@4.4.9) + '@vitejs/plugin-react-swc': + specifier: ^3.3.2 + version: registry.npmjs.org/@vitejs/plugin-react-swc@3.3.2(vite@4.4.9) + 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) + start-server-and-test: + specifier: ^1.14.0 + version: registry.npmjs.org/start-server-and-test@1.15.4 + typescript: + specifier: 5.1.3 + version: registry.npmjs.org/typescript@5.1.3 + vite: + specifier: 4.4.9 + version: registry.npmjs.org/vite@4.4.9 packages/react: - specifiers: - '@types/d3': ^7.4.0 - '@types/d3-drag': ^3.0.1 - '@types/d3-selection': ^3.0.3 - '@types/d3-zoom': ^3.0.1 - '@types/node': ^18.7.16 - '@types/react': '>=17' - '@types/react-dom': '>=17' - '@xyflow/eslint-config': workspace:* - '@xyflow/rollup-config': workspace:* - '@xyflow/system': workspace:* - '@xyflow/tsconfig': workspace:* - classcat: ^5.0.3 - d3-drag: ^3.0.0 - d3-selection: ^3.0.0 - d3-zoom: ^3.0.0 - react: ^18.2.0 - typescript: 5.1.3 - zustand: ^4.3.3 - dependencies: - '@types/d3': registry.npmjs.org/@types/d3/7.4.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 - '@xyflow/system': link:../system - classcat: registry.npmjs.org/classcat/5.0.4 - d3-drag: registry.npmjs.org/d3-drag/3.0.0 - d3-selection: registry.npmjs.org/d3-selection/3.0.0 - d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 - zustand: registry.npmjs.org/zustand/4.3.8_react@18.2.0 + dependencies: + '@types/d3': + specifier: ^7.4.0 + version: registry.npmjs.org/@types/d3@7.4.0 + '@types/d3-drag': + specifier: ^3.0.1 + version: registry.npmjs.org/@types/d3-drag@3.0.2 + '@types/d3-selection': + specifier: ^3.0.3 + version: registry.npmjs.org/@types/d3-selection@3.0.5 + '@types/d3-zoom': + specifier: ^3.0.1 + version: registry.npmjs.org/@types/d3-zoom@3.0.3 + '@xyflow/system': + specifier: workspace:* + version: link:../system + classcat: + specifier: ^5.0.3 + version: registry.npmjs.org/classcat@5.0.4 + d3-drag: + specifier: ^3.0.0 + version: registry.npmjs.org/d3-drag@3.0.0 + d3-selection: + specifier: ^3.0.0 + version: registry.npmjs.org/d3-selection@3.0.0 + d3-zoom: + specifier: ^3.0.0 + version: registry.npmjs.org/d3-zoom@3.0.0 + react-dom: + specifier: '>=17' + version: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) + zustand: + specifier: ^4.3.3 + version: registry.npmjs.org/zustand@4.3.8(react@18.2.0) devDependencies: - '@types/node': registry.npmjs.org/@types/node/18.16.18 - '@types/react': registry.npmjs.org/@types/react/18.2.12 - '@types/react-dom': registry.npmjs.org/@types/react-dom/18.2.5 - '@xyflow/eslint-config': link:../../tooling/eslint-config - '@xyflow/rollup-config': link:../../tooling/rollup-config - '@xyflow/tsconfig': link:../../tooling/tsconfig - react: registry.npmjs.org/react/18.2.0 - typescript: registry.npmjs.org/typescript/5.1.3 + '@types/node': + specifier: ^18.7.16 + version: registry.npmjs.org/@types/node@18.16.18 + '@types/react': + specifier: '>=17' + version: registry.npmjs.org/@types/react@18.2.12 + '@types/react-dom': + specifier: '>=17' + version: registry.npmjs.org/@types/react-dom@18.2.5 + '@xyflow/eslint-config': + specifier: workspace:* + version: link:../../tooling/eslint-config + '@xyflow/rollup-config': + specifier: workspace:* + version: link:../../tooling/rollup-config + '@xyflow/tsconfig': + specifier: workspace:* + version: link:../../tooling/tsconfig + react: + specifier: ^18.2.0 + version: registry.npmjs.org/react@18.2.0 + typescript: + specifier: 5.1.3 + version: registry.npmjs.org/typescript@5.1.3 packages/svelte: - specifiers: - '@svelte-put/shortcut': ^2.0.0 - '@sveltejs/adapter-auto': ^2.1.0 - '@sveltejs/kit': ^1.20.5 - '@sveltejs/package': ^2.1.0 - '@typescript-eslint/eslint-plugin': ^5.60.0 - '@typescript-eslint/parser': ^5.60.0 - '@xyflow/system': workspace:* - classcat: ^5.0.4 - eslint: ^8.43.0 - eslint-config-prettier: ^8.8.0 - eslint-plugin-svelte: ^2.31.1 - prettier: ^2.8.8 - prettier-plugin-svelte: ^2.10.1 - svelte: ^4.0.0 - svelte-check: ^3.4.4 - svelte-eslint-parser: ^0.31.0 - tslib: ^2.5.3 - typescript: 5.1.3 - vite: ^4.3.9 - dependencies: - '@svelte-put/shortcut': registry.npmjs.org/@svelte-put/shortcut/2.0.0 - '@xyflow/system': link:../system - classcat: registry.npmjs.org/classcat/5.0.4 + dependencies: + '@svelte-put/shortcut': + specifier: ^2.0.0 + version: registry.npmjs.org/@svelte-put/shortcut@2.0.0 + '@xyflow/system': + specifier: workspace:* + version: link:../system + classcat: + specifier: ^5.0.4 + version: registry.npmjs.org/classcat@5.0.4 devDependencies: - '@sveltejs/adapter-auto': registry.npmjs.org/@sveltejs/adapter-auto/2.1.0_@sveltejs+kit@1.20.5 - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.20.5_svelte@4.0.0+vite@4.3.9 - '@sveltejs/package': registry.npmjs.org/@sveltejs/package/2.1.0_rydvusnd4biuws73vnz24j3wlu - '@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.60.0_6yzi2ymi2jevhjfd3hf6w262e4 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.60.0_7yfldhli4vs6yywnkyiujhawka - eslint: registry.npmjs.org/eslint/8.43.0 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.43.0 - eslint-plugin-svelte: registry.npmjs.org/eslint-plugin-svelte/2.31.1_eslint@8.43.0+svelte@4.0.0 - prettier: registry.npmjs.org/prettier/2.8.8 - prettier-plugin-svelte: registry.npmjs.org/prettier-plugin-svelte/2.10.1_qjnzte5rqd6zd6el5wewwu2zei - svelte: registry.npmjs.org/svelte/4.0.0 - svelte-check: registry.npmjs.org/svelte-check/3.4.4_svelte@4.0.0 - svelte-eslint-parser: registry.npmjs.org/svelte-eslint-parser/0.31.0_svelte@4.0.0 - tslib: registry.npmjs.org/tslib/2.5.3 - typescript: registry.npmjs.org/typescript/5.1.3 - vite: registry.npmjs.org/vite/4.3.9 + '@sveltejs/adapter-auto': + specifier: ^2.1.0 + version: registry.npmjs.org/@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.20.5) + '@sveltejs/kit': + specifier: ^1.20.5 + version: registry.npmjs.org/@sveltejs/kit@1.20.5(svelte@4.0.0)(vite@4.3.9) + '@sveltejs/package': + specifier: ^2.1.0 + version: registry.npmjs.org/@sveltejs/package@2.1.0(svelte@4.0.0)(typescript@5.1.3) + '@typescript-eslint/eslint-plugin': + specifier: ^5.60.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) + '@typescript-eslint/parser': + specifier: ^5.60.0 + version: registry.npmjs.org/@typescript-eslint/parser@5.60.0(eslint@8.43.0)(typescript@5.1.3) + eslint: + specifier: ^8.43.0 + version: registry.npmjs.org/eslint@8.43.0 + eslint-config-prettier: + specifier: ^8.8.0 + version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.43.0) + eslint-plugin-svelte: + specifier: ^2.31.1 + version: registry.npmjs.org/eslint-plugin-svelte@2.31.1(eslint@8.43.0)(svelte@4.0.0) + prettier: + specifier: ^2.8.8 + version: registry.npmjs.org/prettier@2.8.8 + prettier-plugin-svelte: + specifier: ^2.10.1 + version: registry.npmjs.org/prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.0.0) + svelte: + specifier: ^4.0.0 + version: registry.npmjs.org/svelte@4.0.0 + svelte-check: + specifier: ^3.4.4 + version: registry.npmjs.org/svelte-check@3.4.4(postcss@8.4.24)(svelte@4.0.0) + svelte-eslint-parser: + specifier: ^0.31.0 + version: registry.npmjs.org/svelte-eslint-parser@0.31.0(svelte@4.0.0) + tslib: + specifier: ^2.5.3 + version: registry.npmjs.org/tslib@2.5.3 + typescript: + specifier: 5.1.3 + version: registry.npmjs.org/typescript@5.1.3 + vite: + specifier: ^4.3.9 + version: registry.npmjs.org/vite@4.3.9 packages/system: - specifiers: - '@types/d3': ^7.4.0 - '@types/d3-drag': ^3.0.1 - '@types/d3-selection': ^3.0.3 - '@types/d3-zoom': ^3.0.1 - '@types/node': ^18.7.16 - '@xyflow/eslint-config': workspace:* - '@xyflow/rollup-config': workspace:* - '@xyflow/tsconfig': workspace:* - d3-drag: ^3.0.0 - d3-selection: ^3.0.0 - d3-zoom: ^3.0.0 - typescript: 5.1.3 - dependencies: - '@types/d3': registry.npmjs.org/@types/d3/7.4.0 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 - d3-drag: registry.npmjs.org/d3-drag/3.0.0 - d3-selection: registry.npmjs.org/d3-selection/3.0.0 - d3-zoom: registry.npmjs.org/d3-zoom/3.0.0 + dependencies: + '@types/d3': + specifier: ^7.4.0 + version: registry.npmjs.org/@types/d3@7.4.0 + '@types/d3-drag': + specifier: ^3.0.1 + version: registry.npmjs.org/@types/d3-drag@3.0.2 + '@types/d3-selection': + specifier: ^3.0.3 + version: registry.npmjs.org/@types/d3-selection@3.0.5 + '@types/d3-zoom': + specifier: ^3.0.1 + version: registry.npmjs.org/@types/d3-zoom@3.0.3 + d3-drag: + specifier: ^3.0.0 + version: registry.npmjs.org/d3-drag@3.0.0 + d3-selection: + specifier: ^3.0.0 + version: registry.npmjs.org/d3-selection@3.0.0 + d3-zoom: + specifier: ^3.0.0 + version: registry.npmjs.org/d3-zoom@3.0.0 devDependencies: - '@types/node': registry.npmjs.org/@types/node/18.16.18 - '@xyflow/eslint-config': link:../../tooling/eslint-config - '@xyflow/rollup-config': link:../../tooling/rollup-config - '@xyflow/tsconfig': link:../../tooling/tsconfig - typescript: registry.npmjs.org/typescript/5.1.3 + '@types/node': + specifier: ^18.7.16 + version: registry.npmjs.org/@types/node@18.16.18 + '@xyflow/eslint-config': + specifier: workspace:* + version: link:../../tooling/eslint-config + '@xyflow/rollup-config': + specifier: workspace:* + version: link:../../tooling/rollup-config + '@xyflow/tsconfig': + specifier: workspace:* + version: link:../../tooling/tsconfig + typescript: + specifier: 5.1.3 + version: registry.npmjs.org/typescript@5.1.3 tooling/eslint-config: - specifiers: - eslint: ^8.22.0 - eslint-config-prettier: ^8.5.0 - eslint-config-turbo: latest - eslint-plugin-react: latest devDependencies: - eslint: registry.npmjs.org/eslint/8.42.0 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.42.0 - eslint-config-turbo: registry.npmjs.org/eslint-config-turbo/1.10.6_eslint@8.42.0 - eslint-plugin-react: registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.42.0 + eslint: + specifier: ^8.22.0 + version: registry.npmjs.org/eslint@8.42.0 + eslint-config-prettier: + specifier: ^8.5.0 + version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.42.0) + eslint-config-turbo: + specifier: latest + version: registry.npmjs.org/eslint-config-turbo@1.10.6(eslint@8.42.0) + eslint-plugin-react: + specifier: latest + version: registry.npmjs.org/eslint-plugin-react@7.33.1(eslint@8.42.0) tooling/rollup-config: - specifiers: - '@rollup/plugin-commonjs': ^25.0.0 - '@rollup/plugin-node-resolve': ^15.1.0 - '@rollup/plugin-replace': ^5.0.2 - '@rollup/plugin-terser': ^0.4.3 - '@rollup/plugin-typescript': 11.0.0 - rollup: ^3.23.0 - rollup-plugin-peer-deps-external: ^2.2.4 - typescript: ^4.9.4 devDependencies: - '@rollup/plugin-commonjs': registry.npmjs.org/@rollup/plugin-commonjs/25.0.1_rollup@3.25.1 - '@rollup/plugin-node-resolve': registry.npmjs.org/@rollup/plugin-node-resolve/15.1.0_rollup@3.25.1 - '@rollup/plugin-replace': registry.npmjs.org/@rollup/plugin-replace/5.0.2_rollup@3.25.1 - '@rollup/plugin-terser': registry.npmjs.org/@rollup/plugin-terser/0.4.3_rollup@3.25.1 - '@rollup/plugin-typescript': registry.npmjs.org/@rollup/plugin-typescript/11.0.0_kiy5yv7g7dmpxbgwdlsemwipi4 - rollup: registry.npmjs.org/rollup/3.25.1 - rollup-plugin-peer-deps-external: registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4_rollup@3.25.1 - typescript: registry.npmjs.org/typescript/4.9.5 - - tooling/tsconfig: - specifiers: {} + '@rollup/plugin-commonjs': + specifier: ^25.0.0 + version: registry.npmjs.org/@rollup/plugin-commonjs@25.0.1(rollup@3.25.1) + '@rollup/plugin-node-resolve': + specifier: ^15.1.0 + version: registry.npmjs.org/@rollup/plugin-node-resolve@15.1.0(rollup@3.25.1) + '@rollup/plugin-replace': + specifier: ^5.0.2 + version: registry.npmjs.org/@rollup/plugin-replace@5.0.2(rollup@3.25.1) + '@rollup/plugin-terser': + specifier: ^0.4.3 + version: registry.npmjs.org/@rollup/plugin-terser@0.4.3(rollup@3.25.1) + '@rollup/plugin-typescript': + specifier: 11.0.0 + version: registry.npmjs.org/@rollup/plugin-typescript@11.0.0(rollup@3.25.1)(typescript@4.9.5) + rollup: + specifier: ^3.23.0 + version: registry.npmjs.org/rollup@3.25.1 + rollup-plugin-peer-deps-external: + specifier: ^2.2.4 + version: registry.npmjs.org/rollup-plugin-peer-deps-external@2.2.4(rollup@3.25.1) + typescript: + specifier: ^4.9.4 + version: registry.npmjs.org/typescript@4.9.5 + + tooling/tsconfig: {} packages: - registry.npmjs.org/@ampproject/remapping/2.2.1: + registry.npmjs.org/@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz} name: '@ampproject/remapping' version: 2.2.1 engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.3 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping@0.3.3 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.18 + dev: true + + registry.npmjs.org/@babel/code-frame@7.22.10: + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz} + name: '@babel/code-frame' + version: 7.22.10 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': registry.npmjs.org/@babel/highlight@7.22.10 + chalk: registry.npmjs.org/chalk@2.4.2 dev: true - registry.npmjs.org/@babel/code-frame/7.22.5: + registry.npmjs.org/@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz} name: '@babel/code-frame' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': registry.npmjs.org/@babel/highlight/7.22.5 + '@babel/highlight': registry.npmjs.org/@babel/highlight@7.22.5 dev: true - registry.npmjs.org/@babel/compat-data/7.22.5: - resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz} + registry.npmjs.org/@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz} name: '@babel/compat-data' - version: 7.22.5 + version: 7.22.9 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/core/7.22.5: - resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz} + registry.npmjs.org/@babel/core@7.22.10: + resolution: {integrity: sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz} name: '@babel/core' - version: 7.22.5 + version: 7.22.10 engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping/2.2.1 - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.22.5 - '@babel/generator': registry.npmjs.org/@babel/generator/7.22.5 - '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets/7.22.5_@babel+core@7.22.5 - '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms/7.22.5 - '@babel/helpers': registry.npmjs.org/@babel/helpers/7.22.5 - '@babel/parser': registry.npmjs.org/@babel/parser/7.22.5 - '@babel/template': registry.npmjs.org/@babel/template/7.22.5 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.22.5 - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 - convert-source-map: registry.npmjs.org/convert-source-map/1.9.0 - debug: registry.npmjs.org/debug/4.3.4 - gensync: registry.npmjs.org/gensync/1.0.0-beta.2 - json5: registry.npmjs.org/json5/2.2.3 - semver: registry.npmjs.org/semver/6.3.0 + '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping@2.2.1 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.22.10 + '@babel/generator': registry.npmjs.org/@babel/generator@7.22.10 + '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets@7.22.10 + '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10) + '@babel/helpers': registry.npmjs.org/@babel/helpers@7.22.10 + '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 + '@babel/template': registry.npmjs.org/@babel/template@7.22.5 + '@babel/traverse': registry.npmjs.org/@babel/traverse@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + convert-source-map: registry.npmjs.org/convert-source-map@1.9.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + gensync: registry.npmjs.org/gensync@1.0.0-beta.2 + json5: registry.npmjs.org/json5@2.2.3 + semver: registry.npmjs.org/semver@6.3.1 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@babel/generator/7.22.5: - resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz} + registry.npmjs.org/@babel/generator@7.22.10: + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz} name: '@babel/generator' - version: 7.22.5 + version: 7.22.10 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.3 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 - jsesc: registry.npmjs.org/jsesc/2.5.2 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping@0.3.3 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.19 + jsesc: registry.npmjs.org/jsesc@2.5.2 dev: true - registry.npmjs.org/@babel/helper-compilation-targets/7.22.5_@babel+core@7.22.5: - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz} - id: registry.npmjs.org/@babel/helper-compilation-targets/7.22.5 + registry.npmjs.org/@babel/helper-compilation-targets@7.22.10: + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz} name: '@babel/helper-compilation-targets' - version: 7.22.5 + version: 7.22.10 engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': registry.npmjs.org/@babel/compat-data/7.22.5 - '@babel/core': registry.npmjs.org/@babel/core/7.22.5 - '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option/7.22.5 - browserslist: registry.npmjs.org/browserslist/4.21.8 - lru-cache: registry.npmjs.org/lru-cache/5.1.1 - semver: registry.npmjs.org/semver/6.3.0 + '@babel/compat-data': registry.npmjs.org/@babel/compat-data@7.22.9 + '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option@7.22.5 + browserslist: registry.npmjs.org/browserslist@4.21.10 + lru-cache: registry.npmjs.org/lru-cache@5.1.1 + semver: registry.npmjs.org/semver@6.3.1 dev: true - registry.npmjs.org/@babel/helper-environment-visitor/7.22.5: + registry.npmjs.org/@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz} name: '@babel/helper-environment-visitor' version: 7.22.5 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/helper-function-name/7.22.5: + registry.npmjs.org/@babel/helper-function-name@7.22.5: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz} name: '@babel/helper-function-name' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/template': registry.npmjs.org/@babel/template/7.22.5 - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/template': registry.npmjs.org/@babel/template@7.22.5 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 dev: true - registry.npmjs.org/@babel/helper-hoist-variables/7.22.5: + registry.npmjs.org/@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz} name: '@babel/helper-hoist-variables' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 dev: true - registry.npmjs.org/@babel/helper-module-imports/7.22.5: + registry.npmjs.org/@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz} name: '@babel/helper-module-imports' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 dev: true - registry.npmjs.org/@babel/helper-module-transforms/7.22.5: - resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz} + registry.npmjs.org/@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz} + id: registry.npmjs.org/@babel/helper-module-transforms/7.22.9 name: '@babel/helper-module-transforms' - version: 7.22.5 + version: 7.22.9 engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.22.5 - '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports/7.22.5 - '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access/7.22.5 - '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.22.5 - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.22.5 - '@babel/template': registry.npmjs.org/@babel/template/7.22.5 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.22.5 - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 - transitivePeerDependencies: - - supports-color + '@babel/core': registry.npmjs.org/@babel/core@7.22.10 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.5 + '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports@7.22.5 + '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access@7.22.5 + '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6 + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.5 dev: true - registry.npmjs.org/@babel/helper-plugin-utils/7.22.5: + registry.npmjs.org/@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz} name: '@babel/helper-plugin-utils' version: 7.22.5 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/helper-simple-access/7.22.5: + registry.npmjs.org/@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz} name: '@babel/helper-simple-access' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 dev: true - registry.npmjs.org/@babel/helper-split-export-declaration/7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz} + registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz} name: '@babel/helper-split-export-declaration' - version: 7.22.5 + version: 7.22.6 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 dev: true - registry.npmjs.org/@babel/helper-string-parser/7.22.5: + registry.npmjs.org/@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz} name: '@babel/helper-string-parser' version: 7.22.5 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/helper-validator-identifier/7.22.5: + registry.npmjs.org/@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz} name: '@babel/helper-validator-identifier' version: 7.22.5 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/helper-validator-option/7.22.5: + registry.npmjs.org/@babel/helper-validator-option@7.22.5: resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz} name: '@babel/helper-validator-option' version: 7.22.5 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/@babel/helpers/7.22.5: - resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz} + registry.npmjs.org/@babel/helpers@7.22.10: + resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz} name: '@babel/helpers' - version: 7.22.5 + version: 7.22.10 engines: {node: '>=6.9.0'} dependencies: - '@babel/template': registry.npmjs.org/@babel/template/7.22.5 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.22.5 - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/template': registry.npmjs.org/@babel/template@7.22.5 + '@babel/traverse': registry.npmjs.org/@babel/traverse@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@babel/highlight/7.22.5: + registry.npmjs.org/@babel/highlight@7.22.10: + resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz} + name: '@babel/highlight' + version: 7.22.10 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.5 + chalk: registry.npmjs.org/chalk@2.4.2 + js-tokens: registry.npmjs.org/js-tokens@4.0.0 + dev: true + + registry.npmjs.org/@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz} name: '@babel/highlight' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.22.5 - chalk: registry.npmjs.org/chalk/2.4.2 - js-tokens: registry.npmjs.org/js-tokens/4.0.0 + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.5 + chalk: registry.npmjs.org/chalk@2.4.2 + js-tokens: registry.npmjs.org/js-tokens@4.0.0 dev: true - registry.npmjs.org/@babel/parser/7.22.5: - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz} + registry.npmjs.org/@babel/parser@7.22.10: + resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz} name: '@babel/parser' - version: 7.22.5 + version: 7.22.10 engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 dev: true - registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.22.5_@babel+core@7.22.5: + registry.npmjs.org/@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz} id: registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.22.5 name: '@babel/plugin-transform-react-jsx-self' @@ -465,11 +582,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.22.5 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.22.5 + '@babel/core': registry.npmjs.org/@babel/core@7.22.10 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.22.5 dev: true - registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.22.5_@babel+core@7.22.5: + registry.npmjs.org/@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz} id: registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.22.5 name: '@babel/plugin-transform-react-jsx-source' @@ -478,303 +595,303 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.22.5 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.22.5 + '@babel/core': registry.npmjs.org/@babel/core@7.22.10 + '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils@7.22.5 dev: true - registry.npmjs.org/@babel/runtime/7.22.5: + registry.npmjs.org/@babel/runtime@7.22.5: resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz} name: '@babel/runtime' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: registry.npmjs.org/regenerator-runtime/0.13.11 + regenerator-runtime: registry.npmjs.org/regenerator-runtime@0.13.11 dev: true - registry.npmjs.org/@babel/template/7.22.5: + registry.npmjs.org/@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz} name: '@babel/template' version: 7.22.5 engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.22.5 - '@babel/parser': registry.npmjs.org/@babel/parser/7.22.5 - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.22.10 + '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 dev: true - registry.npmjs.org/@babel/traverse/7.22.5: - resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz} + registry.npmjs.org/@babel/traverse@7.22.10: + resolution: {integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz} name: '@babel/traverse' - version: 7.22.5 + version: 7.22.10 engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.22.5 - '@babel/generator': registry.npmjs.org/@babel/generator/7.22.5 - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.22.5 - '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name/7.22.5 - '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables/7.22.5 - '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.22.5 - '@babel/parser': registry.npmjs.org/@babel/parser/7.22.5 - '@babel/types': registry.npmjs.org/@babel/types/7.22.5 - debug: registry.npmjs.org/debug/4.3.4 - globals: registry.npmjs.org/globals/11.12.0 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.22.10 + '@babel/generator': registry.npmjs.org/@babel/generator@7.22.10 + '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor@7.22.5 + '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name@7.22.5 + '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables@7.22.5 + '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6 + '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + globals: registry.npmjs.org/globals@11.12.0 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@babel/types/7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz} + registry.npmjs.org/@babel/types@7.22.10: + resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz} name: '@babel/types' - version: 7.22.5 + version: 7.22.10 engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser/7.22.5 - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.22.5 - to-fast-properties: registry.npmjs.org/to-fast-properties/2.0.0 + '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser@7.22.5 + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.5 + to-fast-properties: registry.npmjs.org/to-fast-properties@2.0.0 dev: true - registry.npmjs.org/@changesets/apply-release-plan/6.1.3: + registry.npmjs.org/@changesets/apply-release-plan@6.1.3: resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.1.3.tgz} name: '@changesets/apply-release-plan' version: 6.1.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/config': registry.npmjs.org/@changesets/config/2.3.0 - '@changesets/get-version-range-type': registry.npmjs.org/@changesets/get-version-range-type/0.3.2 - '@changesets/git': registry.npmjs.org/@changesets/git/2.0.0 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 - detect-indent: registry.npmjs.org/detect-indent/6.1.0 - fs-extra: registry.npmjs.org/fs-extra/7.0.1 - lodash.startcase: registry.npmjs.org/lodash.startcase/4.4.0 - outdent: registry.npmjs.org/outdent/0.5.0 - prettier: registry.npmjs.org/prettier/2.8.8 - resolve-from: registry.npmjs.org/resolve-from/5.0.0 - semver: registry.npmjs.org/semver/5.7.1 - dev: true - - registry.npmjs.org/@changesets/assemble-release-plan/5.2.3: + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/config': registry.npmjs.org/@changesets/config@2.3.0 + '@changesets/get-version-range-type': registry.npmjs.org/@changesets/get-version-range-type@0.3.2 + '@changesets/git': registry.npmjs.org/@changesets/git@2.0.0 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 + detect-indent: registry.npmjs.org/detect-indent@6.1.0 + fs-extra: registry.npmjs.org/fs-extra@7.0.1 + lodash.startcase: registry.npmjs.org/lodash.startcase@4.4.0 + outdent: registry.npmjs.org/outdent@0.5.0 + prettier: registry.npmjs.org/prettier@2.8.8 + resolve-from: registry.npmjs.org/resolve-from@5.0.0 + semver: registry.npmjs.org/semver@5.7.1 + dev: true + + registry.npmjs.org/@changesets/assemble-release-plan@5.2.3: resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.3.tgz} name: '@changesets/assemble-release-plan' version: 5.2.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.5 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 - semver: registry.npmjs.org/semver/5.7.1 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/errors': registry.npmjs.org/@changesets/errors@0.1.4 + '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph@1.3.5 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 + semver: registry.npmjs.org/semver@5.7.1 dev: true - registry.npmjs.org/@changesets/changelog-git/0.1.14: + registry.npmjs.org/@changesets/changelog-git@0.1.14: resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.14.tgz} name: '@changesets/changelog-git' version: 0.1.14 dependencies: - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 dev: true - registry.npmjs.org/@changesets/changelog-github/0.4.8: + registry.npmjs.org/@changesets/changelog-github@0.4.8: resolution: {integrity: sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.4.8.tgz} name: '@changesets/changelog-github' version: 0.4.8 dependencies: - '@changesets/get-github-info': registry.npmjs.org/@changesets/get-github-info/0.5.2 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - dotenv: registry.npmjs.org/dotenv/8.6.0 + '@changesets/get-github-info': registry.npmjs.org/@changesets/get-github-info@0.5.2 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + dotenv: registry.npmjs.org/dotenv@8.6.0 transitivePeerDependencies: - encoding dev: true - registry.npmjs.org/@changesets/cli/2.26.1: + registry.npmjs.org/@changesets/cli@2.26.1: resolution: {integrity: sha512-XnTa+b51vt057fyAudvDKGB0Sh72xutQZNAdXkCqPBKO2zvs2yYZx5hFZj1u9cbtpwM6Sxtcr02/FQJfZOzemQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/cli/-/cli-2.26.1.tgz} name: '@changesets/cli' version: 2.26.1 hasBin: true dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/apply-release-plan': registry.npmjs.org/@changesets/apply-release-plan/6.1.3 - '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan/5.2.3 - '@changesets/changelog-git': registry.npmjs.org/@changesets/changelog-git/0.1.14 - '@changesets/config': registry.npmjs.org/@changesets/config/2.3.0 - '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.5 - '@changesets/get-release-plan': registry.npmjs.org/@changesets/get-release-plan/3.0.16 - '@changesets/git': registry.npmjs.org/@changesets/git/2.0.0 - '@changesets/logger': registry.npmjs.org/@changesets/logger/0.0.5 - '@changesets/pre': registry.npmjs.org/@changesets/pre/1.0.14 - '@changesets/read': registry.npmjs.org/@changesets/read/0.5.9 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@changesets/write': registry.npmjs.org/@changesets/write/0.2.3 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 - '@types/is-ci': registry.npmjs.org/@types/is-ci/3.0.0 - '@types/semver': registry.npmjs.org/@types/semver/6.2.3 - ansi-colors: registry.npmjs.org/ansi-colors/4.1.3 - chalk: registry.npmjs.org/chalk/2.4.2 - enquirer: registry.npmjs.org/enquirer/2.3.6 - external-editor: registry.npmjs.org/external-editor/3.1.0 - fs-extra: registry.npmjs.org/fs-extra/7.0.1 - human-id: registry.npmjs.org/human-id/1.0.2 - is-ci: registry.npmjs.org/is-ci/3.0.1 - meow: registry.npmjs.org/meow/6.1.1 - outdent: registry.npmjs.org/outdent/0.5.0 - p-limit: registry.npmjs.org/p-limit/2.3.0 - preferred-pm: registry.npmjs.org/preferred-pm/3.0.3 - resolve-from: registry.npmjs.org/resolve-from/5.0.0 - semver: registry.npmjs.org/semver/5.7.1 - spawndamnit: registry.npmjs.org/spawndamnit/2.0.0 - term-size: registry.npmjs.org/term-size/2.2.1 - tty-table: registry.npmjs.org/tty-table/4.2.1 - dev: true - - registry.npmjs.org/@changesets/config/2.3.0: + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/apply-release-plan': registry.npmjs.org/@changesets/apply-release-plan@6.1.3 + '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan@5.2.3 + '@changesets/changelog-git': registry.npmjs.org/@changesets/changelog-git@0.1.14 + '@changesets/config': registry.npmjs.org/@changesets/config@2.3.0 + '@changesets/errors': registry.npmjs.org/@changesets/errors@0.1.4 + '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph@1.3.5 + '@changesets/get-release-plan': registry.npmjs.org/@changesets/get-release-plan@3.0.16 + '@changesets/git': registry.npmjs.org/@changesets/git@2.0.0 + '@changesets/logger': registry.npmjs.org/@changesets/logger@0.0.5 + '@changesets/pre': registry.npmjs.org/@changesets/pre@1.0.14 + '@changesets/read': registry.npmjs.org/@changesets/read@0.5.9 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@changesets/write': registry.npmjs.org/@changesets/write@0.2.3 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 + '@types/is-ci': registry.npmjs.org/@types/is-ci@3.0.0 + '@types/semver': registry.npmjs.org/@types/semver@6.2.3 + ansi-colors: registry.npmjs.org/ansi-colors@4.1.3 + chalk: registry.npmjs.org/chalk@2.4.2 + enquirer: registry.npmjs.org/enquirer@2.3.6 + external-editor: registry.npmjs.org/external-editor@3.1.0 + fs-extra: registry.npmjs.org/fs-extra@7.0.1 + human-id: registry.npmjs.org/human-id@1.0.2 + is-ci: registry.npmjs.org/is-ci@3.0.1 + meow: registry.npmjs.org/meow@6.1.1 + outdent: registry.npmjs.org/outdent@0.5.0 + p-limit: registry.npmjs.org/p-limit@2.3.0 + preferred-pm: registry.npmjs.org/preferred-pm@3.0.3 + resolve-from: registry.npmjs.org/resolve-from@5.0.0 + semver: registry.npmjs.org/semver@5.7.1 + spawndamnit: registry.npmjs.org/spawndamnit@2.0.0 + term-size: registry.npmjs.org/term-size@2.2.1 + tty-table: registry.npmjs.org/tty-table@4.2.1 + dev: true + + registry.npmjs.org/@changesets/config@2.3.0: resolution: {integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/config/-/config-2.3.0.tgz} name: '@changesets/config' version: 2.3.0 dependencies: - '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph/1.3.5 - '@changesets/logger': registry.npmjs.org/@changesets/logger/0.0.5 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 - fs-extra: registry.npmjs.org/fs-extra/7.0.1 - micromatch: registry.npmjs.org/micromatch/4.0.5 + '@changesets/errors': registry.npmjs.org/@changesets/errors@0.1.4 + '@changesets/get-dependents-graph': registry.npmjs.org/@changesets/get-dependents-graph@1.3.5 + '@changesets/logger': registry.npmjs.org/@changesets/logger@0.0.5 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 + fs-extra: registry.npmjs.org/fs-extra@7.0.1 + micromatch: registry.npmjs.org/micromatch@4.0.5 dev: true - registry.npmjs.org/@changesets/errors/0.1.4: + registry.npmjs.org/@changesets/errors@0.1.4: resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/errors/-/errors-0.1.4.tgz} name: '@changesets/errors' version: 0.1.4 dependencies: - extendable-error: registry.npmjs.org/extendable-error/0.1.7 + extendable-error: registry.npmjs.org/extendable-error@0.1.7 dev: true - registry.npmjs.org/@changesets/get-dependents-graph/1.3.5: + registry.npmjs.org/@changesets/get-dependents-graph@1.3.5: resolution: {integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.5.tgz} name: '@changesets/get-dependents-graph' version: 1.3.5 dependencies: - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 - chalk: registry.npmjs.org/chalk/2.4.2 - fs-extra: registry.npmjs.org/fs-extra/7.0.1 - semver: registry.npmjs.org/semver/5.7.1 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 + chalk: registry.npmjs.org/chalk@2.4.2 + fs-extra: registry.npmjs.org/fs-extra@7.0.1 + semver: registry.npmjs.org/semver@5.7.1 dev: true - registry.npmjs.org/@changesets/get-github-info/0.5.2: + registry.npmjs.org/@changesets/get-github-info@0.5.2: resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.5.2.tgz} name: '@changesets/get-github-info' version: 0.5.2 dependencies: - dataloader: registry.npmjs.org/dataloader/1.4.0 - node-fetch: registry.npmjs.org/node-fetch/2.6.11 + dataloader: registry.npmjs.org/dataloader@1.4.0 + node-fetch: registry.npmjs.org/node-fetch@2.6.11 transitivePeerDependencies: - encoding dev: true - registry.npmjs.org/@changesets/get-release-plan/3.0.16: + registry.npmjs.org/@changesets/get-release-plan@3.0.16: resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.16.tgz} name: '@changesets/get-release-plan' version: 3.0.16 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan/5.2.3 - '@changesets/config': registry.npmjs.org/@changesets/config/2.3.0 - '@changesets/pre': registry.npmjs.org/@changesets/pre/1.0.14 - '@changesets/read': registry.npmjs.org/@changesets/read/0.5.9 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/assemble-release-plan': registry.npmjs.org/@changesets/assemble-release-plan@5.2.3 + '@changesets/config': registry.npmjs.org/@changesets/config@2.3.0 + '@changesets/pre': registry.npmjs.org/@changesets/pre@1.0.14 + '@changesets/read': registry.npmjs.org/@changesets/read@0.5.9 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 dev: true - registry.npmjs.org/@changesets/get-version-range-type/0.3.2: + registry.npmjs.org/@changesets/get-version-range-type@0.3.2: resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz} name: '@changesets/get-version-range-type' version: 0.3.2 dev: true - registry.npmjs.org/@changesets/git/2.0.0: + registry.npmjs.org/@changesets/git@2.0.0: resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/git/-/git-2.0.0.tgz} name: '@changesets/git' version: 2.0.0 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 - is-subdir: registry.npmjs.org/is-subdir/1.2.0 - micromatch: registry.npmjs.org/micromatch/4.0.5 - spawndamnit: registry.npmjs.org/spawndamnit/2.0.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/errors': registry.npmjs.org/@changesets/errors@0.1.4 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 + is-subdir: registry.npmjs.org/is-subdir@1.2.0 + micromatch: registry.npmjs.org/micromatch@4.0.5 + spawndamnit: registry.npmjs.org/spawndamnit@2.0.0 dev: true - registry.npmjs.org/@changesets/logger/0.0.5: + registry.npmjs.org/@changesets/logger@0.0.5: resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/logger/-/logger-0.0.5.tgz} name: '@changesets/logger' version: 0.0.5 dependencies: - chalk: registry.npmjs.org/chalk/2.4.2 + chalk: registry.npmjs.org/chalk@2.4.2 dev: true - registry.npmjs.org/@changesets/parse/0.3.16: + registry.npmjs.org/@changesets/parse@0.3.16: resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/parse/-/parse-0.3.16.tgz} name: '@changesets/parse' version: 0.3.16 dependencies: - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - js-yaml: registry.npmjs.org/js-yaml/3.14.1 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + js-yaml: registry.npmjs.org/js-yaml@3.14.1 dev: true - registry.npmjs.org/@changesets/pre/1.0.14: + registry.npmjs.org/@changesets/pre@1.0.14: resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/pre/-/pre-1.0.14.tgz} name: '@changesets/pre' version: 1.0.14 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/errors': registry.npmjs.org/@changesets/errors/0.1.4 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages/1.1.3 - fs-extra: registry.npmjs.org/fs-extra/7.0.1 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/errors': registry.npmjs.org/@changesets/errors@0.1.4 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + '@manypkg/get-packages': registry.npmjs.org/@manypkg/get-packages@1.1.3 + fs-extra: registry.npmjs.org/fs-extra@7.0.1 dev: true - registry.npmjs.org/@changesets/read/0.5.9: + registry.npmjs.org/@changesets/read@0.5.9: resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/read/-/read-0.5.9.tgz} name: '@changesets/read' version: 0.5.9 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/git': registry.npmjs.org/@changesets/git/2.0.0 - '@changesets/logger': registry.npmjs.org/@changesets/logger/0.0.5 - '@changesets/parse': registry.npmjs.org/@changesets/parse/0.3.16 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - chalk: registry.npmjs.org/chalk/2.4.2 - fs-extra: registry.npmjs.org/fs-extra/7.0.1 - p-filter: registry.npmjs.org/p-filter/2.1.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/git': registry.npmjs.org/@changesets/git@2.0.0 + '@changesets/logger': registry.npmjs.org/@changesets/logger@0.0.5 + '@changesets/parse': registry.npmjs.org/@changesets/parse@0.3.16 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + chalk: registry.npmjs.org/chalk@2.4.2 + fs-extra: registry.npmjs.org/fs-extra@7.0.1 + p-filter: registry.npmjs.org/p-filter@2.1.0 dev: true - registry.npmjs.org/@changesets/types/4.1.0: + registry.npmjs.org/@changesets/types@4.1.0: resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz} name: '@changesets/types' version: 4.1.0 dev: true - registry.npmjs.org/@changesets/types/5.2.1: + registry.npmjs.org/@changesets/types@5.2.1: resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/types/-/types-5.2.1.tgz} name: '@changesets/types' version: 5.2.1 dev: true - registry.npmjs.org/@changesets/write/0.2.3: + registry.npmjs.org/@changesets/write@0.2.3: resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/write/-/write-0.2.3.tgz} name: '@changesets/write' version: 0.2.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/types': registry.npmjs.org/@changesets/types/5.2.1 - fs-extra: registry.npmjs.org/fs-extra/7.0.1 - human-id: registry.npmjs.org/human-id/1.0.2 - prettier: registry.npmjs.org/prettier/2.8.8 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/types': registry.npmjs.org/@changesets/types@5.2.1 + fs-extra: registry.npmjs.org/fs-extra@7.0.1 + human-id: registry.npmjs.org/human-id@1.0.2 + prettier: registry.npmjs.org/prettier@2.8.8 dev: true - registry.npmjs.org/@colors/colors/1.5.0: + registry.npmjs.org/@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz} name: '@colors/colors' version: 1.5.0 @@ -783,51 +900,73 @@ packages: dev: true optional: true - registry.npmjs.org/@cypress/request/2.88.11: - resolution: {integrity: sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz} + registry.npmjs.org/@cypress/request@2.88.12: + resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz} name: '@cypress/request' - version: 2.88.11 + version: 2.88.12 engines: {node: '>= 6'} dependencies: - aws-sign2: registry.npmjs.org/aws-sign2/0.7.0 - aws4: registry.npmjs.org/aws4/1.12.0 - caseless: registry.npmjs.org/caseless/0.12.0 - combined-stream: registry.npmjs.org/combined-stream/1.0.8 - extend: registry.npmjs.org/extend/3.0.2 - forever-agent: registry.npmjs.org/forever-agent/0.6.1 - form-data: registry.npmjs.org/form-data/2.3.3 - http-signature: registry.npmjs.org/http-signature/1.3.6 - is-typedarray: registry.npmjs.org/is-typedarray/1.0.0 - isstream: registry.npmjs.org/isstream/0.1.2 - json-stringify-safe: registry.npmjs.org/json-stringify-safe/5.0.1 - mime-types: registry.npmjs.org/mime-types/2.1.35 - performance-now: registry.npmjs.org/performance-now/2.1.0 - qs: registry.npmjs.org/qs/6.10.4 - safe-buffer: registry.npmjs.org/safe-buffer/5.2.1 - tough-cookie: registry.npmjs.org/tough-cookie/2.5.0 - tunnel-agent: registry.npmjs.org/tunnel-agent/0.6.0 - uuid: registry.npmjs.org/uuid/8.3.2 - dev: true - - registry.npmjs.org/@cypress/skip-test/2.6.1: + aws-sign2: registry.npmjs.org/aws-sign2@0.7.0 + aws4: registry.npmjs.org/aws4@1.12.0 + caseless: registry.npmjs.org/caseless@0.12.0 + combined-stream: registry.npmjs.org/combined-stream@1.0.8 + extend: registry.npmjs.org/extend@3.0.2 + forever-agent: registry.npmjs.org/forever-agent@0.6.1 + form-data: registry.npmjs.org/form-data@2.3.3 + http-signature: registry.npmjs.org/http-signature@1.3.6 + is-typedarray: registry.npmjs.org/is-typedarray@1.0.0 + isstream: registry.npmjs.org/isstream@0.1.2 + json-stringify-safe: registry.npmjs.org/json-stringify-safe@5.0.1 + mime-types: registry.npmjs.org/mime-types@2.1.35 + performance-now: registry.npmjs.org/performance-now@2.1.0 + qs: registry.npmjs.org/qs@6.10.4 + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 + tough-cookie: registry.npmjs.org/tough-cookie@4.1.3 + tunnel-agent: registry.npmjs.org/tunnel-agent@0.6.0 + uuid: registry.npmjs.org/uuid@8.3.2 + dev: true + + registry.npmjs.org/@cypress/skip-test@2.6.1: resolution: {integrity: sha512-X+ibefBiuOmC5gKG91wRIT0/OqXeETYvu7zXktjZ3yLeO186Y8ia0K7/gQUpAwuUi28DuqMd1+7tBQVtPkzbPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@cypress/skip-test/-/skip-test-2.6.1.tgz} name: '@cypress/skip-test' version: 2.6.1 dev: true - registry.npmjs.org/@cypress/xvfb/1.2.4_supports-color@8.1.1: + registry.npmjs.org/@cypress/xvfb@1.2.4(supports-color@8.1.1): resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz} id: registry.npmjs.org/@cypress/xvfb/1.2.4 name: '@cypress/xvfb' version: 1.2.4 dependencies: - debug: registry.npmjs.org/debug/3.2.7_supports-color@8.1.1 - lodash.once: registry.npmjs.org/lodash.once/4.1.1 + debug: registry.npmjs.org/debug@3.2.7(supports-color@8.1.1) + lodash.once: registry.npmjs.org/lodash.once@4.1.1 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@esbuild/android-arm/0.17.19: + registry.npmjs.org/@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz} + name: '@esbuild/android-arm64' + version: 0.17.19 + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz} + name: '@esbuild/android-arm64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/android-arm@0.17.19: resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz} name: '@esbuild/android-arm' version: 0.17.19 @@ -838,18 +977,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/android-arm64/0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz} - name: '@esbuild/android-arm64' - version: 0.17.19 + registry.npmjs.org/@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz} + name: '@esbuild/android-arm' + version: 0.18.20 engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - registry.npmjs.org/@esbuild/android-x64/0.17.19: + registry.npmjs.org/@esbuild/android-x64@0.17.19: resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz} name: '@esbuild/android-x64' version: 0.17.19 @@ -860,7 +999,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/darwin-arm64/0.17.19: + registry.npmjs.org/@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz} + name: '@esbuild/android-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/darwin-arm64@0.17.19: resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz} name: '@esbuild/darwin-arm64' version: 0.17.19 @@ -871,7 +1021,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/darwin-x64/0.17.19: + registry.npmjs.org/@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz} + name: '@esbuild/darwin-arm64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/darwin-x64@0.17.19: resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz} name: '@esbuild/darwin-x64' version: 0.17.19 @@ -882,7 +1043,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/freebsd-arm64/0.17.19: + registry.npmjs.org/@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz} + name: '@esbuild/darwin-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/freebsd-arm64@0.17.19: resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz} name: '@esbuild/freebsd-arm64' version: 0.17.19 @@ -893,7 +1065,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/freebsd-x64/0.17.19: + registry.npmjs.org/@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz} + name: '@esbuild/freebsd-arm64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/freebsd-x64@0.17.19: resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz} name: '@esbuild/freebsd-x64' version: 0.17.19 @@ -904,7 +1087,40 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-arm/0.17.19: + registry.npmjs.org/@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz} + name: '@esbuild/freebsd-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz} + name: '@esbuild/linux-arm64' + version: 0.17.19 + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz} + name: '@esbuild/linux-arm64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-arm@0.17.19: resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz} name: '@esbuild/linux-arm' version: 0.17.19 @@ -915,18 +1131,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-arm64/0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz} - name: '@esbuild/linux-arm64' - version: 0.17.19 + registry.npmjs.org/@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz} + name: '@esbuild/linux-arm' + version: 0.18.20 engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - registry.npmjs.org/@esbuild/linux-ia32/0.17.19: + registry.npmjs.org/@esbuild/linux-ia32@0.17.19: resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz} name: '@esbuild/linux-ia32' version: 0.17.19 @@ -937,7 +1153,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-loong64/0.17.19: + registry.npmjs.org/@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz} + name: '@esbuild/linux-ia32' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-loong64@0.17.19: resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz} name: '@esbuild/linux-loong64' version: 0.17.19 @@ -948,7 +1175,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-mips64el/0.17.19: + registry.npmjs.org/@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz} + name: '@esbuild/linux-loong64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-mips64el@0.17.19: resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz} name: '@esbuild/linux-mips64el' version: 0.17.19 @@ -959,7 +1197,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-ppc64/0.17.19: + registry.npmjs.org/@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz} + name: '@esbuild/linux-mips64el' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-ppc64@0.17.19: resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz} name: '@esbuild/linux-ppc64' version: 0.17.19 @@ -970,7 +1219,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-riscv64/0.17.19: + registry.npmjs.org/@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz} + name: '@esbuild/linux-ppc64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-riscv64@0.17.19: resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz} name: '@esbuild/linux-riscv64' version: 0.17.19 @@ -981,7 +1241,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-s390x/0.17.19: + registry.npmjs.org/@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz} + name: '@esbuild/linux-riscv64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-s390x@0.17.19: resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz} name: '@esbuild/linux-s390x' version: 0.17.19 @@ -992,7 +1263,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/linux-x64/0.17.19: + registry.npmjs.org/@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz} + name: '@esbuild/linux-s390x' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-x64@0.17.19: resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz} name: '@esbuild/linux-x64' version: 0.17.19 @@ -1003,7 +1285,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/netbsd-x64/0.17.19: + registry.npmjs.org/@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz} + name: '@esbuild/linux-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/netbsd-x64@0.17.19: resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz} name: '@esbuild/netbsd-x64' version: 0.17.19 @@ -1014,7 +1307,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/openbsd-x64/0.17.19: + registry.npmjs.org/@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz} + name: '@esbuild/netbsd-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/openbsd-x64@0.17.19: resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz} name: '@esbuild/openbsd-x64' version: 0.17.19 @@ -1025,7 +1329,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/sunos-x64/0.17.19: + registry.npmjs.org/@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz} + name: '@esbuild/openbsd-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/sunos-x64@0.17.19: resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz} name: '@esbuild/sunos-x64' version: 0.17.19 @@ -1036,7 +1351,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/win32-arm64/0.17.19: + registry.npmjs.org/@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz} + name: '@esbuild/sunos-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/win32-arm64@0.17.19: resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz} name: '@esbuild/win32-arm64' version: 0.17.19 @@ -1047,7 +1373,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/win32-ia32/0.17.19: + registry.npmjs.org/@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz} + name: '@esbuild/win32-arm64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/win32-ia32@0.17.19: resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz} name: '@esbuild/win32-ia32' version: 0.17.19 @@ -1058,7 +1395,18 @@ packages: dev: true optional: true - registry.npmjs.org/@esbuild/win32-x64/0.17.19: + registry.npmjs.org/@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz} + name: '@esbuild/win32-ia32' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/win32-x64@0.17.19: resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz} name: '@esbuild/win32-x64' version: 0.17.19 @@ -1069,7 +1417,18 @@ packages: dev: true optional: true - registry.npmjs.org/@eslint-community/eslint-utils/4.4.0_eslint@8.42.0: + registry.npmjs.org/@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz} + name: '@esbuild/win32-x64' + version: 0.18.20 + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.42.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' @@ -1078,11 +1437,11 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: registry.npmjs.org/eslint/8.42.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 + eslint: registry.npmjs.org/eslint@8.42.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 dev: true - registry.npmjs.org/@eslint-community/eslint-utils/4.4.0_eslint@8.43.0: + registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.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' @@ -1091,210 +1450,233 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: registry.npmjs.org/eslint/8.43.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 + eslint: registry.npmjs.org/eslint@8.43.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 dev: true - registry.npmjs.org/@eslint-community/regexpp/4.5.1: + registry.npmjs.org/@eslint-community/regexpp@4.5.1: resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz} name: '@eslint-community/regexpp' version: 4.5.1 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - registry.npmjs.org/@eslint/eslintrc/2.0.3: + registry.npmjs.org/@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz} + name: '@eslint-community/regexpp' + version: 4.6.2 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + registry.npmjs.org/@eslint/eslintrc@2.0.3: resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz} name: '@eslint/eslintrc' version: 2.0.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 - espree: registry.npmjs.org/espree/9.5.2 - globals: registry.npmjs.org/globals/13.20.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 + 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.5.2 + globals: registry.npmjs.org/globals@13.20.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.42.0: + registry.npmjs.org/@eslint/js@8.42.0: resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz} name: '@eslint/js' version: 8.42.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@eslint/js/8.43.0: + 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' version: 8.43.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@hapi/hoek/9.3.0: + 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} name: '@hapi/hoek' version: 9.3.0 dev: true - registry.npmjs.org/@hapi/topo/5.1.0: + registry.npmjs.org/@hapi/topo@5.1.0: resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz} name: '@hapi/topo' version: 5.1.0 dependencies: - '@hapi/hoek': registry.npmjs.org/@hapi/hoek/9.3.0 + '@hapi/hoek': registry.npmjs.org/@hapi/hoek@9.3.0 dev: true - registry.npmjs.org/@humanwhocodes/config-array/0.11.10: + registry.npmjs.org/@humanwhocodes/config-array@0.11.10: resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz} name: '@humanwhocodes/config-array' version: 0.11.10 engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': registry.npmjs.org/@humanwhocodes/object-schema/1.2.1 - debug: registry.npmjs.org/debug/4.3.4 - minimatch: registry.npmjs.org/minimatch/3.1.2 + '@humanwhocodes/object-schema': registry.npmjs.org/@humanwhocodes/object-schema@1.2.1 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + minimatch: registry.npmjs.org/minimatch@3.1.2 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@humanwhocodes/module-importer/1.0.1: + registry.npmjs.org/@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} name: '@humanwhocodes/module-importer' version: 1.0.1 engines: {node: '>=12.22'} dev: true - registry.npmjs.org/@humanwhocodes/object-schema/1.2.1: + registry.npmjs.org/@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz} name: '@humanwhocodes/object-schema' version: 1.2.1 dev: true - registry.npmjs.org/@jridgewell/gen-mapping/0.3.3: + registry.npmjs.org/@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz} name: '@jridgewell/gen-mapping' version: 0.3.3 engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': registry.npmjs.org/@jridgewell/set-array/1.1.2 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 + '@jridgewell/set-array': registry.npmjs.org/@jridgewell/set-array@1.1.2 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.18 dev: true - registry.npmjs.org/@jridgewell/resolve-uri/3.1.0: + registry.npmjs.org/@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz} name: '@jridgewell/resolve-uri' version: 3.1.0 engines: {node: '>=6.0.0'} dev: true - registry.npmjs.org/@jridgewell/set-array/1.1.2: + registry.npmjs.org/@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz} + name: '@jridgewell/resolve-uri' + version: 3.1.1 + engines: {node: '>=6.0.0'} + dev: true + + registry.npmjs.org/@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz} name: '@jridgewell/set-array' version: 1.1.2 engines: {node: '>=6.0.0'} dev: true - registry.npmjs.org/@jridgewell/source-map/0.3.3: + registry.npmjs.org/@jridgewell/source-map@0.3.3: resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz} name: '@jridgewell/source-map' version: 0.3.3 dependencies: - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.3 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.18 + '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping@0.3.3 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.18 dev: true - registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14: + registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz} name: '@jridgewell/sourcemap-codec' version: 1.4.14 dev: true - registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15: + registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz} name: '@jridgewell/sourcemap-codec' version: 1.4.15 dev: true - registry.npmjs.org/@jridgewell/trace-mapping/0.3.18: + registry.npmjs.org/@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz} name: '@jridgewell/trace-mapping' version: 0.3.18 dependencies: - '@jridgewell/resolve-uri': registry.npmjs.org/@jridgewell/resolve-uri/3.1.0 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 + '@jridgewell/resolve-uri': registry.npmjs.org/@jridgewell/resolve-uri@3.1.0 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.14 + dev: true + + registry.npmjs.org/@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz} + name: '@jridgewell/trace-mapping' + version: 0.3.19 + dependencies: + '@jridgewell/resolve-uri': registry.npmjs.org/@jridgewell/resolve-uri@3.1.1 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 dev: true - registry.npmjs.org/@manypkg/find-root/1.1.0: + registry.npmjs.org/@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz} name: '@manypkg/find-root' version: 1.1.0 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@types/node': registry.npmjs.org/@types/node/12.20.55 - find-up: registry.npmjs.org/find-up/4.1.0 - fs-extra: registry.npmjs.org/fs-extra/8.1.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@types/node': registry.npmjs.org/@types/node@12.20.55 + find-up: registry.npmjs.org/find-up@4.1.0 + fs-extra: registry.npmjs.org/fs-extra@8.1.0 dev: true - registry.npmjs.org/@manypkg/get-packages/1.1.3: + registry.npmjs.org/@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz} name: '@manypkg/get-packages' version: 1.1.3 dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 - '@changesets/types': registry.npmjs.org/@changesets/types/4.1.0 - '@manypkg/find-root': registry.npmjs.org/@manypkg/find-root/1.1.0 - fs-extra: registry.npmjs.org/fs-extra/8.1.0 - globby: registry.npmjs.org/globby/11.1.0 - read-yaml-file: registry.npmjs.org/read-yaml-file/1.1.0 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 + '@changesets/types': registry.npmjs.org/@changesets/types@4.1.0 + '@manypkg/find-root': registry.npmjs.org/@manypkg/find-root@1.1.0 + fs-extra: registry.npmjs.org/fs-extra@8.1.0 + globby: registry.npmjs.org/globby@11.1.0 + read-yaml-file: registry.npmjs.org/read-yaml-file@1.1.0 dev: true - registry.npmjs.org/@nodelib/fs.scandir/2.1.5: + 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' version: 2.1.5 engines: {node: '>= 8'} dependencies: - '@nodelib/fs.stat': registry.npmjs.org/@nodelib/fs.stat/2.0.5 - run-parallel: registry.npmjs.org/run-parallel/1.2.0 + '@nodelib/fs.stat': registry.npmjs.org/@nodelib/fs.stat@2.0.5 + run-parallel: registry.npmjs.org/run-parallel@1.2.0 dev: true - registry.npmjs.org/@nodelib/fs.stat/2.0.5: + registry.npmjs.org/@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} name: '@nodelib/fs.stat' version: 2.0.5 engines: {node: '>= 8'} dev: true - registry.npmjs.org/@nodelib/fs.walk/1.2.8: + registry.npmjs.org/@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} name: '@nodelib/fs.walk' version: 1.2.8 engines: {node: '>= 8'} dependencies: - '@nodelib/fs.scandir': registry.npmjs.org/@nodelib/fs.scandir/2.1.5 - fastq: registry.npmjs.org/fastq/1.15.0 + '@nodelib/fs.scandir': registry.npmjs.org/@nodelib/fs.scandir@2.1.5 + fastq: registry.npmjs.org/fastq@1.15.0 dev: true - registry.npmjs.org/@polka/url/1.0.0-next.21: + registry.npmjs.org/@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz} name: '@polka/url' version: 1.0.0-next.21 dev: true - registry.npmjs.org/@remix-run/router/1.6.3: + registry.npmjs.org/@remix-run/router@1.6.3: resolution: {integrity: sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz} name: '@remix-run/router' version: 1.6.3 engines: {node: '>=14'} dev: false - registry.npmjs.org/@rollup/plugin-commonjs/25.0.1_rollup@3.25.1: + registry.npmjs.org/@rollup/plugin-commonjs@25.0.1(rollup@3.25.1): resolution: {integrity: sha512-2DJ4kv4b1xfTJopWhu61ANdNRHvzQZ2fpaIrlgaP2jOfUv1wDJ0Ucqy8AZlbFmn/iUjiwKoqki9j55Y6L8kyNQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.1.tgz} id: registry.npmjs.org/@rollup/plugin-commonjs/25.0.1 name: '@rollup/plugin-commonjs' @@ -1306,16 +1688,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.25.1 - commondir: registry.npmjs.org/commondir/1.0.1 - estree-walker: registry.npmjs.org/estree-walker/2.0.2 - glob: registry.npmjs.org/glob/8.1.0 - is-reference: registry.npmjs.org/is-reference/1.2.1 - magic-string: registry.npmjs.org/magic-string/0.27.0 - rollup: registry.npmjs.org/rollup/3.25.1 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils@5.0.2(rollup@3.25.1) + commondir: registry.npmjs.org/commondir@1.0.1 + estree-walker: registry.npmjs.org/estree-walker@2.0.2 + glob: registry.npmjs.org/glob@8.1.0 + is-reference: registry.npmjs.org/is-reference@1.2.1 + magic-string: registry.npmjs.org/magic-string@0.27.0 + rollup: registry.npmjs.org/rollup@3.25.1 dev: true - registry.npmjs.org/@rollup/plugin-node-resolve/15.1.0_rollup@3.25.1: + registry.npmjs.org/@rollup/plugin-node-resolve@15.1.0(rollup@3.25.1): resolution: {integrity: sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz} id: registry.npmjs.org/@rollup/plugin-node-resolve/15.1.0 name: '@rollup/plugin-node-resolve' @@ -1327,16 +1709,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.25.1 - '@types/resolve': registry.npmjs.org/@types/resolve/1.20.2 - deepmerge: registry.npmjs.org/deepmerge/4.3.1 - is-builtin-module: registry.npmjs.org/is-builtin-module/3.2.1 - is-module: registry.npmjs.org/is-module/1.0.0 - resolve: registry.npmjs.org/resolve/1.22.2 - rollup: registry.npmjs.org/rollup/3.25.1 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils@5.0.2(rollup@3.25.1) + '@types/resolve': registry.npmjs.org/@types/resolve@1.20.2 + deepmerge: registry.npmjs.org/deepmerge@4.3.1 + is-builtin-module: registry.npmjs.org/is-builtin-module@3.2.1 + is-module: registry.npmjs.org/is-module@1.0.0 + resolve: registry.npmjs.org/resolve@1.22.2 + rollup: registry.npmjs.org/rollup@3.25.1 dev: true - registry.npmjs.org/@rollup/plugin-replace/5.0.2_rollup@3.25.1: + registry.npmjs.org/@rollup/plugin-replace@5.0.2(rollup@3.25.1): resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz} id: registry.npmjs.org/@rollup/plugin-replace/5.0.2 name: '@rollup/plugin-replace' @@ -1348,12 +1730,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.25.1 - magic-string: registry.npmjs.org/magic-string/0.27.0 - rollup: registry.npmjs.org/rollup/3.25.1 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils@5.0.2(rollup@3.25.1) + magic-string: registry.npmjs.org/magic-string@0.27.0 + rollup: registry.npmjs.org/rollup@3.25.1 dev: true - registry.npmjs.org/@rollup/plugin-terser/0.4.3_rollup@3.25.1: + registry.npmjs.org/@rollup/plugin-terser@0.4.3(rollup@3.25.1): resolution: {integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.3.tgz} id: registry.npmjs.org/@rollup/plugin-terser/0.4.3 name: '@rollup/plugin-terser' @@ -1365,13 +1747,13 @@ packages: rollup: optional: true dependencies: - rollup: registry.npmjs.org/rollup/3.25.1 - serialize-javascript: registry.npmjs.org/serialize-javascript/6.0.1 - smob: registry.npmjs.org/smob/1.4.0 - terser: registry.npmjs.org/terser/5.18.0 + rollup: registry.npmjs.org/rollup@3.25.1 + serialize-javascript: registry.npmjs.org/serialize-javascript@6.0.1 + smob: registry.npmjs.org/smob@1.4.0 + terser: registry.npmjs.org/terser@5.18.0 dev: true - registry.npmjs.org/@rollup/plugin-typescript/11.0.0_kiy5yv7g7dmpxbgwdlsemwipi4: + registry.npmjs.org/@rollup/plugin-typescript@11.0.0(rollup@3.25.1)(typescript@4.9.5): resolution: {integrity: sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz} id: registry.npmjs.org/@rollup/plugin-typescript/11.0.0 name: '@rollup/plugin-typescript' @@ -1387,13 +1769,13 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.25.1 - resolve: registry.npmjs.org/resolve/1.22.2 - rollup: registry.npmjs.org/rollup/3.25.1 - typescript: registry.npmjs.org/typescript/4.9.5 + '@rollup/pluginutils': registry.npmjs.org/@rollup/pluginutils@5.0.2(rollup@3.25.1) + resolve: registry.npmjs.org/resolve@1.22.2 + rollup: registry.npmjs.org/rollup@3.25.1 + typescript: registry.npmjs.org/typescript@4.9.5 dev: true - registry.npmjs.org/@rollup/pluginutils/5.0.2_rollup@3.25.1: + registry.npmjs.org/@rollup/pluginutils@5.0.2(rollup@3.25.1): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz} id: registry.npmjs.org/@rollup/pluginutils/5.0.2 name: '@rollup/pluginutils' @@ -1405,39 +1787,39 @@ packages: rollup: optional: true dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.1 - estree-walker: registry.npmjs.org/estree-walker/2.0.2 - picomatch: registry.npmjs.org/picomatch/2.3.1 - rollup: registry.npmjs.org/rollup/3.25.1 + '@types/estree': registry.npmjs.org/@types/estree@1.0.1 + estree-walker: registry.npmjs.org/estree-walker@2.0.2 + picomatch: registry.npmjs.org/picomatch@2.3.1 + rollup: registry.npmjs.org/rollup@3.25.1 dev: true - registry.npmjs.org/@sideway/address/4.1.4: + 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' version: 4.1.4 dependencies: - '@hapi/hoek': registry.npmjs.org/@hapi/hoek/9.3.0 + '@hapi/hoek': registry.npmjs.org/@hapi/hoek@9.3.0 dev: true - registry.npmjs.org/@sideway/formula/3.0.1: + registry.npmjs.org/@sideway/formula@3.0.1: resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz} name: '@sideway/formula' version: 3.0.1 dev: true - registry.npmjs.org/@sideway/pinpoint/2.0.0: + registry.npmjs.org/@sideway/pinpoint@2.0.0: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz} name: '@sideway/pinpoint' version: 2.0.0 dev: true - registry.npmjs.org/@svelte-put/shortcut/2.0.0: + registry.npmjs.org/@svelte-put/shortcut@2.0.0: resolution: {integrity: sha512-dDyxIFlRz+W6wxwQtl2jUen0rX8ofV2VBWaJdz0QehLb0IMDzP3aWM9W4k8cAZQIGmTT0adr1+Gt7HPPUugcpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-2.0.0.tgz} name: '@svelte-put/shortcut' version: 2.0.0 dev: false - registry.npmjs.org/@sveltejs/adapter-auto/2.1.0_@sveltejs+kit@1.20.5: + registry.npmjs.org/@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.20.5): resolution: {integrity: sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz} id: registry.npmjs.org/@sveltejs/adapter-auto/2.1.0 name: '@sveltejs/adapter-auto' @@ -1445,11 +1827,11 @@ packages: peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit/1.20.5_svelte@4.0.0+vite@4.3.9 - import-meta-resolve: registry.npmjs.org/import-meta-resolve/3.0.0 + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit@1.20.5(svelte@4.0.0)(vite@4.3.9) + import-meta-resolve: registry.npmjs.org/import-meta-resolve@3.0.0 dev: true - registry.npmjs.org/@sveltejs/kit/1.20.5_svelte@4.0.0+vite@4.3.9: + registry.npmjs.org/@sveltejs/kit@1.20.5(svelte@4.0.0)(vite@4.3.9): resolution: {integrity: sha512-8rJYZ2boRlO75lwpbpB+DlSzIwmTuamXTpVlDtw4dBk86o3UaDe/+Ro4xCsV/4FtTw2U8xPHyV83edAWbQHG0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.5.tgz} id: registry.npmjs.org/@sveltejs/kit/1.20.5 name: '@sveltejs/kit' @@ -1461,25 +1843,25 @@ 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.1_svelte@4.0.0+vite@4.3.9 - '@types/cookie': registry.npmjs.org/@types/cookie/0.5.1 - 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.0 - mime: registry.npmjs.org/mime/3.0.0 - 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.0.0 - undici: registry.npmjs.org/undici/5.22.1 - vite: registry.npmjs.org/vite/4.3.9 + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.0.0)(vite@4.3.9) + '@types/cookie': registry.npmjs.org/@types/cookie@0.5.1 + 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.0 + mime: registry.npmjs.org/mime@3.0.0 + 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.0.0 + undici: registry.npmjs.org/undici@5.22.1 + vite: registry.npmjs.org/vite@4.3.9 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@sveltejs/package/2.1.0_rydvusnd4biuws73vnz24j3wlu: + registry.npmjs.org/@sveltejs/package@2.1.0(svelte@4.0.0)(typescript@5.1.3): resolution: {integrity: sha512-c6PLH9G2YLQ48kqrS2XX422BrLNABBstSiapamchVJaQnOTXyJmUR8KmoCCySnzVy3PiYL6jg12UnoPmjW3SwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/package/-/package-2.1.0.tgz} id: registry.npmjs.org/@sveltejs/package/2.1.0 name: '@sveltejs/package' @@ -1489,16 +1871,16 @@ packages: peerDependencies: svelte: ^3.44.0 || ^4.0.0 dependencies: - chokidar: registry.npmjs.org/chokidar/3.5.3 - kleur: registry.npmjs.org/kleur/4.1.5 - sade: registry.npmjs.org/sade/1.8.1 - svelte: registry.npmjs.org/svelte/4.0.0 - svelte2tsx: registry.npmjs.org/svelte2tsx/0.6.15_rydvusnd4biuws73vnz24j3wlu + chokidar: registry.npmjs.org/chokidar@3.5.3 + kleur: registry.npmjs.org/kleur@4.1.5 + sade: registry.npmjs.org/sade@1.8.1 + svelte: registry.npmjs.org/svelte@4.0.0 + svelte2tsx: registry.npmjs.org/svelte2tsx@0.6.15(svelte@4.0.0)(typescript@5.1.3) transitivePeerDependencies: - typescript dev: true - registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.2_k3t2aclno3pjdujtbtaxhi4r4m: + registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@4.0.0)(vite@4.3.9): resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz} id: registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.2 name: '@sveltejs/vite-plugin-svelte-inspector' @@ -1509,15 +1891,15 @@ 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.1_svelte@4.0.0+vite@4.3.9 - debug: registry.npmjs.org/debug/4.3.4 - svelte: registry.npmjs.org/svelte/4.0.0 - vite: registry.npmjs.org/vite/4.3.9 + '@sveltejs/vite-plugin-svelte': registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.0.0)(vite@4.3.9) + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + svelte: registry.npmjs.org/svelte@4.0.0 + vite: registry.npmjs.org/vite@4.3.9 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1_svelte@4.0.0+vite@4.3.9: + registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.0.0)(vite@4.3.9): resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz} id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1 name: '@sveltejs/vite-plugin-svelte' @@ -1527,20 +1909,20 @@ packages: svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.2_k3t2aclno3pjdujtbtaxhi4r4m - debug: registry.npmjs.org/debug/4.3.4 - 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.0 - svelte: registry.npmjs.org/svelte/4.0.0 - svelte-hmr: registry.npmjs.org/svelte-hmr/0.15.2_svelte@4.0.0 - vite: registry.npmjs.org/vite/4.3.9 - vitefu: registry.npmjs.org/vitefu/0.2.4_vite@4.3.9 + '@sveltejs/vite-plugin-svelte-inspector': registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@4.0.0)(vite@4.3.9) + 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.0 + svelte: registry.npmjs.org/svelte@4.0.0 + svelte-hmr: registry.npmjs.org/svelte-hmr@0.15.2(svelte@4.0.0) + vite: registry.npmjs.org/vite@4.3.9 + vitefu: registry.npmjs.org/vitefu@0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@swc/core-darwin-arm64/1.3.63: + registry.npmjs.org/@swc/core-darwin-arm64@1.3.63: resolution: {integrity: sha512-lNR0BgG0/6dGpGP+AyFZoZ3YBhZN5GzvgAUzwy4skqn5sKZ7duQD02CNq1lIy7Im5BzgMUcJ+/Z7z/YUlqBK+Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.63.tgz} name: '@swc/core-darwin-arm64' version: 1.3.63 @@ -1551,7 +1933,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-darwin-x64/1.3.63: + registry.npmjs.org/@swc/core-darwin-x64@1.3.63: resolution: {integrity: sha512-1lydnc+LgSD0gwD1axW3+Y1htKZZRn33aJF4ITd6hsA9Y2eIhdMVxgx6peXp8wWzoRBXy5GEMTnd7704oya4zw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.63.tgz} name: '@swc/core-darwin-x64' version: 1.3.63 @@ -1562,7 +1944,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-arm-gnueabihf/1.3.63: + registry.npmjs.org/@swc/core-linux-arm-gnueabihf@1.3.63: resolution: {integrity: sha512-cJT+XJ6f25QeAcz2ONy1i8WKP6olqOIbU5fHZKsoPqEZmLkK5NCTnmIolT0HZpH1SNkE/hHkPYGn620Domvn8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.63.tgz} name: '@swc/core-linux-arm-gnueabihf' version: 1.3.63 @@ -1573,7 +1955,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-arm64-gnu/1.3.63: + registry.npmjs.org/@swc/core-linux-arm64-gnu@1.3.63: resolution: {integrity: sha512-xtuk0v/86i0UR6G+5X6l3bgP1I1iWlEI23ad44L0FNrZ8wLLEvVzYuVoI6U5fKbp91LAsVpdWyyvSAo1sT7BWQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.63.tgz} name: '@swc/core-linux-arm64-gnu' version: 1.3.63 @@ -1584,7 +1966,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-arm64-musl/1.3.63: + registry.npmjs.org/@swc/core-linux-arm64-musl@1.3.63: resolution: {integrity: sha512-AIRqE/3659zt5hfZzj3i/xtJbJl1iz9FcYEGUsIqqrxouqZWNbFujQpIguX4qFI7uoM+m6p6pqLjMmArwErRxQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.63.tgz} name: '@swc/core-linux-arm64-musl' version: 1.3.63 @@ -1595,7 +1977,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-x64-gnu/1.3.63: + registry.npmjs.org/@swc/core-linux-x64-gnu@1.3.63: resolution: {integrity: sha512-EAB5gkgDvStJofvdQU40hqEqjtSvtPs3PR0WupZtbLKWWCTWg76uTXQZEKNYx9r60Pt7sx1BAa3XnqgXjmcjDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.63.tgz} name: '@swc/core-linux-x64-gnu' version: 1.3.63 @@ -1606,7 +1988,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-linux-x64-musl/1.3.63: + registry.npmjs.org/@swc/core-linux-x64-musl@1.3.63: resolution: {integrity: sha512-8ScbtDPd8Hr1VkpzCseI5H770YgxxjTFsxinH9UtJWJBFIkdu2rEwjgz4t+lDjsc/R3JWaKt1q8Dkgzqmj+77g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.63.tgz} name: '@swc/core-linux-x64-musl' version: 1.3.63 @@ -1617,7 +1999,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-win32-arm64-msvc/1.3.63: + registry.npmjs.org/@swc/core-win32-arm64-msvc@1.3.63: resolution: {integrity: sha512-+41tEugXJjpK04KIb2+Xlpb1NArhIne4u0NQo+cHb6ekJoqQmgIj3uNJhQ0v+0DDMjFqbA07l0KYNMgYLBls/A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.63.tgz} name: '@swc/core-win32-arm64-msvc' version: 1.3.63 @@ -1628,7 +2010,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-win32-ia32-msvc/1.3.63: + registry.npmjs.org/@swc/core-win32-ia32-msvc@1.3.63: resolution: {integrity: sha512-W6nPOD5k++rSmoAb0Jg0h7gyfjly8b5ld7cSnmrWKXfmjgxOqxcoqP2LlzNkamg320eqkGaD9n+UnPJDteLTBw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.63.tgz} name: '@swc/core-win32-ia32-msvc' version: 1.3.63 @@ -1639,7 +2021,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core-win32-x64-msvc/1.3.63: + registry.npmjs.org/@swc/core-win32-x64-msvc@1.3.63: resolution: {integrity: sha512-MHNCF3GWtlKZL3vNhMiCrtM4gBHqAv0Iw38bLoJRagh1Q/UDNVjNzWhgngCno9NUQodMtCo6G7iTQilW7YaAQQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.63.tgz} name: '@swc/core-win32-x64-msvc' version: 1.3.63 @@ -1650,7 +2032,7 @@ packages: dev: true optional: true - registry.npmjs.org/@swc/core/1.3.63: + registry.npmjs.org/@swc/core@1.3.63: resolution: {integrity: sha512-mNRMr0xcqkvnC1a/H7rpMtbIjq7KKy4XaW/+zj3+w9cH5g72eMo3ADNHE03zHoqPn+Ov3szzFOMHT6rgJlRxow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core/-/core-1.3.63.tgz} name: '@swc/core' version: 1.3.63 @@ -1662,404 +2044,401 @@ packages: '@swc/helpers': optional: true optionalDependencies: - '@swc/core-darwin-arm64': registry.npmjs.org/@swc/core-darwin-arm64/1.3.63 - '@swc/core-darwin-x64': registry.npmjs.org/@swc/core-darwin-x64/1.3.63 - '@swc/core-linux-arm-gnueabihf': registry.npmjs.org/@swc/core-linux-arm-gnueabihf/1.3.63 - '@swc/core-linux-arm64-gnu': registry.npmjs.org/@swc/core-linux-arm64-gnu/1.3.63 - '@swc/core-linux-arm64-musl': registry.npmjs.org/@swc/core-linux-arm64-musl/1.3.63 - '@swc/core-linux-x64-gnu': registry.npmjs.org/@swc/core-linux-x64-gnu/1.3.63 - '@swc/core-linux-x64-musl': registry.npmjs.org/@swc/core-linux-x64-musl/1.3.63 - '@swc/core-win32-arm64-msvc': registry.npmjs.org/@swc/core-win32-arm64-msvc/1.3.63 - '@swc/core-win32-ia32-msvc': registry.npmjs.org/@swc/core-win32-ia32-msvc/1.3.63 - '@swc/core-win32-x64-msvc': registry.npmjs.org/@swc/core-win32-x64-msvc/1.3.63 - dev: true - - registry.npmjs.org/@types/cookie/0.5.1: + '@swc/core-darwin-arm64': registry.npmjs.org/@swc/core-darwin-arm64@1.3.63 + '@swc/core-darwin-x64': registry.npmjs.org/@swc/core-darwin-x64@1.3.63 + '@swc/core-linux-arm-gnueabihf': registry.npmjs.org/@swc/core-linux-arm-gnueabihf@1.3.63 + '@swc/core-linux-arm64-gnu': registry.npmjs.org/@swc/core-linux-arm64-gnu@1.3.63 + '@swc/core-linux-arm64-musl': registry.npmjs.org/@swc/core-linux-arm64-musl@1.3.63 + '@swc/core-linux-x64-gnu': registry.npmjs.org/@swc/core-linux-x64-gnu@1.3.63 + '@swc/core-linux-x64-musl': registry.npmjs.org/@swc/core-linux-x64-musl@1.3.63 + '@swc/core-win32-arm64-msvc': registry.npmjs.org/@swc/core-win32-arm64-msvc@1.3.63 + '@swc/core-win32-ia32-msvc': registry.npmjs.org/@swc/core-win32-ia32-msvc@1.3.63 + '@swc/core-win32-x64-msvc': registry.npmjs.org/@swc/core-win32-x64-msvc@1.3.63 + dev: true + + registry.npmjs.org/@types/cookie@0.5.1: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz} name: '@types/cookie' version: 0.5.1 dev: true - registry.npmjs.org/@types/d3-array/3.0.5: + registry.npmjs.org/@types/d3-array@3.0.5: resolution: {integrity: sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz} name: '@types/d3-array' version: 3.0.5 dev: false - registry.npmjs.org/@types/d3-axis/3.0.2: + registry.npmjs.org/@types/d3-axis@3.0.2: resolution: {integrity: sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz} name: '@types/d3-axis' version: 3.0.2 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection@3.0.5 dev: false - registry.npmjs.org/@types/d3-brush/3.0.2: + registry.npmjs.org/@types/d3-brush@3.0.2: resolution: {integrity: sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz} name: '@types/d3-brush' version: 3.0.2 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection@3.0.5 dev: false - registry.npmjs.org/@types/d3-chord/3.0.2: + registry.npmjs.org/@types/d3-chord@3.0.2: resolution: {integrity: sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz} name: '@types/d3-chord' version: 3.0.2 dev: false - registry.npmjs.org/@types/d3-color/3.1.0: + registry.npmjs.org/@types/d3-color@3.1.0: resolution: {integrity: sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz} name: '@types/d3-color' version: 3.1.0 dev: false - registry.npmjs.org/@types/d3-contour/3.0.2: + registry.npmjs.org/@types/d3-contour@3.0.2: resolution: {integrity: sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz} name: '@types/d3-contour' version: 3.0.2 dependencies: - '@types/d3-array': registry.npmjs.org/@types/d3-array/3.0.5 - '@types/geojson': registry.npmjs.org/@types/geojson/7946.0.10 + '@types/d3-array': registry.npmjs.org/@types/d3-array@3.0.5 + '@types/geojson': registry.npmjs.org/@types/geojson@7946.0.10 dev: false - registry.npmjs.org/@types/d3-delaunay/6.0.1: + registry.npmjs.org/@types/d3-delaunay@6.0.1: resolution: {integrity: sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz} name: '@types/d3-delaunay' version: 6.0.1 dev: false - registry.npmjs.org/@types/d3-dispatch/3.0.2: + registry.npmjs.org/@types/d3-dispatch@3.0.2: resolution: {integrity: sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz} name: '@types/d3-dispatch' version: 3.0.2 dev: false - registry.npmjs.org/@types/d3-drag/3.0.2: + registry.npmjs.org/@types/d3-drag@3.0.2: resolution: {integrity: sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz} name: '@types/d3-drag' version: 3.0.2 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection@3.0.5 dev: false - registry.npmjs.org/@types/d3-dsv/3.0.1: + registry.npmjs.org/@types/d3-dsv@3.0.1: resolution: {integrity: sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz} name: '@types/d3-dsv' version: 3.0.1 dev: false - registry.npmjs.org/@types/d3-ease/3.0.0: + registry.npmjs.org/@types/d3-ease@3.0.0: resolution: {integrity: sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz} name: '@types/d3-ease' version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-fetch/3.0.2: + registry.npmjs.org/@types/d3-fetch@3.0.2: resolution: {integrity: sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz} name: '@types/d3-fetch' version: 3.0.2 dependencies: - '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv/3.0.1 + '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv@3.0.1 dev: false - registry.npmjs.org/@types/d3-force/3.0.4: + registry.npmjs.org/@types/d3-force@3.0.4: resolution: {integrity: sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz} name: '@types/d3-force' version: 3.0.4 dev: false - registry.npmjs.org/@types/d3-format/3.0.1: + registry.npmjs.org/@types/d3-format@3.0.1: resolution: {integrity: sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz} name: '@types/d3-format' version: 3.0.1 dev: false - registry.npmjs.org/@types/d3-geo/3.0.3: + registry.npmjs.org/@types/d3-geo@3.0.3: resolution: {integrity: sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz} name: '@types/d3-geo' version: 3.0.3 dependencies: - '@types/geojson': registry.npmjs.org/@types/geojson/7946.0.10 + '@types/geojson': registry.npmjs.org/@types/geojson@7946.0.10 dev: false - registry.npmjs.org/@types/d3-hierarchy/3.1.2: + registry.npmjs.org/@types/d3-hierarchy@3.1.2: resolution: {integrity: sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz} name: '@types/d3-hierarchy' version: 3.1.2 dev: false - registry.npmjs.org/@types/d3-interpolate/3.0.1: + registry.npmjs.org/@types/d3-interpolate@3.0.1: resolution: {integrity: sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz} name: '@types/d3-interpolate' version: 3.0.1 dependencies: - '@types/d3-color': registry.npmjs.org/@types/d3-color/3.1.0 + '@types/d3-color': registry.npmjs.org/@types/d3-color@3.1.0 dev: false - registry.npmjs.org/@types/d3-path/3.0.0: + registry.npmjs.org/@types/d3-path@3.0.0: resolution: {integrity: sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz} name: '@types/d3-path' version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-polygon/3.0.0: + registry.npmjs.org/@types/d3-polygon@3.0.0: resolution: {integrity: sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz} name: '@types/d3-polygon' version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-quadtree/3.0.2: + registry.npmjs.org/@types/d3-quadtree@3.0.2: resolution: {integrity: sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz} name: '@types/d3-quadtree' version: 3.0.2 dev: false - registry.npmjs.org/@types/d3-random/3.0.1: + registry.npmjs.org/@types/d3-random@3.0.1: resolution: {integrity: sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz} name: '@types/d3-random' version: 3.0.1 dev: false - registry.npmjs.org/@types/d3-scale-chromatic/3.0.0: + registry.npmjs.org/@types/d3-scale-chromatic@3.0.0: resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz} name: '@types/d3-scale-chromatic' version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-scale/4.0.3: + registry.npmjs.org/@types/d3-scale@4.0.3: resolution: {integrity: sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz} name: '@types/d3-scale' version: 4.0.3 dependencies: - '@types/d3-time': registry.npmjs.org/@types/d3-time/3.0.0 + '@types/d3-time': registry.npmjs.org/@types/d3-time@3.0.0 dev: false - registry.npmjs.org/@types/d3-selection/3.0.5: + registry.npmjs.org/@types/d3-selection@3.0.5: resolution: {integrity: sha512-xCB0z3Hi8eFIqyja3vW8iV01+OHGYR2di/+e+AiOcXIOrY82lcvWW8Ke1DYE/EUVMsBl4Db9RppSBS3X1U6J0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.5.tgz} name: '@types/d3-selection' version: 3.0.5 dev: false - registry.npmjs.org/@types/d3-shape/3.1.1: + registry.npmjs.org/@types/d3-shape@3.1.1: resolution: {integrity: sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz} name: '@types/d3-shape' version: 3.1.1 dependencies: - '@types/d3-path': registry.npmjs.org/@types/d3-path/3.0.0 + '@types/d3-path': registry.npmjs.org/@types/d3-path@3.0.0 dev: false - registry.npmjs.org/@types/d3-time-format/4.0.0: + registry.npmjs.org/@types/d3-time-format@4.0.0: resolution: {integrity: sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz} name: '@types/d3-time-format' version: 4.0.0 dev: false - registry.npmjs.org/@types/d3-time/3.0.0: + registry.npmjs.org/@types/d3-time@3.0.0: resolution: {integrity: sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz} name: '@types/d3-time' version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-timer/3.0.0: + registry.npmjs.org/@types/d3-timer@3.0.0: resolution: {integrity: sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz} name: '@types/d3-timer' version: 3.0.0 dev: false - registry.npmjs.org/@types/d3-transition/3.0.3: + registry.npmjs.org/@types/d3-transition@3.0.3: resolution: {integrity: sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz} name: '@types/d3-transition' version: 3.0.3 dependencies: - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection@3.0.5 dev: false - registry.npmjs.org/@types/d3-zoom/3.0.3: + registry.npmjs.org/@types/d3-zoom@3.0.3: resolution: {integrity: sha512-OWk1yYIIWcZ07+igN6BeoG6rqhnJ/pYe+R1qWFM2DtW49zsoSjgb9G5xB0ZXA8hh2jAzey1XuRmMSoXdKw8MDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.3.tgz} name: '@types/d3-zoom' version: 3.0.3 dependencies: - '@types/d3-interpolate': registry.npmjs.org/@types/d3-interpolate/3.0.1 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 + '@types/d3-interpolate': registry.npmjs.org/@types/d3-interpolate@3.0.1 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection@3.0.5 dev: false - registry.npmjs.org/@types/d3/7.4.0: + registry.npmjs.org/@types/d3@7.4.0: resolution: {integrity: sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz} name: '@types/d3' version: 7.4.0 dependencies: - '@types/d3-array': registry.npmjs.org/@types/d3-array/3.0.5 - '@types/d3-axis': registry.npmjs.org/@types/d3-axis/3.0.2 - '@types/d3-brush': registry.npmjs.org/@types/d3-brush/3.0.2 - '@types/d3-chord': registry.npmjs.org/@types/d3-chord/3.0.2 - '@types/d3-color': registry.npmjs.org/@types/d3-color/3.1.0 - '@types/d3-contour': registry.npmjs.org/@types/d3-contour/3.0.2 - '@types/d3-delaunay': registry.npmjs.org/@types/d3-delaunay/6.0.1 - '@types/d3-dispatch': registry.npmjs.org/@types/d3-dispatch/3.0.2 - '@types/d3-drag': registry.npmjs.org/@types/d3-drag/3.0.2 - '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv/3.0.1 - '@types/d3-ease': registry.npmjs.org/@types/d3-ease/3.0.0 - '@types/d3-fetch': registry.npmjs.org/@types/d3-fetch/3.0.2 - '@types/d3-force': registry.npmjs.org/@types/d3-force/3.0.4 - '@types/d3-format': registry.npmjs.org/@types/d3-format/3.0.1 - '@types/d3-geo': registry.npmjs.org/@types/d3-geo/3.0.3 - '@types/d3-hierarchy': registry.npmjs.org/@types/d3-hierarchy/3.1.2 - '@types/d3-interpolate': registry.npmjs.org/@types/d3-interpolate/3.0.1 - '@types/d3-path': registry.npmjs.org/@types/d3-path/3.0.0 - '@types/d3-polygon': registry.npmjs.org/@types/d3-polygon/3.0.0 - '@types/d3-quadtree': registry.npmjs.org/@types/d3-quadtree/3.0.2 - '@types/d3-random': registry.npmjs.org/@types/d3-random/3.0.1 - '@types/d3-scale': registry.npmjs.org/@types/d3-scale/4.0.3 - '@types/d3-scale-chromatic': registry.npmjs.org/@types/d3-scale-chromatic/3.0.0 - '@types/d3-selection': registry.npmjs.org/@types/d3-selection/3.0.5 - '@types/d3-shape': registry.npmjs.org/@types/d3-shape/3.1.1 - '@types/d3-time': registry.npmjs.org/@types/d3-time/3.0.0 - '@types/d3-time-format': registry.npmjs.org/@types/d3-time-format/4.0.0 - '@types/d3-timer': registry.npmjs.org/@types/d3-timer/3.0.0 - '@types/d3-transition': registry.npmjs.org/@types/d3-transition/3.0.3 - '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom/3.0.3 + '@types/d3-array': registry.npmjs.org/@types/d3-array@3.0.5 + '@types/d3-axis': registry.npmjs.org/@types/d3-axis@3.0.2 + '@types/d3-brush': registry.npmjs.org/@types/d3-brush@3.0.2 + '@types/d3-chord': registry.npmjs.org/@types/d3-chord@3.0.2 + '@types/d3-color': registry.npmjs.org/@types/d3-color@3.1.0 + '@types/d3-contour': registry.npmjs.org/@types/d3-contour@3.0.2 + '@types/d3-delaunay': registry.npmjs.org/@types/d3-delaunay@6.0.1 + '@types/d3-dispatch': registry.npmjs.org/@types/d3-dispatch@3.0.2 + '@types/d3-drag': registry.npmjs.org/@types/d3-drag@3.0.2 + '@types/d3-dsv': registry.npmjs.org/@types/d3-dsv@3.0.1 + '@types/d3-ease': registry.npmjs.org/@types/d3-ease@3.0.0 + '@types/d3-fetch': registry.npmjs.org/@types/d3-fetch@3.0.2 + '@types/d3-force': registry.npmjs.org/@types/d3-force@3.0.4 + '@types/d3-format': registry.npmjs.org/@types/d3-format@3.0.1 + '@types/d3-geo': registry.npmjs.org/@types/d3-geo@3.0.3 + '@types/d3-hierarchy': registry.npmjs.org/@types/d3-hierarchy@3.1.2 + '@types/d3-interpolate': registry.npmjs.org/@types/d3-interpolate@3.0.1 + '@types/d3-path': registry.npmjs.org/@types/d3-path@3.0.0 + '@types/d3-polygon': registry.npmjs.org/@types/d3-polygon@3.0.0 + '@types/d3-quadtree': registry.npmjs.org/@types/d3-quadtree@3.0.2 + '@types/d3-random': registry.npmjs.org/@types/d3-random@3.0.1 + '@types/d3-scale': registry.npmjs.org/@types/d3-scale@4.0.3 + '@types/d3-scale-chromatic': registry.npmjs.org/@types/d3-scale-chromatic@3.0.0 + '@types/d3-selection': registry.npmjs.org/@types/d3-selection@3.0.5 + '@types/d3-shape': registry.npmjs.org/@types/d3-shape@3.1.1 + '@types/d3-time': registry.npmjs.org/@types/d3-time@3.0.0 + '@types/d3-time-format': registry.npmjs.org/@types/d3-time-format@4.0.0 + '@types/d3-timer': registry.npmjs.org/@types/d3-timer@3.0.0 + '@types/d3-transition': registry.npmjs.org/@types/d3-transition@3.0.3 + '@types/d3-zoom': registry.npmjs.org/@types/d3-zoom@3.0.3 dev: false - registry.npmjs.org/@types/dagre/0.7.48: + 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} name: '@types/dagre' version: 0.7.48 dev: true - registry.npmjs.org/@types/estree/1.0.1: + registry.npmjs.org/@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz} name: '@types/estree' version: 1.0.1 dev: true - registry.npmjs.org/@types/geojson/7946.0.10: + registry.npmjs.org/@types/geojson@7946.0.10: resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz} name: '@types/geojson' version: 7946.0.10 dev: false - registry.npmjs.org/@types/is-ci/3.0.0: + registry.npmjs.org/@types/is-ci@3.0.0: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.0.tgz} name: '@types/is-ci' version: 3.0.0 dependencies: - ci-info: registry.npmjs.org/ci-info/3.8.0 + ci-info: registry.npmjs.org/ci-info@3.8.0 dev: true - registry.npmjs.org/@types/json-schema/7.0.12: + registry.npmjs.org/@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz} name: '@types/json-schema' version: 7.0.12 dev: true - registry.npmjs.org/@types/minimist/1.2.2: + registry.npmjs.org/@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz} name: '@types/minimist' version: 1.2.2 dev: true - registry.npmjs.org/@types/node/12.20.55: + registry.npmjs.org/@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz} name: '@types/node' version: 12.20.55 dev: true - registry.npmjs.org/@types/node/14.18.51: - resolution: {integrity: sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz} + registry.npmjs.org/@types/node@16.18.40: + resolution: {integrity: sha512-+yno3ItTEwGxXiS/75Q/aHaa5srkpnJaH+kdkTVJ3DtJEwv92itpKbxU+FjPoh2m/5G9zmUQfrL4A4C13c+iGA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-16.18.40.tgz} name: '@types/node' - version: 14.18.51 + version: 16.18.40 dev: true - registry.npmjs.org/@types/node/18.16.18: + registry.npmjs.org/@types/node@18.16.18: resolution: {integrity: sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz} name: '@types/node' version: 18.16.18 dev: true - registry.npmjs.org/@types/normalize-package-data/2.4.1: + registry.npmjs.org/@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz} name: '@types/normalize-package-data' version: 2.4.1 dev: true - registry.npmjs.org/@types/prop-types/15.7.5: + registry.npmjs.org/@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz} name: '@types/prop-types' version: 15.7.5 - dev: true - registry.npmjs.org/@types/pug/2.0.6: + registry.npmjs.org/@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz} name: '@types/pug' version: 2.0.6 dev: true - registry.npmjs.org/@types/react-dom/18.2.5: + registry.npmjs.org/@types/react-dom@18.2.5: resolution: {integrity: sha512-sRQsOS/sCLnpQhR4DSKGTtWFE3FZjpQa86KPVbhUqdYMRZ9FEFcfAytKhR/vUG2rH1oFbOOej6cuD7MFSobDRQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.5.tgz} name: '@types/react-dom' version: 18.2.5 dependencies: - '@types/react': registry.npmjs.org/@types/react/18.2.12 + '@types/react': registry.npmjs.org/@types/react@18.2.12 dev: true - registry.npmjs.org/@types/react/18.2.12: + registry.npmjs.org/@types/react@18.2.12: resolution: {integrity: sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/react/-/react-18.2.12.tgz} name: '@types/react' version: 18.2.12 dependencies: - '@types/prop-types': registry.npmjs.org/@types/prop-types/15.7.5 - '@types/scheduler': registry.npmjs.org/@types/scheduler/0.16.3 - csstype: registry.npmjs.org/csstype/3.1.2 - dev: true + '@types/prop-types': registry.npmjs.org/@types/prop-types@15.7.5 + '@types/scheduler': registry.npmjs.org/@types/scheduler@0.16.3 + csstype: registry.npmjs.org/csstype@3.1.2 - registry.npmjs.org/@types/resolve/1.20.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' version: 1.20.2 dev: true - registry.npmjs.org/@types/scheduler/0.16.3: + registry.npmjs.org/@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz} name: '@types/scheduler' version: 0.16.3 - dev: true - registry.npmjs.org/@types/semver/6.2.3: + registry.npmjs.org/@types/semver@6.2.3: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/semver/-/semver-6.2.3.tgz} name: '@types/semver' version: 6.2.3 dev: true - registry.npmjs.org/@types/semver/7.5.0: + registry.npmjs.org/@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz} name: '@types/semver' version: 7.5.0 dev: true - registry.npmjs.org/@types/sinonjs__fake-timers/8.1.1: + registry.npmjs.org/@types/sinonjs__fake-timers@8.1.1: resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz} name: '@types/sinonjs__fake-timers' version: 8.1.1 dev: true - registry.npmjs.org/@types/sizzle/2.3.3: + registry.npmjs.org/@types/sizzle@2.3.3: resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz} name: '@types/sizzle' version: 2.3.3 dev: true - registry.npmjs.org/@types/yauzl/2.10.0: + registry.npmjs.org/@types/yauzl@2.10.0: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz} name: '@types/yauzl' version: 2.10.0 requiresBuild: true dependencies: - '@types/node': registry.npmjs.org/@types/node/14.18.51 + '@types/node': registry.npmjs.org/@types/node@16.18.40 dev: true optional: true - registry.npmjs.org/@typescript-eslint/eslint-plugin/5.60.0_6yzi2ymi2jevhjfd3hf6w262e4: + registry.npmjs.org/@typescript-eslint/eslint-plugin@5.60.0(@typescript-eslint/parser@5.60.0)(eslint@8.43.0)(typescript@5.1.3): resolution: {integrity: sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz} id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.60.0 name: '@typescript-eslint/eslint-plugin' @@ -2073,55 +2452,57 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.5.1 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.60.0_7yfldhli4vs6yywnkyiujhawka - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.60.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.60.0_7yfldhli4vs6yywnkyiujhawka - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.60.0_7yfldhli4vs6yywnkyiujhawka - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.43.0 - grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 - ignore: registry.npmjs.org/ignore/5.2.4 - natural-compare-lite: registry.npmjs.org/natural-compare-lite/1.4.0 - semver: registry.npmjs.org/semver/7.5.1 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@5.1.3 - typescript: registry.npmjs.org/typescript/5.1.3 + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.5.1 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@5.60.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@5.60.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@5.60.0(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@5.60.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 + grapheme-splitter: registry.npmjs.org/grapheme-splitter@1.0.4 + ignore: registry.npmjs.org/ignore@5.2.4 + natural-compare-lite: registry.npmjs.org/natural-compare-lite@1.4.0 + semver: registry.npmjs.org/semver@7.5.1 + 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/eslint-plugin/5.60.0_xj5ev3uwennxkmahqnxqanffxm: - resolution: {integrity: sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.60.0 + registry.npmjs.org/@typescript-eslint/eslint-plugin@6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.3.0 name: '@typescript-eslint/eslint-plugin' - version: 5.60.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + version: 6.3.0 + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@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.5.1 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.60.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.42.0 - grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 - ignore: registry.npmjs.org/ignore/5.2.4 - natural-compare-lite: registry.npmjs.org/natural-compare-lite/1.4.0 - semver: registry.npmjs.org/semver/7.5.1 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@5.1.3 - typescript: registry.npmjs.org/typescript/5.1.3 + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.6.2 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.3.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.3.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.3.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.42.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 + natural-compare-lite: registry.npmjs.org/natural-compare-lite@1.4.0 + semver: registry.npmjs.org/semver@7.5.4 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.1(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_7yfldhli4vs6yywnkyiujhawka: + 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 name: '@typescript-eslint/parser' @@ -2134,50 +2515,61 @@ packages: typescript: optional: true dependencies: - '@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 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0_typescript@5.1.3 - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.43.0 - typescript: registry.npmjs.org/typescript/5.1.3 + '@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 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@5.60.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/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u: - 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 + registry.npmjs.org/@typescript-eslint/parser@6.3.0(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.3.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/6.3.0 name: '@typescript-eslint/parser' - version: 5.60.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + version: 6.3.0 + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@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 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0_typescript@5.1.3 - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.42.0 - typescript: registry.npmjs.org/typescript/5.1.3 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.42.0 + typescript: registry.npmjs.org/typescript@5.1.3 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/scope-manager/5.60.0: + 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' version: 5.60.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.60.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.60.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.60.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@5.60.0 + dev: true + + registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0: + resolution: {integrity: sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz} + name: '@typescript-eslint/scope-manager' + version: 6.3.0 + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0 dev: true - registry.npmjs.org/@typescript-eslint/type-utils/5.60.0_7yfldhli4vs6yywnkyiujhawka: + 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 name: '@typescript-eslint/type-utils' @@ -2190,47 +2582,54 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0_typescript@5.1.3 - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.60.0_7yfldhli4vs6yywnkyiujhawka - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.43.0 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@5.1.3 - typescript: registry.npmjs.org/typescript/5.1.3 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@5.60.0(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@5.60.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 + 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/type-utils/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u: - 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 + registry.npmjs.org/@typescript-eslint/type-utils@6.3.0(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/6.3.0 name: '@typescript-eslint/type-utils' - version: 5.60.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + version: 6.3.0 + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0_typescript@5.1.3 - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.42.0 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@5.1.3 - typescript: registry.npmjs.org/typescript/5.1.3 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.3.0(eslint@8.42.0)(typescript@5.1.3) + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + eslint: registry.npmjs.org/eslint@8.42.0 + ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.1(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: + 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' version: 5.60.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0_typescript@5.1.3: + registry.npmjs.org/@typescript-eslint/types@6.3.0: + resolution: {integrity: sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.3.0.tgz} + name: '@typescript-eslint/types' + version: 6.3.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 name: '@typescript-eslint/typescript-estree' @@ -2242,19 +2641,43 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.60.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.60.0 - debug: registry.npmjs.org/debug/4.3.4 - 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.1 - tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@5.1.3 - typescript: registry.npmjs.org/typescript/5.1.3 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.60.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@5.60.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.3 + 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.3.0(typescript@5.1.3): + resolution: {integrity: sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.3.0 + name: '@typescript-eslint/typescript-estree' + version: 6.3.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.3.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.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.1(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_7yfldhli4vs6yywnkyiujhawka: + 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 name: '@typescript-eslint/utils' @@ -2263,54 +2686,63 @@ packages: peerDependencies: 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.12 - '@types/semver': registry.npmjs.org/@types/semver/7.5.0 - '@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 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0_typescript@5.1.3 - eslint: registry.npmjs.org/eslint/8.43.0 - eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 - semver: registry.npmjs.org/semver/7.5.1 + '@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.12 + '@types/semver': registry.npmjs.org/@types/semver@7.5.0 + '@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 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@5.60.0(typescript@5.1.3) + eslint: registry.npmjs.org/eslint@8.43.0 + eslint-scope: registry.npmjs.org/eslint-scope@5.1.1 + semver: registry.npmjs.org/semver@7.5.3 transitivePeerDependencies: - supports-color - typescript dev: true - registry.npmjs.org/@typescript-eslint/utils/5.60.0_tizxnkcvjrb4cldxgwq5h3lj5u: - 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 + registry.npmjs.org/@typescript-eslint/utils@6.3.0(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.3.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/6.3.0 name: '@typescript-eslint/utils' - version: 5.60.0 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + version: 6.3.0 + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - 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.42.0 - '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.12 - '@types/semver': registry.npmjs.org/@types/semver/7.5.0 - '@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 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.60.0_typescript@5.1.3 - eslint: registry.npmjs.org/eslint/8.42.0 - eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 - semver: registry.npmjs.org/semver/7.5.1 + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.42.0) + '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.12 + '@types/semver': registry.npmjs.org/@types/semver@7.5.0 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3) + eslint: registry.npmjs.org/eslint@8.42.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: + 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' version: 5.60.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.60.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@5.60.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 dev: true - registry.npmjs.org/@vitejs/plugin-react-swc/3.3.2_vite@4.3.9: + registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0: + resolution: {integrity: sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz} + name: '@typescript-eslint/visitor-keys' + version: 6.3.0 + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 + 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 name: '@vitejs/plugin-react-swc' @@ -2318,31 +2750,31 @@ packages: peerDependencies: vite: ^4 dependencies: - '@swc/core': registry.npmjs.org/@swc/core/1.3.63 - vite: registry.npmjs.org/vite/4.3.9 + '@swc/core': registry.npmjs.org/@swc/core@1.3.63 + vite: registry.npmjs.org/vite@4.4.9 transitivePeerDependencies: - '@swc/helpers' dev: true - registry.npmjs.org/@vitejs/plugin-react/4.0.0_vite@4.3.9: - resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz} - id: registry.npmjs.org/@vitejs/plugin-react/4.0.0 + 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 name: '@vitejs/plugin-react' - version: 4.0.0 + 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.22.5 - '@babel/plugin-transform-react-jsx-self': registry.npmjs.org/@babel/plugin-transform-react-jsx-self/7.22.5_@babel+core@7.22.5 - '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source/7.22.5_@babel+core@7.22.5 - react-refresh: registry.npmjs.org/react-refresh/0.14.0 - vite: registry.npmjs.org/vite/4.3.9 + '@babel/core': registry.npmjs.org/@babel/core@7.22.10 + '@babel/plugin-transform-react-jsx-self': registry.npmjs.org/@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.10) + '@babel/plugin-transform-react-jsx-source': registry.npmjs.org/@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.10) + 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/acorn-jsx/5.3.2_acorn@8.8.2: + registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} id: registry.npmjs.org/acorn-jsx/5.3.2 name: acorn-jsx @@ -2350,10 +2782,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: registry.npmjs.org/acorn/8.8.2 + acorn: registry.npmjs.org/acorn@8.8.2 dev: true - registry.npmjs.org/acorn/8.8.2: + registry.npmjs.org/acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz} name: acorn version: 8.8.2 @@ -2361,226 +2793,240 @@ packages: hasBin: true dev: true - registry.npmjs.org/aggregate-error/3.1.0: + 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 version: 3.1.0 engines: {node: '>=8'} dependencies: - clean-stack: registry.npmjs.org/clean-stack/2.2.0 - indent-string: registry.npmjs.org/indent-string/4.0.0 + clean-stack: registry.npmjs.org/clean-stack@2.2.0 + indent-string: registry.npmjs.org/indent-string@4.0.0 dev: true - registry.npmjs.org/ajv/6.12.6: + registry.npmjs.org/ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz} name: ajv version: 6.12.6 dependencies: - fast-deep-equal: registry.npmjs.org/fast-deep-equal/3.1.3 - fast-json-stable-stringify: registry.npmjs.org/fast-json-stable-stringify/2.1.0 - json-schema-traverse: registry.npmjs.org/json-schema-traverse/0.4.1 - uri-js: registry.npmjs.org/uri-js/4.4.1 + fast-deep-equal: registry.npmjs.org/fast-deep-equal@3.1.3 + fast-json-stable-stringify: registry.npmjs.org/fast-json-stable-stringify@2.1.0 + json-schema-traverse: registry.npmjs.org/json-schema-traverse@0.4.1 + uri-js: registry.npmjs.org/uri-js@4.4.1 dev: true - registry.npmjs.org/ansi-colors/4.1.3: + registry.npmjs.org/ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz} name: ansi-colors version: 4.1.3 engines: {node: '>=6'} dev: true - registry.npmjs.org/ansi-escapes/4.3.2: + registry.npmjs.org/ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz} name: ansi-escapes version: 4.3.2 engines: {node: '>=8'} dependencies: - type-fest: registry.npmjs.org/type-fest/0.21.3 + type-fest: registry.npmjs.org/type-fest@0.21.3 dev: true - registry.npmjs.org/ansi-regex/5.0.1: + registry.npmjs.org/ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz} name: ansi-regex version: 5.0.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/ansi-styles/3.2.1: + registry.npmjs.org/ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz} name: ansi-styles version: 3.2.1 engines: {node: '>=4'} dependencies: - color-convert: registry.npmjs.org/color-convert/1.9.3 + color-convert: registry.npmjs.org/color-convert@1.9.3 dev: true - registry.npmjs.org/ansi-styles/4.3.0: + registry.npmjs.org/ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz} name: ansi-styles version: 4.3.0 engines: {node: '>=8'} dependencies: - color-convert: registry.npmjs.org/color-convert/2.0.1 + color-convert: registry.npmjs.org/color-convert@2.0.1 dev: true - registry.npmjs.org/anymatch/3.1.3: + registry.npmjs.org/anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz} name: anymatch version: 3.1.3 engines: {node: '>= 8'} dependencies: - normalize-path: registry.npmjs.org/normalize-path/3.0.0 - picomatch: registry.npmjs.org/picomatch/2.3.1 + normalize-path: registry.npmjs.org/normalize-path@3.0.0 + picomatch: registry.npmjs.org/picomatch@2.3.1 dev: true - registry.npmjs.org/arch/2.2.0: + registry.npmjs.org/arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/arch/-/arch-2.2.0.tgz} name: arch version: 2.2.0 dev: true - registry.npmjs.org/arg/5.0.2: + 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: + 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 version: 1.0.10 dependencies: - sprintf-js: registry.npmjs.org/sprintf-js/1.0.3 + sprintf-js: registry.npmjs.org/sprintf-js@1.0.3 dev: true - registry.npmjs.org/argparse/2.0.1: + registry.npmjs.org/argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz} name: argparse version: 2.0.1 dev: true - registry.npmjs.org/aria-query/5.3.0: + registry.npmjs.org/aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz} name: aria-query version: 5.3.0 dependencies: - dequal: registry.npmjs.org/dequal/2.0.3 + dequal: registry.npmjs.org/dequal@2.0.3 dev: true - registry.npmjs.org/array-buffer-byte-length/1.0.0: + registry.npmjs.org/array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz} name: array-buffer-byte-length version: 1.0.0 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - is-array-buffer: registry.npmjs.org/is-array-buffer/3.0.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + is-array-buffer: registry.npmjs.org/is-array-buffer@3.0.2 dev: true - registry.npmjs.org/array-includes/3.1.6: + registry.npmjs.org/array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz} name: array-includes version: 3.1.6 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - is-string: registry.npmjs.org/is-string/1.0.7 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + is-string: registry.npmjs.org/is-string@1.0.7 dev: true - registry.npmjs.org/array-union/2.1.0: + registry.npmjs.org/array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz} name: array-union version: 2.1.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/array.prototype.flat/1.3.1: + registry.npmjs.org/array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz} name: array.prototype.flat version: 1.3.1 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 - es-shim-unscopables: registry.npmjs.org/es-shim-unscopables/1.0.0 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.21.2 + es-shim-unscopables: registry.npmjs.org/es-shim-unscopables@1.0.0 dev: true - registry.npmjs.org/array.prototype.flatmap/1.3.1: + registry.npmjs.org/array.prototype.flatmap@1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz} name: array.prototype.flatmap version: 1.3.1 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 - es-shim-unscopables: registry.npmjs.org/es-shim-unscopables/1.0.0 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 + es-shim-unscopables: registry.npmjs.org/es-shim-unscopables@1.0.0 dev: true - registry.npmjs.org/array.prototype.tosorted/1.1.1: + registry.npmjs.org/array.prototype.tosorted@1.1.1: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz} name: array.prototype.tosorted version: 1.1.1 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 - es-shim-unscopables: registry.npmjs.org/es-shim-unscopables/1.0.0 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 + es-shim-unscopables: registry.npmjs.org/es-shim-unscopables@1.0.0 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + dev: true + + registry.npmjs.org/arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz} + name: arraybuffer.prototype.slice + version: 1.0.1 + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: registry.npmjs.org/array-buffer-byte-length@1.0.0 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + is-array-buffer: registry.npmjs.org/is-array-buffer@3.0.2 + is-shared-array-buffer: registry.npmjs.org/is-shared-array-buffer@1.0.2 dev: true - registry.npmjs.org/arrify/1.0.1: + registry.npmjs.org/arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz} name: arrify version: 1.0.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/asn1/0.2.6: + registry.npmjs.org/asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz} name: asn1 version: 0.2.6 dependencies: - safer-buffer: registry.npmjs.org/safer-buffer/2.1.2 + safer-buffer: registry.npmjs.org/safer-buffer@2.1.2 dev: true - registry.npmjs.org/assert-plus/1.0.0: + registry.npmjs.org/assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz} name: assert-plus version: 1.0.0 engines: {node: '>=0.8'} dev: true - registry.npmjs.org/astral-regex/2.0.0: + 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 version: 2.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/async/3.2.4: + 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} name: async version: 3.2.4 dev: true - registry.npmjs.org/asynckit/0.4.0: + registry.npmjs.org/asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz} name: asynckit version: 0.4.0 dev: true - registry.npmjs.org/at-least-node/1.0.0: + registry.npmjs.org/at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz} name: at-least-node version: 1.0.0 engines: {node: '>= 4.0.0'} dev: true - registry.npmjs.org/autoprefixer/10.4.14_postcss@8.4.24: + registry.npmjs.org/autoprefixer@10.4.14(postcss@8.4.24): resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz} id: registry.npmjs.org/autoprefixer/10.4.14 name: autoprefixer @@ -2590,525 +3036,544 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: registry.npmjs.org/browserslist/4.21.8 - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001502 - fraction.js: registry.npmjs.org/fraction.js/4.2.0 - normalize-range: registry.npmjs.org/normalize-range/0.1.2 - picocolors: registry.npmjs.org/picocolors/1.0.0 - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-value-parser: registry.npmjs.org/postcss-value-parser/4.2.0 + browserslist: registry.npmjs.org/browserslist@4.21.8 + caniuse-lite: registry.npmjs.org/caniuse-lite@1.0.30001502 + fraction.js: registry.npmjs.org/fraction.js@4.2.0 + normalize-range: registry.npmjs.org/normalize-range@0.1.2 + picocolors: registry.npmjs.org/picocolors@1.0.0 + postcss: registry.npmjs.org/postcss@8.4.24 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 dev: true - registry.npmjs.org/available-typed-arrays/1.0.5: + registry.npmjs.org/available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz} name: available-typed-arrays version: 1.0.5 engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/aws-sign2/0.7.0: + registry.npmjs.org/aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz} name: aws-sign2 version: 0.7.0 dev: true - registry.npmjs.org/aws4/1.12.0: + registry.npmjs.org/aws4@1.12.0: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz} name: aws4 version: 1.12.0 dev: true - registry.npmjs.org/axios/0.27.2_debug@4.3.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.27.2 dependencies: - follow-redirects: registry.npmjs.org/follow-redirects/1.15.2_debug@4.3.4 - form-data: registry.npmjs.org/form-data/4.0.0 + follow-redirects: registry.npmjs.org/follow-redirects@1.15.2(debug@4.3.4) + form-data: registry.npmjs.org/form-data@4.0.0 transitivePeerDependencies: - debug dev: true - registry.npmjs.org/axobject-query/3.2.1: + registry.npmjs.org/axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz} name: axobject-query version: 3.2.1 dependencies: - dequal: registry.npmjs.org/dequal/2.0.3 + dequal: registry.npmjs.org/dequal@2.0.3 dev: true - registry.npmjs.org/balanced-match/1.0.2: + registry.npmjs.org/balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} name: balanced-match version: 1.0.2 dev: true - registry.npmjs.org/base64-js/1.5.1: + registry.npmjs.org/base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz} name: base64-js version: 1.5.1 dev: true - registry.npmjs.org/bcrypt-pbkdf/1.0.2: + registry.npmjs.org/bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz} name: bcrypt-pbkdf version: 1.0.2 dependencies: - tweetnacl: registry.npmjs.org/tweetnacl/0.14.5 + tweetnacl: registry.npmjs.org/tweetnacl@0.14.5 dev: true - registry.npmjs.org/better-path-resolve/1.0.0: + registry.npmjs.org/better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz} name: better-path-resolve version: 1.0.0 engines: {node: '>=4'} dependencies: - is-windows: registry.npmjs.org/is-windows/1.0.2 + is-windows: registry.npmjs.org/is-windows@1.0.2 dev: true - registry.npmjs.org/binary-extensions/2.2.0: + registry.npmjs.org/binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz} name: binary-extensions version: 2.2.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/blob-util/2.0.2: + registry.npmjs.org/blob-util@2.0.2: resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz} name: blob-util version: 2.0.2 dev: true - registry.npmjs.org/bluebird/3.7.2: + registry.npmjs.org/bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz} name: bluebird version: 3.7.2 dev: true - registry.npmjs.org/brace-expansion/1.1.11: + registry.npmjs.org/brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz} name: brace-expansion version: 1.1.11 dependencies: - balanced-match: registry.npmjs.org/balanced-match/1.0.2 - concat-map: registry.npmjs.org/concat-map/0.0.1 + balanced-match: registry.npmjs.org/balanced-match@1.0.2 + concat-map: registry.npmjs.org/concat-map@0.0.1 dev: true - registry.npmjs.org/brace-expansion/2.0.1: + registry.npmjs.org/brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz} name: brace-expansion version: 2.0.1 dependencies: - balanced-match: registry.npmjs.org/balanced-match/1.0.2 + balanced-match: registry.npmjs.org/balanced-match@1.0.2 dev: true - registry.npmjs.org/braces/3.0.2: + registry.npmjs.org/braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/braces/-/braces-3.0.2.tgz} name: braces version: 3.0.2 engines: {node: '>=8'} dependencies: - fill-range: registry.npmjs.org/fill-range/7.0.1 + fill-range: registry.npmjs.org/fill-range@7.0.1 dev: true - registry.npmjs.org/breakword/1.0.6: + registry.npmjs.org/breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/breakword/-/breakword-1.0.6.tgz} name: breakword version: 1.0.6 dependencies: - wcwidth: registry.npmjs.org/wcwidth/1.0.1 + wcwidth: registry.npmjs.org/wcwidth@1.0.1 + dev: true + + registry.npmjs.org/browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz} + name: browserslist + version: 4.21.10 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: registry.npmjs.org/caniuse-lite@1.0.30001520 + electron-to-chromium: registry.npmjs.org/electron-to-chromium@1.4.491 + node-releases: registry.npmjs.org/node-releases@2.0.13 + update-browserslist-db: registry.npmjs.org/update-browserslist-db@1.0.11(browserslist@4.21.10) dev: true - registry.npmjs.org/browserslist/4.21.8: + registry.npmjs.org/browserslist@4.21.8: resolution: {integrity: sha512-j+7xYe+v+q2Id9qbBeCI8WX5NmZSRe8es1+0xntD/+gaWXznP8tFEkv5IgSaHf5dS1YwVMbX/4W6m937mj+wQw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/browserslist/-/browserslist-4.21.8.tgz} name: browserslist version: 4.21.8 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001502 - electron-to-chromium: registry.npmjs.org/electron-to-chromium/1.4.428 - node-releases: registry.npmjs.org/node-releases/2.0.12 - update-browserslist-db: registry.npmjs.org/update-browserslist-db/1.0.11_browserslist@4.21.8 + caniuse-lite: registry.npmjs.org/caniuse-lite@1.0.30001502 + electron-to-chromium: registry.npmjs.org/electron-to-chromium@1.4.428 + node-releases: registry.npmjs.org/node-releases@2.0.12 + update-browserslist-db: registry.npmjs.org/update-browserslist-db@1.0.11(browserslist@4.21.8) dev: true - registry.npmjs.org/buffer-crc32/0.2.13: + registry.npmjs.org/buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz} name: buffer-crc32 version: 0.2.13 dev: true - registry.npmjs.org/buffer-from/1.1.2: + registry.npmjs.org/buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz} name: buffer-from version: 1.1.2 dev: true - registry.npmjs.org/buffer/5.7.1: + registry.npmjs.org/buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz} name: buffer version: 5.7.1 dependencies: - base64-js: registry.npmjs.org/base64-js/1.5.1 - ieee754: registry.npmjs.org/ieee754/1.2.1 + base64-js: registry.npmjs.org/base64-js@1.5.1 + ieee754: registry.npmjs.org/ieee754@1.2.1 dev: true - registry.npmjs.org/builtin-modules/3.3.0: + registry.npmjs.org/builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz} name: builtin-modules version: 3.3.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/busboy/1.6.0: + registry.npmjs.org/busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz} name: busboy version: 1.6.0 engines: {node: '>=10.16.0'} dependencies: - streamsearch: registry.npmjs.org/streamsearch/1.1.0 + streamsearch: registry.npmjs.org/streamsearch@1.1.0 dev: true - registry.npmjs.org/cachedir/2.3.0: - resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz} + 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} name: cachedir - version: 2.3.0 + version: 2.4.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/call-bind/1.0.2: + registry.npmjs.org/call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz} name: call-bind version: 1.0.2 dependencies: - function-bind: registry.npmjs.org/function-bind/1.1.1 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 + function-bind: registry.npmjs.org/function-bind@1.1.1 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 dev: true - registry.npmjs.org/callsites/3.1.0: + registry.npmjs.org/callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz} name: callsites version: 3.1.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/camelcase-keys/6.2.2: + registry.npmjs.org/camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz} name: camelcase-keys version: 6.2.2 engines: {node: '>=8'} dependencies: - camelcase: registry.npmjs.org/camelcase/5.3.1 - map-obj: registry.npmjs.org/map-obj/4.3.0 - quick-lru: registry.npmjs.org/quick-lru/4.0.1 + camelcase: registry.npmjs.org/camelcase@5.3.1 + map-obj: registry.npmjs.org/map-obj@4.3.0 + quick-lru: registry.npmjs.org/quick-lru@4.0.1 dev: true - registry.npmjs.org/camelcase/5.3.1: + registry.npmjs.org/camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz} name: camelcase version: 5.3.1 engines: {node: '>=6'} dev: true - registry.npmjs.org/caniuse-lite/1.0.30001502: + registry.npmjs.org/caniuse-lite@1.0.30001502: resolution: {integrity: sha512-AZ+9tFXw1sS0o0jcpJQIXvFTOB/xGiQ4OQ2t98QX3NDn2EZTSRBC801gxrsGgViuq2ak/NLkNgSNEPtCr5lfKg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001502.tgz} name: caniuse-lite version: 1.0.30001502 dev: true - registry.npmjs.org/caseless/0.12.0: + registry.npmjs.org/caniuse-lite@1.0.30001520: + resolution: {integrity: sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz} + name: caniuse-lite + version: 1.0.30001520 + dev: true + + registry.npmjs.org/caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz} name: caseless version: 0.12.0 dev: true - registry.npmjs.org/chalk/2.4.2: + registry.npmjs.org/chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz} name: chalk version: 2.4.2 engines: {node: '>=4'} dependencies: - ansi-styles: registry.npmjs.org/ansi-styles/3.2.1 - escape-string-regexp: registry.npmjs.org/escape-string-regexp/1.0.5 - supports-color: registry.npmjs.org/supports-color/5.5.0 + ansi-styles: registry.npmjs.org/ansi-styles@3.2.1 + escape-string-regexp: registry.npmjs.org/escape-string-regexp@1.0.5 + supports-color: registry.npmjs.org/supports-color@5.5.0 dev: true - registry.npmjs.org/chalk/4.1.2: + registry.npmjs.org/chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz} name: chalk version: 4.1.2 engines: {node: '>=10'} dependencies: - ansi-styles: registry.npmjs.org/ansi-styles/4.3.0 - supports-color: registry.npmjs.org/supports-color/7.2.0 + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + supports-color: registry.npmjs.org/supports-color@7.2.0 dev: true - registry.npmjs.org/chardet/0.7.0: + registry.npmjs.org/chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz} name: chardet version: 0.7.0 dev: true - registry.npmjs.org/check-more-types/2.24.0: + registry.npmjs.org/check-more-types@2.24.0: resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz} name: check-more-types version: 2.24.0 engines: {node: '>= 0.8.0'} dev: true - registry.npmjs.org/chokidar/3.5.3: + registry.npmjs.org/chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz} name: chokidar version: 3.5.3 engines: {node: '>= 8.10.0'} dependencies: - anymatch: registry.npmjs.org/anymatch/3.1.3 - braces: registry.npmjs.org/braces/3.0.2 - glob-parent: registry.npmjs.org/glob-parent/5.1.2 - is-binary-path: registry.npmjs.org/is-binary-path/2.1.0 - is-glob: registry.npmjs.org/is-glob/4.0.3 - normalize-path: registry.npmjs.org/normalize-path/3.0.0 - readdirp: registry.npmjs.org/readdirp/3.6.0 + anymatch: registry.npmjs.org/anymatch@3.1.3 + braces: registry.npmjs.org/braces@3.0.2 + glob-parent: registry.npmjs.org/glob-parent@5.1.2 + is-binary-path: registry.npmjs.org/is-binary-path@2.1.0 + is-glob: registry.npmjs.org/is-glob@4.0.3 + normalize-path: registry.npmjs.org/normalize-path@3.0.0 + readdirp: registry.npmjs.org/readdirp@3.6.0 optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + fsevents: registry.npmjs.org/fsevents@2.3.2 dev: true - registry.npmjs.org/ci-info/3.8.0: + registry.npmjs.org/ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz} name: ci-info version: 3.8.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/classcat/5.0.4: + registry.npmjs.org/classcat@5.0.4: resolution: {integrity: sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz} name: classcat version: 5.0.4 dev: false - registry.npmjs.org/clean-stack/2.2.0: + registry.npmjs.org/clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz} name: clean-stack version: 2.2.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/cli-cursor/3.1.0: + registry.npmjs.org/cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz} name: cli-cursor version: 3.1.0 engines: {node: '>=8'} dependencies: - restore-cursor: registry.npmjs.org/restore-cursor/3.1.0 + restore-cursor: registry.npmjs.org/restore-cursor@3.1.0 dev: true - registry.npmjs.org/cli-table3/0.6.3: + registry.npmjs.org/cli-table3@0.6.3: resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz} name: cli-table3 version: 0.6.3 engines: {node: 10.* || >= 12.*} dependencies: - string-width: registry.npmjs.org/string-width/4.2.3 + string-width: registry.npmjs.org/string-width@4.2.3 optionalDependencies: - '@colors/colors': registry.npmjs.org/@colors/colors/1.5.0 + '@colors/colors': registry.npmjs.org/@colors/colors@1.5.0 dev: true - registry.npmjs.org/cli-truncate/2.1.0: + registry.npmjs.org/cli-truncate@2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz} name: cli-truncate version: 2.1.0 engines: {node: '>=8'} dependencies: - slice-ansi: registry.npmjs.org/slice-ansi/3.0.0 - string-width: registry.npmjs.org/string-width/4.2.3 + slice-ansi: registry.npmjs.org/slice-ansi@3.0.0 + string-width: registry.npmjs.org/string-width@4.2.3 dev: true - registry.npmjs.org/cliui/6.0.0: + 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 version: 6.0.0 dependencies: - string-width: registry.npmjs.org/string-width/4.2.3 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - wrap-ansi: registry.npmjs.org/wrap-ansi/6.2.0 + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + wrap-ansi: registry.npmjs.org/wrap-ansi@6.2.0 dev: true - registry.npmjs.org/cliui/8.0.1: + registry.npmjs.org/cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz} name: cliui version: 8.0.1 engines: {node: '>=12'} dependencies: - string-width: registry.npmjs.org/string-width/4.2.3 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - wrap-ansi: registry.npmjs.org/wrap-ansi/7.0.0 + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + wrap-ansi: registry.npmjs.org/wrap-ansi@7.0.0 dev: true - registry.npmjs.org/clone/1.0.4: + registry.npmjs.org/clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/clone/-/clone-1.0.4.tgz} name: clone version: 1.0.4 engines: {node: '>=0.8'} dev: true - registry.npmjs.org/code-red/1.0.3: + registry.npmjs.org/code-red@1.0.3: resolution: {integrity: sha512-kVwJELqiILQyG5aeuyKFbdsI1fmQy1Cmf7dQ8eGmVuJoaRVdwey7WaMknr2ZFeVSYSKT0rExsa8EGw0aoI/1QQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/code-red/-/code-red-1.0.3.tgz} name: code-red version: 1.0.3 dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 - '@types/estree': registry.npmjs.org/@types/estree/1.0.1 - acorn: registry.npmjs.org/acorn/8.8.2 - estree-walker: registry.npmjs.org/estree-walker/3.0.3 - periscopic: registry.npmjs.org/periscopic/3.1.0 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + '@types/estree': registry.npmjs.org/@types/estree@1.0.1 + acorn: registry.npmjs.org/acorn@8.8.2 + estree-walker: registry.npmjs.org/estree-walker@3.0.3 + periscopic: registry.npmjs.org/periscopic@3.1.0 dev: true - registry.npmjs.org/color-convert/1.9.3: + registry.npmjs.org/color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz} name: color-convert version: 1.9.3 dependencies: - color-name: registry.npmjs.org/color-name/1.1.3 + color-name: registry.npmjs.org/color-name@1.1.3 dev: true - registry.npmjs.org/color-convert/2.0.1: + registry.npmjs.org/color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz} name: color-convert version: 2.0.1 engines: {node: '>=7.0.0'} dependencies: - color-name: registry.npmjs.org/color-name/1.1.4 + color-name: registry.npmjs.org/color-name@1.1.4 dev: true - registry.npmjs.org/color-name/1.1.3: + registry.npmjs.org/color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz} name: color-name version: 1.1.3 dev: true - registry.npmjs.org/color-name/1.1.4: + registry.npmjs.org/color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz} name: color-name version: 1.1.4 dev: true - registry.npmjs.org/colorette/2.0.20: + registry.npmjs.org/colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz} name: colorette version: 2.0.20 dev: true - registry.npmjs.org/combined-stream/1.0.8: + registry.npmjs.org/combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz} name: combined-stream version: 1.0.8 engines: {node: '>= 0.8'} dependencies: - delayed-stream: registry.npmjs.org/delayed-stream/1.0.0 + delayed-stream: registry.npmjs.org/delayed-stream@1.0.0 dev: true - registry.npmjs.org/commander/2.20.3: + registry.npmjs.org/commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/commander/-/commander-2.20.3.tgz} name: commander version: 2.20.3 dev: true - registry.npmjs.org/commander/6.2.1: + registry.npmjs.org/commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/commander/-/commander-6.2.1.tgz} name: commander version: 6.2.1 engines: {node: '>= 6'} dev: true - registry.npmjs.org/common-tags/1.8.2: + registry.npmjs.org/common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz} name: common-tags version: 1.8.2 engines: {node: '>=4.0.0'} dev: true - registry.npmjs.org/commondir/1.0.1: + registry.npmjs.org/commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz} name: commondir version: 1.0.1 dev: true - registry.npmjs.org/concat-map/0.0.1: + registry.npmjs.org/concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz} name: concat-map version: 0.0.1 dev: true - registry.npmjs.org/concurrently/7.6.0: + registry.npmjs.org/concurrently@7.6.0: resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz} name: concurrently version: 7.6.0 engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true dependencies: - chalk: registry.npmjs.org/chalk/4.1.2 - date-fns: registry.npmjs.org/date-fns/2.30.0 - lodash: registry.npmjs.org/lodash/4.17.21 - rxjs: registry.npmjs.org/rxjs/7.8.1 - shell-quote: registry.npmjs.org/shell-quote/1.8.1 - spawn-command: registry.npmjs.org/spawn-command/0.0.2-1 - supports-color: registry.npmjs.org/supports-color/8.1.1 - tree-kill: registry.npmjs.org/tree-kill/1.2.2 - yargs: registry.npmjs.org/yargs/17.7.2 + chalk: registry.npmjs.org/chalk@4.1.2 + date-fns: registry.npmjs.org/date-fns@2.30.0 + lodash: registry.npmjs.org/lodash@4.17.21 + rxjs: registry.npmjs.org/rxjs@7.8.1 + shell-quote: registry.npmjs.org/shell-quote@1.8.1 + spawn-command: registry.npmjs.org/spawn-command@0.0.2-1 + supports-color: registry.npmjs.org/supports-color@8.1.1 + tree-kill: registry.npmjs.org/tree-kill@1.2.2 + yargs: registry.npmjs.org/yargs@17.7.2 dev: true - registry.npmjs.org/convert-source-map/1.9.0: + registry.npmjs.org/convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz} name: convert-source-map version: 1.9.0 dev: true - registry.npmjs.org/cookie/0.5.0: + registry.npmjs.org/cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz} name: cookie version: 0.5.0 engines: {node: '>= 0.6'} dev: true - registry.npmjs.org/core-util-is/1.0.2: + registry.npmjs.org/core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz} name: core-util-is version: 1.0.2 dev: true - registry.npmjs.org/cross-spawn/5.1.0: + registry.npmjs.org/cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz} name: cross-spawn version: 5.1.0 dependencies: - lru-cache: registry.npmjs.org/lru-cache/4.1.5 - shebang-command: registry.npmjs.org/shebang-command/1.2.0 - which: registry.npmjs.org/which/1.3.1 + lru-cache: registry.npmjs.org/lru-cache@4.1.5 + shebang-command: registry.npmjs.org/shebang-command@1.2.0 + which: registry.npmjs.org/which@1.3.1 dev: true - registry.npmjs.org/cross-spawn/7.0.3: + registry.npmjs.org/cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz} name: cross-spawn version: 7.0.3 engines: {node: '>= 8'} dependencies: - path-key: registry.npmjs.org/path-key/3.1.1 - shebang-command: registry.npmjs.org/shebang-command/2.0.0 - which: registry.npmjs.org/which/2.0.2 + path-key: registry.npmjs.org/path-key@3.1.1 + shebang-command: registry.npmjs.org/shebang-command@2.0.0 + which: registry.npmjs.org/which@2.0.2 dev: true - registry.npmjs.org/css-tree/2.3.1: + registry.npmjs.org/css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz} name: css-tree version: 2.3.1 engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} dependencies: - mdn-data: registry.npmjs.org/mdn-data/2.0.30 - source-map-js: registry.npmjs.org/source-map-js/1.0.2 + mdn-data: registry.npmjs.org/mdn-data@2.0.30 + source-map-js: registry.npmjs.org/source-map-js@1.0.2 dev: true - registry.npmjs.org/cssesc/3.0.0: + registry.npmjs.org/cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz} name: cssesc version: 3.0.0 @@ -3116,160 +3581,160 @@ packages: hasBin: true dev: true - registry.npmjs.org/csstype/3.1.2: + registry.npmjs.org/csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz} name: csstype version: 3.1.2 - dev: true - registry.npmjs.org/csv-generate/3.4.3: + registry.npmjs.org/csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz} name: csv-generate version: 3.4.3 dev: true - registry.npmjs.org/csv-parse/4.16.3: + registry.npmjs.org/csv-parse@4.16.3: resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz} name: csv-parse version: 4.16.3 dev: true - registry.npmjs.org/csv-stringify/5.6.5: + registry.npmjs.org/csv-stringify@5.6.5: resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz} name: csv-stringify version: 5.6.5 dev: true - registry.npmjs.org/csv/5.5.3: + registry.npmjs.org/csv@5.5.3: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/csv/-/csv-5.5.3.tgz} name: csv version: 5.5.3 engines: {node: '>= 0.1.90'} dependencies: - csv-generate: registry.npmjs.org/csv-generate/3.4.3 - csv-parse: registry.npmjs.org/csv-parse/4.16.3 - csv-stringify: registry.npmjs.org/csv-stringify/5.6.5 - stream-transform: registry.npmjs.org/stream-transform/2.1.3 + csv-generate: registry.npmjs.org/csv-generate@3.4.3 + csv-parse: registry.npmjs.org/csv-parse@4.16.3 + csv-stringify: registry.npmjs.org/csv-stringify@5.6.5 + stream-transform: registry.npmjs.org/stream-transform@2.1.3 dev: true - registry.npmjs.org/cypress-real-events/1.8.1_cypress@12.14.0: - resolution: {integrity: sha512-8fFnA8EzS3EVbAmpSEUf3A8yZCmfU3IPOSGUDVFCdE1ke1gYL1A+gvXXV6HKUbTPRuvKKt2vpaMbUwYLpDRswQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress-real-events/-/cypress-real-events-1.8.1.tgz} - id: registry.npmjs.org/cypress-real-events/1.8.1 + 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 name: cypress-real-events - version: 1.8.1 + version: 1.10.0 peerDependencies: cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x || ^11.x || ^12.x dependencies: - cypress: registry.npmjs.org/cypress/12.14.0 + cypress: registry.npmjs.org/cypress@12.17.3 + prettier: registry.npmjs.org/prettier@3.0.1 dev: true - registry.npmjs.org/cypress/12.14.0: - resolution: {integrity: sha512-HiLIXKXZaIT1RT7sw1sVPt+qKtis3uYNm6KwC4qoYjabwLKaqZlyS/P+uVvvlBNcHIwL/BC6nQZajpbUd7hOgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress/-/cypress-12.14.0.tgz} + registry.npmjs.org/cypress@12.17.3: + resolution: {integrity: sha512-/R4+xdIDjUSLYkiQfwJd630S81KIgicmQOLXotFxVXkl+eTeVO+3bHXxdi5KBh/OgC33HWN33kHX+0tQR/ZWpg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/cypress/-/cypress-12.17.3.tgz} name: cypress - version: 12.14.0 + version: 12.17.3 engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} hasBin: true requiresBuild: true dependencies: - '@cypress/request': registry.npmjs.org/@cypress/request/2.88.11 - '@cypress/xvfb': registry.npmjs.org/@cypress/xvfb/1.2.4_supports-color@8.1.1 - '@types/node': registry.npmjs.org/@types/node/14.18.51 - '@types/sinonjs__fake-timers': registry.npmjs.org/@types/sinonjs__fake-timers/8.1.1 - '@types/sizzle': registry.npmjs.org/@types/sizzle/2.3.3 - arch: registry.npmjs.org/arch/2.2.0 - blob-util: registry.npmjs.org/blob-util/2.0.2 - bluebird: registry.npmjs.org/bluebird/3.7.2 - buffer: registry.npmjs.org/buffer/5.7.1 - cachedir: registry.npmjs.org/cachedir/2.3.0 - chalk: registry.npmjs.org/chalk/4.1.2 - check-more-types: registry.npmjs.org/check-more-types/2.24.0 - cli-cursor: registry.npmjs.org/cli-cursor/3.1.0 - cli-table3: registry.npmjs.org/cli-table3/0.6.3 - commander: registry.npmjs.org/commander/6.2.1 - common-tags: registry.npmjs.org/common-tags/1.8.2 - dayjs: registry.npmjs.org/dayjs/1.11.8 - debug: registry.npmjs.org/debug/4.3.4_supports-color@8.1.1 - enquirer: registry.npmjs.org/enquirer/2.3.6 - eventemitter2: registry.npmjs.org/eventemitter2/6.4.7 - execa: registry.npmjs.org/execa/4.1.0 - executable: registry.npmjs.org/executable/4.1.1 - extract-zip: registry.npmjs.org/extract-zip/2.0.1_supports-color@8.1.1 - figures: registry.npmjs.org/figures/3.2.0 - fs-extra: registry.npmjs.org/fs-extra/9.1.0 - getos: registry.npmjs.org/getos/3.2.1 - is-ci: registry.npmjs.org/is-ci/3.0.1 - is-installed-globally: registry.npmjs.org/is-installed-globally/0.4.0 - lazy-ass: registry.npmjs.org/lazy-ass/1.6.0 - listr2: registry.npmjs.org/listr2/3.14.0_enquirer@2.3.6 - lodash: registry.npmjs.org/lodash/4.17.21 - log-symbols: registry.npmjs.org/log-symbols/4.1.0 - minimist: registry.npmjs.org/minimist/1.2.8 - ospath: registry.npmjs.org/ospath/1.2.2 - pretty-bytes: registry.npmjs.org/pretty-bytes/5.6.0 - proxy-from-env: registry.npmjs.org/proxy-from-env/1.0.0 - request-progress: registry.npmjs.org/request-progress/3.0.0 - semver: registry.npmjs.org/semver/7.5.1 - supports-color: registry.npmjs.org/supports-color/8.1.1 - tmp: registry.npmjs.org/tmp/0.2.1 - untildify: registry.npmjs.org/untildify/4.0.0 - yauzl: registry.npmjs.org/yauzl/2.10.0 - dev: true - - registry.npmjs.org/d3-color/3.1.0: + '@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.40 + '@types/sinonjs__fake-timers': registry.npmjs.org/@types/sinonjs__fake-timers@8.1.1 + '@types/sizzle': registry.npmjs.org/@types/sizzle@2.3.3 + arch: registry.npmjs.org/arch@2.2.0 + blob-util: registry.npmjs.org/blob-util@2.0.2 + bluebird: registry.npmjs.org/bluebird@3.7.2 + buffer: registry.npmjs.org/buffer@5.7.1 + cachedir: registry.npmjs.org/cachedir@2.4.0 + chalk: registry.npmjs.org/chalk@4.1.2 + check-more-types: registry.npmjs.org/check-more-types@2.24.0 + cli-cursor: registry.npmjs.org/cli-cursor@3.1.0 + cli-table3: registry.npmjs.org/cli-table3@0.6.3 + commander: registry.npmjs.org/commander@6.2.1 + common-tags: registry.npmjs.org/common-tags@1.8.2 + dayjs: registry.npmjs.org/dayjs@1.11.9 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + enquirer: registry.npmjs.org/enquirer@2.4.1 + eventemitter2: registry.npmjs.org/eventemitter2@6.4.7 + execa: registry.npmjs.org/execa@4.1.0 + executable: registry.npmjs.org/executable@4.1.1 + extract-zip: registry.npmjs.org/extract-zip@2.0.1(supports-color@8.1.1) + figures: registry.npmjs.org/figures@3.2.0 + fs-extra: registry.npmjs.org/fs-extra@9.1.0 + getos: registry.npmjs.org/getos@3.2.1 + is-ci: registry.npmjs.org/is-ci@3.0.1 + is-installed-globally: registry.npmjs.org/is-installed-globally@0.4.0 + lazy-ass: registry.npmjs.org/lazy-ass@1.6.0 + listr2: registry.npmjs.org/listr2@3.14.0(enquirer@2.4.1) + lodash: registry.npmjs.org/lodash@4.17.21 + log-symbols: registry.npmjs.org/log-symbols@4.1.0 + minimist: registry.npmjs.org/minimist@1.2.8 + ospath: registry.npmjs.org/ospath@1.2.2 + pretty-bytes: registry.npmjs.org/pretty-bytes@5.6.0 + proxy-from-env: registry.npmjs.org/proxy-from-env@1.0.0 + request-progress: registry.npmjs.org/request-progress@3.0.0 + semver: registry.npmjs.org/semver@7.5.4 + supports-color: registry.npmjs.org/supports-color@8.1.1 + tmp: registry.npmjs.org/tmp@0.2.1 + untildify: registry.npmjs.org/untildify@4.0.0 + yauzl: registry.npmjs.org/yauzl@2.10.0 + dev: true + + registry.npmjs.org/d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz} name: d3-color version: 3.1.0 engines: {node: '>=12'} dev: false - registry.npmjs.org/d3-dispatch/3.0.1: + registry.npmjs.org/d3-dispatch@3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz} name: d3-dispatch version: 3.0.1 engines: {node: '>=12'} dev: false - registry.npmjs.org/d3-drag/3.0.0: + registry.npmjs.org/d3-drag@3.0.0: resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz} name: d3-drag version: 3.0.0 engines: {node: '>=12'} dependencies: - d3-dispatch: registry.npmjs.org/d3-dispatch/3.0.1 - d3-selection: registry.npmjs.org/d3-selection/3.0.0 + d3-dispatch: registry.npmjs.org/d3-dispatch@3.0.1 + d3-selection: registry.npmjs.org/d3-selection@3.0.0 dev: false - registry.npmjs.org/d3-ease/3.0.1: + registry.npmjs.org/d3-ease@3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz} name: d3-ease version: 3.0.1 engines: {node: '>=12'} dev: false - registry.npmjs.org/d3-interpolate/3.0.1: + registry.npmjs.org/d3-interpolate@3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz} name: d3-interpolate version: 3.0.1 engines: {node: '>=12'} dependencies: - d3-color: registry.npmjs.org/d3-color/3.1.0 + d3-color: registry.npmjs.org/d3-color@3.1.0 dev: false - registry.npmjs.org/d3-selection/3.0.0: + registry.npmjs.org/d3-selection@3.0.0: resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz} name: d3-selection version: 3.0.0 engines: {node: '>=12'} dev: false - registry.npmjs.org/d3-timer/3.0.1: + registry.npmjs.org/d3-timer@3.0.1: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz} name: d3-timer version: 3.0.1 engines: {node: '>=12'} dev: false - registry.npmjs.org/d3-transition/3.0.1_d3-selection@3.0.0: + registry.npmjs.org/d3-transition@3.0.1(d3-selection@3.0.0): resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz} id: registry.npmjs.org/d3-transition/3.0.1 name: d3-transition @@ -3278,67 +3743,67 @@ packages: peerDependencies: d3-selection: 2 - 3 dependencies: - d3-color: registry.npmjs.org/d3-color/3.1.0 - d3-dispatch: registry.npmjs.org/d3-dispatch/3.0.1 - d3-ease: registry.npmjs.org/d3-ease/3.0.1 - d3-interpolate: registry.npmjs.org/d3-interpolate/3.0.1 - d3-selection: registry.npmjs.org/d3-selection/3.0.0 - d3-timer: registry.npmjs.org/d3-timer/3.0.1 + d3-color: registry.npmjs.org/d3-color@3.1.0 + d3-dispatch: registry.npmjs.org/d3-dispatch@3.0.1 + d3-ease: registry.npmjs.org/d3-ease@3.0.1 + d3-interpolate: registry.npmjs.org/d3-interpolate@3.0.1 + d3-selection: registry.npmjs.org/d3-selection@3.0.0 + d3-timer: registry.npmjs.org/d3-timer@3.0.1 dev: false - registry.npmjs.org/d3-zoom/3.0.0: + registry.npmjs.org/d3-zoom@3.0.0: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz} name: d3-zoom version: 3.0.0 engines: {node: '>=12'} dependencies: - d3-dispatch: registry.npmjs.org/d3-dispatch/3.0.1 - d3-drag: registry.npmjs.org/d3-drag/3.0.0 - d3-interpolate: registry.npmjs.org/d3-interpolate/3.0.1 - d3-selection: registry.npmjs.org/d3-selection/3.0.0 - d3-transition: registry.npmjs.org/d3-transition/3.0.1_d3-selection@3.0.0 + d3-dispatch: registry.npmjs.org/d3-dispatch@3.0.1 + d3-drag: registry.npmjs.org/d3-drag@3.0.0 + d3-interpolate: registry.npmjs.org/d3-interpolate@3.0.1 + d3-selection: registry.npmjs.org/d3-selection@3.0.0 + d3-transition: registry.npmjs.org/d3-transition@3.0.1(d3-selection@3.0.0) dev: false - registry.npmjs.org/dagre/0.8.5: + registry.npmjs.org/dagre@0.8.5: resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz} name: dagre version: 0.8.5 dependencies: - graphlib: registry.npmjs.org/graphlib/2.1.8 - lodash: registry.npmjs.org/lodash/4.17.21 + graphlib: registry.npmjs.org/graphlib@2.1.8 + lodash: registry.npmjs.org/lodash@4.17.21 dev: false - registry.npmjs.org/dashdash/1.14.1: + 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 version: 1.14.1 engines: {node: '>=0.10'} dependencies: - assert-plus: registry.npmjs.org/assert-plus/1.0.0 + assert-plus: registry.npmjs.org/assert-plus@1.0.0 dev: true - registry.npmjs.org/dataloader/1.4.0: + registry.npmjs.org/dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz} name: dataloader version: 1.4.0 dev: true - registry.npmjs.org/date-fns/2.30.0: + registry.npmjs.org/date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz} name: date-fns version: 2.30.0 engines: {node: '>=0.11'} dependencies: - '@babel/runtime': registry.npmjs.org/@babel/runtime/7.22.5 + '@babel/runtime': registry.npmjs.org/@babel/runtime@7.22.5 dev: true - registry.npmjs.org/dayjs/1.11.8: - resolution: {integrity: sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz} + registry.npmjs.org/dayjs@1.11.9: + resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz} name: dayjs - version: 1.11.8 + version: 1.11.9 dev: true - registry.npmjs.org/debug/3.2.7_supports-color@8.1.1: + registry.npmjs.org/debug@3.2.7(supports-color@8.1.1): resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-3.2.7.tgz} id: registry.npmjs.org/debug/3.2.7 name: debug @@ -3349,25 +3814,11 @@ packages: supports-color: optional: true dependencies: - ms: registry.npmjs.org/ms/2.1.3 - supports-color: registry.npmjs.org/supports-color/8.1.1 - dev: true - - registry.npmjs.org/debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/debug/-/debug-4.3.4.tgz} - name: debug - version: 4.3.4 - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: registry.npmjs.org/ms/2.1.2 + ms: registry.npmjs.org/ms@2.1.3 + supports-color: registry.npmjs.org/supports-color@8.1.1 dev: true - registry.npmjs.org/debug/4.3.4_supports-color@8.1.1: + 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 name: debug @@ -3379,270 +3830,333 @@ packages: supports-color: optional: true dependencies: - ms: registry.npmjs.org/ms/2.1.2 - supports-color: registry.npmjs.org/supports-color/8.1.1 + ms: registry.npmjs.org/ms@2.1.2 + supports-color: registry.npmjs.org/supports-color@8.1.1 dev: true - registry.npmjs.org/decamelize-keys/1.1.1: + registry.npmjs.org/decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz} name: decamelize-keys version: 1.1.1 engines: {node: '>=0.10.0'} dependencies: - decamelize: registry.npmjs.org/decamelize/1.2.0 - map-obj: registry.npmjs.org/map-obj/1.0.1 + decamelize: registry.npmjs.org/decamelize@1.2.0 + map-obj: registry.npmjs.org/map-obj@1.0.1 dev: true - registry.npmjs.org/decamelize/1.2.0: + registry.npmjs.org/decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz} name: decamelize version: 1.2.0 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/dedent-js/1.0.1: + registry.npmjs.org/dedent-js@1.0.1: resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz} name: dedent-js version: 1.0.1 dev: true - registry.npmjs.org/deep-is/0.1.4: + registry.npmjs.org/deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} name: deep-is version: 0.1.4 dev: true - registry.npmjs.org/deepmerge/4.3.1: + registry.npmjs.org/deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz} name: deepmerge version: 4.3.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/defaults/1.0.4: + registry.npmjs.org/defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz} name: defaults version: 1.0.4 dependencies: - clone: registry.npmjs.org/clone/1.0.4 + clone: registry.npmjs.org/clone@1.0.4 dev: true - registry.npmjs.org/define-properties/1.2.0: + registry.npmjs.org/define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz} name: define-properties version: 1.2.0 engines: {node: '>= 0.4'} dependencies: - has-property-descriptors: registry.npmjs.org/has-property-descriptors/1.0.0 - object-keys: registry.npmjs.org/object-keys/1.1.1 + has-property-descriptors: registry.npmjs.org/has-property-descriptors@1.0.0 + object-keys: registry.npmjs.org/object-keys@1.1.1 dev: true - registry.npmjs.org/delayed-stream/1.0.0: + registry.npmjs.org/delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz} name: delayed-stream version: 1.0.0 engines: {node: '>=0.4.0'} dev: true - registry.npmjs.org/dependency-graph/0.11.0: + registry.npmjs.org/dependency-graph@0.11.0: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz} name: dependency-graph version: 0.11.0 engines: {node: '>= 0.6.0'} dev: true - registry.npmjs.org/dequal/2.0.3: + registry.npmjs.org/dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz} name: dequal version: 2.0.3 engines: {node: '>=6'} dev: true - registry.npmjs.org/detect-indent/6.1.0: + registry.npmjs.org/detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz} name: detect-indent version: 6.1.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/devalue/4.3.2: + registry.npmjs.org/devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz} name: devalue version: 4.3.2 dev: true - registry.npmjs.org/dir-glob/3.0.1: + registry.npmjs.org/dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz} name: dir-glob version: 3.0.1 engines: {node: '>=8'} dependencies: - path-type: registry.npmjs.org/path-type/4.0.0 + path-type: registry.npmjs.org/path-type@4.0.0 dev: true - registry.npmjs.org/doctrine/2.1.0: + registry.npmjs.org/doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz} name: doctrine version: 2.1.0 engines: {node: '>=0.10.0'} dependencies: - esutils: registry.npmjs.org/esutils/2.0.3 + esutils: registry.npmjs.org/esutils@2.0.3 dev: true - registry.npmjs.org/doctrine/3.0.0: + registry.npmjs.org/doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz} name: doctrine version: 3.0.0 engines: {node: '>=6.0.0'} dependencies: - esutils: registry.npmjs.org/esutils/2.0.3 + esutils: registry.npmjs.org/esutils@2.0.3 dev: true - registry.npmjs.org/dotenv/16.0.3: + registry.npmjs.org/dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz} name: dotenv version: 16.0.3 engines: {node: '>=12'} dev: true - registry.npmjs.org/dotenv/8.6.0: + registry.npmjs.org/dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz} name: dotenv version: 8.6.0 engines: {node: '>=10'} dev: true - registry.npmjs.org/duplexer/0.1.2: + registry.npmjs.org/duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz} name: duplexer version: 0.1.2 dev: true - registry.npmjs.org/ecc-jsbn/0.1.2: + registry.npmjs.org/ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz} name: ecc-jsbn version: 0.1.2 dependencies: - jsbn: registry.npmjs.org/jsbn/0.1.1 - safer-buffer: registry.npmjs.org/safer-buffer/2.1.2 + jsbn: registry.npmjs.org/jsbn@0.1.1 + safer-buffer: registry.npmjs.org/safer-buffer@2.1.2 dev: true - registry.npmjs.org/electron-to-chromium/1.4.428: + registry.npmjs.org/electron-to-chromium@1.4.428: resolution: {integrity: sha512-L7uUknyY286of0AYC8CKfgWstD0Smk2DvHDi9F0GWQhSH90Bzi7iDrmCbZKz75tYJxeGSAc7TYeKpmbjMDoh1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.428.tgz} name: electron-to-chromium version: 1.4.428 dev: true - registry.npmjs.org/emoji-regex/8.0.0: + registry.npmjs.org/electron-to-chromium@1.4.491: + resolution: {integrity: sha512-ZzPqGKghdVzlQJ+qpfE+r6EB321zed7e5JsvHIlMM4zPFF8okXUkF5Of7h7F3l3cltPL0rG7YVmlp5Qro7RQLA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.491.tgz} + name: electron-to-chromium + version: 1.4.491 + dev: true + + registry.npmjs.org/emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz} name: emoji-regex version: 8.0.0 dev: true - registry.npmjs.org/end-of-stream/1.4.4: + 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} name: end-of-stream version: 1.4.4 dependencies: - once: registry.npmjs.org/once/1.4.0 + once: registry.npmjs.org/once@1.4.0 dev: true - registry.npmjs.org/enquirer/2.3.6: + registry.npmjs.org/enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz} name: enquirer version: 2.3.6 engines: {node: '>=8.6'} dependencies: - ansi-colors: registry.npmjs.org/ansi-colors/4.1.3 + ansi-colors: registry.npmjs.org/ansi-colors@4.1.3 + 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 + version: 2.4.1 + engines: {node: '>=8.6'} + dependencies: + ansi-colors: registry.npmjs.org/ansi-colors@4.1.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 dev: true - registry.npmjs.org/error-ex/1.3.2: + registry.npmjs.org/error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz} name: error-ex version: 1.3.2 dependencies: - is-arrayish: registry.npmjs.org/is-arrayish/0.2.1 + is-arrayish: registry.npmjs.org/is-arrayish@0.2.1 dev: true - registry.npmjs.org/es-abstract/1.21.2: + registry.npmjs.org/es-abstract@1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz} name: es-abstract version: 1.21.2 engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: registry.npmjs.org/array-buffer-byte-length/1.0.0 - available-typed-arrays: registry.npmjs.org/available-typed-arrays/1.0.5 - call-bind: registry.npmjs.org/call-bind/1.0.2 - es-set-tostringtag: registry.npmjs.org/es-set-tostringtag/2.0.1 - es-to-primitive: registry.npmjs.org/es-to-primitive/1.2.1 - function.prototype.name: registry.npmjs.org/function.prototype.name/1.1.5 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - get-symbol-description: registry.npmjs.org/get-symbol-description/1.0.0 - globalthis: registry.npmjs.org/globalthis/1.0.3 - gopd: registry.npmjs.org/gopd/1.0.1 - has: registry.npmjs.org/has/1.0.3 - has-property-descriptors: registry.npmjs.org/has-property-descriptors/1.0.0 - has-proto: registry.npmjs.org/has-proto/1.0.1 - has-symbols: registry.npmjs.org/has-symbols/1.0.3 - internal-slot: registry.npmjs.org/internal-slot/1.0.5 - is-array-buffer: registry.npmjs.org/is-array-buffer/3.0.2 - is-callable: registry.npmjs.org/is-callable/1.2.7 - is-negative-zero: registry.npmjs.org/is-negative-zero/2.0.2 - is-regex: registry.npmjs.org/is-regex/1.1.4 - is-shared-array-buffer: registry.npmjs.org/is-shared-array-buffer/1.0.2 - is-string: registry.npmjs.org/is-string/1.0.7 - is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 - is-weakref: registry.npmjs.org/is-weakref/1.0.2 - object-inspect: registry.npmjs.org/object-inspect/1.12.3 - object-keys: registry.npmjs.org/object-keys/1.1.1 - object.assign: registry.npmjs.org/object.assign/4.1.4 - regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags/1.5.0 - safe-regex-test: registry.npmjs.org/safe-regex-test/1.0.0 - string.prototype.trim: registry.npmjs.org/string.prototype.trim/1.2.7 - string.prototype.trimend: registry.npmjs.org/string.prototype.trimend/1.0.6 - string.prototype.trimstart: registry.npmjs.org/string.prototype.trimstart/1.0.6 - typed-array-length: registry.npmjs.org/typed-array-length/1.0.4 - unbox-primitive: registry.npmjs.org/unbox-primitive/1.0.2 - which-typed-array: registry.npmjs.org/which-typed-array/1.1.9 - dev: true - - registry.npmjs.org/es-set-tostringtag/2.0.1: + array-buffer-byte-length: registry.npmjs.org/array-buffer-byte-length@1.0.0 + available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 + call-bind: registry.npmjs.org/call-bind@1.0.2 + es-set-tostringtag: registry.npmjs.org/es-set-tostringtag@2.0.1 + es-to-primitive: registry.npmjs.org/es-to-primitive@1.2.1 + function.prototype.name: registry.npmjs.org/function.prototype.name@1.1.5 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + get-symbol-description: registry.npmjs.org/get-symbol-description@1.0.0 + globalthis: registry.npmjs.org/globalthis@1.0.3 + gopd: registry.npmjs.org/gopd@1.0.1 + has: registry.npmjs.org/has@1.0.3 + has-property-descriptors: registry.npmjs.org/has-property-descriptors@1.0.0 + has-proto: registry.npmjs.org/has-proto@1.0.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + internal-slot: registry.npmjs.org/internal-slot@1.0.5 + is-array-buffer: registry.npmjs.org/is-array-buffer@3.0.2 + is-callable: registry.npmjs.org/is-callable@1.2.7 + is-negative-zero: registry.npmjs.org/is-negative-zero@2.0.2 + is-regex: registry.npmjs.org/is-regex@1.1.4 + is-shared-array-buffer: registry.npmjs.org/is-shared-array-buffer@1.0.2 + is-string: registry.npmjs.org/is-string@1.0.7 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 + is-weakref: registry.npmjs.org/is-weakref@1.0.2 + object-inspect: registry.npmjs.org/object-inspect@1.12.3 + object-keys: registry.npmjs.org/object-keys@1.1.1 + object.assign: registry.npmjs.org/object.assign@4.1.4 + regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags@1.5.0 + safe-regex-test: registry.npmjs.org/safe-regex-test@1.0.0 + string.prototype.trim: registry.npmjs.org/string.prototype.trim@1.2.7 + string.prototype.trimend: registry.npmjs.org/string.prototype.trimend@1.0.6 + string.prototype.trimstart: registry.npmjs.org/string.prototype.trimstart@1.0.6 + typed-array-length: registry.npmjs.org/typed-array-length@1.0.4 + unbox-primitive: registry.npmjs.org/unbox-primitive@1.0.2 + which-typed-array: registry.npmjs.org/which-typed-array@1.1.9 + dev: true + + registry.npmjs.org/es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz} + name: es-abstract + version: 1.22.1 + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: registry.npmjs.org/array-buffer-byte-length@1.0.0 + arraybuffer.prototype.slice: registry.npmjs.org/arraybuffer.prototype.slice@1.0.1 + available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 + call-bind: registry.npmjs.org/call-bind@1.0.2 + es-set-tostringtag: registry.npmjs.org/es-set-tostringtag@2.0.1 + es-to-primitive: registry.npmjs.org/es-to-primitive@1.2.1 + function.prototype.name: registry.npmjs.org/function.prototype.name@1.1.5 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + get-symbol-description: registry.npmjs.org/get-symbol-description@1.0.0 + globalthis: registry.npmjs.org/globalthis@1.0.3 + gopd: registry.npmjs.org/gopd@1.0.1 + has: registry.npmjs.org/has@1.0.3 + has-property-descriptors: registry.npmjs.org/has-property-descriptors@1.0.0 + has-proto: registry.npmjs.org/has-proto@1.0.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + internal-slot: registry.npmjs.org/internal-slot@1.0.5 + is-array-buffer: registry.npmjs.org/is-array-buffer@3.0.2 + is-callable: registry.npmjs.org/is-callable@1.2.7 + is-negative-zero: registry.npmjs.org/is-negative-zero@2.0.2 + is-regex: registry.npmjs.org/is-regex@1.1.4 + is-shared-array-buffer: registry.npmjs.org/is-shared-array-buffer@1.0.2 + is-string: registry.npmjs.org/is-string@1.0.7 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 + is-weakref: registry.npmjs.org/is-weakref@1.0.2 + object-inspect: registry.npmjs.org/object-inspect@1.12.3 + object-keys: registry.npmjs.org/object-keys@1.1.1 + object.assign: registry.npmjs.org/object.assign@4.1.4 + regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags@1.5.0 + safe-array-concat: registry.npmjs.org/safe-array-concat@1.0.0 + safe-regex-test: registry.npmjs.org/safe-regex-test@1.0.0 + string.prototype.trim: registry.npmjs.org/string.prototype.trim@1.2.7 + string.prototype.trimend: registry.npmjs.org/string.prototype.trimend@1.0.6 + string.prototype.trimstart: registry.npmjs.org/string.prototype.trimstart@1.0.6 + typed-array-buffer: registry.npmjs.org/typed-array-buffer@1.0.0 + typed-array-byte-length: registry.npmjs.org/typed-array-byte-length@1.0.0 + typed-array-byte-offset: registry.npmjs.org/typed-array-byte-offset@1.0.0 + typed-array-length: registry.npmjs.org/typed-array-length@1.0.4 + unbox-primitive: registry.npmjs.org/unbox-primitive@1.0.2 + which-typed-array: registry.npmjs.org/which-typed-array@1.1.11 + dev: true + + registry.npmjs.org/es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz} name: es-set-tostringtag version: 2.0.1 engines: {node: '>= 0.4'} dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - has: registry.npmjs.org/has/1.0.3 - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + has: registry.npmjs.org/has@1.0.3 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true - registry.npmjs.org/es-shim-unscopables/1.0.0: + registry.npmjs.org/es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz} name: es-shim-unscopables version: 1.0.0 dependencies: - has: registry.npmjs.org/has/1.0.3 + has: registry.npmjs.org/has@1.0.3 dev: true - registry.npmjs.org/es-to-primitive/1.2.1: + registry.npmjs.org/es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz} name: es-to-primitive version: 1.2.1 engines: {node: '>= 0.4'} dependencies: - is-callable: registry.npmjs.org/is-callable/1.2.7 - is-date-object: registry.npmjs.org/is-date-object/1.0.5 - is-symbol: registry.npmjs.org/is-symbol/1.0.4 + is-callable: registry.npmjs.org/is-callable@1.2.7 + is-date-object: registry.npmjs.org/is-date-object@1.0.5 + is-symbol: registry.npmjs.org/is-symbol@1.0.4 dev: true - registry.npmjs.org/es6-promise/3.3.1: + registry.npmjs.org/es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz} name: es6-promise version: 3.3.1 dev: true - registry.npmjs.org/esbuild/0.17.19: + registry.npmjs.org/esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz} name: esbuild version: 0.17.19 @@ -3650,52 +4164,84 @@ packages: hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmjs.org/@esbuild/android-arm/0.17.19 - '@esbuild/android-arm64': registry.npmjs.org/@esbuild/android-arm64/0.17.19 - '@esbuild/android-x64': registry.npmjs.org/@esbuild/android-x64/0.17.19 - '@esbuild/darwin-arm64': registry.npmjs.org/@esbuild/darwin-arm64/0.17.19 - '@esbuild/darwin-x64': registry.npmjs.org/@esbuild/darwin-x64/0.17.19 - '@esbuild/freebsd-arm64': registry.npmjs.org/@esbuild/freebsd-arm64/0.17.19 - '@esbuild/freebsd-x64': registry.npmjs.org/@esbuild/freebsd-x64/0.17.19 - '@esbuild/linux-arm': registry.npmjs.org/@esbuild/linux-arm/0.17.19 - '@esbuild/linux-arm64': registry.npmjs.org/@esbuild/linux-arm64/0.17.19 - '@esbuild/linux-ia32': registry.npmjs.org/@esbuild/linux-ia32/0.17.19 - '@esbuild/linux-loong64': registry.npmjs.org/@esbuild/linux-loong64/0.17.19 - '@esbuild/linux-mips64el': registry.npmjs.org/@esbuild/linux-mips64el/0.17.19 - '@esbuild/linux-ppc64': registry.npmjs.org/@esbuild/linux-ppc64/0.17.19 - '@esbuild/linux-riscv64': registry.npmjs.org/@esbuild/linux-riscv64/0.17.19 - '@esbuild/linux-s390x': registry.npmjs.org/@esbuild/linux-s390x/0.17.19 - '@esbuild/linux-x64': registry.npmjs.org/@esbuild/linux-x64/0.17.19 - '@esbuild/netbsd-x64': registry.npmjs.org/@esbuild/netbsd-x64/0.17.19 - '@esbuild/openbsd-x64': registry.npmjs.org/@esbuild/openbsd-x64/0.17.19 - '@esbuild/sunos-x64': registry.npmjs.org/@esbuild/sunos-x64/0.17.19 - '@esbuild/win32-arm64': registry.npmjs.org/@esbuild/win32-arm64/0.17.19 - '@esbuild/win32-ia32': registry.npmjs.org/@esbuild/win32-ia32/0.17.19 - '@esbuild/win32-x64': registry.npmjs.org/@esbuild/win32-x64/0.17.19 - dev: true - - registry.npmjs.org/escalade/3.1.1: + '@esbuild/android-arm': registry.npmjs.org/@esbuild/android-arm@0.17.19 + '@esbuild/android-arm64': registry.npmjs.org/@esbuild/android-arm64@0.17.19 + '@esbuild/android-x64': registry.npmjs.org/@esbuild/android-x64@0.17.19 + '@esbuild/darwin-arm64': registry.npmjs.org/@esbuild/darwin-arm64@0.17.19 + '@esbuild/darwin-x64': registry.npmjs.org/@esbuild/darwin-x64@0.17.19 + '@esbuild/freebsd-arm64': registry.npmjs.org/@esbuild/freebsd-arm64@0.17.19 + '@esbuild/freebsd-x64': registry.npmjs.org/@esbuild/freebsd-x64@0.17.19 + '@esbuild/linux-arm': registry.npmjs.org/@esbuild/linux-arm@0.17.19 + '@esbuild/linux-arm64': registry.npmjs.org/@esbuild/linux-arm64@0.17.19 + '@esbuild/linux-ia32': registry.npmjs.org/@esbuild/linux-ia32@0.17.19 + '@esbuild/linux-loong64': registry.npmjs.org/@esbuild/linux-loong64@0.17.19 + '@esbuild/linux-mips64el': registry.npmjs.org/@esbuild/linux-mips64el@0.17.19 + '@esbuild/linux-ppc64': registry.npmjs.org/@esbuild/linux-ppc64@0.17.19 + '@esbuild/linux-riscv64': registry.npmjs.org/@esbuild/linux-riscv64@0.17.19 + '@esbuild/linux-s390x': registry.npmjs.org/@esbuild/linux-s390x@0.17.19 + '@esbuild/linux-x64': registry.npmjs.org/@esbuild/linux-x64@0.17.19 + '@esbuild/netbsd-x64': registry.npmjs.org/@esbuild/netbsd-x64@0.17.19 + '@esbuild/openbsd-x64': registry.npmjs.org/@esbuild/openbsd-x64@0.17.19 + '@esbuild/sunos-x64': registry.npmjs.org/@esbuild/sunos-x64@0.17.19 + '@esbuild/win32-arm64': registry.npmjs.org/@esbuild/win32-arm64@0.17.19 + '@esbuild/win32-ia32': registry.npmjs.org/@esbuild/win32-ia32@0.17.19 + '@esbuild/win32-x64': registry.npmjs.org/@esbuild/win32-x64@0.17.19 + dev: true + + registry.npmjs.org/esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz} + name: esbuild + version: 0.18.20 + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': registry.npmjs.org/@esbuild/android-arm@0.18.20 + '@esbuild/android-arm64': registry.npmjs.org/@esbuild/android-arm64@0.18.20 + '@esbuild/android-x64': registry.npmjs.org/@esbuild/android-x64@0.18.20 + '@esbuild/darwin-arm64': registry.npmjs.org/@esbuild/darwin-arm64@0.18.20 + '@esbuild/darwin-x64': registry.npmjs.org/@esbuild/darwin-x64@0.18.20 + '@esbuild/freebsd-arm64': registry.npmjs.org/@esbuild/freebsd-arm64@0.18.20 + '@esbuild/freebsd-x64': registry.npmjs.org/@esbuild/freebsd-x64@0.18.20 + '@esbuild/linux-arm': registry.npmjs.org/@esbuild/linux-arm@0.18.20 + '@esbuild/linux-arm64': registry.npmjs.org/@esbuild/linux-arm64@0.18.20 + '@esbuild/linux-ia32': registry.npmjs.org/@esbuild/linux-ia32@0.18.20 + '@esbuild/linux-loong64': registry.npmjs.org/@esbuild/linux-loong64@0.18.20 + '@esbuild/linux-mips64el': registry.npmjs.org/@esbuild/linux-mips64el@0.18.20 + '@esbuild/linux-ppc64': registry.npmjs.org/@esbuild/linux-ppc64@0.18.20 + '@esbuild/linux-riscv64': registry.npmjs.org/@esbuild/linux-riscv64@0.18.20 + '@esbuild/linux-s390x': registry.npmjs.org/@esbuild/linux-s390x@0.18.20 + '@esbuild/linux-x64': registry.npmjs.org/@esbuild/linux-x64@0.18.20 + '@esbuild/netbsd-x64': registry.npmjs.org/@esbuild/netbsd-x64@0.18.20 + '@esbuild/openbsd-x64': registry.npmjs.org/@esbuild/openbsd-x64@0.18.20 + '@esbuild/sunos-x64': registry.npmjs.org/@esbuild/sunos-x64@0.18.20 + '@esbuild/win32-arm64': registry.npmjs.org/@esbuild/win32-arm64@0.18.20 + '@esbuild/win32-ia32': registry.npmjs.org/@esbuild/win32-ia32@0.18.20 + '@esbuild/win32-x64': registry.npmjs.org/@esbuild/win32-x64@0.18.20 + dev: true + + registry.npmjs.org/escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz} name: escalade version: 3.1.1 engines: {node: '>=6'} dev: true - registry.npmjs.org/escape-string-regexp/1.0.5: + registry.npmjs.org/escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} name: escape-string-regexp version: 1.0.5 engines: {node: '>=0.8.0'} dev: true - registry.npmjs.org/escape-string-regexp/4.0.0: + registry.npmjs.org/escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} name: escape-string-regexp version: 4.0.0 engines: {node: '>=10'} dev: true - registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.42.0: + registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.42.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 name: eslint-config-prettier @@ -3704,10 +4250,10 @@ packages: peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: registry.npmjs.org/eslint/8.42.0 + eslint: registry.npmjs.org/eslint@8.42.0 dev: true - registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.43.0: + 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 name: eslint-config-prettier @@ -3716,10 +4262,10 @@ packages: peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: registry.npmjs.org/eslint/8.43.0 + eslint: registry.npmjs.org/eslint@8.43.0 dev: true - registry.npmjs.org/eslint-config-turbo/1.10.6_eslint@8.42.0: + registry.npmjs.org/eslint-config-turbo@1.10.6(eslint@8.42.0): resolution: {integrity: sha512-iZ63etePRUdEIDY5MxdUhU2ekV9TDbVdHg0BK00QqVFgQTXUYuJ7rsQj/wUKTsw3jwhbLfaY6H5sknAgYyWZ2g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.6.tgz} id: registry.npmjs.org/eslint-config-turbo/1.10.6 name: eslint-config-turbo @@ -3727,11 +4273,11 @@ packages: peerDependencies: eslint: '>6.6.0' dependencies: - eslint: registry.npmjs.org/eslint/8.42.0 - eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo/1.10.6_eslint@8.42.0 + eslint: registry.npmjs.org/eslint@8.42.0 + eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo@1.10.6(eslint@8.42.0) dev: true - registry.npmjs.org/eslint-plugin-prettier/4.2.1_vnriwwub2rhvoyn4ckagrc4lpi: + registry.npmjs.org/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.42.0)(prettier@2.8.8): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz} id: registry.npmjs.org/eslint-plugin-prettier/4.2.1 name: eslint-plugin-prettier @@ -3745,40 +4291,40 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: registry.npmjs.org/eslint/8.42.0 - eslint-config-prettier: registry.npmjs.org/eslint-config-prettier/8.8.0_eslint@8.42.0 - prettier: registry.npmjs.org/prettier/2.8.8 - prettier-linter-helpers: registry.npmjs.org/prettier-linter-helpers/1.0.0 + eslint: registry.npmjs.org/eslint@8.42.0 + eslint-config-prettier: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.42.0) + prettier: registry.npmjs.org/prettier@2.8.8 + prettier-linter-helpers: registry.npmjs.org/prettier-linter-helpers@1.0.0 dev: true - registry.npmjs.org/eslint-plugin-react/7.32.2_eslint@8.42.0: - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz} - id: registry.npmjs.org/eslint-plugin-react/7.32.2 + registry.npmjs.org/eslint-plugin-react@7.33.1(eslint@8.42.0): + resolution: {integrity: sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz} + id: registry.npmjs.org/eslint-plugin-react/7.33.1 name: eslint-plugin-react - version: 7.32.2 + version: 7.33.1 engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: registry.npmjs.org/array-includes/3.1.6 - array.prototype.flatmap: registry.npmjs.org/array.prototype.flatmap/1.3.1 - array.prototype.tosorted: registry.npmjs.org/array.prototype.tosorted/1.1.1 - doctrine: registry.npmjs.org/doctrine/2.1.0 - eslint: registry.npmjs.org/eslint/8.42.0 - estraverse: registry.npmjs.org/estraverse/5.3.0 - jsx-ast-utils: registry.npmjs.org/jsx-ast-utils/3.3.3 - minimatch: registry.npmjs.org/minimatch/3.1.2 - object.entries: registry.npmjs.org/object.entries/1.1.6 - object.fromentries: registry.npmjs.org/object.fromentries/2.0.6 - object.hasown: registry.npmjs.org/object.hasown/1.1.2 - object.values: registry.npmjs.org/object.values/1.1.6 - prop-types: registry.npmjs.org/prop-types/15.8.1 - resolve: registry.npmjs.org/resolve/2.0.0-next.4 - semver: registry.npmjs.org/semver/6.3.0 - string.prototype.matchall: registry.npmjs.org/string.prototype.matchall/4.0.8 - dev: true - - registry.npmjs.org/eslint-plugin-svelte/2.31.1_eslint@8.43.0+svelte@4.0.0: + array-includes: registry.npmjs.org/array-includes@3.1.6 + array.prototype.flatmap: registry.npmjs.org/array.prototype.flatmap@1.3.1 + array.prototype.tosorted: registry.npmjs.org/array.prototype.tosorted@1.1.1 + doctrine: registry.npmjs.org/doctrine@2.1.0 + eslint: registry.npmjs.org/eslint@8.42.0 + estraverse: registry.npmjs.org/estraverse@5.3.0 + jsx-ast-utils: registry.npmjs.org/jsx-ast-utils@3.3.5 + minimatch: registry.npmjs.org/minimatch@3.1.2 + object.entries: registry.npmjs.org/object.entries@1.1.6 + object.fromentries: registry.npmjs.org/object.fromentries@2.0.6 + object.hasown: registry.npmjs.org/object.hasown@1.1.2 + object.values: registry.npmjs.org/object.values@1.1.6 + prop-types: registry.npmjs.org/prop-types@15.8.1 + resolve: registry.npmjs.org/resolve@2.0.0-next.4 + semver: registry.npmjs.org/semver@6.3.1 + string.prototype.matchall: registry.npmjs.org/string.prototype.matchall@4.0.8 + dev: true + + registry.npmjs.org/eslint-plugin-svelte@2.31.1(eslint@8.43.0)(svelte@4.0.0): resolution: {integrity: sha512-08v+DqzHiwIVEbi+266D7+BDhayp9OSqCwa/lHaZlZOlFY0vZLYs/h7SkkUPzA5fTVt8OUJBtvCxFiWEYOvvGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.31.1.tgz} id: registry.npmjs.org/eslint-plugin-svelte/2.31.1 name: eslint-plugin-svelte @@ -3791,25 +4337,25 @@ packages: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils/4.4.0_eslint@8.43.0 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 - debug: registry.npmjs.org/debug/4.3.4 - eslint: registry.npmjs.org/eslint/8.43.0 - esutils: registry.npmjs.org/esutils/2.0.3 - known-css-properties: registry.npmjs.org/known-css-properties/0.27.0 - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-load-config: registry.npmjs.org/postcss-load-config/3.1.4_postcss@8.4.24 - postcss-safe-parser: registry.npmjs.org/postcss-safe-parser/6.0.0_postcss@8.4.24 - postcss-selector-parser: registry.npmjs.org/postcss-selector-parser/6.0.13 - semver: registry.npmjs.org/semver/7.5.3 - svelte: registry.npmjs.org/svelte/4.0.0 - svelte-eslint-parser: registry.npmjs.org/svelte-eslint-parser/0.31.0_svelte@4.0.0 + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.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.43.0 + esutils: registry.npmjs.org/esutils@2.0.3 + known-css-properties: registry.npmjs.org/known-css-properties@0.27.0 + postcss: registry.npmjs.org/postcss@8.4.24 + postcss-load-config: registry.npmjs.org/postcss-load-config@3.1.4(postcss@8.4.24) + postcss-safe-parser: registry.npmjs.org/postcss-safe-parser@6.0.0(postcss@8.4.24) + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.13 + semver: registry.npmjs.org/semver@7.5.3 + svelte: registry.npmjs.org/svelte@4.0.0 + svelte-eslint-parser: registry.npmjs.org/svelte-eslint-parser@0.31.0(svelte@4.0.0) transitivePeerDependencies: - supports-color - ts-node dev: true - registry.npmjs.org/eslint-plugin-turbo/1.10.6_eslint@8.42.0: + registry.npmjs.org/eslint-plugin-turbo@1.10.6(eslint@8.42.0): resolution: {integrity: sha512-jlzfxYaK8hcz1DTk8Glxxi1r0kgdy85191a4CbFOTiiBulmKHMLJgzhsyE9Ong796MA62n91KFpc20BiKjlHwg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.6.tgz} id: registry.npmjs.org/eslint-plugin-turbo/1.10.6 name: eslint-plugin-turbo @@ -3817,155 +4363,162 @@ packages: peerDependencies: eslint: '>6.6.0' dependencies: - dotenv: registry.npmjs.org/dotenv/16.0.3 - eslint: registry.npmjs.org/eslint/8.42.0 + dotenv: registry.npmjs.org/dotenv@16.0.3 + eslint: registry.npmjs.org/eslint@8.42.0 dev: true - registry.npmjs.org/eslint-scope/5.1.1: + registry.npmjs.org/eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz} name: eslint-scope version: 5.1.1 engines: {node: '>=8.0.0'} dependencies: - esrecurse: registry.npmjs.org/esrecurse/4.3.0 - estraverse: registry.npmjs.org/estraverse/4.3.0 + esrecurse: registry.npmjs.org/esrecurse@4.3.0 + estraverse: registry.npmjs.org/estraverse@4.3.0 dev: true - registry.npmjs.org/eslint-scope/7.2.0: + registry.npmjs.org/eslint-scope@7.2.0: resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz} name: eslint-scope version: 7.2.0 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - esrecurse: registry.npmjs.org/esrecurse/4.3.0 - estraverse: registry.npmjs.org/estraverse/5.3.0 + esrecurse: registry.npmjs.org/esrecurse@4.3.0 + estraverse: registry.npmjs.org/estraverse@5.3.0 dev: true - registry.npmjs.org/eslint-visitor-keys/3.4.1: + registry.npmjs.org/eslint-visitor-keys@3.4.1: resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz} name: eslint-visitor-keys version: 3.4.1 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/eslint/8.42.0: + registry.npmjs.org/eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} + name: eslint-visitor-keys + version: 3.4.3 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + registry.npmjs.org/eslint@8.42.0: resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz} name: eslint version: 8.42.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.42.0 - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.5.1 - '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc/2.0.3 - '@eslint/js': registry.npmjs.org/@eslint/js/8.42.0 - '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array/0.11.10 - '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer/1.0.1 - '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk/1.2.8 - 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 - 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.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 - espree: registry.npmjs.org/espree/9.5.2 - 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.20.0 - graphemer: registry.npmjs.org/graphemer/1.4.0 - ignore: registry.npmjs.org/ignore/5.2.4 - import-fresh: registry.npmjs.org/import-fresh/3.3.0 - 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.1 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - strip-json-comments: registry.npmjs.org/strip-json-comments/3.1.1 - text-table: registry.npmjs.org/text-table/0.2.0 + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.42.0) + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.5.1 + '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc@2.0.3 + '@eslint/js': registry.npmjs.org/@eslint/js@8.42.0 + '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array@0.11.10 + '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer@1.0.1 + '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk@1.2.8 + 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.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + espree: registry.npmjs.org/espree@9.5.2 + 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.20.0 + graphemer: registry.npmjs.org/graphemer@1.4.0 + ignore: registry.npmjs.org/ignore@5.2.4 + import-fresh: registry.npmjs.org/import-fresh@3.3.0 + 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.1 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + strip-json-comments: registry.npmjs.org/strip-json-comments@3.1.1 + text-table: registry.npmjs.org/text-table@0.2.0 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/eslint/8.43.0: + registry.npmjs.org/eslint@8.43.0: resolution: {integrity: sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz} name: eslint version: 8.43.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.43.0 - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp/4.5.1 - '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc/2.0.3 - '@eslint/js': registry.npmjs.org/@eslint/js/8.43.0 - '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array/0.11.10 - '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer/1.0.1 - '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk/1.2.8 - 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 - 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.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 - espree: registry.npmjs.org/espree/9.5.2 - 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.20.0 - graphemer: registry.npmjs.org/graphemer/1.4.0 - ignore: registry.npmjs.org/ignore/5.2.4 - import-fresh: registry.npmjs.org/import-fresh/3.3.0 - 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.1 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - strip-json-comments: registry.npmjs.org/strip-json-comments/3.1.1 - text-table: registry.npmjs.org/text-table/0.2.0 + '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.0) + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.5.1 + '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc@2.0.3 + '@eslint/js': registry.npmjs.org/@eslint/js@8.43.0 + '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array@0.11.10 + '@humanwhocodes/module-importer': registry.npmjs.org/@humanwhocodes/module-importer@1.0.1 + '@nodelib/fs.walk': registry.npmjs.org/@nodelib/fs.walk@1.2.8 + 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.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + espree: registry.npmjs.org/espree@9.5.2 + 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.20.0 + graphemer: registry.npmjs.org/graphemer@1.4.0 + ignore: registry.npmjs.org/ignore@5.2.4 + import-fresh: registry.npmjs.org/import-fresh@3.3.0 + 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.1 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + strip-json-comments: registry.npmjs.org/strip-json-comments@3.1.1 + text-table: registry.npmjs.org/text-table@0.2.0 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/esm-env/1.0.0: + 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 version: 1.0.0 dev: true - registry.npmjs.org/espree/9.5.2: + registry.npmjs.org/espree@9.5.2: resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/espree/-/espree-9.5.2.tgz} name: espree version: 9.5.2 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: registry.npmjs.org/acorn/8.8.2 - acorn-jsx: registry.npmjs.org/acorn-jsx/5.3.2_acorn@8.8.2 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 + acorn: registry.npmjs.org/acorn@8.8.2 + acorn-jsx: registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.8.2) + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 dev: true - registry.npmjs.org/esprima/4.0.1: + registry.npmjs.org/esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz} name: esprima version: 4.0.1 @@ -3973,146 +4526,146 @@ packages: hasBin: true dev: true - registry.npmjs.org/esquery/1.5.0: + registry.npmjs.org/esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz} name: esquery version: 1.5.0 engines: {node: '>=0.10'} dependencies: - estraverse: registry.npmjs.org/estraverse/5.3.0 + estraverse: registry.npmjs.org/estraverse@5.3.0 dev: true - registry.npmjs.org/esrecurse/4.3.0: + registry.npmjs.org/esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} name: esrecurse version: 4.3.0 engines: {node: '>=4.0'} dependencies: - estraverse: registry.npmjs.org/estraverse/5.3.0 + estraverse: registry.npmjs.org/estraverse@5.3.0 dev: true - registry.npmjs.org/estraverse/4.3.0: + registry.npmjs.org/estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz} name: estraverse version: 4.3.0 engines: {node: '>=4.0'} dev: true - registry.npmjs.org/estraverse/5.3.0: + registry.npmjs.org/estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} name: estraverse version: 5.3.0 engines: {node: '>=4.0'} dev: true - registry.npmjs.org/estree-walker/2.0.2: + registry.npmjs.org/estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz} name: estree-walker version: 2.0.2 dev: true - registry.npmjs.org/estree-walker/3.0.3: + registry.npmjs.org/estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz} name: estree-walker version: 3.0.3 dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.1 + '@types/estree': registry.npmjs.org/@types/estree@1.0.1 dev: true - registry.npmjs.org/esutils/2.0.3: + registry.npmjs.org/esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} name: esutils version: 2.0.3 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/event-stream/3.3.4: + registry.npmjs.org/event-stream@3.3.4: resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz} name: event-stream version: 3.3.4 dependencies: - duplexer: registry.npmjs.org/duplexer/0.1.2 - from: registry.npmjs.org/from/0.1.7 - map-stream: registry.npmjs.org/map-stream/0.1.0 - pause-stream: registry.npmjs.org/pause-stream/0.0.11 - split: registry.npmjs.org/split/0.3.3 - stream-combiner: registry.npmjs.org/stream-combiner/0.0.4 - through: registry.npmjs.org/through/2.3.8 + duplexer: registry.npmjs.org/duplexer@0.1.2 + from: registry.npmjs.org/from@0.1.7 + map-stream: registry.npmjs.org/map-stream@0.1.0 + pause-stream: registry.npmjs.org/pause-stream@0.0.11 + split: registry.npmjs.org/split@0.3.3 + stream-combiner: registry.npmjs.org/stream-combiner@0.0.4 + through: registry.npmjs.org/through@2.3.8 dev: true - registry.npmjs.org/eventemitter2/6.4.7: + registry.npmjs.org/eventemitter2@6.4.7: resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz} name: eventemitter2 version: 6.4.7 dev: true - registry.npmjs.org/execa/4.1.0: + registry.npmjs.org/execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/execa/-/execa-4.1.0.tgz} name: execa version: 4.1.0 engines: {node: '>=10'} dependencies: - cross-spawn: registry.npmjs.org/cross-spawn/7.0.3 - get-stream: registry.npmjs.org/get-stream/5.2.0 - human-signals: registry.npmjs.org/human-signals/1.1.1 - is-stream: registry.npmjs.org/is-stream/2.0.1 - merge-stream: registry.npmjs.org/merge-stream/2.0.0 - npm-run-path: registry.npmjs.org/npm-run-path/4.0.1 - onetime: registry.npmjs.org/onetime/5.1.2 - signal-exit: registry.npmjs.org/signal-exit/3.0.7 - strip-final-newline: registry.npmjs.org/strip-final-newline/2.0.0 + cross-spawn: registry.npmjs.org/cross-spawn@7.0.3 + get-stream: registry.npmjs.org/get-stream@5.2.0 + human-signals: registry.npmjs.org/human-signals@1.1.1 + is-stream: registry.npmjs.org/is-stream@2.0.1 + merge-stream: registry.npmjs.org/merge-stream@2.0.0 + npm-run-path: registry.npmjs.org/npm-run-path@4.0.1 + onetime: registry.npmjs.org/onetime@5.1.2 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 + strip-final-newline: registry.npmjs.org/strip-final-newline@2.0.0 dev: true - registry.npmjs.org/execa/5.1.1: + registry.npmjs.org/execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/execa/-/execa-5.1.1.tgz} name: execa version: 5.1.1 engines: {node: '>=10'} dependencies: - cross-spawn: registry.npmjs.org/cross-spawn/7.0.3 - get-stream: registry.npmjs.org/get-stream/6.0.1 - human-signals: registry.npmjs.org/human-signals/2.1.0 - is-stream: registry.npmjs.org/is-stream/2.0.1 - merge-stream: registry.npmjs.org/merge-stream/2.0.0 - npm-run-path: registry.npmjs.org/npm-run-path/4.0.1 - onetime: registry.npmjs.org/onetime/5.1.2 - signal-exit: registry.npmjs.org/signal-exit/3.0.7 - strip-final-newline: registry.npmjs.org/strip-final-newline/2.0.0 + cross-spawn: registry.npmjs.org/cross-spawn@7.0.3 + get-stream: registry.npmjs.org/get-stream@6.0.1 + human-signals: registry.npmjs.org/human-signals@2.1.0 + is-stream: registry.npmjs.org/is-stream@2.0.1 + merge-stream: registry.npmjs.org/merge-stream@2.0.0 + npm-run-path: registry.npmjs.org/npm-run-path@4.0.1 + onetime: registry.npmjs.org/onetime@5.1.2 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 + strip-final-newline: registry.npmjs.org/strip-final-newline@2.0.0 dev: true - registry.npmjs.org/executable/4.1.1: + registry.npmjs.org/executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/executable/-/executable-4.1.1.tgz} name: executable version: 4.1.1 engines: {node: '>=4'} dependencies: - pify: registry.npmjs.org/pify/2.3.0 + pify: registry.npmjs.org/pify@2.3.0 dev: true - registry.npmjs.org/extend/3.0.2: + registry.npmjs.org/extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/extend/-/extend-3.0.2.tgz} name: extend version: 3.0.2 dev: true - registry.npmjs.org/extendable-error/0.1.7: + registry.npmjs.org/extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz} name: extendable-error version: 0.1.7 dev: true - registry.npmjs.org/external-editor/3.1.0: + registry.npmjs.org/external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz} name: external-editor version: 3.1.0 engines: {node: '>=4'} dependencies: - chardet: registry.npmjs.org/chardet/0.7.0 - iconv-lite: registry.npmjs.org/iconv-lite/0.4.24 - tmp: registry.npmjs.org/tmp/0.0.33 + chardet: registry.npmjs.org/chardet@0.7.0 + iconv-lite: registry.npmjs.org/iconv-lite@0.4.24 + tmp: registry.npmjs.org/tmp@0.0.33 dev: true - registry.npmjs.org/extract-zip/2.0.1_supports-color@8.1.1: + registry.npmjs.org/extract-zip@2.0.1(supports-color@8.1.1): resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz} id: registry.npmjs.org/extract-zip/2.0.1 name: extract-zip @@ -4120,148 +4673,148 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: registry.npmjs.org/debug/4.3.4_supports-color@8.1.1 - get-stream: registry.npmjs.org/get-stream/5.2.0 - yauzl: registry.npmjs.org/yauzl/2.10.0 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + get-stream: registry.npmjs.org/get-stream@5.2.0 + yauzl: registry.npmjs.org/yauzl@2.10.0 optionalDependencies: - '@types/yauzl': registry.npmjs.org/@types/yauzl/2.10.0 + '@types/yauzl': registry.npmjs.org/@types/yauzl@2.10.0 transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/extsprintf/1.3.0: + registry.npmjs.org/extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz} name: extsprintf version: 1.3.0 engines: {'0': node >=0.6.0} dev: true - registry.npmjs.org/fast-deep-equal/3.1.3: + registry.npmjs.org/fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} name: fast-deep-equal version: 3.1.3 dev: true - registry.npmjs.org/fast-diff/1.3.0: + registry.npmjs.org/fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz} name: fast-diff version: 1.3.0 dev: true - registry.npmjs.org/fast-glob/3.2.12: + registry.npmjs.org/fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz} name: fast-glob version: 3.2.12 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 + '@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: + 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 version: 2.1.0 dev: true - registry.npmjs.org/fast-levenshtein/2.0.6: + registry.npmjs.org/fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} name: fast-levenshtein version: 2.0.6 dev: true - registry.npmjs.org/fastq/1.15.0: + registry.npmjs.org/fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz} name: fastq version: 1.15.0 dependencies: - reusify: registry.npmjs.org/reusify/1.0.4 + reusify: registry.npmjs.org/reusify@1.0.4 dev: true - registry.npmjs.org/fd-slicer/1.1.0: + registry.npmjs.org/fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz} name: fd-slicer version: 1.1.0 dependencies: - pend: registry.npmjs.org/pend/1.2.0 + pend: registry.npmjs.org/pend@1.2.0 dev: true - registry.npmjs.org/figures/3.2.0: + registry.npmjs.org/figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/figures/-/figures-3.2.0.tgz} name: figures version: 3.2.0 engines: {node: '>=8'} dependencies: - escape-string-regexp: registry.npmjs.org/escape-string-regexp/1.0.5 + escape-string-regexp: registry.npmjs.org/escape-string-regexp@1.0.5 dev: true - registry.npmjs.org/file-entry-cache/6.0.1: + registry.npmjs.org/file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz} name: file-entry-cache version: 6.0.1 engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: registry.npmjs.org/flat-cache/3.0.4 + flat-cache: registry.npmjs.org/flat-cache@3.0.4 dev: true - registry.npmjs.org/fill-range/7.0.1: + registry.npmjs.org/fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz} name: fill-range version: 7.0.1 engines: {node: '>=8'} dependencies: - to-regex-range: registry.npmjs.org/to-regex-range/5.0.1 + to-regex-range: registry.npmjs.org/to-regex-range@5.0.1 dev: true - registry.npmjs.org/find-up/4.1.0: + registry.npmjs.org/find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz} name: find-up version: 4.1.0 engines: {node: '>=8'} dependencies: - locate-path: registry.npmjs.org/locate-path/5.0.0 - path-exists: registry.npmjs.org/path-exists/4.0.0 + locate-path: registry.npmjs.org/locate-path@5.0.0 + path-exists: registry.npmjs.org/path-exists@4.0.0 dev: true - registry.npmjs.org/find-up/5.0.0: + registry.npmjs.org/find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz} name: find-up version: 5.0.0 engines: {node: '>=10'} dependencies: - locate-path: registry.npmjs.org/locate-path/6.0.0 - path-exists: registry.npmjs.org/path-exists/4.0.0 + locate-path: registry.npmjs.org/locate-path@6.0.0 + path-exists: registry.npmjs.org/path-exists@4.0.0 dev: true - registry.npmjs.org/find-yarn-workspace-root2/1.2.16: + registry.npmjs.org/find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz} name: find-yarn-workspace-root2 version: 1.2.16 dependencies: - micromatch: registry.npmjs.org/micromatch/4.0.5 - pkg-dir: registry.npmjs.org/pkg-dir/4.2.0 + micromatch: registry.npmjs.org/micromatch@4.0.5 + pkg-dir: registry.npmjs.org/pkg-dir@4.2.0 dev: true - registry.npmjs.org/flat-cache/3.0.4: + registry.npmjs.org/flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz} name: flat-cache version: 3.0.4 engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: registry.npmjs.org/flatted/3.2.7 - rimraf: registry.npmjs.org/rimraf/3.0.2 + flatted: registry.npmjs.org/flatted@3.2.7 + rimraf: registry.npmjs.org/rimraf@3.0.2 dev: true - registry.npmjs.org/flatted/3.2.7: + registry.npmjs.org/flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz} name: flatted version: 3.2.7 dev: true - registry.npmjs.org/follow-redirects/1.15.2_debug@4.3.4: + registry.npmjs.org/follow-redirects@1.15.2(debug@4.3.4): resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz} id: registry.npmjs.org/follow-redirects/1.15.2 name: follow-redirects @@ -4273,109 +4826,109 @@ packages: debug: optional: true dependencies: - debug: registry.npmjs.org/debug/4.3.4 + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) dev: true - registry.npmjs.org/for-each/0.3.3: + registry.npmjs.org/for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz} name: for-each version: 0.3.3 dependencies: - is-callable: registry.npmjs.org/is-callable/1.2.7 + is-callable: registry.npmjs.org/is-callable@1.2.7 dev: true - registry.npmjs.org/forever-agent/0.6.1: + registry.npmjs.org/forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz} name: forever-agent version: 0.6.1 dev: true - registry.npmjs.org/form-data/2.3.3: + registry.npmjs.org/form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz} name: form-data version: 2.3.3 engines: {node: '>= 0.12'} 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 + 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/form-data/4.0.0: + 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 + 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.2.0: + registry.npmjs.org/fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz} name: fraction.js version: 4.2.0 dev: true - registry.npmjs.org/from/0.1.7: + registry.npmjs.org/from@0.1.7: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/from/-/from-0.1.7.tgz} name: from version: 0.1.7 dev: true - registry.npmjs.org/fs-extra/11.1.1: + registry.npmjs.org/fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz} name: fs-extra version: 11.1.1 engines: {node: '>=14.14'} dependencies: - 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 + 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 dev: true - registry.npmjs.org/fs-extra/7.0.1: + registry.npmjs.org/fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz} name: fs-extra version: 7.0.1 engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 - jsonfile: registry.npmjs.org/jsonfile/4.0.0 - universalify: registry.npmjs.org/universalify/0.1.2 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + jsonfile: registry.npmjs.org/jsonfile@4.0.0 + universalify: registry.npmjs.org/universalify@0.1.2 dev: true - registry.npmjs.org/fs-extra/8.1.0: + registry.npmjs.org/fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz} name: fs-extra version: 8.1.0 engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 - jsonfile: registry.npmjs.org/jsonfile/4.0.0 - universalify: registry.npmjs.org/universalify/0.1.2 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + jsonfile: registry.npmjs.org/jsonfile@4.0.0 + universalify: registry.npmjs.org/universalify@0.1.2 dev: true - registry.npmjs.org/fs-extra/9.1.0: + registry.npmjs.org/fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz} name: fs-extra version: 9.1.0 engines: {node: '>=10'} dependencies: - 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 + 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 dev: true - registry.npmjs.org/fs.realpath/1.0.0: + registry.npmjs.org/fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz} name: fs.realpath version: 1.0.0 dev: true - registry.npmjs.org/fsevents/2.3.2: + 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 @@ -4385,763 +4938,786 @@ packages: dev: true optional: true - registry.npmjs.org/function-bind/1.1.1: + registry.npmjs.org/function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz} name: function-bind version: 1.1.1 dev: true - registry.npmjs.org/function.prototype.name/1.1.5: + registry.npmjs.org/function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz} name: function.prototype.name version: 1.1.5 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 - functions-have-names: registry.npmjs.org/functions-have-names/1.2.3 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.21.2 + functions-have-names: registry.npmjs.org/functions-have-names@1.2.3 dev: true - registry.npmjs.org/functions-have-names/1.2.3: + registry.npmjs.org/functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz} name: functions-have-names version: 1.2.3 dev: true - registry.npmjs.org/gensync/1.0.0-beta.2: + registry.npmjs.org/gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz} name: gensync version: 1.0.0-beta.2 engines: {node: '>=6.9.0'} dev: true - registry.npmjs.org/get-caller-file/2.0.5: + registry.npmjs.org/get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz} name: get-caller-file version: 2.0.5 engines: {node: 6.* || 8.* || >= 10.*} dev: true - registry.npmjs.org/get-intrinsic/1.2.1: + registry.npmjs.org/get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz} name: get-intrinsic version: 1.2.1 dependencies: - function-bind: registry.npmjs.org/function-bind/1.1.1 - has: registry.npmjs.org/has/1.0.3 - has-proto: registry.npmjs.org/has-proto/1.0.1 - has-symbols: registry.npmjs.org/has-symbols/1.0.3 + function-bind: registry.npmjs.org/function-bind@1.1.1 + has: registry.npmjs.org/has@1.0.3 + has-proto: registry.npmjs.org/has-proto@1.0.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 dev: true - registry.npmjs.org/get-stdin/9.0.0: + registry.npmjs.org/get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz} name: get-stdin version: 9.0.0 engines: {node: '>=12'} dev: true - registry.npmjs.org/get-stream/5.2.0: + registry.npmjs.org/get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz} name: get-stream version: 5.2.0 engines: {node: '>=8'} dependencies: - pump: registry.npmjs.org/pump/3.0.0 + pump: registry.npmjs.org/pump@3.0.0 dev: true - registry.npmjs.org/get-stream/6.0.1: + registry.npmjs.org/get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz} name: get-stream version: 6.0.1 engines: {node: '>=10'} dev: true - registry.npmjs.org/get-symbol-description/1.0.0: + registry.npmjs.org/get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz} name: get-symbol-description version: 1.0.0 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 dev: true - registry.npmjs.org/getos/3.2.1: + 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 version: 3.2.1 dependencies: - async: registry.npmjs.org/async/3.2.4 + async: registry.npmjs.org/async@3.2.4 dev: true - registry.npmjs.org/getpass/0.1.7: + registry.npmjs.org/getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz} name: getpass version: 0.1.7 dependencies: - assert-plus: registry.npmjs.org/assert-plus/1.0.0 + assert-plus: registry.npmjs.org/assert-plus@1.0.0 dev: true - registry.npmjs.org/glob-parent/5.1.2: + registry.npmjs.org/glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz} name: glob-parent version: 5.1.2 engines: {node: '>= 6'} dependencies: - is-glob: registry.npmjs.org/is-glob/4.0.3 + is-glob: registry.npmjs.org/is-glob@4.0.3 dev: true - registry.npmjs.org/glob-parent/6.0.2: + registry.npmjs.org/glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz} name: glob-parent version: 6.0.2 engines: {node: '>=10.13.0'} dependencies: - is-glob: registry.npmjs.org/is-glob/4.0.3 + is-glob: registry.npmjs.org/is-glob@4.0.3 dev: true - registry.npmjs.org/glob/7.2.3: + 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 version: 7.2.3 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 + 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/8.1.0: + registry.npmjs.org/glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/glob/-/glob-8.1.0.tgz} name: glob version: 8.1.0 engines: {node: '>=12'} 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/5.1.6 - once: registry.npmjs.org/once/1.4.0 + 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@5.1.6 + once: registry.npmjs.org/once@1.4.0 dev: true - registry.npmjs.org/global-dirs/3.0.1: + registry.npmjs.org/global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz} name: global-dirs version: 3.0.1 engines: {node: '>=10'} dependencies: - ini: registry.npmjs.org/ini/2.0.0 + ini: registry.npmjs.org/ini@2.0.0 dev: true - registry.npmjs.org/globals/11.12.0: + registry.npmjs.org/globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globals/-/globals-11.12.0.tgz} name: globals version: 11.12.0 engines: {node: '>=4'} dev: true - registry.npmjs.org/globals/13.20.0: + registry.npmjs.org/globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globals/-/globals-13.20.0.tgz} name: globals version: 13.20.0 engines: {node: '>=8'} dependencies: - type-fest: registry.npmjs.org/type-fest/0.20.2 + type-fest: registry.npmjs.org/type-fest@0.20.2 dev: true - registry.npmjs.org/globalthis/1.0.3: + registry.npmjs.org/globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz} name: globalthis version: 1.0.3 engines: {node: '>= 0.4'} dependencies: - define-properties: registry.npmjs.org/define-properties/1.2.0 + define-properties: registry.npmjs.org/define-properties@1.2.0 dev: true - registry.npmjs.org/globby/11.1.0: + 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 version: 11.1.0 engines: {node: '>=10'} 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.2.12 - ignore: registry.npmjs.org/ignore/5.2.4 - merge2: registry.npmjs.org/merge2/1.4.1 - slash: registry.npmjs.org/slash/3.0.0 + 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.2.12 + ignore: registry.npmjs.org/ignore@5.2.4 + merge2: registry.npmjs.org/merge2@1.4.1 + slash: registry.npmjs.org/slash@3.0.0 dev: true - registry.npmjs.org/globby/13.1.4: + registry.npmjs.org/globby@13.1.4: resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/globby/-/globby-13.1.4.tgz} name: globby version: 13.1.4 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.2.12 - ignore: registry.npmjs.org/ignore/5.2.4 - merge2: registry.npmjs.org/merge2/1.4.1 - slash: registry.npmjs.org/slash/4.0.0 + dir-glob: registry.npmjs.org/dir-glob@3.0.1 + fast-glob: registry.npmjs.org/fast-glob@3.2.12 + ignore: registry.npmjs.org/ignore@5.2.4 + merge2: registry.npmjs.org/merge2@1.4.1 + slash: registry.npmjs.org/slash@4.0.0 dev: true - registry.npmjs.org/gopd/1.0.1: + 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 version: 1.0.1 dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 dev: true - registry.npmjs.org/graceful-fs/4.2.11: + registry.npmjs.org/graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz} name: graceful-fs version: 4.2.11 dev: true - registry.npmjs.org/grapheme-splitter/1.0.4: + registry.npmjs.org/grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz} name: grapheme-splitter version: 1.0.4 dev: true - registry.npmjs.org/graphemer/1.4.0: + registry.npmjs.org/graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz} name: graphemer version: 1.4.0 dev: true - registry.npmjs.org/graphlib/2.1.8: + registry.npmjs.org/graphlib@2.1.8: resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz} name: graphlib version: 2.1.8 dependencies: - lodash: registry.npmjs.org/lodash/4.17.21 + lodash: registry.npmjs.org/lodash@4.17.21 dev: false - registry.npmjs.org/hard-rejection/2.1.0: + registry.npmjs.org/hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz} name: hard-rejection version: 2.1.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/has-bigints/1.0.2: + registry.npmjs.org/has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz} name: has-bigints version: 1.0.2 dev: true - registry.npmjs.org/has-flag/3.0.0: + registry.npmjs.org/has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz} name: has-flag version: 3.0.0 engines: {node: '>=4'} dev: true - registry.npmjs.org/has-flag/4.0.0: + registry.npmjs.org/has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz} name: has-flag version: 4.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/has-property-descriptors/1.0.0: + registry.npmjs.org/has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz} name: has-property-descriptors version: 1.0.0 dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 dev: true - registry.npmjs.org/has-proto/1.0.1: + registry.npmjs.org/has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz} name: has-proto version: 1.0.1 engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/has-symbols/1.0.3: + registry.npmjs.org/has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz} name: has-symbols version: 1.0.3 engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/has-tostringtag/1.0.0: + registry.npmjs.org/has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz} name: has-tostringtag version: 1.0.0 engines: {node: '>= 0.4'} dependencies: - has-symbols: registry.npmjs.org/has-symbols/1.0.3 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 dev: true - registry.npmjs.org/has/1.0.3: + registry.npmjs.org/has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/has/-/has-1.0.3.tgz} name: has version: 1.0.3 engines: {node: '>= 0.4.0'} dependencies: - function-bind: registry.npmjs.org/function-bind/1.1.1 + function-bind: registry.npmjs.org/function-bind@1.1.1 dev: true - registry.npmjs.org/hosted-git-info/2.8.9: + 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 version: 2.8.9 dev: true - registry.npmjs.org/http-signature/1.3.6: + registry.npmjs.org/http-signature@1.3.6: resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz} name: http-signature version: 1.3.6 engines: {node: '>=0.10'} dependencies: - assert-plus: registry.npmjs.org/assert-plus/1.0.0 - jsprim: registry.npmjs.org/jsprim/2.0.2 - sshpk: registry.npmjs.org/sshpk/1.17.0 + assert-plus: registry.npmjs.org/assert-plus@1.0.0 + jsprim: registry.npmjs.org/jsprim@2.0.2 + sshpk: registry.npmjs.org/sshpk@1.17.0 dev: true - registry.npmjs.org/human-id/1.0.2: + registry.npmjs.org/human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz} name: human-id version: 1.0.2 dev: true - registry.npmjs.org/human-signals/1.1.1: + registry.npmjs.org/human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz} name: human-signals version: 1.1.1 engines: {node: '>=8.12.0'} dev: true - registry.npmjs.org/human-signals/2.1.0: + registry.npmjs.org/human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz} name: human-signals version: 2.1.0 engines: {node: '>=10.17.0'} dev: true - registry.npmjs.org/iconv-lite/0.4.24: + registry.npmjs.org/iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz} name: iconv-lite version: 0.4.24 engines: {node: '>=0.10.0'} dependencies: - safer-buffer: registry.npmjs.org/safer-buffer/2.1.2 + safer-buffer: registry.npmjs.org/safer-buffer@2.1.2 dev: true - registry.npmjs.org/ieee754/1.2.1: + registry.npmjs.org/ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz} name: ieee754 version: 1.2.1 dev: true - registry.npmjs.org/ignore/5.2.4: + registry.npmjs.org/ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz} name: ignore version: 5.2.4 engines: {node: '>= 4'} dev: true - registry.npmjs.org/immediate/3.0.6: + registry.npmjs.org/immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz} name: immediate version: 3.0.6 dev: false - registry.npmjs.org/import-fresh/3.3.0: + registry.npmjs.org/import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz} name: import-fresh version: 3.3.0 engines: {node: '>=6'} dependencies: - parent-module: registry.npmjs.org/parent-module/1.0.1 - resolve-from: registry.npmjs.org/resolve-from/4.0.0 + parent-module: registry.npmjs.org/parent-module@1.0.1 + resolve-from: registry.npmjs.org/resolve-from@4.0.0 dev: true - registry.npmjs.org/import-meta-resolve/3.0.0: + registry.npmjs.org/import-meta-resolve@3.0.0: 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/imurmurhash/0.1.4: + 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} name: imurmurhash version: 0.1.4 engines: {node: '>=0.8.19'} dev: true - registry.npmjs.org/indent-string/4.0.0: + registry.npmjs.org/indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz} name: indent-string version: 4.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/inflight/1.0.6: + registry.npmjs.org/inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz} name: inflight version: 1.0.6 dependencies: - once: registry.npmjs.org/once/1.4.0 - wrappy: registry.npmjs.org/wrappy/1.0.2 + once: registry.npmjs.org/once@1.4.0 + wrappy: registry.npmjs.org/wrappy@1.0.2 dev: true - registry.npmjs.org/inherits/2.0.4: + registry.npmjs.org/inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz} name: inherits version: 2.0.4 dev: true - registry.npmjs.org/ini/2.0.0: + registry.npmjs.org/ini@2.0.0: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ini/-/ini-2.0.0.tgz} name: ini version: 2.0.0 engines: {node: '>=10'} dev: true - registry.npmjs.org/internal-slot/1.0.5: + registry.npmjs.org/internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz} name: internal-slot version: 1.0.5 engines: {node: '>= 0.4'} dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - has: registry.npmjs.org/has/1.0.3 - side-channel: registry.npmjs.org/side-channel/1.0.4 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + has: registry.npmjs.org/has@1.0.3 + side-channel: registry.npmjs.org/side-channel@1.0.4 dev: true - registry.npmjs.org/is-array-buffer/3.0.2: + registry.npmjs.org/is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz} name: is-array-buffer version: 3.0.2 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 dev: true - registry.npmjs.org/is-arrayish/0.2.1: + registry.npmjs.org/is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz} name: is-arrayish version: 0.2.1 dev: true - registry.npmjs.org/is-bigint/1.0.4: + registry.npmjs.org/is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz} name: is-bigint version: 1.0.4 dependencies: - has-bigints: registry.npmjs.org/has-bigints/1.0.2 + has-bigints: registry.npmjs.org/has-bigints@1.0.2 dev: true - registry.npmjs.org/is-binary-path/2.1.0: + registry.npmjs.org/is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz} name: is-binary-path version: 2.1.0 engines: {node: '>=8'} dependencies: - binary-extensions: registry.npmjs.org/binary-extensions/2.2.0 + binary-extensions: registry.npmjs.org/binary-extensions@2.2.0 dev: true - registry.npmjs.org/is-boolean-object/1.1.2: + registry.npmjs.org/is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz} name: is-boolean-object version: 1.1.2 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + call-bind: registry.npmjs.org/call-bind@1.0.2 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true - registry.npmjs.org/is-builtin-module/3.2.1: + registry.npmjs.org/is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz} name: is-builtin-module version: 3.2.1 engines: {node: '>=6'} dependencies: - builtin-modules: registry.npmjs.org/builtin-modules/3.3.0 + builtin-modules: registry.npmjs.org/builtin-modules@3.3.0 dev: true - registry.npmjs.org/is-callable/1.2.7: + registry.npmjs.org/is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz} name: is-callable version: 1.2.7 engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/is-ci/3.0.1: + registry.npmjs.org/is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz} name: is-ci version: 3.0.1 hasBin: true dependencies: - ci-info: registry.npmjs.org/ci-info/3.8.0 + ci-info: registry.npmjs.org/ci-info@3.8.0 dev: true - registry.npmjs.org/is-core-module/2.12.1: + registry.npmjs.org/is-core-module@2.12.1: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz} name: is-core-module version: 2.12.1 dependencies: - has: registry.npmjs.org/has/1.0.3 + has: registry.npmjs.org/has@1.0.3 + dev: true + + registry.npmjs.org/is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz} + name: is-core-module + version: 2.13.0 + dependencies: + has: registry.npmjs.org/has@1.0.3 dev: true - registry.npmjs.org/is-date-object/1.0.5: + registry.npmjs.org/is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz} name: is-date-object version: 1.0.5 engines: {node: '>= 0.4'} dependencies: - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true - registry.npmjs.org/is-extglob/2.1.1: + registry.npmjs.org/is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz} name: is-extglob version: 2.1.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/is-fullwidth-code-point/3.0.0: + registry.npmjs.org/is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz} name: is-fullwidth-code-point version: 3.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/is-glob/4.0.3: + registry.npmjs.org/is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} name: is-glob version: 4.0.3 engines: {node: '>=0.10.0'} dependencies: - is-extglob: registry.npmjs.org/is-extglob/2.1.1 + is-extglob: registry.npmjs.org/is-extglob@2.1.1 dev: true - registry.npmjs.org/is-installed-globally/0.4.0: + registry.npmjs.org/is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz} name: is-installed-globally version: 0.4.0 engines: {node: '>=10'} dependencies: - global-dirs: registry.npmjs.org/global-dirs/3.0.1 - is-path-inside: registry.npmjs.org/is-path-inside/3.0.3 + global-dirs: registry.npmjs.org/global-dirs@3.0.1 + is-path-inside: registry.npmjs.org/is-path-inside@3.0.3 dev: true - registry.npmjs.org/is-module/1.0.0: + registry.npmjs.org/is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz} name: is-module version: 1.0.0 dev: true - registry.npmjs.org/is-negative-zero/2.0.2: + registry.npmjs.org/is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz} name: is-negative-zero version: 2.0.2 engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/is-number-object/1.0.7: + registry.npmjs.org/is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz} name: is-number-object version: 1.0.7 engines: {node: '>= 0.4'} dependencies: - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true - registry.npmjs.org/is-number/7.0.0: + registry.npmjs.org/is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz} name: is-number version: 7.0.0 engines: {node: '>=0.12.0'} dev: true - registry.npmjs.org/is-path-inside/3.0.3: + registry.npmjs.org/is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz} name: is-path-inside version: 3.0.3 engines: {node: '>=8'} dev: true - registry.npmjs.org/is-plain-obj/1.1.0: + registry.npmjs.org/is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz} name: is-plain-obj version: 1.1.0 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/is-reference/1.2.1: + registry.npmjs.org/is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz} name: is-reference version: 1.2.1 dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.1 + '@types/estree': registry.npmjs.org/@types/estree@1.0.1 dev: true - registry.npmjs.org/is-reference/3.0.1: + registry.npmjs.org/is-reference@3.0.1: resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz} name: is-reference version: 3.0.1 dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.1 + '@types/estree': registry.npmjs.org/@types/estree@1.0.1 dev: true - registry.npmjs.org/is-regex/1.1.4: + registry.npmjs.org/is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz} name: is-regex version: 1.1.4 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + call-bind: registry.npmjs.org/call-bind@1.0.2 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true - registry.npmjs.org/is-shared-array-buffer/1.0.2: + registry.npmjs.org/is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz} name: is-shared-array-buffer version: 1.0.2 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 dev: true - registry.npmjs.org/is-stream/2.0.1: + registry.npmjs.org/is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz} name: is-stream version: 2.0.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/is-string/1.0.7: + registry.npmjs.org/is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz} name: is-string version: 1.0.7 engines: {node: '>= 0.4'} dependencies: - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true - registry.npmjs.org/is-subdir/1.2.0: + registry.npmjs.org/is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz} name: is-subdir version: 1.2.0 engines: {node: '>=4'} dependencies: - better-path-resolve: registry.npmjs.org/better-path-resolve/1.0.0 + better-path-resolve: registry.npmjs.org/better-path-resolve@1.0.0 dev: true - registry.npmjs.org/is-symbol/1.0.4: + registry.npmjs.org/is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz} name: is-symbol version: 1.0.4 engines: {node: '>= 0.4'} dependencies: - has-symbols: registry.npmjs.org/has-symbols/1.0.3 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 dev: true - registry.npmjs.org/is-typed-array/1.1.10: + registry.npmjs.org/is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz} name: is-typed-array version: 1.1.10 engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: registry.npmjs.org/available-typed-arrays/1.0.5 - call-bind: registry.npmjs.org/call-bind/1.0.2 - for-each: registry.npmjs.org/for-each/0.3.3 - gopd: registry.npmjs.org/gopd/1.0.1 - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + gopd: registry.npmjs.org/gopd@1.0.1 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 + dev: true + + registry.npmjs.org/is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz} + name: is-typed-array + version: 1.1.12 + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: registry.npmjs.org/which-typed-array@1.1.11 dev: true - registry.npmjs.org/is-typedarray/1.0.0: + registry.npmjs.org/is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz} name: is-typedarray version: 1.0.0 dev: true - registry.npmjs.org/is-unicode-supported/0.1.0: + registry.npmjs.org/is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz} name: is-unicode-supported version: 0.1.0 engines: {node: '>=10'} dev: true - registry.npmjs.org/is-weakref/1.0.2: + registry.npmjs.org/is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz} name: is-weakref version: 1.0.2 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 dev: true - registry.npmjs.org/is-windows/1.0.2: + registry.npmjs.org/is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz} name: is-windows version: 1.0.2 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/isexe/2.0.0: + registry.npmjs.org/isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz} + name: isarray + version: 2.0.5 + dev: true + + registry.npmjs.org/isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz} name: isexe version: 2.0.0 dev: true - registry.npmjs.org/isstream/0.1.2: + registry.npmjs.org/isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz} name: isstream version: 0.1.2 dev: true - registry.npmjs.org/joi/17.9.2: + registry.npmjs.org/joi@17.9.2: resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/joi/-/joi-17.9.2.tgz} name: joi version: 17.9.2 dependencies: - '@hapi/hoek': registry.npmjs.org/@hapi/hoek/9.3.0 - '@hapi/topo': registry.npmjs.org/@hapi/topo/5.1.0 - '@sideway/address': registry.npmjs.org/@sideway/address/4.1.4 - '@sideway/formula': registry.npmjs.org/@sideway/formula/3.0.1 - '@sideway/pinpoint': registry.npmjs.org/@sideway/pinpoint/2.0.0 + '@hapi/hoek': registry.npmjs.org/@hapi/hoek@9.3.0 + '@hapi/topo': registry.npmjs.org/@hapi/topo@5.1.0 + '@sideway/address': registry.npmjs.org/@sideway/address@4.1.4 + '@sideway/formula': registry.npmjs.org/@sideway/formula@3.0.1 + '@sideway/pinpoint': registry.npmjs.org/@sideway/pinpoint@2.0.0 dev: true - registry.npmjs.org/js-tokens/4.0.0: + registry.npmjs.org/js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz} name: js-tokens version: 4.0.0 - registry.npmjs.org/js-yaml/3.14.1: + registry.npmjs.org/js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz} name: js-yaml version: 3.14.1 hasBin: true dependencies: - argparse: registry.npmjs.org/argparse/1.0.10 - esprima: registry.npmjs.org/esprima/4.0.1 + argparse: registry.npmjs.org/argparse@1.0.10 + esprima: registry.npmjs.org/esprima@4.0.1 dev: true - registry.npmjs.org/js-yaml/4.1.0: + registry.npmjs.org/js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz} name: js-yaml version: 4.1.0 hasBin: true dependencies: - argparse: registry.npmjs.org/argparse/2.0.1 + argparse: registry.npmjs.org/argparse@2.0.1 dev: true - registry.npmjs.org/jsbn/0.1.1: + registry.npmjs.org/jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz} name: jsbn version: 0.1.1 dev: true - registry.npmjs.org/jsesc/2.5.2: + registry.npmjs.org/jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz} name: jsesc version: 2.5.2 @@ -5149,37 +5725,37 @@ packages: hasBin: true dev: true - registry.npmjs.org/json-parse-even-better-errors/2.3.1: + registry.npmjs.org/json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz} name: json-parse-even-better-errors version: 2.3.1 dev: true - registry.npmjs.org/json-schema-traverse/0.4.1: + registry.npmjs.org/json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} name: json-schema-traverse version: 0.4.1 dev: true - registry.npmjs.org/json-schema/0.4.0: + registry.npmjs.org/json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz} name: json-schema version: 0.4.0 dev: true - registry.npmjs.org/json-stable-stringify-without-jsonify/1.0.1: + registry.npmjs.org/json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} name: json-stable-stringify-without-jsonify version: 1.0.1 dev: true - registry.npmjs.org/json-stringify-safe/5.0.1: + registry.npmjs.org/json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz} name: json-stringify-safe version: 5.0.1 dev: true - registry.npmjs.org/json5/2.2.3: + 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 version: 2.2.3 @@ -5187,105 +5763,107 @@ packages: hasBin: true dev: true - registry.npmjs.org/jsonfile/4.0.0: + registry.npmjs.org/jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz} name: jsonfile version: 4.0.0 optionalDependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 dev: true - registry.npmjs.org/jsonfile/6.1.0: + registry.npmjs.org/jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz} name: jsonfile version: 6.1.0 dependencies: - universalify: registry.npmjs.org/universalify/2.0.0 + universalify: registry.npmjs.org/universalify@2.0.0 optionalDependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 dev: true - registry.npmjs.org/jsprim/2.0.2: + registry.npmjs.org/jsprim@2.0.2: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz} name: jsprim version: 2.0.2 engines: {'0': node >=0.6.0} dependencies: - assert-plus: registry.npmjs.org/assert-plus/1.0.0 - extsprintf: registry.npmjs.org/extsprintf/1.3.0 - json-schema: registry.npmjs.org/json-schema/0.4.0 - verror: registry.npmjs.org/verror/1.10.0 + assert-plus: registry.npmjs.org/assert-plus@1.0.0 + extsprintf: registry.npmjs.org/extsprintf@1.3.0 + json-schema: registry.npmjs.org/json-schema@0.4.0 + verror: registry.npmjs.org/verror@1.10.0 dev: true - registry.npmjs.org/jsx-ast-utils/3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz} + registry.npmjs.org/jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz} name: jsx-ast-utils - version: 3.3.3 + version: 3.3.5 engines: {node: '>=4.0'} dependencies: - array-includes: registry.npmjs.org/array-includes/3.1.6 - object.assign: registry.npmjs.org/object.assign/4.1.4 + array-includes: registry.npmjs.org/array-includes@3.1.6 + array.prototype.flat: registry.npmjs.org/array.prototype.flat@1.3.1 + object.assign: registry.npmjs.org/object.assign@4.1.4 + object.values: registry.npmjs.org/object.values@1.1.6 dev: true - registry.npmjs.org/kind-of/6.0.3: + registry.npmjs.org/kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz} name: kind-of version: 6.0.3 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/kleur/4.1.5: + registry.npmjs.org/kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz} name: kleur version: 4.1.5 engines: {node: '>=6'} dev: true - registry.npmjs.org/known-css-properties/0.27.0: + registry.npmjs.org/known-css-properties@0.27.0: resolution: {integrity: sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz} name: known-css-properties version: 0.27.0 dev: true - registry.npmjs.org/lazy-ass/1.6.0: + 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 version: 1.6.0 engines: {node: '> 0.8'} dev: true - registry.npmjs.org/levn/0.4.1: + registry.npmjs.org/levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz} name: levn version: 0.4.1 engines: {node: '>= 0.8.0'} dependencies: - prelude-ls: registry.npmjs.org/prelude-ls/1.2.1 - type-check: registry.npmjs.org/type-check/0.4.0 + prelude-ls: registry.npmjs.org/prelude-ls@1.2.1 + type-check: registry.npmjs.org/type-check@0.4.0 dev: true - registry.npmjs.org/lie/3.1.1: + registry.npmjs.org/lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lie/-/lie-3.1.1.tgz} name: lie version: 3.1.1 dependencies: - immediate: registry.npmjs.org/immediate/3.0.6 + immediate: registry.npmjs.org/immediate@3.0.6 dev: false - registry.npmjs.org/lilconfig/2.1.0: + registry.npmjs.org/lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} name: lilconfig version: 2.1.0 engines: {node: '>=10'} dev: true - registry.npmjs.org/lines-and-columns/1.2.4: + registry.npmjs.org/lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz} name: lines-and-columns version: 1.2.4 dev: true - registry.npmjs.org/listr2/3.14.0_enquirer@2.3.6: + registry.npmjs.org/listr2@3.14.0(enquirer@2.4.1): resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz} id: registry.npmjs.org/listr2/3.14.0 name: listr2 @@ -5297,251 +5875,251 @@ packages: enquirer: optional: true dependencies: - cli-truncate: registry.npmjs.org/cli-truncate/2.1.0 - colorette: registry.npmjs.org/colorette/2.0.20 - enquirer: registry.npmjs.org/enquirer/2.3.6 - log-update: registry.npmjs.org/log-update/4.0.0 - p-map: registry.npmjs.org/p-map/4.0.0 - rfdc: registry.npmjs.org/rfdc/1.3.0 - rxjs: registry.npmjs.org/rxjs/7.8.1 - through: registry.npmjs.org/through/2.3.8 - wrap-ansi: registry.npmjs.org/wrap-ansi/7.0.0 + cli-truncate: registry.npmjs.org/cli-truncate@2.1.0 + colorette: registry.npmjs.org/colorette@2.0.20 + enquirer: registry.npmjs.org/enquirer@2.4.1 + log-update: registry.npmjs.org/log-update@4.0.0 + p-map: registry.npmjs.org/p-map@4.0.0 + rfdc: registry.npmjs.org/rfdc@1.3.0 + rxjs: registry.npmjs.org/rxjs@7.8.1 + through: registry.npmjs.org/through@2.3.8 + wrap-ansi: registry.npmjs.org/wrap-ansi@7.0.0 dev: true - registry.npmjs.org/load-yaml-file/0.2.0: + registry.npmjs.org/load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz} name: load-yaml-file version: 0.2.0 engines: {node: '>=6'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 - js-yaml: registry.npmjs.org/js-yaml/3.14.1 - pify: registry.npmjs.org/pify/4.0.1 - strip-bom: registry.npmjs.org/strip-bom/3.0.0 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + js-yaml: registry.npmjs.org/js-yaml@3.14.1 + pify: registry.npmjs.org/pify@4.0.1 + strip-bom: registry.npmjs.org/strip-bom@3.0.0 dev: true - registry.npmjs.org/localforage/1.10.0: + registry.npmjs.org/localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz} name: localforage version: 1.10.0 dependencies: - lie: registry.npmjs.org/lie/3.1.1 + lie: registry.npmjs.org/lie@3.1.1 dev: false - registry.npmjs.org/locate-character/3.0.0: + registry.npmjs.org/locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz} name: locate-character version: 3.0.0 dev: true - registry.npmjs.org/locate-path/5.0.0: + registry.npmjs.org/locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz} name: locate-path version: 5.0.0 engines: {node: '>=8'} dependencies: - p-locate: registry.npmjs.org/p-locate/4.1.0 + p-locate: registry.npmjs.org/p-locate@4.1.0 dev: true - registry.npmjs.org/locate-path/6.0.0: + registry.npmjs.org/locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz} name: locate-path version: 6.0.0 engines: {node: '>=10'} dependencies: - p-locate: registry.npmjs.org/p-locate/5.0.0 + p-locate: registry.npmjs.org/p-locate@5.0.0 dev: true - registry.npmjs.org/lodash.merge/4.6.2: + registry.npmjs.org/lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz} name: lodash.merge version: 4.6.2 dev: true - registry.npmjs.org/lodash.once/4.1.1: + registry.npmjs.org/lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz} name: lodash.once version: 4.1.1 dev: true - registry.npmjs.org/lodash.startcase/4.4.0: + registry.npmjs.org/lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz} name: lodash.startcase version: 4.4.0 dev: true - registry.npmjs.org/lodash/4.17.21: + registry.npmjs.org/lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz} name: lodash version: 4.17.21 - registry.npmjs.org/log-symbols/4.1.0: + registry.npmjs.org/log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz} name: log-symbols version: 4.1.0 engines: {node: '>=10'} dependencies: - chalk: registry.npmjs.org/chalk/4.1.2 - is-unicode-supported: registry.npmjs.org/is-unicode-supported/0.1.0 + chalk: registry.npmjs.org/chalk@4.1.2 + is-unicode-supported: registry.npmjs.org/is-unicode-supported@0.1.0 dev: true - registry.npmjs.org/log-update/4.0.0: + registry.npmjs.org/log-update@4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz} name: log-update version: 4.0.0 engines: {node: '>=10'} dependencies: - ansi-escapes: registry.npmjs.org/ansi-escapes/4.3.2 - cli-cursor: registry.npmjs.org/cli-cursor/3.1.0 - slice-ansi: registry.npmjs.org/slice-ansi/4.0.0 - wrap-ansi: registry.npmjs.org/wrap-ansi/6.2.0 + ansi-escapes: registry.npmjs.org/ansi-escapes@4.3.2 + cli-cursor: registry.npmjs.org/cli-cursor@3.1.0 + slice-ansi: registry.npmjs.org/slice-ansi@4.0.0 + wrap-ansi: registry.npmjs.org/wrap-ansi@6.2.0 dev: true - registry.npmjs.org/loose-envify/1.4.0: + registry.npmjs.org/loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz} name: loose-envify version: 1.4.0 hasBin: true dependencies: - js-tokens: registry.npmjs.org/js-tokens/4.0.0 + js-tokens: registry.npmjs.org/js-tokens@4.0.0 - registry.npmjs.org/lower-case/2.0.2: + registry.npmjs.org/lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz} name: lower-case version: 2.0.2 dependencies: - tslib: registry.npmjs.org/tslib/2.5.3 + tslib: registry.npmjs.org/tslib@2.5.3 dev: true - registry.npmjs.org/lru-cache/4.1.5: + registry.npmjs.org/lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz} name: lru-cache version: 4.1.5 dependencies: - pseudomap: registry.npmjs.org/pseudomap/1.0.2 - yallist: registry.npmjs.org/yallist/2.1.2 + pseudomap: registry.npmjs.org/pseudomap@1.0.2 + yallist: registry.npmjs.org/yallist@2.1.2 dev: true - registry.npmjs.org/lru-cache/5.1.1: + registry.npmjs.org/lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz} name: lru-cache version: 5.1.1 dependencies: - yallist: registry.npmjs.org/yallist/3.1.1 + yallist: registry.npmjs.org/yallist@3.1.1 dev: true - registry.npmjs.org/lru-cache/6.0.0: + registry.npmjs.org/lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz} name: lru-cache version: 6.0.0 engines: {node: '>=10'} dependencies: - yallist: registry.npmjs.org/yallist/4.0.0 + yallist: registry.npmjs.org/yallist@4.0.0 dev: true - registry.npmjs.org/magic-string/0.27.0: + registry.npmjs.org/magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz} name: magic-string version: 0.27.0 engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 dev: true - registry.npmjs.org/magic-string/0.30.0: + registry.npmjs.org/magic-string@0.30.0: resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz} name: magic-string version: 0.30.0 engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 dev: true - registry.npmjs.org/map-obj/1.0.1: + registry.npmjs.org/map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz} name: map-obj version: 1.0.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/map-obj/4.3.0: + registry.npmjs.org/map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz} name: map-obj version: 4.3.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/map-stream/0.1.0: + registry.npmjs.org/map-stream@0.1.0: resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz} name: map-stream version: 0.1.0 dev: true - registry.npmjs.org/mdn-data/2.0.30: + registry.npmjs.org/mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz} name: mdn-data version: 2.0.30 dev: true - registry.npmjs.org/meow/6.1.1: + registry.npmjs.org/meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/meow/-/meow-6.1.1.tgz} name: meow version: 6.1.1 engines: {node: '>=8'} dependencies: - '@types/minimist': registry.npmjs.org/@types/minimist/1.2.2 - camelcase-keys: registry.npmjs.org/camelcase-keys/6.2.2 - decamelize-keys: registry.npmjs.org/decamelize-keys/1.1.1 - hard-rejection: registry.npmjs.org/hard-rejection/2.1.0 - minimist-options: registry.npmjs.org/minimist-options/4.1.0 - normalize-package-data: registry.npmjs.org/normalize-package-data/2.5.0 - read-pkg-up: registry.npmjs.org/read-pkg-up/7.0.1 - redent: registry.npmjs.org/redent/3.0.0 - trim-newlines: registry.npmjs.org/trim-newlines/3.0.1 - type-fest: registry.npmjs.org/type-fest/0.13.1 - yargs-parser: registry.npmjs.org/yargs-parser/18.1.3 + '@types/minimist': registry.npmjs.org/@types/minimist@1.2.2 + camelcase-keys: registry.npmjs.org/camelcase-keys@6.2.2 + decamelize-keys: registry.npmjs.org/decamelize-keys@1.1.1 + hard-rejection: registry.npmjs.org/hard-rejection@2.1.0 + minimist-options: registry.npmjs.org/minimist-options@4.1.0 + normalize-package-data: registry.npmjs.org/normalize-package-data@2.5.0 + read-pkg-up: registry.npmjs.org/read-pkg-up@7.0.1 + redent: registry.npmjs.org/redent@3.0.0 + trim-newlines: registry.npmjs.org/trim-newlines@3.0.1 + type-fest: registry.npmjs.org/type-fest@0.13.1 + yargs-parser: registry.npmjs.org/yargs-parser@18.1.3 dev: true - registry.npmjs.org/merge-stream/2.0.0: + registry.npmjs.org/merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz} name: merge-stream version: 2.0.0 dev: true - registry.npmjs.org/merge2/1.4.1: + registry.npmjs.org/merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz} name: merge2 version: 1.4.1 engines: {node: '>= 8'} dev: true - registry.npmjs.org/micromatch/4.0.5: + registry.npmjs.org/micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz} name: micromatch version: 4.0.5 engines: {node: '>=8.6'} dependencies: - braces: registry.npmjs.org/braces/3.0.2 - picomatch: registry.npmjs.org/picomatch/2.3.1 + braces: registry.npmjs.org/braces@3.0.2 + picomatch: registry.npmjs.org/picomatch@2.3.1 dev: true - registry.npmjs.org/mime-db/1.52.0: + registry.npmjs.org/mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz} name: mime-db version: 1.52.0 engines: {node: '>= 0.6'} dev: true - registry.npmjs.org/mime-types/2.1.35: + registry.npmjs.org/mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz} name: mime-types version: 2.1.35 engines: {node: '>= 0.6'} dependencies: - mime-db: registry.npmjs.org/mime-db/1.52.0 + mime-db: registry.npmjs.org/mime-db@1.52.0 dev: true - registry.npmjs.org/mime/3.0.0: + registry.npmjs.org/mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mime/-/mime-3.0.0.tgz} name: mime version: 3.0.0 @@ -5549,97 +6127,97 @@ packages: hasBin: true dev: true - registry.npmjs.org/mimic-fn/2.1.0: + registry.npmjs.org/mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz} name: mimic-fn version: 2.1.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/min-indent/1.0.1: + registry.npmjs.org/min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz} name: min-indent version: 1.0.1 engines: {node: '>=4'} dev: true - registry.npmjs.org/minimatch/3.1.2: + registry.npmjs.org/minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz} name: minimatch version: 3.1.2 dependencies: - brace-expansion: registry.npmjs.org/brace-expansion/1.1.11 + brace-expansion: registry.npmjs.org/brace-expansion@1.1.11 dev: true - registry.npmjs.org/minimatch/5.1.6: + registry.npmjs.org/minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz} name: minimatch version: 5.1.6 engines: {node: '>=10'} dependencies: - brace-expansion: registry.npmjs.org/brace-expansion/2.0.1 + brace-expansion: registry.npmjs.org/brace-expansion@2.0.1 dev: true - registry.npmjs.org/minimist-options/4.1.0: + registry.npmjs.org/minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz} name: minimist-options version: 4.1.0 engines: {node: '>= 6'} dependencies: - arrify: registry.npmjs.org/arrify/1.0.1 - is-plain-obj: registry.npmjs.org/is-plain-obj/1.1.0 - kind-of: registry.npmjs.org/kind-of/6.0.3 + arrify: registry.npmjs.org/arrify@1.0.1 + is-plain-obj: registry.npmjs.org/is-plain-obj@1.1.0 + kind-of: registry.npmjs.org/kind-of@6.0.3 dev: true - registry.npmjs.org/minimist/1.2.8: + registry.npmjs.org/minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz} name: minimist version: 1.2.8 dev: true - registry.npmjs.org/mixme/0.5.9: + registry.npmjs.org/mixme@0.5.9: resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mixme/-/mixme-0.5.9.tgz} name: mixme version: 0.5.9 engines: {node: '>= 8.0.0'} dev: true - registry.npmjs.org/mkdirp/0.5.6: + registry.npmjs.org/mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz} name: mkdirp version: 0.5.6 hasBin: true dependencies: - minimist: registry.npmjs.org/minimist/1.2.8 + minimist: registry.npmjs.org/minimist@1.2.8 dev: true - registry.npmjs.org/mri/1.2.0: + registry.npmjs.org/mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mri/-/mri-1.2.0.tgz} name: mri version: 1.2.0 engines: {node: '>=4'} dev: true - registry.npmjs.org/mrmime/1.0.1: + registry.npmjs.org/mrmime@1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz} name: mrmime version: 1.0.1 engines: {node: '>=10'} dev: true - registry.npmjs.org/ms/2.1.2: + registry.npmjs.org/ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.1.2.tgz} name: ms version: 2.1.2 dev: true - registry.npmjs.org/ms/2.1.3: + registry.npmjs.org/ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz} name: ms version: 2.1.3 dev: true - registry.npmjs.org/nanoid/3.3.6: + registry.npmjs.org/nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz} name: nanoid version: 3.3.6 @@ -5647,28 +6225,28 @@ packages: hasBin: true dev: true - registry.npmjs.org/natural-compare-lite/1.4.0: + registry.npmjs.org/natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz} name: natural-compare-lite version: 1.4.0 dev: true - registry.npmjs.org/natural-compare/1.4.0: + registry.npmjs.org/natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz} name: natural-compare version: 1.4.0 dev: true - registry.npmjs.org/no-case/3.0.4: + registry.npmjs.org/no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz} name: no-case version: 3.0.4 dependencies: - lower-case: registry.npmjs.org/lower-case/2.0.2 - tslib: registry.npmjs.org/tslib/2.5.3 + lower-case: registry.npmjs.org/lower-case@2.0.2 + tslib: registry.npmjs.org/tslib@2.5.3 dev: true - registry.npmjs.org/node-fetch/2.6.11: + registry.npmjs.org/node-fetch@2.6.11: resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz} name: node-fetch version: 2.6.11 @@ -5679,372 +6257,378 @@ packages: encoding: optional: true dependencies: - whatwg-url: registry.npmjs.org/whatwg-url/5.0.0 + whatwg-url: registry.npmjs.org/whatwg-url@5.0.0 dev: true - registry.npmjs.org/node-releases/2.0.12: + registry.npmjs.org/node-releases@2.0.12: resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz} name: node-releases version: 2.0.12 dev: true - registry.npmjs.org/normalize-package-data/2.5.0: + registry.npmjs.org/node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz} + name: node-releases + version: 2.0.13 + dev: true + + registry.npmjs.org/normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz} name: normalize-package-data version: 2.5.0 dependencies: - hosted-git-info: registry.npmjs.org/hosted-git-info/2.8.9 - resolve: registry.npmjs.org/resolve/1.22.2 - semver: registry.npmjs.org/semver/5.7.1 - validate-npm-package-license: registry.npmjs.org/validate-npm-package-license/3.0.4 + hosted-git-info: registry.npmjs.org/hosted-git-info@2.8.9 + resolve: registry.npmjs.org/resolve@1.22.2 + semver: registry.npmjs.org/semver@5.7.1 + validate-npm-package-license: registry.npmjs.org/validate-npm-package-license@3.0.4 dev: true - registry.npmjs.org/normalize-path/3.0.0: + registry.npmjs.org/normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz} name: normalize-path version: 3.0.0 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/normalize-range/0.1.2: + registry.npmjs.org/normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz} name: normalize-range version: 0.1.2 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/npm-run-path/4.0.1: + registry.npmjs.org/npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz} name: npm-run-path version: 4.0.1 engines: {node: '>=8'} dependencies: - path-key: registry.npmjs.org/path-key/3.1.1 + path-key: registry.npmjs.org/path-key@3.1.1 dev: true - registry.npmjs.org/object-assign/4.1.1: + registry.npmjs.org/object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz} name: object-assign version: 4.1.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/object-inspect/1.12.3: + registry.npmjs.org/object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz} name: object-inspect version: 1.12.3 dev: true - registry.npmjs.org/object-keys/1.1.1: + registry.npmjs.org/object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz} name: object-keys version: 1.1.1 engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/object.assign/4.1.4: + registry.npmjs.org/object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz} name: object.assign version: 4.1.4 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - has-symbols: registry.npmjs.org/has-symbols/1.0.3 - object-keys: registry.npmjs.org/object-keys/1.1.1 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + object-keys: registry.npmjs.org/object-keys@1.1.1 dev: true - registry.npmjs.org/object.entries/1.1.6: + registry.npmjs.org/object.entries@1.1.6: resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz} name: object.entries version: 1.1.6 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true - registry.npmjs.org/object.fromentries/2.0.6: + registry.npmjs.org/object.fromentries@2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz} name: object.fromentries version: 2.0.6 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true - registry.npmjs.org/object.hasown/1.1.2: + registry.npmjs.org/object.hasown@1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz} name: object.hasown version: 1.1.2 dependencies: - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true - registry.npmjs.org/object.values/1.1.6: + registry.npmjs.org/object.values@1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz} name: object.values version: 1.1.6 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 dev: true - registry.npmjs.org/once/1.4.0: + registry.npmjs.org/once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/once/-/once-1.4.0.tgz} name: once version: 1.4.0 dependencies: - wrappy: registry.npmjs.org/wrappy/1.0.2 + wrappy: registry.npmjs.org/wrappy@1.0.2 dev: true - registry.npmjs.org/onetime/5.1.2: + registry.npmjs.org/onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz} name: onetime version: 5.1.2 engines: {node: '>=6'} dependencies: - mimic-fn: registry.npmjs.org/mimic-fn/2.1.0 + mimic-fn: registry.npmjs.org/mimic-fn@2.1.0 dev: true - registry.npmjs.org/optionator/0.9.1: + registry.npmjs.org/optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz} name: optionator version: 0.9.1 engines: {node: '>= 0.8.0'} dependencies: - deep-is: registry.npmjs.org/deep-is/0.1.4 - fast-levenshtein: registry.npmjs.org/fast-levenshtein/2.0.6 - levn: registry.npmjs.org/levn/0.4.1 - prelude-ls: registry.npmjs.org/prelude-ls/1.2.1 - type-check: registry.npmjs.org/type-check/0.4.0 - word-wrap: registry.npmjs.org/word-wrap/1.2.3 + deep-is: registry.npmjs.org/deep-is@0.1.4 + fast-levenshtein: registry.npmjs.org/fast-levenshtein@2.0.6 + levn: registry.npmjs.org/levn@0.4.1 + prelude-ls: registry.npmjs.org/prelude-ls@1.2.1 + type-check: registry.npmjs.org/type-check@0.4.0 + word-wrap: registry.npmjs.org/word-wrap@1.2.3 dev: true - registry.npmjs.org/os-tmpdir/1.0.2: + registry.npmjs.org/os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz} name: os-tmpdir version: 1.0.2 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/ospath/1.2.2: + registry.npmjs.org/ospath@1.2.2: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz} name: ospath version: 1.2.2 dev: true - registry.npmjs.org/outdent/0.5.0: + registry.npmjs.org/outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz} name: outdent version: 0.5.0 dev: true - registry.npmjs.org/p-filter/2.1.0: + registry.npmjs.org/p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz} name: p-filter version: 2.1.0 engines: {node: '>=8'} dependencies: - p-map: registry.npmjs.org/p-map/2.1.0 + p-map: registry.npmjs.org/p-map@2.1.0 dev: true - registry.npmjs.org/p-limit/2.3.0: + registry.npmjs.org/p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz} name: p-limit version: 2.3.0 engines: {node: '>=6'} dependencies: - p-try: registry.npmjs.org/p-try/2.2.0 + p-try: registry.npmjs.org/p-try@2.2.0 dev: true - registry.npmjs.org/p-limit/3.1.0: + registry.npmjs.org/p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz} name: p-limit version: 3.1.0 engines: {node: '>=10'} dependencies: - yocto-queue: registry.npmjs.org/yocto-queue/0.1.0 + yocto-queue: registry.npmjs.org/yocto-queue@0.1.0 dev: true - registry.npmjs.org/p-locate/4.1.0: + registry.npmjs.org/p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz} name: p-locate version: 4.1.0 engines: {node: '>=8'} dependencies: - p-limit: registry.npmjs.org/p-limit/2.3.0 + p-limit: registry.npmjs.org/p-limit@2.3.0 dev: true - registry.npmjs.org/p-locate/5.0.0: + registry.npmjs.org/p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz} name: p-locate version: 5.0.0 engines: {node: '>=10'} dependencies: - p-limit: registry.npmjs.org/p-limit/3.1.0 + p-limit: registry.npmjs.org/p-limit@3.1.0 dev: true - registry.npmjs.org/p-map/2.1.0: + registry.npmjs.org/p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz} name: p-map version: 2.1.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/p-map/4.0.0: + registry.npmjs.org/p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz} name: p-map version: 4.0.0 engines: {node: '>=10'} dependencies: - aggregate-error: registry.npmjs.org/aggregate-error/3.1.0 + aggregate-error: registry.npmjs.org/aggregate-error@3.1.0 dev: true - registry.npmjs.org/p-try/2.2.0: + registry.npmjs.org/p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz} name: p-try version: 2.2.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/parent-module/1.0.1: + registry.npmjs.org/parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz} name: parent-module version: 1.0.1 engines: {node: '>=6'} dependencies: - callsites: registry.npmjs.org/callsites/3.1.0 + callsites: registry.npmjs.org/callsites@3.1.0 dev: true - registry.npmjs.org/parse-json/5.2.0: + registry.npmjs.org/parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz} name: parse-json version: 5.2.0 engines: {node: '>=8'} dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.22.5 - error-ex: registry.npmjs.org/error-ex/1.3.2 - json-parse-even-better-errors: registry.npmjs.org/json-parse-even-better-errors/2.3.1 - lines-and-columns: registry.npmjs.org/lines-and-columns/1.2.4 + '@babel/code-frame': registry.npmjs.org/@babel/code-frame@7.22.5 + error-ex: registry.npmjs.org/error-ex@1.3.2 + json-parse-even-better-errors: registry.npmjs.org/json-parse-even-better-errors@2.3.1 + lines-and-columns: registry.npmjs.org/lines-and-columns@1.2.4 dev: true - registry.npmjs.org/pascal-case/3.1.2: + registry.npmjs.org/pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz} name: pascal-case version: 3.1.2 dependencies: - no-case: registry.npmjs.org/no-case/3.0.4 - tslib: registry.npmjs.org/tslib/2.5.3 + no-case: registry.npmjs.org/no-case@3.0.4 + tslib: registry.npmjs.org/tslib@2.5.3 dev: true - registry.npmjs.org/path-exists/4.0.0: + registry.npmjs.org/path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} name: path-exists version: 4.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/path-is-absolute/1.0.1: + registry.npmjs.org/path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz} name: path-is-absolute version: 1.0.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/path-key/3.1.1: + registry.npmjs.org/path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz} name: path-key version: 3.1.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/path-parse/1.0.7: + registry.npmjs.org/path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz} name: path-parse version: 1.0.7 dev: true - registry.npmjs.org/path-type/4.0.0: + registry.npmjs.org/path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz} name: path-type version: 4.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/pause-stream/0.0.11: + registry.npmjs.org/pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz} name: pause-stream version: 0.0.11 dependencies: - through: registry.npmjs.org/through/2.3.8 + through: registry.npmjs.org/through@2.3.8 dev: true - registry.npmjs.org/pend/1.2.0: + registry.npmjs.org/pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pend/-/pend-1.2.0.tgz} name: pend version: 1.2.0 dev: true - registry.npmjs.org/performance-now/2.1.0: + registry.npmjs.org/performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz} name: performance-now version: 2.1.0 dev: true - registry.npmjs.org/periscopic/3.1.0: + registry.npmjs.org/periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz} name: periscopic version: 3.1.0 dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.1 - estree-walker: registry.npmjs.org/estree-walker/3.0.3 - is-reference: registry.npmjs.org/is-reference/3.0.1 + '@types/estree': registry.npmjs.org/@types/estree@1.0.1 + estree-walker: registry.npmjs.org/estree-walker@3.0.3 + is-reference: registry.npmjs.org/is-reference@3.0.1 dev: true - registry.npmjs.org/picocolors/1.0.0: + registry.npmjs.org/picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz} name: picocolors version: 1.0.0 dev: true - registry.npmjs.org/picomatch/2.3.1: + registry.npmjs.org/picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz} name: picomatch version: 2.3.1 engines: {node: '>=8.6'} dev: true - registry.npmjs.org/pify/2.3.0: + registry.npmjs.org/pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pify/-/pify-2.3.0.tgz} name: pify version: 2.3.0 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/pify/4.0.1: + registry.npmjs.org/pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pify/-/pify-4.0.1.tgz} name: pify version: 4.0.1 engines: {node: '>=6'} dev: true - registry.npmjs.org/pkg-dir/4.2.0: + registry.npmjs.org/pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz} name: pkg-dir version: 4.2.0 engines: {node: '>=8'} dependencies: - find-up: registry.npmjs.org/find-up/4.1.0 + find-up: registry.npmjs.org/find-up@4.1.0 dev: true - registry.npmjs.org/postcss-cli/10.1.0_postcss@8.4.24: + registry.npmjs.org/postcss-cli@10.1.0(postcss@8.4.24): resolution: {integrity: sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz} id: registry.npmjs.org/postcss-cli/10.1.0 name: postcss-cli @@ -6054,24 +6638,24 @@ packages: peerDependencies: postcss: ^8.0.0 dependencies: - chokidar: registry.npmjs.org/chokidar/3.5.3 - dependency-graph: registry.npmjs.org/dependency-graph/0.11.0 - fs-extra: registry.npmjs.org/fs-extra/11.1.1 - get-stdin: registry.npmjs.org/get-stdin/9.0.0 - globby: registry.npmjs.org/globby/13.1.4 - picocolors: registry.npmjs.org/picocolors/1.0.0 - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-load-config: registry.npmjs.org/postcss-load-config/4.0.1_postcss@8.4.24 - postcss-reporter: registry.npmjs.org/postcss-reporter/7.0.5_postcss@8.4.24 - pretty-hrtime: registry.npmjs.org/pretty-hrtime/1.0.3 - read-cache: registry.npmjs.org/read-cache/1.0.0 - slash: registry.npmjs.org/slash/5.1.0 - yargs: registry.npmjs.org/yargs/17.7.2 + chokidar: registry.npmjs.org/chokidar@3.5.3 + dependency-graph: registry.npmjs.org/dependency-graph@0.11.0 + fs-extra: registry.npmjs.org/fs-extra@11.1.1 + get-stdin: registry.npmjs.org/get-stdin@9.0.0 + globby: registry.npmjs.org/globby@13.1.4 + picocolors: registry.npmjs.org/picocolors@1.0.0 + postcss: registry.npmjs.org/postcss@8.4.24 + postcss-load-config: registry.npmjs.org/postcss-load-config@4.0.1(postcss@8.4.24) + postcss-reporter: registry.npmjs.org/postcss-reporter@7.0.5(postcss@8.4.24) + pretty-hrtime: registry.npmjs.org/pretty-hrtime@1.0.3 + read-cache: registry.npmjs.org/read-cache@1.0.0 + slash: registry.npmjs.org/slash@5.1.0 + yargs: registry.npmjs.org/yargs@17.7.2 transitivePeerDependencies: - ts-node dev: true - registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3_postcss@8.4.24: + registry.npmjs.org/postcss-combine-duplicated-selectors@10.0.3(postcss@8.4.24): resolution: {integrity: sha512-IP0BmwFloCskv7DV7xqvzDXqMHpwdczJa6ZvIW8abgHdcIHs9mCJX2ltFhu3EwA51ozp13DByng30+Ke+eIExA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-combine-duplicated-selectors/-/postcss-combine-duplicated-selectors-10.0.3.tgz} id: registry.npmjs.org/postcss-combine-duplicated-selectors/10.0.3 name: postcss-combine-duplicated-selectors @@ -6080,11 +6664,11 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-selector-parser: registry.npmjs.org/postcss-selector-parser/6.0.13 + postcss: registry.npmjs.org/postcss@8.4.24 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.13 dev: true - registry.npmjs.org/postcss-import/15.1.0_postcss@8.4.24: + registry.npmjs.org/postcss-import@15.1.0(postcss@8.4.24): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz} id: registry.npmjs.org/postcss-import/15.1.0 name: postcss-import @@ -6093,13 +6677,13 @@ packages: peerDependencies: postcss: ^8.0.0 dependencies: - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-value-parser: registry.npmjs.org/postcss-value-parser/4.2.0 - read-cache: registry.npmjs.org/read-cache/1.0.0 - resolve: registry.npmjs.org/resolve/1.22.2 + postcss: registry.npmjs.org/postcss@8.4.24 + postcss-value-parser: registry.npmjs.org/postcss-value-parser@4.2.0 + read-cache: registry.npmjs.org/read-cache@1.0.0 + resolve: registry.npmjs.org/resolve@1.22.2 dev: true - registry.npmjs.org/postcss-load-config/3.1.4_postcss@8.4.24: + registry.npmjs.org/postcss-load-config@3.1.4(postcss@8.4.24): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz} id: registry.npmjs.org/postcss-load-config/3.1.4 name: postcss-load-config @@ -6114,12 +6698,12 @@ packages: ts-node: optional: true dependencies: - lilconfig: registry.npmjs.org/lilconfig/2.1.0 - postcss: registry.npmjs.org/postcss/8.4.24 - yaml: registry.npmjs.org/yaml/1.10.2 + lilconfig: registry.npmjs.org/lilconfig@2.1.0 + postcss: registry.npmjs.org/postcss@8.4.24 + yaml: registry.npmjs.org/yaml@1.10.2 dev: true - registry.npmjs.org/postcss-load-config/4.0.1_postcss@8.4.24: + registry.npmjs.org/postcss-load-config@4.0.1(postcss@8.4.24): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz} id: registry.npmjs.org/postcss-load-config/4.0.1 name: postcss-load-config @@ -6134,12 +6718,12 @@ packages: ts-node: optional: true dependencies: - lilconfig: registry.npmjs.org/lilconfig/2.1.0 - postcss: registry.npmjs.org/postcss/8.4.24 - yaml: registry.npmjs.org/yaml/2.3.1 + lilconfig: registry.npmjs.org/lilconfig@2.1.0 + postcss: registry.npmjs.org/postcss@8.4.24 + yaml: registry.npmjs.org/yaml@2.3.1 dev: true - registry.npmjs.org/postcss-nested/6.0.1_postcss@8.4.24: + registry.npmjs.org/postcss-nested@6.0.1(postcss@8.4.24): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz} id: registry.npmjs.org/postcss-nested/6.0.1 name: postcss-nested @@ -6148,11 +6732,11 @@ packages: peerDependencies: postcss: ^8.2.14 dependencies: - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-selector-parser: registry.npmjs.org/postcss-selector-parser/6.0.13 + postcss: registry.npmjs.org/postcss@8.4.24 + postcss-selector-parser: registry.npmjs.org/postcss-selector-parser@6.0.13 dev: true - registry.npmjs.org/postcss-reporter/7.0.5_postcss@8.4.24: + registry.npmjs.org/postcss-reporter@7.0.5(postcss@8.4.24): resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz} id: registry.npmjs.org/postcss-reporter/7.0.5 name: postcss-reporter @@ -6161,12 +6745,12 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - picocolors: registry.npmjs.org/picocolors/1.0.0 - postcss: registry.npmjs.org/postcss/8.4.24 - thenby: registry.npmjs.org/thenby/1.3.4 + picocolors: registry.npmjs.org/picocolors@1.0.0 + postcss: registry.npmjs.org/postcss@8.4.24 + thenby: registry.npmjs.org/thenby@1.3.4 dev: true - registry.npmjs.org/postcss-safe-parser/6.0.0_postcss@8.4.24: + registry.npmjs.org/postcss-safe-parser@6.0.0(postcss@8.4.24): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz} id: registry.npmjs.org/postcss-safe-parser/6.0.0 name: postcss-safe-parser @@ -6175,10 +6759,10 @@ packages: peerDependencies: postcss: ^8.3.3 dependencies: - postcss: registry.npmjs.org/postcss/8.4.24 + postcss: registry.npmjs.org/postcss@8.4.24 dev: true - registry.npmjs.org/postcss-scss/4.0.6_postcss@8.4.24: + registry.npmjs.org/postcss-scss@4.0.6(postcss@8.4.24): resolution: {integrity: sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz} id: registry.npmjs.org/postcss-scss/4.0.6 name: postcss-scss @@ -6187,65 +6771,76 @@ packages: peerDependencies: postcss: ^8.4.19 dependencies: - postcss: registry.npmjs.org/postcss/8.4.24 + postcss: registry.npmjs.org/postcss@8.4.24 dev: true - registry.npmjs.org/postcss-selector-parser/6.0.13: + registry.npmjs.org/postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz} name: postcss-selector-parser version: 6.0.13 engines: {node: '>=4'} dependencies: - cssesc: registry.npmjs.org/cssesc/3.0.0 - util-deprecate: registry.npmjs.org/util-deprecate/1.0.2 + cssesc: registry.npmjs.org/cssesc@3.0.0 + util-deprecate: registry.npmjs.org/util-deprecate@1.0.2 dev: true - registry.npmjs.org/postcss-value-parser/4.2.0: + registry.npmjs.org/postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} name: postcss-value-parser version: 4.2.0 dev: true - registry.npmjs.org/postcss/8.4.24: + registry.npmjs.org/postcss@8.4.24: resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz} name: postcss version: 8.4.24 engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: registry.npmjs.org/nanoid/3.3.6 - picocolors: registry.npmjs.org/picocolors/1.0.0 - source-map-js: registry.npmjs.org/source-map-js/1.0.2 + nanoid: registry.npmjs.org/nanoid@3.3.6 + picocolors: registry.npmjs.org/picocolors@1.0.0 + source-map-js: registry.npmjs.org/source-map-js@1.0.2 + dev: true + + registry.npmjs.org/postcss@8.4.27: + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz} + name: postcss + version: 8.4.27 + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: registry.npmjs.org/nanoid@3.3.6 + picocolors: registry.npmjs.org/picocolors@1.0.0 + source-map-js: registry.npmjs.org/source-map-js@1.0.2 dev: true - registry.npmjs.org/preferred-pm/3.0.3: + registry.npmjs.org/preferred-pm@3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz} name: preferred-pm version: 3.0.3 engines: {node: '>=10'} dependencies: - find-up: registry.npmjs.org/find-up/5.0.0 - find-yarn-workspace-root2: registry.npmjs.org/find-yarn-workspace-root2/1.2.16 - path-exists: registry.npmjs.org/path-exists/4.0.0 - which-pm: registry.npmjs.org/which-pm/2.0.0 + find-up: registry.npmjs.org/find-up@5.0.0 + find-yarn-workspace-root2: registry.npmjs.org/find-yarn-workspace-root2@1.2.16 + path-exists: registry.npmjs.org/path-exists@4.0.0 + which-pm: registry.npmjs.org/which-pm@2.0.0 dev: true - registry.npmjs.org/prelude-ls/1.2.1: + registry.npmjs.org/prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz} name: prelude-ls version: 1.2.1 engines: {node: '>= 0.8.0'} dev: true - registry.npmjs.org/prettier-linter-helpers/1.0.0: + registry.npmjs.org/prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz} name: prettier-linter-helpers version: 1.0.0 engines: {node: '>=6.0.0'} dependencies: - fast-diff: registry.npmjs.org/fast-diff/1.3.0 + fast-diff: registry.npmjs.org/fast-diff@1.3.0 dev: true - registry.npmjs.org/prettier-plugin-svelte/2.10.1_qjnzte5rqd6zd6el5wewwu2zei: + registry.npmjs.org/prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.0.0): resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz} id: registry.npmjs.org/prettier-plugin-svelte/2.10.1 name: prettier-plugin-svelte @@ -6254,11 +6849,11 @@ packages: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 dependencies: - prettier: registry.npmjs.org/prettier/2.8.8 - svelte: registry.npmjs.org/svelte/4.0.0 + prettier: registry.npmjs.org/prettier@2.8.8 + svelte: registry.npmjs.org/svelte@4.0.0 dev: true - registry.npmjs.org/prettier/2.8.8: + 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 version: 2.8.8 @@ -6266,105 +6861,119 @@ packages: hasBin: true dev: true - registry.npmjs.org/pretty-bytes/5.6.0: + registry.npmjs.org/prettier@3.0.1: + resolution: {integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz} + name: prettier + version: 3.0.1 + engines: {node: '>=14'} + hasBin: true + dev: true + + registry.npmjs.org/pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz} name: pretty-bytes version: 5.6.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/pretty-hrtime/1.0.3: + registry.npmjs.org/pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz} name: pretty-hrtime version: 1.0.3 engines: {node: '>= 0.8'} dev: true - registry.npmjs.org/prop-types/15.8.1: + registry.npmjs.org/prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz} name: prop-types version: 15.8.1 dependencies: - loose-envify: registry.npmjs.org/loose-envify/1.4.0 - object-assign: registry.npmjs.org/object-assign/4.1.1 - react-is: registry.npmjs.org/react-is/16.13.1 + loose-envify: registry.npmjs.org/loose-envify@1.4.0 + object-assign: registry.npmjs.org/object-assign@4.1.1 + react-is: registry.npmjs.org/react-is@16.13.1 dev: true - registry.npmjs.org/proxy-from-env/1.0.0: + registry.npmjs.org/proxy-from-env@1.0.0: resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz} name: proxy-from-env version: 1.0.0 dev: true - registry.npmjs.org/ps-tree/1.2.0: + registry.npmjs.org/ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz} name: ps-tree version: 1.2.0 engines: {node: '>= 0.10'} hasBin: true dependencies: - event-stream: registry.npmjs.org/event-stream/3.3.4 + event-stream: registry.npmjs.org/event-stream@3.3.4 dev: true - registry.npmjs.org/pseudomap/1.0.2: + registry.npmjs.org/pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz} name: pseudomap version: 1.0.2 dev: true - registry.npmjs.org/psl/1.9.0: + registry.npmjs.org/psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/psl/-/psl-1.9.0.tgz} name: psl version: 1.9.0 dev: true - registry.npmjs.org/pump/3.0.0: + registry.npmjs.org/pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/pump/-/pump-3.0.0.tgz} name: pump version: 3.0.0 dependencies: - end-of-stream: registry.npmjs.org/end-of-stream/1.4.4 - once: registry.npmjs.org/once/1.4.0 + end-of-stream: registry.npmjs.org/end-of-stream@1.4.4 + once: registry.npmjs.org/once@1.4.0 dev: true - registry.npmjs.org/punycode/2.3.0: + registry.npmjs.org/punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz} name: punycode version: 2.3.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/qs/6.10.4: + 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 version: 6.10.4 engines: {node: '>=0.6'} dependencies: - side-channel: registry.npmjs.org/side-channel/1.0.4 + side-channel: registry.npmjs.org/side-channel@1.0.4 dev: true - registry.npmjs.org/queue-microtask/1.2.3: + registry.npmjs.org/querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz} + name: querystringify + version: 2.2.0 + dev: true + + registry.npmjs.org/queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz} name: queue-microtask version: 1.2.3 dev: true - registry.npmjs.org/quick-lru/4.0.1: + registry.npmjs.org/quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz} name: quick-lru version: 4.0.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/randombytes/2.1.0: + registry.npmjs.org/randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz} name: randombytes version: 2.1.0 dependencies: - safe-buffer: registry.npmjs.org/safe-buffer/5.2.1 + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 dev: true - registry.npmjs.org/react-dom/18.2.0_react@18.2.0: + registry.npmjs.org/react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz} id: registry.npmjs.org/react-dom/18.2.0 name: react-dom @@ -6372,24 +6981,24 @@ packages: peerDependencies: react: ^18.2.0 dependencies: - loose-envify: registry.npmjs.org/loose-envify/1.4.0 - react: registry.npmjs.org/react/18.2.0 - scheduler: registry.npmjs.org/scheduler/0.23.0 + loose-envify: registry.npmjs.org/loose-envify@1.4.0 + react: registry.npmjs.org/react@18.2.0 + scheduler: registry.npmjs.org/scheduler@0.23.0 - registry.npmjs.org/react-is/16.13.1: + registry.npmjs.org/react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz} name: react-is version: 16.13.1 dev: true - registry.npmjs.org/react-refresh/0.14.0: + registry.npmjs.org/react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz} name: react-refresh version: 0.14.0 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/react-router-dom/6.12.1_biqbaboplfbrettd7655fr4n2y: + registry.npmjs.org/react-router-dom@6.12.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-POIZN9UDKWwEDga054LvYr2KnK8V+0HR4Ny4Bwv8V7/FZCPxJgsCjYxXGxqxzHs7VBxMKZfgvtKhafuJkJSPGA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.12.1.tgz} id: registry.npmjs.org/react-router-dom/6.12.1 name: react-router-dom @@ -6399,13 +7008,13 @@ packages: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': registry.npmjs.org/@remix-run/router/1.6.3 - 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.12.1_react@18.2.0 + '@remix-run/router': registry.npmjs.org/@remix-run/router@1.6.3 + 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.12.1(react@18.2.0) dev: false - registry.npmjs.org/react-router/6.12.1_react@18.2.0: + registry.npmjs.org/react-router@6.12.1(react@18.2.0): resolution: {integrity: sha512-evd/GrKJOeOypD0JB9e1r7pQh2gWCsTbUfq059Wm1AFT/K2MNZuDo19lFtAgIhlBrp0MmpgpqtvZC7LPAs7vSw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react-router/-/react-router-6.12.1.tgz} id: registry.npmjs.org/react-router/6.12.1 name: react-router @@ -6414,196 +7023,202 @@ packages: peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': registry.npmjs.org/@remix-run/router/1.6.3 - react: registry.npmjs.org/react/18.2.0 + '@remix-run/router': registry.npmjs.org/@remix-run/router@1.6.3 + react: registry.npmjs.org/react@18.2.0 dev: false - registry.npmjs.org/react/18.2.0: + registry.npmjs.org/react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/react/-/react-18.2.0.tgz} name: react version: 18.2.0 engines: {node: '>=0.10.0'} dependencies: - loose-envify: registry.npmjs.org/loose-envify/1.4.0 + loose-envify: registry.npmjs.org/loose-envify@1.4.0 - registry.npmjs.org/read-cache/1.0.0: + registry.npmjs.org/read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz} name: read-cache version: 1.0.0 dependencies: - pify: registry.npmjs.org/pify/2.3.0 + pify: registry.npmjs.org/pify@2.3.0 dev: true - registry.npmjs.org/read-pkg-up/7.0.1: + registry.npmjs.org/read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz} name: read-pkg-up version: 7.0.1 engines: {node: '>=8'} dependencies: - find-up: registry.npmjs.org/find-up/4.1.0 - read-pkg: registry.npmjs.org/read-pkg/5.2.0 - type-fest: registry.npmjs.org/type-fest/0.8.1 + find-up: registry.npmjs.org/find-up@4.1.0 + read-pkg: registry.npmjs.org/read-pkg@5.2.0 + type-fest: registry.npmjs.org/type-fest@0.8.1 dev: true - registry.npmjs.org/read-pkg/5.2.0: + registry.npmjs.org/read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz} name: read-pkg version: 5.2.0 engines: {node: '>=8'} dependencies: - '@types/normalize-package-data': registry.npmjs.org/@types/normalize-package-data/2.4.1 - normalize-package-data: registry.npmjs.org/normalize-package-data/2.5.0 - parse-json: registry.npmjs.org/parse-json/5.2.0 - type-fest: registry.npmjs.org/type-fest/0.6.0 + '@types/normalize-package-data': registry.npmjs.org/@types/normalize-package-data@2.4.1 + normalize-package-data: registry.npmjs.org/normalize-package-data@2.5.0 + parse-json: registry.npmjs.org/parse-json@5.2.0 + type-fest: registry.npmjs.org/type-fest@0.6.0 dev: true - registry.npmjs.org/read-yaml-file/1.1.0: + registry.npmjs.org/read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz} name: read-yaml-file version: 1.1.0 engines: {node: '>=6'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 - js-yaml: registry.npmjs.org/js-yaml/3.14.1 - pify: registry.npmjs.org/pify/4.0.1 - strip-bom: registry.npmjs.org/strip-bom/3.0.0 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + js-yaml: registry.npmjs.org/js-yaml@3.14.1 + pify: registry.npmjs.org/pify@4.0.1 + strip-bom: registry.npmjs.org/strip-bom@3.0.0 dev: true - registry.npmjs.org/readdirp/3.6.0: + registry.npmjs.org/readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz} name: readdirp version: 3.6.0 engines: {node: '>=8.10.0'} dependencies: - picomatch: registry.npmjs.org/picomatch/2.3.1 + picomatch: registry.npmjs.org/picomatch@2.3.1 dev: true - registry.npmjs.org/redent/3.0.0: + registry.npmjs.org/redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/redent/-/redent-3.0.0.tgz} name: redent version: 3.0.0 engines: {node: '>=8'} dependencies: - indent-string: registry.npmjs.org/indent-string/4.0.0 - strip-indent: registry.npmjs.org/strip-indent/3.0.0 + indent-string: registry.npmjs.org/indent-string@4.0.0 + strip-indent: registry.npmjs.org/strip-indent@3.0.0 dev: true - registry.npmjs.org/regenerator-runtime/0.13.11: + registry.npmjs.org/regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} name: regenerator-runtime version: 0.13.11 dev: true - registry.npmjs.org/regexp.prototype.flags/1.5.0: + registry.npmjs.org/regexp.prototype.flags@1.5.0: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz} name: regexp.prototype.flags version: 1.5.0 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - functions-have-names: registry.npmjs.org/functions-have-names/1.2.3 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + functions-have-names: registry.npmjs.org/functions-have-names@1.2.3 dev: true - registry.npmjs.org/request-progress/3.0.0: + registry.npmjs.org/request-progress@3.0.0: resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz} name: request-progress version: 3.0.0 dependencies: - throttleit: registry.npmjs.org/throttleit/1.0.0 + throttleit: registry.npmjs.org/throttleit@1.0.0 dev: true - registry.npmjs.org/require-directory/2.1.1: + registry.npmjs.org/require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz} name: require-directory version: 2.1.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/require-main-filename/2.0.0: + registry.npmjs.org/require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz} name: require-main-filename version: 2.0.0 dev: true - registry.npmjs.org/resolve-from/4.0.0: + registry.npmjs.org/requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz} + name: requires-port + version: 1.0.0 + dev: true + + registry.npmjs.org/resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz} name: resolve-from version: 4.0.0 engines: {node: '>=4'} dev: true - registry.npmjs.org/resolve-from/5.0.0: + registry.npmjs.org/resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz} name: resolve-from version: 5.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/resolve/1.22.2: + registry.npmjs.org/resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz} name: resolve version: 1.22.2 hasBin: true dependencies: - is-core-module: registry.npmjs.org/is-core-module/2.12.1 - path-parse: registry.npmjs.org/path-parse/1.0.7 - supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag/1.0.0 + is-core-module: registry.npmjs.org/is-core-module@2.12.1 + path-parse: registry.npmjs.org/path-parse@1.0.7 + supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag@1.0.0 dev: true - registry.npmjs.org/resolve/2.0.0-next.4: + registry.npmjs.org/resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz} name: resolve version: 2.0.0-next.4 hasBin: true dependencies: - is-core-module: registry.npmjs.org/is-core-module/2.12.1 - path-parse: registry.npmjs.org/path-parse/1.0.7 - supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag/1.0.0 + is-core-module: registry.npmjs.org/is-core-module@2.13.0 + path-parse: registry.npmjs.org/path-parse@1.0.7 + supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag@1.0.0 dev: true - registry.npmjs.org/restore-cursor/3.1.0: + registry.npmjs.org/restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz} name: restore-cursor version: 3.1.0 engines: {node: '>=8'} dependencies: - onetime: registry.npmjs.org/onetime/5.1.2 - signal-exit: registry.npmjs.org/signal-exit/3.0.7 + onetime: registry.npmjs.org/onetime@5.1.2 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 dev: true - registry.npmjs.org/reusify/1.0.4: + registry.npmjs.org/reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz} name: reusify version: 1.0.4 engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - registry.npmjs.org/rfdc/1.3.0: + registry.npmjs.org/rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz} name: rfdc version: 1.3.0 dev: true - registry.npmjs.org/rimraf/2.7.1: + registry.npmjs.org/rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz} name: rimraf version: 2.7.1 hasBin: true dependencies: - glob: registry.npmjs.org/glob/7.2.3 + glob: registry.npmjs.org/glob@7.2.3 dev: true - registry.npmjs.org/rimraf/3.0.2: + registry.npmjs.org/rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz} name: rimraf version: 3.0.2 hasBin: true dependencies: - glob: registry.npmjs.org/glob/7.2.3 + glob: registry.npmjs.org/glob@7.2.3 dev: true - registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4_rollup@3.25.1: + registry.npmjs.org/rollup-plugin-peer-deps-external@2.2.4(rollup@3.25.1): resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz} id: registry.npmjs.org/rollup-plugin-peer-deps-external/2.2.4 name: rollup-plugin-peer-deps-external @@ -6611,552 +7226,584 @@ packages: peerDependencies: rollup: '*' dependencies: - rollup: registry.npmjs.org/rollup/3.25.1 + rollup: registry.npmjs.org/rollup@3.25.1 dev: true - registry.npmjs.org/rollup/3.25.1: + registry.npmjs.org/rollup@3.25.1: resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz} name: rollup version: 3.25.1 engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + fsevents: registry.npmjs.org/fsevents@2.3.2 + dev: true + + registry.npmjs.org/rollup@3.28.0: + resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz} + name: rollup + version: 3.28.0 + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: registry.npmjs.org/fsevents@2.3.2 dev: true - registry.npmjs.org/run-parallel/1.2.0: + registry.npmjs.org/run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz} name: run-parallel version: 1.2.0 dependencies: - queue-microtask: registry.npmjs.org/queue-microtask/1.2.3 + queue-microtask: registry.npmjs.org/queue-microtask@1.2.3 dev: true - registry.npmjs.org/rxjs/7.8.1: + registry.npmjs.org/rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz} name: rxjs version: 7.8.1 dependencies: - tslib: registry.npmjs.org/tslib/2.5.3 + tslib: registry.npmjs.org/tslib@2.5.3 dev: true - registry.npmjs.org/sade/1.8.1: + registry.npmjs.org/sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sade/-/sade-1.8.1.tgz} name: sade version: 1.8.1 engines: {node: '>=6'} dependencies: - mri: registry.npmjs.org/mri/1.2.0 + mri: registry.npmjs.org/mri@1.2.0 dev: true - registry.npmjs.org/safe-buffer/5.2.1: + registry.npmjs.org/safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz} + name: safe-array-concat + version: 1.0.0 + engines: {node: '>=0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + isarray: registry.npmjs.org/isarray@2.0.5 + dev: true + + registry.npmjs.org/safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} name: safe-buffer version: 5.2.1 dev: true - registry.npmjs.org/safe-regex-test/1.0.0: + registry.npmjs.org/safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz} name: safe-regex-test version: 1.0.0 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - is-regex: registry.npmjs.org/is-regex/1.1.4 + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + is-regex: registry.npmjs.org/is-regex@1.1.4 dev: true - registry.npmjs.org/safer-buffer/2.1.2: + registry.npmjs.org/safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz} name: safer-buffer version: 2.1.2 dev: true - registry.npmjs.org/sander/0.5.1: + registry.npmjs.org/sander@0.5.1: resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sander/-/sander-0.5.1.tgz} name: sander version: 0.5.1 dependencies: - es6-promise: registry.npmjs.org/es6-promise/3.3.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.11 - mkdirp: registry.npmjs.org/mkdirp/0.5.6 - rimraf: registry.npmjs.org/rimraf/2.7.1 + es6-promise: registry.npmjs.org/es6-promise@3.3.1 + graceful-fs: registry.npmjs.org/graceful-fs@4.2.11 + mkdirp: registry.npmjs.org/mkdirp@0.5.6 + rimraf: registry.npmjs.org/rimraf@2.7.1 dev: true - registry.npmjs.org/scheduler/0.23.0: + registry.npmjs.org/scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz} name: scheduler version: 0.23.0 dependencies: - loose-envify: registry.npmjs.org/loose-envify/1.4.0 + loose-envify: registry.npmjs.org/loose-envify@1.4.0 - registry.npmjs.org/semver/5.7.1: + registry.npmjs.org/semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-5.7.1.tgz} name: semver version: 5.7.1 hasBin: true dev: true - registry.npmjs.org/semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-6.3.0.tgz} + registry.npmjs.org/semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-6.3.1.tgz} name: semver - version: 6.3.0 + version: 6.3.1 hasBin: true dev: true - registry.npmjs.org/semver/7.5.1: + registry.npmjs.org/semver@7.5.1: resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-7.5.1.tgz} name: semver version: 7.5.1 engines: {node: '>=10'} hasBin: true dependencies: - lru-cache: registry.npmjs.org/lru-cache/6.0.0 + lru-cache: registry.npmjs.org/lru-cache@6.0.0 dev: true - registry.npmjs.org/semver/7.5.3: + registry.npmjs.org/semver@7.5.3: resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-7.5.3.tgz} name: semver version: 7.5.3 engines: {node: '>=10'} hasBin: true dependencies: - lru-cache: registry.npmjs.org/lru-cache/6.0.0 + lru-cache: registry.npmjs.org/lru-cache@6.0.0 + dev: true + + registry.npmjs.org/semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/semver/-/semver-7.5.4.tgz} + name: semver + version: 7.5.4 + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: registry.npmjs.org/lru-cache@6.0.0 dev: true - registry.npmjs.org/serialize-javascript/6.0.1: + registry.npmjs.org/serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz} name: serialize-javascript version: 6.0.1 dependencies: - randombytes: registry.npmjs.org/randombytes/2.1.0 + randombytes: registry.npmjs.org/randombytes@2.1.0 dev: true - registry.npmjs.org/set-blocking/2.0.0: + registry.npmjs.org/set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz} name: set-blocking version: 2.0.0 dev: true - registry.npmjs.org/set-cookie-parser/2.6.0: + registry.npmjs.org/set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz} name: set-cookie-parser version: 2.6.0 dev: true - registry.npmjs.org/shebang-command/1.2.0: + registry.npmjs.org/shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz} name: shebang-command version: 1.2.0 engines: {node: '>=0.10.0'} dependencies: - shebang-regex: registry.npmjs.org/shebang-regex/1.0.0 + shebang-regex: registry.npmjs.org/shebang-regex@1.0.0 dev: true - registry.npmjs.org/shebang-command/2.0.0: + registry.npmjs.org/shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz} name: shebang-command version: 2.0.0 engines: {node: '>=8'} dependencies: - shebang-regex: registry.npmjs.org/shebang-regex/3.0.0 + shebang-regex: registry.npmjs.org/shebang-regex@3.0.0 dev: true - registry.npmjs.org/shebang-regex/1.0.0: + registry.npmjs.org/shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz} name: shebang-regex version: 1.0.0 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/shebang-regex/3.0.0: + registry.npmjs.org/shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz} name: shebang-regex version: 3.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/shell-quote/1.8.1: + registry.npmjs.org/shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz} name: shell-quote version: 1.8.1 dev: true - registry.npmjs.org/side-channel/1.0.4: + registry.npmjs.org/side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz} name: side-channel version: 1.0.4 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - object-inspect: registry.npmjs.org/object-inspect/1.12.3 + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + object-inspect: registry.npmjs.org/object-inspect@1.12.3 dev: true - registry.npmjs.org/signal-exit/3.0.7: + registry.npmjs.org/signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz} name: signal-exit version: 3.0.7 dev: true - registry.npmjs.org/sirv/2.0.3: + registry.npmjs.org/sirv@2.0.3: resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz} name: sirv version: 2.0.3 engines: {node: '>= 10'} dependencies: - '@polka/url': registry.npmjs.org/@polka/url/1.0.0-next.21 - mrmime: registry.npmjs.org/mrmime/1.0.1 - totalist: registry.npmjs.org/totalist/3.0.1 + '@polka/url': registry.npmjs.org/@polka/url@1.0.0-next.21 + mrmime: registry.npmjs.org/mrmime@1.0.1 + totalist: registry.npmjs.org/totalist@3.0.1 dev: true - registry.npmjs.org/slash/3.0.0: + registry.npmjs.org/slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slash/-/slash-3.0.0.tgz} name: slash version: 3.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/slash/4.0.0: + registry.npmjs.org/slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slash/-/slash-4.0.0.tgz} name: slash version: 4.0.0 engines: {node: '>=12'} dev: true - registry.npmjs.org/slash/5.1.0: + registry.npmjs.org/slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slash/-/slash-5.1.0.tgz} name: slash version: 5.1.0 engines: {node: '>=14.16'} dev: true - registry.npmjs.org/slice-ansi/3.0.0: + registry.npmjs.org/slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz} name: slice-ansi version: 3.0.0 engines: {node: '>=8'} dependencies: - ansi-styles: registry.npmjs.org/ansi-styles/4.3.0 - astral-regex: registry.npmjs.org/astral-regex/2.0.0 - is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point/3.0.0 + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + astral-regex: registry.npmjs.org/astral-regex@2.0.0 + is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point@3.0.0 dev: true - registry.npmjs.org/slice-ansi/4.0.0: + registry.npmjs.org/slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz} name: slice-ansi version: 4.0.0 engines: {node: '>=10'} dependencies: - ansi-styles: registry.npmjs.org/ansi-styles/4.3.0 - astral-regex: registry.npmjs.org/astral-regex/2.0.0 - is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point/3.0.0 + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + astral-regex: registry.npmjs.org/astral-regex@2.0.0 + is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point@3.0.0 dev: true - registry.npmjs.org/smartwrap/2.0.2: + registry.npmjs.org/smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/smartwrap/-/smartwrap-2.0.2.tgz} name: smartwrap version: 2.0.2 engines: {node: '>=6'} hasBin: true dependencies: - array.prototype.flat: registry.npmjs.org/array.prototype.flat/1.3.1 - breakword: registry.npmjs.org/breakword/1.0.6 - grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - wcwidth: registry.npmjs.org/wcwidth/1.0.1 - yargs: registry.npmjs.org/yargs/15.4.1 + array.prototype.flat: registry.npmjs.org/array.prototype.flat@1.3.1 + breakword: registry.npmjs.org/breakword@1.0.6 + grapheme-splitter: registry.npmjs.org/grapheme-splitter@1.0.4 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + wcwidth: registry.npmjs.org/wcwidth@1.0.1 + yargs: registry.npmjs.org/yargs@15.4.1 dev: true - registry.npmjs.org/smob/1.4.0: + registry.npmjs.org/smob@1.4.0: resolution: {integrity: sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/smob/-/smob-1.4.0.tgz} name: smob version: 1.4.0 dev: true - registry.npmjs.org/sorcery/0.11.0: + registry.npmjs.org/sorcery@0.11.0: resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz} name: sorcery version: 0.11.0 hasBin: true dependencies: - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.15 - buffer-crc32: registry.npmjs.org/buffer-crc32/0.2.13 - minimist: registry.npmjs.org/minimist/1.2.8 - sander: registry.npmjs.org/sander/0.5.1 + '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec@1.4.15 + buffer-crc32: registry.npmjs.org/buffer-crc32@0.2.13 + minimist: registry.npmjs.org/minimist@1.2.8 + sander: registry.npmjs.org/sander@0.5.1 dev: true - registry.npmjs.org/source-map-js/1.0.2: + registry.npmjs.org/source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz} name: source-map-js version: 1.0.2 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/source-map-support/0.5.21: + registry.npmjs.org/source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz} name: source-map-support version: 0.5.21 dependencies: - buffer-from: registry.npmjs.org/buffer-from/1.1.2 - source-map: registry.npmjs.org/source-map/0.6.1 + buffer-from: registry.npmjs.org/buffer-from@1.1.2 + source-map: registry.npmjs.org/source-map@0.6.1 dev: true - registry.npmjs.org/source-map/0.6.1: + registry.npmjs.org/source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz} name: source-map version: 0.6.1 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/spawn-command/0.0.2-1: + registry.npmjs.org/spawn-command@0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz} name: spawn-command version: 0.0.2-1 dev: true - registry.npmjs.org/spawndamnit/2.0.0: + registry.npmjs.org/spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz} name: spawndamnit version: 2.0.0 dependencies: - cross-spawn: registry.npmjs.org/cross-spawn/5.1.0 - signal-exit: registry.npmjs.org/signal-exit/3.0.7 + cross-spawn: registry.npmjs.org/cross-spawn@5.1.0 + signal-exit: registry.npmjs.org/signal-exit@3.0.7 dev: true - registry.npmjs.org/spdx-correct/3.2.0: + registry.npmjs.org/spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz} name: spdx-correct version: 3.2.0 dependencies: - spdx-expression-parse: registry.npmjs.org/spdx-expression-parse/3.0.1 - spdx-license-ids: registry.npmjs.org/spdx-license-ids/3.0.13 + spdx-expression-parse: registry.npmjs.org/spdx-expression-parse@3.0.1 + spdx-license-ids: registry.npmjs.org/spdx-license-ids@3.0.13 dev: true - registry.npmjs.org/spdx-exceptions/2.3.0: + registry.npmjs.org/spdx-exceptions@2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz} name: spdx-exceptions version: 2.3.0 dev: true - registry.npmjs.org/spdx-expression-parse/3.0.1: + registry.npmjs.org/spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz} name: spdx-expression-parse version: 3.0.1 dependencies: - spdx-exceptions: registry.npmjs.org/spdx-exceptions/2.3.0 - spdx-license-ids: registry.npmjs.org/spdx-license-ids/3.0.13 + spdx-exceptions: registry.npmjs.org/spdx-exceptions@2.3.0 + spdx-license-ids: registry.npmjs.org/spdx-license-ids@3.0.13 dev: true - registry.npmjs.org/spdx-license-ids/3.0.13: + registry.npmjs.org/spdx-license-ids@3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz} name: spdx-license-ids version: 3.0.13 dev: true - registry.npmjs.org/split/0.3.3: + registry.npmjs.org/split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/split/-/split-0.3.3.tgz} name: split version: 0.3.3 dependencies: - through: registry.npmjs.org/through/2.3.8 + through: registry.npmjs.org/through@2.3.8 dev: true - registry.npmjs.org/sprintf-js/1.0.3: + registry.npmjs.org/sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz} name: sprintf-js version: 1.0.3 dev: true - registry.npmjs.org/sshpk/1.17.0: + registry.npmjs.org/sshpk@1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz} name: sshpk version: 1.17.0 engines: {node: '>=0.10.0'} hasBin: true dependencies: - asn1: registry.npmjs.org/asn1/0.2.6 - assert-plus: registry.npmjs.org/assert-plus/1.0.0 - bcrypt-pbkdf: registry.npmjs.org/bcrypt-pbkdf/1.0.2 - dashdash: registry.npmjs.org/dashdash/1.14.1 - ecc-jsbn: registry.npmjs.org/ecc-jsbn/0.1.2 - getpass: registry.npmjs.org/getpass/0.1.7 - jsbn: registry.npmjs.org/jsbn/0.1.1 - safer-buffer: registry.npmjs.org/safer-buffer/2.1.2 - tweetnacl: registry.npmjs.org/tweetnacl/0.14.5 + asn1: registry.npmjs.org/asn1@0.2.6 + assert-plus: registry.npmjs.org/assert-plus@1.0.0 + bcrypt-pbkdf: registry.npmjs.org/bcrypt-pbkdf@1.0.2 + dashdash: registry.npmjs.org/dashdash@1.14.1 + ecc-jsbn: registry.npmjs.org/ecc-jsbn@0.1.2 + getpass: registry.npmjs.org/getpass@0.1.7 + jsbn: registry.npmjs.org/jsbn@0.1.1 + safer-buffer: registry.npmjs.org/safer-buffer@2.1.2 + tweetnacl: registry.npmjs.org/tweetnacl@0.14.5 dev: true - registry.npmjs.org/start-server-and-test/1.15.4: + registry.npmjs.org/start-server-and-test@1.15.4: resolution: {integrity: sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.15.4.tgz} name: start-server-and-test version: 1.15.4 engines: {node: '>=6'} 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.4 - 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/7.0.1_debug@4.3.4 + 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.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@7.0.1(debug@4.3.4) transitivePeerDependencies: - supports-color dev: true - registry.npmjs.org/stream-combiner/0.0.4: + registry.npmjs.org/stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz} name: stream-combiner version: 0.0.4 dependencies: - duplexer: registry.npmjs.org/duplexer/0.1.2 + duplexer: registry.npmjs.org/duplexer@0.1.2 dev: true - registry.npmjs.org/stream-transform/2.1.3: + registry.npmjs.org/stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz} name: stream-transform version: 2.1.3 dependencies: - mixme: registry.npmjs.org/mixme/0.5.9 + mixme: registry.npmjs.org/mixme@0.5.9 dev: true - registry.npmjs.org/streamsearch/1.1.0: + registry.npmjs.org/streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz} name: streamsearch version: 1.1.0 engines: {node: '>=10.0.0'} dev: true - registry.npmjs.org/string-width/4.2.3: + registry.npmjs.org/string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz} name: string-width version: 4.2.3 engines: {node: '>=8'} dependencies: - emoji-regex: registry.npmjs.org/emoji-regex/8.0.0 - is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point/3.0.0 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 + emoji-regex: registry.npmjs.org/emoji-regex@8.0.0 + is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point@3.0.0 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 dev: true - registry.npmjs.org/string.prototype.matchall/4.0.8: + registry.npmjs.org/string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz} name: string.prototype.matchall version: 4.0.8 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.1 - has-symbols: registry.npmjs.org/has-symbols/1.0.3 - internal-slot: registry.npmjs.org/internal-slot/1.0.5 - regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags/1.5.0 - side-channel: registry.npmjs.org/side-channel/1.0.4 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + internal-slot: registry.npmjs.org/internal-slot@1.0.5 + regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags@1.5.0 + side-channel: registry.npmjs.org/side-channel@1.0.4 dev: true - registry.npmjs.org/string.prototype.trim/1.2.7: + registry.npmjs.org/string.prototype.trim@1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz} name: string.prototype.trim version: 1.2.7 engines: {node: '>= 0.4'} dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.21.2 dev: true - registry.npmjs.org/string.prototype.trimend/1.0.6: + registry.npmjs.org/string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz} name: string.prototype.trimend version: 1.0.6 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.21.2 dev: true - registry.npmjs.org/string.prototype.trimstart/1.0.6: + registry.npmjs.org/string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz} name: string.prototype.trimstart version: 1.0.6 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - define-properties: registry.npmjs.org/define-properties/1.2.0 - es-abstract: registry.npmjs.org/es-abstract/1.21.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.21.2 dev: true - registry.npmjs.org/strip-ansi/6.0.1: + registry.npmjs.org/strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz} name: strip-ansi version: 6.0.1 engines: {node: '>=8'} dependencies: - ansi-regex: registry.npmjs.org/ansi-regex/5.0.1 + ansi-regex: registry.npmjs.org/ansi-regex@5.0.1 dev: true - registry.npmjs.org/strip-bom/3.0.0: + registry.npmjs.org/strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz} name: strip-bom version: 3.0.0 engines: {node: '>=4'} dev: true - registry.npmjs.org/strip-final-newline/2.0.0: + registry.npmjs.org/strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz} name: strip-final-newline version: 2.0.0 engines: {node: '>=6'} dev: true - registry.npmjs.org/strip-indent/3.0.0: + registry.npmjs.org/strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz} name: strip-indent version: 3.0.0 engines: {node: '>=8'} dependencies: - min-indent: registry.npmjs.org/min-indent/1.0.1 + min-indent: registry.npmjs.org/min-indent@1.0.1 dev: true - registry.npmjs.org/strip-json-comments/3.1.1: + registry.npmjs.org/strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz} name: strip-json-comments version: 3.1.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/supports-color/5.5.0: + registry.npmjs.org/supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz} name: supports-color version: 5.5.0 engines: {node: '>=4'} dependencies: - has-flag: registry.npmjs.org/has-flag/3.0.0 + has-flag: registry.npmjs.org/has-flag@3.0.0 dev: true - registry.npmjs.org/supports-color/7.2.0: + registry.npmjs.org/supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz} name: supports-color version: 7.2.0 engines: {node: '>=8'} dependencies: - has-flag: registry.npmjs.org/has-flag/4.0.0 + has-flag: registry.npmjs.org/has-flag@4.0.0 dev: true - registry.npmjs.org/supports-color/8.1.1: + registry.npmjs.org/supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz} name: supports-color version: 8.1.1 engines: {node: '>=10'} dependencies: - has-flag: registry.npmjs.org/has-flag/4.0.0 + has-flag: registry.npmjs.org/has-flag@4.0.0 dev: true - registry.npmjs.org/supports-preserve-symlinks-flag/1.0.0: + registry.npmjs.org/supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} name: supports-preserve-symlinks-flag version: 1.0.0 engines: {node: '>= 0.4'} dev: true - registry.npmjs.org/svelte-check/3.4.4_svelte@4.0.0: + registry.npmjs.org/svelte-check@3.4.4(postcss@8.4.24)(svelte@4.0.0): resolution: {integrity: sha512-Uys9+R65cj8TmP8f5UpS7B2xKpNLYNxEWJsA5ZoKcWq/uwvABFF7xS6iPQGLoa7hxz0DS6xU60YFpmq06E4JxA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.4.tgz} id: registry.npmjs.org/svelte-check/3.4.4 name: svelte-check @@ -7165,15 +7812,15 @@ packages: 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.18 - chokidar: registry.npmjs.org/chokidar/3.5.3 - fast-glob: registry.npmjs.org/fast-glob/3.2.12 - 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.0.0 - svelte-preprocess: registry.npmjs.org/svelte-preprocess/5.0.4_rydvusnd4biuws73vnz24j3wlu - typescript: registry.npmjs.org/typescript/5.1.3 + '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.18 + chokidar: registry.npmjs.org/chokidar@3.5.3 + fast-glob: registry.npmjs.org/fast-glob@3.2.12 + 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.0.0 + svelte-preprocess: registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.24)(svelte@4.0.0)(typescript@5.1.3) + typescript: registry.npmjs.org/typescript@5.1.3 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -7186,7 +7833,7 @@ packages: - sugarss dev: true - registry.npmjs.org/svelte-eslint-parser/0.31.0_svelte@4.0.0: + registry.npmjs.org/svelte-eslint-parser@0.31.0(svelte@4.0.0): resolution: {integrity: sha512-/31RpBf/e3YjoFphjsyo3JRyN1r4UalGAGafXrZ6EJK4h4COOO0rbfBoen5byGsXnIJKsrlC1lkEd2Vzpq2IDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.31.0.tgz} id: registry.npmjs.org/svelte-eslint-parser/0.31.0 name: svelte-eslint-parser @@ -7198,15 +7845,15 @@ packages: svelte: optional: true dependencies: - eslint-scope: registry.npmjs.org/eslint-scope/7.2.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.4.1 - espree: registry.npmjs.org/espree/9.5.2 - postcss: registry.npmjs.org/postcss/8.4.24 - postcss-scss: registry.npmjs.org/postcss-scss/4.0.6_postcss@8.4.24 - svelte: registry.npmjs.org/svelte/4.0.0 + eslint-scope: registry.npmjs.org/eslint-scope@7.2.0 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + espree: registry.npmjs.org/espree@9.5.2 + postcss: registry.npmjs.org/postcss@8.4.24 + postcss-scss: registry.npmjs.org/postcss-scss@4.0.6(postcss@8.4.24) + svelte: registry.npmjs.org/svelte@4.0.0 dev: true - registry.npmjs.org/svelte-hmr/0.15.2_svelte@4.0.0: + registry.npmjs.org/svelte-hmr@0.15.2(svelte@4.0.0): resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz} id: registry.npmjs.org/svelte-hmr/0.15.2 name: svelte-hmr @@ -7215,10 +7862,10 @@ packages: peerDependencies: svelte: ^3.19.0 || ^4.0.0-next.0 dependencies: - svelte: registry.npmjs.org/svelte/4.0.0 + svelte: registry.npmjs.org/svelte@4.0.0 dev: true - registry.npmjs.org/svelte-preprocess/5.0.4_rydvusnd4biuws73vnz24j3wlu: + registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.24)(svelte@4.0.0)(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 name: svelte-preprocess @@ -7259,37 +7906,17 @@ packages: typescript: optional: true dependencies: - '@types/pug': registry.npmjs.org/@types/pug/2.0.6 - detect-indent: registry.npmjs.org/detect-indent/6.1.0 - magic-string: registry.npmjs.org/magic-string/0.27.0 - sorcery: registry.npmjs.org/sorcery/0.11.0 - strip-indent: registry.npmjs.org/strip-indent/3.0.0 - svelte: registry.npmjs.org/svelte/4.0.0 - typescript: registry.npmjs.org/typescript/5.1.3 + '@types/pug': registry.npmjs.org/@types/pug@2.0.6 + 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.24 + sorcery: registry.npmjs.org/sorcery@0.11.0 + strip-indent: registry.npmjs.org/strip-indent@3.0.0 + svelte: registry.npmjs.org/svelte@4.0.0 + typescript: registry.npmjs.org/typescript@5.1.3 dev: true - registry.npmjs.org/svelte/4.0.0: - resolution: {integrity: sha512-+yCYu3AEUu9n91dnQNGIbnVp8EmNQtuF/YImW4+FTXRHard7NMo+yTsWzggPAbj3fUEJ1FBJLkql/jkp6YB5pg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-4.0.0.tgz} - name: svelte - version: 4.0.0 - 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.18 - acorn: registry.npmjs.org/acorn/8.8.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.3 - 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.1 - locate-character: registry.npmjs.org/locate-character/3.0.0 - magic-string: registry.npmjs.org/magic-string/0.30.0 - periscopic: registry.npmjs.org/periscopic/3.1.0 - dev: true - - registry.npmjs.org/svelte2tsx/0.6.15_rydvusnd4biuws73vnz24j3wlu: + registry.npmjs.org/svelte2tsx@0.6.15(svelte@4.0.0)(typescript@5.1.3): resolution: {integrity: sha512-+j6RmA3g5pPs1DHa/rdzJjjhZuCfWx0IbNPaR99A2bvOSPPY6BlVkBGU0urI+DGcWHhYEG28Flo942KqlAkpEQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.15.tgz} id: registry.npmjs.org/svelte2tsx/0.6.15 name: svelte2tsx @@ -7298,140 +7925,175 @@ packages: svelte: ^3.55 || ^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.0.0 - typescript: registry.npmjs.org/typescript/5.1.3 + 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.0.0 + typescript: registry.npmjs.org/typescript@5.1.3 dev: true - registry.npmjs.org/term-size/2.2.1: + registry.npmjs.org/svelte@4.0.0: + resolution: {integrity: sha512-+yCYu3AEUu9n91dnQNGIbnVp8EmNQtuF/YImW4+FTXRHard7NMo+yTsWzggPAbj3fUEJ1FBJLkql/jkp6YB5pg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-4.0.0.tgz} + name: svelte + version: 4.0.0 + 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.18 + acorn: registry.npmjs.org/acorn@8.8.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.3 + 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.1 + locate-character: registry.npmjs.org/locate-character@3.0.0 + magic-string: registry.npmjs.org/magic-string@0.30.0 + periscopic: registry.npmjs.org/periscopic@3.1.0 + dev: true + + registry.npmjs.org/term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz} name: term-size version: 2.2.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/terser/5.18.0: + registry.npmjs.org/terser@5.18.0: resolution: {integrity: sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/terser/-/terser-5.18.0.tgz} name: terser version: 5.18.0 engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map/0.3.3 - acorn: registry.npmjs.org/acorn/8.8.2 - commander: registry.npmjs.org/commander/2.20.3 - source-map-support: registry.npmjs.org/source-map-support/0.5.21 + '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map@0.3.3 + acorn: registry.npmjs.org/acorn@8.8.2 + commander: registry.npmjs.org/commander@2.20.3 + source-map-support: registry.npmjs.org/source-map-support@0.5.21 dev: true - registry.npmjs.org/text-table/0.2.0: + registry.npmjs.org/text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz} name: text-table version: 0.2.0 dev: true - registry.npmjs.org/thenby/1.3.4: + registry.npmjs.org/thenby@1.3.4: resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz} name: thenby version: 1.3.4 dev: true - registry.npmjs.org/throttleit/1.0.0: + registry.npmjs.org/throttleit@1.0.0: resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz} name: throttleit version: 1.0.0 dev: true - registry.npmjs.org/through/2.3.8: + registry.npmjs.org/through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/through/-/through-2.3.8.tgz} name: through version: 2.3.8 dev: true - registry.npmjs.org/tmp/0.0.33: + 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 version: 0.0.33 engines: {node: '>=0.6.0'} dependencies: - os-tmpdir: registry.npmjs.org/os-tmpdir/1.0.2 + os-tmpdir: registry.npmjs.org/os-tmpdir@1.0.2 dev: true - registry.npmjs.org/tmp/0.2.1: + registry.npmjs.org/tmp@0.2.1: resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz} name: tmp version: 0.2.1 engines: {node: '>=8.17.0'} dependencies: - rimraf: registry.npmjs.org/rimraf/3.0.2 + rimraf: registry.npmjs.org/rimraf@3.0.2 dev: true - registry.npmjs.org/to-fast-properties/2.0.0: + registry.npmjs.org/to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz} name: to-fast-properties version: 2.0.0 engines: {node: '>=4'} dev: true - registry.npmjs.org/to-regex-range/5.0.1: + registry.npmjs.org/to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz} name: to-regex-range version: 5.0.1 engines: {node: '>=8.0'} dependencies: - is-number: registry.npmjs.org/is-number/7.0.0 + is-number: registry.npmjs.org/is-number@7.0.0 dev: true - registry.npmjs.org/totalist/3.0.1: + registry.npmjs.org/totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz} name: totalist version: 3.0.1 engines: {node: '>=6'} dev: true - registry.npmjs.org/tough-cookie/2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz} + registry.npmjs.org/tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz} name: tough-cookie - version: 2.5.0 - engines: {node: '>=0.8'} + version: 4.1.3 + engines: {node: '>=6'} dependencies: - psl: registry.npmjs.org/psl/1.9.0 - punycode: registry.npmjs.org/punycode/2.3.0 + psl: registry.npmjs.org/psl@1.9.0 + punycode: registry.npmjs.org/punycode@2.3.0 + universalify: registry.npmjs.org/universalify@0.2.0 + url-parse: registry.npmjs.org/url-parse@1.5.10 dev: true - registry.npmjs.org/tr46/0.0.3: + registry.npmjs.org/tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz} name: tr46 version: 0.0.3 dev: true - registry.npmjs.org/tree-kill/1.2.2: + registry.npmjs.org/tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz} name: tree-kill version: 1.2.2 hasBin: true dev: true - registry.npmjs.org/trim-newlines/3.0.1: + registry.npmjs.org/trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz} name: trim-newlines version: 3.0.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/tslib/1.14.1: + registry.npmjs.org/ts-api-utils@1.0.1(typescript@5.1.3): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz} + id: registry.npmjs.org/ts-api-utils/1.0.1 + name: ts-api-utils + version: 1.0.1 + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: registry.npmjs.org/typescript@5.1.3 + dev: true + + registry.npmjs.org/tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz} name: tslib version: 1.14.1 dev: true - registry.npmjs.org/tslib/2.5.3: + registry.npmjs.org/tslib@2.5.3: resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz} name: tslib version: 2.5.3 dev: true - registry.npmjs.org/tsutils/3.21.0_typescript@5.1.3: + registry.npmjs.org/tsutils@3.21.0(typescript@5.1.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz} id: registry.npmjs.org/tsutils/3.21.0 name: tsutils @@ -7440,35 +8102,35 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: - tslib: registry.npmjs.org/tslib/1.14.1 - typescript: registry.npmjs.org/typescript/5.1.3 + tslib: registry.npmjs.org/tslib@1.14.1 + typescript: registry.npmjs.org/typescript@5.1.3 dev: true - registry.npmjs.org/tty-table/4.2.1: + registry.npmjs.org/tty-table@4.2.1: resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tty-table/-/tty-table-4.2.1.tgz} name: tty-table version: 4.2.1 engines: {node: '>=8.0.0'} hasBin: true dependencies: - chalk: registry.npmjs.org/chalk/4.1.2 - csv: registry.npmjs.org/csv/5.5.3 - kleur: registry.npmjs.org/kleur/4.1.5 - smartwrap: registry.npmjs.org/smartwrap/2.0.2 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 - wcwidth: registry.npmjs.org/wcwidth/1.0.1 - yargs: registry.npmjs.org/yargs/17.7.2 + chalk: registry.npmjs.org/chalk@4.1.2 + csv: registry.npmjs.org/csv@5.5.3 + kleur: registry.npmjs.org/kleur@4.1.5 + smartwrap: registry.npmjs.org/smartwrap@2.0.2 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 + wcwidth: registry.npmjs.org/wcwidth@1.0.1 + yargs: registry.npmjs.org/yargs@17.7.2 dev: true - registry.npmjs.org/tunnel-agent/0.6.0: + registry.npmjs.org/tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz} name: tunnel-agent version: 0.6.0 dependencies: - safe-buffer: registry.npmjs.org/safe-buffer/5.2.1 + safe-buffer: registry.npmjs.org/safe-buffer@5.2.1 dev: true - registry.npmjs.org/turbo-darwin-64/1.10.3: + registry.npmjs.org/turbo-darwin-64@1.10.3: resolution: {integrity: sha512-IIB9IomJGyD3EdpSscm7Ip1xVWtYb7D0x7oH3vad3gjFcjHJzDz9xZ/iw/qItFEW+wGFcLSRPd+1BNnuLM8AsA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.10.3.tgz} name: turbo-darwin-64 version: 1.10.3 @@ -7478,7 +8140,7 @@ packages: dev: true optional: true - registry.npmjs.org/turbo-darwin-arm64/1.10.3: + registry.npmjs.org/turbo-darwin-arm64@1.10.3: resolution: {integrity: sha512-SBNmOZU9YEB0eyNIxeeQ+Wi0Ufd+nprEVp41rgUSRXEIpXjsDjyBnKnF+sQQj3+FLb4yyi/yZQckB+55qXWEsw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.3.tgz} name: turbo-darwin-arm64 version: 1.10.3 @@ -7488,7 +8150,7 @@ packages: dev: true optional: true - registry.npmjs.org/turbo-linux-64/1.10.3: + registry.npmjs.org/turbo-linux-64@1.10.3: resolution: {integrity: sha512-kvAisGKE7xHJdyMxZLvg53zvHxjqPK1UVj4757PQqtx9dnjYHSc8epmivE6niPgDHon5YqImzArCjVZJYpIGHQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.10.3.tgz} name: turbo-linux-64 version: 1.10.3 @@ -7498,7 +8160,7 @@ packages: dev: true optional: true - registry.npmjs.org/turbo-linux-arm64/1.10.3: + registry.npmjs.org/turbo-linux-arm64@1.10.3: resolution: {integrity: sha512-Qgaqln0IYRgyL0SowJOi+PNxejv1I2xhzXOI+D+z4YHbgSx87ox1IsALYBlK8VRVYY8VCXl+PN12r1ioV09j7A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.10.3.tgz} name: turbo-linux-arm64 version: 1.10.3 @@ -7508,7 +8170,7 @@ packages: dev: true optional: true - registry.npmjs.org/turbo-windows-64/1.10.3: + registry.npmjs.org/turbo-windows-64@1.10.3: resolution: {integrity: sha512-rbH9wManURNN8mBnN/ZdkpUuTvyVVEMiUwFUX4GVE5qmV15iHtZfDLUSGGCP2UFBazHcpNHG1OJzgc55GFFrUw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.10.3.tgz} name: turbo-windows-64 version: 1.10.3 @@ -7518,7 +8180,7 @@ packages: dev: true optional: true - registry.npmjs.org/turbo-windows-arm64/1.10.3: + registry.npmjs.org/turbo-windows-arm64@1.10.3: resolution: {integrity: sha512-ThlkqxhcGZX39CaTjsHqJnqVe+WImjX13pmjnpChz6q5HHbeRxaJSFzgrHIOt0sUUVx90W/WrNRyoIt/aafniw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.10.3.tgz} name: turbo-windows-arm64 version: 1.10.3 @@ -7528,82 +8190,118 @@ packages: dev: true optional: true - registry.npmjs.org/turbo/1.10.3: + registry.npmjs.org/turbo@1.10.3: resolution: {integrity: sha512-U4gKCWcKgLcCjQd4Pl8KJdfEKumpyWbzRu75A6FCj6Ctea1PIm58W6Ltw1QXKqHrl2pF9e1raAskf/h6dlrPCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/turbo/-/turbo-1.10.3.tgz} name: turbo version: 1.10.3 hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: registry.npmjs.org/turbo-darwin-64/1.10.3 - turbo-darwin-arm64: registry.npmjs.org/turbo-darwin-arm64/1.10.3 - turbo-linux-64: registry.npmjs.org/turbo-linux-64/1.10.3 - turbo-linux-arm64: registry.npmjs.org/turbo-linux-arm64/1.10.3 - turbo-windows-64: registry.npmjs.org/turbo-windows-64/1.10.3 - turbo-windows-arm64: registry.npmjs.org/turbo-windows-arm64/1.10.3 + turbo-darwin-64: registry.npmjs.org/turbo-darwin-64@1.10.3 + turbo-darwin-arm64: registry.npmjs.org/turbo-darwin-arm64@1.10.3 + turbo-linux-64: registry.npmjs.org/turbo-linux-64@1.10.3 + turbo-linux-arm64: registry.npmjs.org/turbo-linux-arm64@1.10.3 + turbo-windows-64: registry.npmjs.org/turbo-windows-64@1.10.3 + turbo-windows-arm64: registry.npmjs.org/turbo-windows-arm64@1.10.3 dev: true - registry.npmjs.org/tweetnacl/0.14.5: + registry.npmjs.org/tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz} name: tweetnacl version: 0.14.5 dev: true - registry.npmjs.org/type-check/0.4.0: + registry.npmjs.org/type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz} name: type-check version: 0.4.0 engines: {node: '>= 0.8.0'} dependencies: - prelude-ls: registry.npmjs.org/prelude-ls/1.2.1 + prelude-ls: registry.npmjs.org/prelude-ls@1.2.1 dev: true - registry.npmjs.org/type-fest/0.13.1: + registry.npmjs.org/type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz} name: type-fest version: 0.13.1 engines: {node: '>=10'} dev: true - registry.npmjs.org/type-fest/0.20.2: + registry.npmjs.org/type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz} name: type-fest version: 0.20.2 engines: {node: '>=10'} dev: true - registry.npmjs.org/type-fest/0.21.3: + registry.npmjs.org/type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz} name: type-fest version: 0.21.3 engines: {node: '>=10'} dev: true - registry.npmjs.org/type-fest/0.6.0: + registry.npmjs.org/type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz} name: type-fest version: 0.6.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/type-fest/0.8.1: + registry.npmjs.org/type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz} name: type-fest version: 0.8.1 engines: {node: '>=8'} dev: true - registry.npmjs.org/typed-array-length/1.0.4: + registry.npmjs.org/typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz} + name: typed-array-buffer + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 + dev: true + + registry.npmjs.org/typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz} + name: typed-array-byte-length + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + has-proto: registry.npmjs.org/has-proto@1.0.1 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 + dev: true + + registry.npmjs.org/typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz} + name: typed-array-byte-offset + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + has-proto: registry.npmjs.org/has-proto@1.0.1 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.12 + dev: true + + registry.npmjs.org/typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz} name: typed-array-length version: 1.0.4 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - for-each: registry.npmjs.org/for-each/0.3.3 - is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 dev: true - registry.npmjs.org/typescript/4.9.5: + registry.npmjs.org/typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz} name: typescript version: 4.9.5 @@ -7611,7 +8309,7 @@ packages: hasBin: true dev: true - registry.npmjs.org/typescript/5.1.3: + registry.npmjs.org/typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz} name: typescript version: 5.1.3 @@ -7619,48 +8317,69 @@ packages: hasBin: true dev: true - registry.npmjs.org/unbox-primitive/1.0.2: + registry.npmjs.org/unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz} name: unbox-primitive version: 1.0.2 dependencies: - call-bind: registry.npmjs.org/call-bind/1.0.2 - has-bigints: registry.npmjs.org/has-bigints/1.0.2 - has-symbols: registry.npmjs.org/has-symbols/1.0.3 - which-boxed-primitive: registry.npmjs.org/which-boxed-primitive/1.0.2 + call-bind: registry.npmjs.org/call-bind@1.0.2 + has-bigints: registry.npmjs.org/has-bigints@1.0.2 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + which-boxed-primitive: registry.npmjs.org/which-boxed-primitive@1.0.2 dev: true - registry.npmjs.org/undici/5.22.1: + registry.npmjs.org/undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/undici/-/undici-5.22.1.tgz} name: undici version: 5.22.1 engines: {node: '>=14.0'} dependencies: - busboy: registry.npmjs.org/busboy/1.6.0 + busboy: registry.npmjs.org/busboy@1.6.0 dev: true - registry.npmjs.org/universalify/0.1.2: + registry.npmjs.org/universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz} name: universalify version: 0.1.2 engines: {node: '>= 4.0.0'} dev: true - registry.npmjs.org/universalify/2.0.0: + registry.npmjs.org/universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz} + name: universalify + version: 0.2.0 + engines: {node: '>= 4.0.0'} + dev: true + + registry.npmjs.org/universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz} name: universalify version: 2.0.0 engines: {node: '>= 10.0.0'} dev: true - registry.npmjs.org/untildify/4.0.0: + 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 version: 4.0.0 engines: {node: '>=8'} dev: true - registry.npmjs.org/update-browserslist-db/1.0.11_browserslist@4.21.8: + registry.npmjs.org/update-browserslist-db@1.0.11(browserslist@4.21.10): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz} + id: registry.npmjs.org/update-browserslist-db/1.0.11 + name: update-browserslist-db + version: 1.0.11 + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: registry.npmjs.org/browserslist@4.21.10 + escalade: registry.npmjs.org/escalade@3.1.1 + picocolors: registry.npmjs.org/picocolors@1.0.0 + dev: true + + registry.npmjs.org/update-browserslist-db@1.0.11(browserslist@4.21.8): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz} id: registry.npmjs.org/update-browserslist-db/1.0.11 name: update-browserslist-db @@ -7669,20 +8388,29 @@ packages: peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: registry.npmjs.org/browserslist/4.21.8 - escalade: registry.npmjs.org/escalade/3.1.1 - picocolors: registry.npmjs.org/picocolors/1.0.0 + browserslist: registry.npmjs.org/browserslist@4.21.8 + escalade: registry.npmjs.org/escalade@3.1.1 + picocolors: registry.npmjs.org/picocolors@1.0.0 dev: true - registry.npmjs.org/uri-js/4.4.1: + registry.npmjs.org/uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} name: uri-js version: 4.4.1 dependencies: - punycode: registry.npmjs.org/punycode/2.3.0 + punycode: registry.npmjs.org/punycode@2.3.0 dev: true - registry.npmjs.org/use-sync-external-store/1.2.0_react@18.2.0: + registry.npmjs.org/url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz} + name: url-parse + version: 1.5.10 + dependencies: + querystringify: registry.npmjs.org/querystringify@2.2.0 + requires-port: registry.npmjs.org/requires-port@1.0.0 + dev: true + + registry.npmjs.org/use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz} id: registry.npmjs.org/use-sync-external-store/1.2.0 name: use-sync-external-store @@ -7690,43 +8418,43 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: registry.npmjs.org/react/18.2.0 + react: registry.npmjs.org/react@18.2.0 dev: false - registry.npmjs.org/util-deprecate/1.0.2: + registry.npmjs.org/util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz} name: util-deprecate version: 1.0.2 dev: true - registry.npmjs.org/uuid/8.3.2: + registry.npmjs.org/uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz} name: uuid version: 8.3.2 hasBin: true dev: true - registry.npmjs.org/validate-npm-package-license/3.0.4: + registry.npmjs.org/validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz} name: validate-npm-package-license version: 3.0.4 dependencies: - spdx-correct: registry.npmjs.org/spdx-correct/3.2.0 - spdx-expression-parse: registry.npmjs.org/spdx-expression-parse/3.0.1 + spdx-correct: registry.npmjs.org/spdx-correct@3.2.0 + spdx-expression-parse: registry.npmjs.org/spdx-expression-parse@3.0.1 dev: true - registry.npmjs.org/verror/1.10.0: + registry.npmjs.org/verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/verror/-/verror-1.10.0.tgz} name: verror version: 1.10.0 engines: {'0': node >=0.6.0} dependencies: - assert-plus: registry.npmjs.org/assert-plus/1.0.0 - core-util-is: registry.npmjs.org/core-util-is/1.0.2 - extsprintf: registry.npmjs.org/extsprintf/1.3.0 + assert-plus: registry.npmjs.org/assert-plus@1.0.0 + core-util-is: registry.npmjs.org/core-util-is@1.0.2 + extsprintf: registry.npmjs.org/extsprintf@1.3.0 dev: true - registry.npmjs.org/vite/4.3.9: + registry.npmjs.org/vite@4.3.9: resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vite/-/vite-4.3.9.tgz} name: vite version: 4.3.9 @@ -7753,14 +8481,51 @@ packages: terser: optional: true dependencies: - esbuild: registry.npmjs.org/esbuild/0.17.19 - postcss: registry.npmjs.org/postcss/8.4.24 - rollup: registry.npmjs.org/rollup/3.25.1 + esbuild: registry.npmjs.org/esbuild@0.17.19 + postcss: registry.npmjs.org/postcss@8.4.24 + rollup: registry.npmjs.org/rollup@3.25.1 + optionalDependencies: + fsevents: registry.npmjs.org/fsevents@2.3.2 + dev: true + + 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.27 + rollup: registry.npmjs.org/rollup@3.28.0 optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + fsevents: registry.npmjs.org/fsevents@2.3.2 dev: true - registry.npmjs.org/vitefu/0.2.4_vite@4.3.9: + registry.npmjs.org/vitefu@0.2.4(vite@4.3.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz} id: registry.npmjs.org/vitefu/0.2.4 name: vitefu @@ -7771,10 +8536,10 @@ packages: vite: optional: true dependencies: - vite: registry.npmjs.org/vite/4.3.9 + vite: registry.npmjs.org/vite@4.3.9 dev: true - registry.npmjs.org/wait-on/7.0.1_debug@4.3.4: + registry.npmjs.org/wait-on@7.0.1(debug@4.3.4): resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz} id: registry.npmjs.org/wait-on/7.0.1 name: wait-on @@ -7782,247 +8547,260 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - axios: registry.npmjs.org/axios/0.27.2_debug@4.3.4 - joi: registry.npmjs.org/joi/17.9.2 - lodash: registry.npmjs.org/lodash/4.17.21 - minimist: registry.npmjs.org/minimist/1.2.8 - rxjs: registry.npmjs.org/rxjs/7.8.1 + axios: registry.npmjs.org/axios@0.27.2(debug@4.3.4) + joi: registry.npmjs.org/joi@17.9.2 + lodash: registry.npmjs.org/lodash@4.17.21 + minimist: registry.npmjs.org/minimist@1.2.8 + rxjs: registry.npmjs.org/rxjs@7.8.1 transitivePeerDependencies: - debug dev: true - registry.npmjs.org/wcwidth/1.0.1: + 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 version: 1.0.1 dependencies: - defaults: registry.npmjs.org/defaults/1.0.4 + defaults: registry.npmjs.org/defaults@1.0.4 dev: true - registry.npmjs.org/webidl-conversions/3.0.1: + registry.npmjs.org/webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz} name: webidl-conversions version: 3.0.1 dev: true - registry.npmjs.org/whatwg-url/5.0.0: + registry.npmjs.org/whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz} name: whatwg-url version: 5.0.0 dependencies: - tr46: registry.npmjs.org/tr46/0.0.3 - webidl-conversions: registry.npmjs.org/webidl-conversions/3.0.1 + tr46: registry.npmjs.org/tr46@0.0.3 + webidl-conversions: registry.npmjs.org/webidl-conversions@3.0.1 dev: true - registry.npmjs.org/which-boxed-primitive/1.0.2: + registry.npmjs.org/which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz} name: which-boxed-primitive version: 1.0.2 dependencies: - is-bigint: registry.npmjs.org/is-bigint/1.0.4 - is-boolean-object: registry.npmjs.org/is-boolean-object/1.1.2 - is-number-object: registry.npmjs.org/is-number-object/1.0.7 - is-string: registry.npmjs.org/is-string/1.0.7 - is-symbol: registry.npmjs.org/is-symbol/1.0.4 + is-bigint: registry.npmjs.org/is-bigint@1.0.4 + is-boolean-object: registry.npmjs.org/is-boolean-object@1.1.2 + is-number-object: registry.npmjs.org/is-number-object@1.0.7 + is-string: registry.npmjs.org/is-string@1.0.7 + is-symbol: registry.npmjs.org/is-symbol@1.0.4 dev: true - registry.npmjs.org/which-module/2.0.1: + registry.npmjs.org/which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz} name: which-module version: 2.0.1 dev: true - registry.npmjs.org/which-pm/2.0.0: + registry.npmjs.org/which-pm@2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz} name: which-pm version: 2.0.0 engines: {node: '>=8.15'} dependencies: - load-yaml-file: registry.npmjs.org/load-yaml-file/0.2.0 - path-exists: registry.npmjs.org/path-exists/4.0.0 + load-yaml-file: registry.npmjs.org/load-yaml-file@0.2.0 + path-exists: registry.npmjs.org/path-exists@4.0.0 + dev: true + + registry.npmjs.org/which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz} + name: which-typed-array + version: 1.1.11 + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + gopd: registry.npmjs.org/gopd@1.0.1 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true - registry.npmjs.org/which-typed-array/1.1.9: + registry.npmjs.org/which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz} name: which-typed-array version: 1.1.9 engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: registry.npmjs.org/available-typed-arrays/1.0.5 - call-bind: registry.npmjs.org/call-bind/1.0.2 - for-each: registry.npmjs.org/for-each/0.3.3 - gopd: registry.npmjs.org/gopd/1.0.1 - has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 - is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 + available-typed-arrays: registry.npmjs.org/available-typed-arrays@1.0.5 + call-bind: registry.npmjs.org/call-bind@1.0.2 + for-each: registry.npmjs.org/for-each@0.3.3 + gopd: registry.npmjs.org/gopd@1.0.1 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 + is-typed-array: registry.npmjs.org/is-typed-array@1.1.10 dev: true - registry.npmjs.org/which/1.3.1: + registry.npmjs.org/which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which/-/which-1.3.1.tgz} name: which version: 1.3.1 hasBin: true dependencies: - isexe: registry.npmjs.org/isexe/2.0.0 + isexe: registry.npmjs.org/isexe@2.0.0 dev: true - registry.npmjs.org/which/2.0.2: + registry.npmjs.org/which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which/-/which-2.0.2.tgz} name: which version: 2.0.2 engines: {node: '>= 8'} hasBin: true dependencies: - isexe: registry.npmjs.org/isexe/2.0.0 + isexe: registry.npmjs.org/isexe@2.0.0 dev: true - registry.npmjs.org/word-wrap/1.2.3: + registry.npmjs.org/word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz} name: word-wrap version: 1.2.3 engines: {node: '>=0.10.0'} dev: true - registry.npmjs.org/wrap-ansi/6.2.0: + registry.npmjs.org/wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz} name: wrap-ansi version: 6.2.0 engines: {node: '>=8'} dependencies: - ansi-styles: registry.npmjs.org/ansi-styles/4.3.0 - string-width: registry.npmjs.org/string-width/4.2.3 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 dev: true - registry.npmjs.org/wrap-ansi/7.0.0: + registry.npmjs.org/wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz} name: wrap-ansi version: 7.0.0 engines: {node: '>=10'} dependencies: - ansi-styles: registry.npmjs.org/ansi-styles/4.3.0 - string-width: registry.npmjs.org/string-width/4.2.3 - strip-ansi: registry.npmjs.org/strip-ansi/6.0.1 + ansi-styles: registry.npmjs.org/ansi-styles@4.3.0 + string-width: registry.npmjs.org/string-width@4.2.3 + strip-ansi: registry.npmjs.org/strip-ansi@6.0.1 dev: true - registry.npmjs.org/wrappy/1.0.2: + registry.npmjs.org/wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz} name: wrappy version: 1.0.2 dev: true - registry.npmjs.org/y18n/4.0.3: + registry.npmjs.org/y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz} name: y18n version: 4.0.3 dev: true - registry.npmjs.org/y18n/5.0.8: + registry.npmjs.org/y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz} name: y18n version: 5.0.8 engines: {node: '>=10'} dev: true - registry.npmjs.org/yallist/2.1.2: + registry.npmjs.org/yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz} name: yallist version: 2.1.2 dev: true - registry.npmjs.org/yallist/3.1.1: + registry.npmjs.org/yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz} name: yallist version: 3.1.1 dev: true - registry.npmjs.org/yallist/4.0.0: + registry.npmjs.org/yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz} name: yallist version: 4.0.0 dev: true - registry.npmjs.org/yaml/1.10.2: + registry.npmjs.org/yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz} name: yaml version: 1.10.2 engines: {node: '>= 6'} dev: true - registry.npmjs.org/yaml/2.3.1: + registry.npmjs.org/yaml@2.3.1: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz} name: yaml version: 2.3.1 engines: {node: '>= 14'} dev: true - registry.npmjs.org/yargs-parser/18.1.3: + registry.npmjs.org/yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz} name: yargs-parser version: 18.1.3 engines: {node: '>=6'} dependencies: - camelcase: registry.npmjs.org/camelcase/5.3.1 - decamelize: registry.npmjs.org/decamelize/1.2.0 + camelcase: registry.npmjs.org/camelcase@5.3.1 + decamelize: registry.npmjs.org/decamelize@1.2.0 dev: true - registry.npmjs.org/yargs-parser/21.1.1: + registry.npmjs.org/yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz} name: yargs-parser version: 21.1.1 engines: {node: '>=12'} dev: true - registry.npmjs.org/yargs/15.4.1: + registry.npmjs.org/yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz} name: yargs version: 15.4.1 engines: {node: '>=8'} dependencies: - cliui: registry.npmjs.org/cliui/6.0.0 - decamelize: registry.npmjs.org/decamelize/1.2.0 - find-up: registry.npmjs.org/find-up/4.1.0 - get-caller-file: registry.npmjs.org/get-caller-file/2.0.5 - require-directory: registry.npmjs.org/require-directory/2.1.1 - require-main-filename: registry.npmjs.org/require-main-filename/2.0.0 - set-blocking: registry.npmjs.org/set-blocking/2.0.0 - string-width: registry.npmjs.org/string-width/4.2.3 - which-module: registry.npmjs.org/which-module/2.0.1 - y18n: registry.npmjs.org/y18n/4.0.3 - yargs-parser: registry.npmjs.org/yargs-parser/18.1.3 + cliui: registry.npmjs.org/cliui@6.0.0 + decamelize: registry.npmjs.org/decamelize@1.2.0 + find-up: registry.npmjs.org/find-up@4.1.0 + get-caller-file: registry.npmjs.org/get-caller-file@2.0.5 + require-directory: registry.npmjs.org/require-directory@2.1.1 + require-main-filename: registry.npmjs.org/require-main-filename@2.0.0 + set-blocking: registry.npmjs.org/set-blocking@2.0.0 + string-width: registry.npmjs.org/string-width@4.2.3 + which-module: registry.npmjs.org/which-module@2.0.1 + y18n: registry.npmjs.org/y18n@4.0.3 + yargs-parser: registry.npmjs.org/yargs-parser@18.1.3 dev: true - registry.npmjs.org/yargs/17.7.2: + registry.npmjs.org/yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz} name: yargs version: 17.7.2 engines: {node: '>=12'} dependencies: - cliui: registry.npmjs.org/cliui/8.0.1 - escalade: registry.npmjs.org/escalade/3.1.1 - get-caller-file: registry.npmjs.org/get-caller-file/2.0.5 - require-directory: registry.npmjs.org/require-directory/2.1.1 - string-width: registry.npmjs.org/string-width/4.2.3 - y18n: registry.npmjs.org/y18n/5.0.8 - yargs-parser: registry.npmjs.org/yargs-parser/21.1.1 + cliui: registry.npmjs.org/cliui@8.0.1 + escalade: registry.npmjs.org/escalade@3.1.1 + get-caller-file: registry.npmjs.org/get-caller-file@2.0.5 + require-directory: registry.npmjs.org/require-directory@2.1.1 + string-width: registry.npmjs.org/string-width@4.2.3 + y18n: registry.npmjs.org/y18n@5.0.8 + yargs-parser: registry.npmjs.org/yargs-parser@21.1.1 dev: true - registry.npmjs.org/yauzl/2.10.0: + registry.npmjs.org/yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz} name: yauzl version: 2.10.0 dependencies: - buffer-crc32: registry.npmjs.org/buffer-crc32/0.2.13 - fd-slicer: registry.npmjs.org/fd-slicer/1.1.0 + buffer-crc32: registry.npmjs.org/buffer-crc32@0.2.13 + fd-slicer: registry.npmjs.org/fd-slicer@1.1.0 dev: true - registry.npmjs.org/yocto-queue/0.1.0: + registry.npmjs.org/yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz} name: yocto-queue version: 0.1.0 engines: {node: '>=10'} dev: true - registry.npmjs.org/zustand/4.3.8_react@18.2.0: + registry.npmjs.org/zustand@4.3.8(react@18.2.0): resolution: {integrity: sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz} id: registry.npmjs.org/zustand/4.3.8 name: zustand @@ -8037,6 +8815,29 @@ packages: react: optional: true dependencies: - 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 + 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/zustand@4.4.1(@types/react@18.2.12)(react@18.2.0): + resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.4.1.tgz} + id: registry.npmjs.org/zustand/4.4.1 + name: zustand + version: 4.4.1 + 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.12 + 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 From 258244f368923bfe972db74eaaf155ebbe02f101 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 16 Aug 2023 10:51:55 +0200 Subject: [PATCH 0135/1093] fix(move-events): fire for panOnScroll --- examples/vite-app/package.json | 2 +- .../vite-app/src/examples/Figma/index.tsx | 14 ++++- packages/system/src/xypanzoom/XYPanZoom.ts | 8 +++ packages/system/src/xypanzoom/eventhandler.ts | 57 +++++++++++++++---- pnpm-lock.yaml | 38 ++++++------- 5 files changed, 82 insertions(+), 37 deletions(-) diff --git a/examples/vite-app/package.json b/examples/vite-app/package.json index 3e2e707a6..6d7c59878 100644 --- a/examples/vite-app/package.json +++ b/examples/vite-app/package.json @@ -21,7 +21,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.3.0", - "zustand": "^4.3.1" + "zustand": "^4.4.1" }, "devDependencies": { "@cypress/skip-test": "^2.6.1", diff --git a/examples/vite-app/src/examples/Figma/index.tsx b/examples/vite-app/src/examples/Figma/index.tsx index bccafa967..6780b6cb6 100644 --- a/examples/vite-app/src/examples/Figma/index.tsx +++ b/examples/vite-app/src/examples/Figma/index.tsx @@ -1,4 +1,4 @@ -import { ReactFlow, Background, BackgroundVariant, Node, Edge, SelectionMode } from '@xyflow/react'; +import { ReactFlow, Background, BackgroundVariant, Node, Edge, SelectionMode, Controls, Panel } from '@xyflow/react'; const MULTI_SELECT_KEY = ['Meta', 'Shift']; @@ -21,6 +21,10 @@ const onPaneContextMenu = (e: any) => { const panOnDrag = [1, 2]; +const onMoveStart = (e: any) => console.log('move start', e); +const onMove = (e: any) => console.log('move', e); +const onMoveEnd = (e: any) => console.log('move end', e); + const BasicFlow = () => { return ( { fitView selectNodesOnDrag={false} onSelectionContextMenu={onPaneContextMenu} + onMoveStart={onMoveStart} + onMove={onMove} + onMoveEnd={onMoveEnd} > -
+ + -
+
); }; diff --git a/packages/system/src/xypanzoom/XYPanZoom.ts b/packages/system/src/xypanzoom/XYPanZoom.ts index 1faded974..f5a3e5fe5 100644 --- a/packages/system/src/xypanzoom/XYPanZoom.ts +++ b/packages/system/src/xypanzoom/XYPanZoom.ts @@ -26,6 +26,8 @@ export type ZoomPanValues = { prevViewport: Viewport; mouseButton: number; timerId: ReturnType | undefined; + panScrollTimeout: ReturnType | undefined; + isPanScrolling: boolean; }; export function XYPanZoom({ @@ -46,6 +48,8 @@ export function XYPanZoom({ prevViewport: { x: 0, y: 0, zoom: 0 }, mouseButton: 0, timerId: undefined, + panScrollTimeout: undefined, + isPanScrolling: false, }; const bbox = domNode.getBoundingClientRect(); const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent); @@ -98,12 +102,16 @@ export function XYPanZoom({ const wheelHandler = isPanOnScroll ? createPanOnScrollHandler({ + zoomPanValues, noWheelClassName, d3Selection, d3Zoom: d3ZoomInstance, panOnScrollMode, panOnScrollSpeed, zoomOnPinch, + onPanZoomStart, + onPanZoom, + onPanZoomEnd, }) : createZoomOnScrollHandler({ noWheelClassName, diff --git a/packages/system/src/xypanzoom/eventhandler.ts b/packages/system/src/xypanzoom/eventhandler.ts index b2b46b485..456e2332f 100644 --- a/packages/system/src/xypanzoom/eventhandler.ts +++ b/packages/system/src/xypanzoom/eventhandler.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/ban-ts-comment */ import type { D3ZoomEvent } from 'd3-zoom'; import { pointer } from 'd3-selection'; @@ -8,28 +9,24 @@ import { type D3ZoomHandler, type D3ZoomInstance, type OnPanZoom, - type Viewport, type OnDraggingChange, type OnTransformChange, } from '../types'; import { isRightClickPan, isWrappedWithClass, transformToViewport, viewChanged, wheelDelta } from './utils'; -import { clamp, isMacOs } from '../utils'; - -export type ZoomPanValues = { - isZoomingOrPanning: boolean; - usedRightMouseButton: boolean; - prevViewport: Viewport; - mouseButton: number; - timerId: ReturnType | undefined; -}; +import { isMacOs } from '../utils'; +import { ZoomPanValues } from './XYPanZoom'; export type PanOnScrollParams = { + zoomPanValues: ZoomPanValues; noWheelClassName: string; d3Selection: D3SelectionInstance; d3Zoom: D3ZoomInstance; panOnScrollMode: PanOnScrollMode; panOnScrollSpeed: number; zoomOnPinch: boolean; + onPanZoomStart?: OnPanZoom; + onPanZoom?: OnPanZoom; + onPanZoomEnd?: OnPanZoom; }; export type ZoomOnScrollParams = { @@ -62,12 +59,16 @@ export type PanZoomEndParams = { }; export function createPanOnScrollHandler({ + zoomPanValues, noWheelClassName, d3Selection, d3Zoom, panOnScrollMode, panOnScrollSpeed, zoomOnPinch, + onPanZoomStart, + onPanZoom, + onPanZoomEnd, }: PanOnScrollParams) { return (event: any) => { if (isWrappedWithClass(event, noWheelClassName)) { @@ -105,8 +106,33 @@ export function createPanOnScrollHandler({ d3Zoom.translateBy( d3Selection, -(deltaX / currentZoom) * panOnScrollSpeed, - -(deltaY / currentZoom) * panOnScrollSpeed + -(deltaY / currentZoom) * panOnScrollSpeed, + // @ts-ignore + { internal: true } ); + + const nextViewport = transformToViewport(d3Selection.property('__zoom')); + + clearTimeout(zoomPanValues.panScrollTimeout); + + // for pan on scroll we need to handle the event calls on our own + // we can't use the start, zoom and end events from d3-zoom + // because start and move gets called on every scroll event and not once at the beginning + if (!zoomPanValues.isPanScrolling) { + zoomPanValues.isPanScrolling = true; + + onPanZoomStart?.(event, nextViewport); + } + + if (zoomPanValues.isPanScrolling) { + onPanZoom?.(event, nextViewport); + + zoomPanValues.panScrollTimeout = setTimeout(() => { + onPanZoomEnd?.(event, nextViewport); + + zoomPanValues.isPanScrolling = false; + }, 150); + } }; } @@ -124,6 +150,10 @@ export function createZoomOnScrollHandler({ noWheelClassName, preventScrolling, export function createPanZoomStartHandler({ zoomPanValues, onDraggingChange, onPanZoomStart }: PanZoomStartParams) { return (event: D3ZoomEvent) => { + if (event.sourceEvent?.internal) { + return; + } + const viewport = transformToViewport(event.transform); // we need to remember it here, because it's always 0 in the "zoom" event @@ -155,7 +185,7 @@ export function createPanZoomHandler({ onTransformChange([event.transform.x, event.transform.y, event.transform.k]); - if (onPanZoom) { + if (onPanZoom && !event.sourceEvent?.internal) { onPanZoom?.(event.sourceEvent as MouseEvent | TouchEvent, transformToViewport(event.transform)); } }; @@ -170,6 +200,9 @@ export function createPanZoomEndHandler({ onPaneContextMenu, }: PanZoomEndParams) { return (event: D3ZoomEvent) => { + if (event.sourceEvent?.internal) { + return; + } zoomPanValues.isZoomingOrPanning = false; if ( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b1b4d1c3c..d63f897bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,8 +99,8 @@ importers: specifier: ^6.3.0 version: registry.npmjs.org/react-router-dom@6.12.1(react-dom@18.2.0)(react@18.2.0) zustand: - specifier: ^4.3.1 - version: registry.npmjs.org/zustand@4.3.8(react@18.2.0) + specifier: ^4.4.1 + version: registry.npmjs.org/zustand@4.4.1(@types/react@18.2.12)(react@18.2.0) devDependencies: '@cypress/skip-test': specifier: ^2.6.1 @@ -2421,7 +2421,7 @@ packages: '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@5.60.0(typescript@5.1.3) eslint: registry.npmjs.org/eslint@8.43.0 eslint-scope: registry.npmjs.org/eslint-scope@5.1.1 - semver: registry.npmjs.org/semver@7.5.1 + semver: registry.npmjs.org/semver@7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -4140,7 +4140,7 @@ packages: dependencies: acorn: registry.npmjs.org/acorn@8.8.2 acorn-jsx: registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.8.2) - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true registry.npmjs.org/esprima@4.0.1: @@ -5076,14 +5076,6 @@ packages: ci-info: registry.npmjs.org/ci-info@3.8.0 dev: true - registry.npmjs.org/is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz} - name: is-core-module - version: 2.12.1 - dependencies: - has: registry.npmjs.org/has@1.0.3 - dev: true - registry.npmjs.org/is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz} name: is-core-module @@ -6772,7 +6764,7 @@ packages: version: 1.22.2 hasBin: true dependencies: - is-core-module: registry.npmjs.org/is-core-module@2.12.1 + is-core-module: registry.npmjs.org/is-core-module@2.13.0 path-parse: registry.npmjs.org/path-parse@1.0.7 supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag@1.0.0 dev: true @@ -8338,30 +8330,34 @@ packages: engines: {node: '>=10'} dev: true - registry.npmjs.org/zustand@4.3.8(react@18.2.0): - resolution: {integrity: sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz} - id: registry.npmjs.org/zustand/4.3.8 + registry.npmjs.org/zustand@4.4.0(@types/react@18.2.12)(react@18.2.0): + resolution: {integrity: sha512-2dq6wq4dSxbiPTamGar0NlIG/av0wpyWZJGeQYtUOLegIUvhM2Bf86ekPlmgpUtS5uR7HyetSiktYrGsdsyZgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.4.0.tgz} + id: registry.npmjs.org/zustand/4.4.0 name: zustand - version: 4.3.8 + version: 4.4.0 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.12 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/zustand@4.4.0(@types/react@18.2.12)(react@18.2.0): - resolution: {integrity: sha512-2dq6wq4dSxbiPTamGar0NlIG/av0wpyWZJGeQYtUOLegIUvhM2Bf86ekPlmgpUtS5uR7HyetSiktYrGsdsyZgQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.4.0.tgz} - id: registry.npmjs.org/zustand/4.4.0 + registry.npmjs.org/zustand@4.4.1(@types/react@18.2.12)(react@18.2.0): + resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/zustand/-/zustand-4.4.1.tgz} + id: registry.npmjs.org/zustand/4.4.1 name: zustand - version: 4.4.0 + version: 4.4.1 engines: {node: '>=12.7.0'} peerDependencies: '@types/react': '>=16.8' From a096efbcfef6ee003d2e89b71bde4dcfbcaad497 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 16 Aug 2023 13:56:52 +0200 Subject: [PATCH 0136/1093] feat(svelte): add panActivationKey --- package.json | 2 + packages/svelte/package.json | 2 +- .../example-components/Header/Header.svelte | 1 + .../components/EdgeWrapper/EdgeWrapper.svelte | 5 +- .../src/lib/components/Handle/Handle.svelte | 2 + .../components/KeyHandler/KeyHandler.svelte | 32 ++++++++++- .../src/lib/components/KeyHandler/types.ts | 1 + .../components/NodeWrapper/NodeWrapper.svelte | 13 +++-- .../NodeRenderer/NodeRenderer.svelte | 2 - .../svelte/src/lib/container/Pane/Pane.svelte | 6 ++- .../container/SvelteFlow/SvelteFlow.svelte | 6 ++- .../src/lib/container/SvelteFlow/types.ts | 1 + .../svelte/src/lib/container/Zoom/Zoom.svelte | 6 ++- .../svelte/src/lib/store/initial-store.ts | 1 + packages/svelte/src/lib/types/edges.ts | 4 +- packages/svelte/src/lib/types/nodes.ts | 4 +- packages/svelte/src/routes/figma/+page.svelte | 54 +++++++++++++++++++ packages/system/src/xypanzoom/filter.ts | 1 + pnpm-lock.yaml | 10 ++-- 19 files changed, 128 insertions(+), 25 deletions(-) create mode 100644 packages/svelte/src/routes/figma/+page.svelte diff --git a/package.json b/package.json index 7a5cee96d..be5c86ad2 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "scripts": { "preinstall": "npx only-allow pnpm", "dev": "turbo run dev --parallel", + "dev:svelte": "turbo run dev --filter=svelte --filter=system", + "dev:react": "turbo run dev --filter=react", "build": "turbo run build", "test": "turbo run test", "lint": "turbo run lint", diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 5b782fc28..eee69f3d9 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -33,7 +33,7 @@ "access": "public" }, "dependencies": { - "@svelte-put/shortcut": "^2.0.0", + "@svelte-put/shortcut": "^3.0.0", "@xyflow/system": "workspace:*", "classcat": "^5.0.4" }, diff --git a/packages/svelte/src/example-components/Header/Header.svelte b/packages/svelte/src/example-components/Header/Header.svelte index 9467c391d..089aea871 100644 --- a/packages/svelte/src/example-components/Header/Header.svelte +++ b/packages/svelte/src/example-components/Header/Header.svelte @@ -6,6 +6,7 @@ 'customnode', 'drag-n-drop', 'edges', + 'figma', 'interaction', 'overview', 'stress', diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 02519cf71..b271bbf81 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -1,5 +1,5 @@ +
diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte index 9b2747db4..d31d07810 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte @@ -9,8 +9,9 @@ export let selectionKey: $$Props['selectionKey'] = 'Shift'; export let deleteKey: $$Props['deleteKey'] = 'Backspace'; + export let panActivationKey: $$Props['panActivationKey'] = ' '; - const { selectionKeyPressed, deleteKeyPressed } = useStore(); + const { selectionKeyPressed, deleteKeyPressed, panActivationKeyPressed } = useStore(); function isKeyObject(key?: KeyDefinition): key is KeyDefinitionObject { return typeof key === 'object'; @@ -21,6 +22,10 @@ $: deleteKeyString = typeof deleteKey === 'string' ? deleteKey : deleteKey!.key; $: deleteKeyModifier = isKeyObject(deleteKey) ? deleteKey?.modifier : []; + + $: panActivationKeyString = + typeof panActivationKey === 'string' ? panActivationKey : panActivationKey!.key; + $: panActivationKeyModifier = isKeyObject(panActivationKey) ? panActivationKey?.modifier : []; deleteKeyPressed.set(true) + callback: () => { + console.log('delete'); + deleteKeyPressed.set(true); + } } ], type: 'keydown' @@ -64,4 +72,24 @@ ], type: 'keyup' }} + use:shortcut={{ + trigger: [ + { + key: panActivationKeyString, + modifier: panActivationKeyModifier, + callback: () => panActivationKeyPressed.set(true) + } + ], + type: 'keydown' + }} + use:shortcut={{ + trigger: [ + { + key: panActivationKeyString, + modifier: panActivationKeyModifier, + callback: () => panActivationKeyPressed.set(false) + } + ], + type: 'keyup' + }} /> diff --git a/packages/svelte/src/lib/components/KeyHandler/types.ts b/packages/svelte/src/lib/components/KeyHandler/types.ts index 14e761671..70cc95a54 100644 --- a/packages/svelte/src/lib/components/KeyHandler/types.ts +++ b/packages/svelte/src/lib/components/KeyHandler/types.ts @@ -3,4 +3,5 @@ import type { KeyDefinition } from '$lib/types'; export type KeyHandlerProps = { selectionKey?: KeyDefinition; deleteKey?: KeyDefinition; + panActivationKey?: KeyDefinition; }; diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index bb9563561..3a8d028cb 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -1,5 +1,11 @@ +
{ - if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) { + if (Array.isArray(_panOnDrag) && _panOnDrag?.includes(2)) { event.preventDefault(); return; } @@ -168,6 +170,8 @@ }; + +
- + & { nodeTypes?: NodeTypes; edgeTypes?: EdgeTypes; selectionKey?: KeyDefinition; + panActivationKey?: KeyDefinition; deleteKey?: KeyDefinition; fitView?: boolean; nodeOrigin?: NodeOrigin; diff --git a/packages/svelte/src/lib/container/Zoom/Zoom.svelte b/packages/svelte/src/lib/container/Zoom/Zoom.svelte index 01da84190..1a4a7008c 100644 --- a/packages/svelte/src/lib/container/Zoom/Zoom.svelte +++ b/packages/svelte/src/lib/container/Zoom/Zoom.svelte @@ -27,10 +27,12 @@ maxZoom, dragging, translateExtent, - lib + lib, + panActivationKeyPressed } = useStore(); $: viewPort = initialViewport || { x: 0, y: 0, zoom: 1 }; + $: _panOnDrag = $panActivationKeyPressed || panOnDrag;
({ selectionKeyPressed: writable(false), multiselectionKeyPressed: writable(false), deleteKeyPressed: writable(false), + panActivationKeyPressed: writable(false), selectionRectMode: writable(null), selectionMode: writable(SelectionMode.Partial), nodeTypes: writable(initialNodeTypes), diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 6ef9f083b..3f68b509e 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { SvelteComponentTyped } from 'svelte'; +import type { SvelteComponent, ComponentType } from 'svelte'; import type { EdgeBase, BezierPathOptions, @@ -45,7 +45,7 @@ export type EdgeProps = Omit & targetHandleId?: string | null; }; -export type EdgeTypes = Record>; +export type EdgeTypes = Record>>; export type DefaultEdgeOptions = DefaultEdgeOptionsBase; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index d36e2a966..292ae4fa5 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { SvelteComponentTyped } from 'svelte'; +import type { ComponentType, SvelteComponent } from 'svelte'; import type { NodeBase, NodeProps } from '@xyflow/system'; // @todo: currently the helper function only like Node from '@reactflow/core' @@ -14,6 +14,6 @@ export type Node< style?: string; }; -export type NodeTypes = Record>; +export type NodeTypes = Record>>; export type DefaultNodeOptions = Partial>; diff --git a/packages/svelte/src/routes/figma/+page.svelte b/packages/svelte/src/routes/figma/+page.svelte new file mode 100644 index 000000000..b8039f460 --- /dev/null +++ b/packages/svelte/src/routes/figma/+page.svelte @@ -0,0 +1,54 @@ + + + + + + diff --git a/packages/system/src/xypanzoom/filter.ts b/packages/system/src/xypanzoom/filter.ts index 3404ca67d..232c66af7 100644 --- a/packages/system/src/xypanzoom/filter.ts +++ b/packages/system/src/xypanzoom/filter.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { isWrappedWithClass } from './utils'; export type FilterParams = { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 008b4d78d..c3320495a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,8 +200,8 @@ importers: packages/svelte: dependencies: '@svelte-put/shortcut': - specifier: ^2.0.0 - version: registry.npmjs.org/@svelte-put/shortcut@2.0.0 + specifier: ^3.0.0 + version: registry.npmjs.org/@svelte-put/shortcut@3.0.0 '@xyflow/system': specifier: workspace:* version: link:../system @@ -1797,10 +1797,10 @@ packages: version: 2.0.0 dev: true - registry.npmjs.org/@svelte-put/shortcut@2.0.0: - resolution: {integrity: sha512-dDyxIFlRz+W6wxwQtl2jUen0rX8ofV2VBWaJdz0QehLb0IMDzP3aWM9W4k8cAZQIGmTT0adr1+Gt7HPPUugcpQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-2.0.0.tgz} + registry.npmjs.org/@svelte-put/shortcut@3.0.0: + resolution: {integrity: sha512-nZg3pwpTi9wUsvQPlqOzEsxZcF2jmY5j+VBq/20IUjjd2OpM92XqZAga0PCCjE6OuEobOt58UMnC2QZgOvk0tQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-3.0.0.tgz} name: '@svelte-put/shortcut' - version: 2.0.0 + version: 3.0.0 dev: false registry.npmjs.org/@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.22.6): From 9e5d94291ce20f7196d2fbb0c51614cde8cecd54 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 17 Aug 2023 10:55:17 +0200 Subject: [PATCH 0137/1093] refactor(svelte): prevent unnecessary re-renders for node updates, selected always boolean #3336 --- .../container/NodeRenderer/NodeRenderer.svelte | 2 +- .../svelte/src/lib/container/Pane/Pane.svelte | 18 ++++++++++++++++-- packages/svelte/src/lib/store/index.ts | 9 +++++++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index 48e7ff9e3..154e55781 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -42,7 +42,7 @@ n.id); + const prevSelectedEdgeIds = getConnectedEdges(selectedNodes, $edges).map((e) => e.id); selectedNodes = getNodesInside( $nodes, @@ -125,8 +127,20 @@ const selectedEdgeIds = getConnectedEdges(selectedNodes, $edges).map((e) => e.id); const selectedNodeIds = selectedNodes.map((n) => n.id); - nodes.update((nodes) => nodes.map(toggleSelected(selectedNodeIds))); - edges.update((edges) => edges.map(toggleSelected(selectedEdgeIds))); + // this prevents unnecessary updates while updating the selection rectangle + if ( + prevSelectedNodeIds.length !== selectedNodeIds.length || + selectedNodeIds.some((id) => !prevSelectedNodeIds.includes(id)) + ) { + nodes.update((nodes) => nodes.map(toggleSelected(selectedNodeIds))); + } + + if ( + prevSelectedEdgeIds.length !== selectedEdgeIds.length || + selectedEdgeIds.some((id) => !prevSelectedEdgeIds.includes(id)) + ) { + edges.update((edges) => edges.map(toggleSelected(selectedEdgeIds))); + } selectionRectMode.set('user'); selectionRect.set(nextUserSelectRect); diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index b548f2578..5c41413e7 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -174,8 +174,13 @@ export function createStore(): SvelteFlowStore { } function unselectNodesAndEdges() { - store.nodes.update((ns) => ns.map(resetSelectedItem)); - store.edges.update((es) => es.map(resetSelectedItem)); + if (get(store.nodes).some((node) => node.selected)) { + store.nodes.update((ns) => ns.map(resetSelectedItem)); + } + + if (get(store.edges).some((edge) => edge.selected)) { + store.edges.update((es) => es.map(resetSelectedItem)); + } } store.deleteKeyPressed.subscribe((deleteKeyPressed) => { From c0f04b2c71b07218d0fe4079cf5e72431b8d5e15 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 17 Aug 2023 11:04:58 +0200 Subject: [PATCH 0138/1093] refactor(svelte): elevate nodes by default --- .../svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte | 1 + packages/svelte/src/lib/store/utils.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 3a8d028cb..549139716 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -96,6 +96,7 @@ class:draggable class:connectable class:parent={isParent} + style:z-index={zIndex} style:transform="translate({positionOrigin?.x ?? 0}px, {positionOrigin?.y ?? 0}px)" {style} on:click={onSelectNodeHandler} diff --git a/packages/svelte/src/lib/store/utils.ts b/packages/svelte/src/lib/store/utils.ts index 3c94d3156..949e2272c 100644 --- a/packages/svelte/src/lib/store/utils.ts +++ b/packages/svelte/src/lib/store/utils.ts @@ -74,7 +74,7 @@ export const createNodesStore = ( const { subscribe, set, update } = writable([]); let value = nodes; let defaults = {}; - let elevateNodesOnSelect = false; + let elevateNodesOnSelect = true; const _set = (nds: Node[]): Node[] => { const nextNodes = updateNodes(nds, value, { From 208ee5b944c570566163dc62bc5f47f06050f733 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 21 Aug 2023 18:01:11 +0200 Subject: [PATCH 0139/1093] fix(step-edge): handle routes for same positions --- .../src/lib/components/KeyHandler/KeyHandler.svelte | 1 - packages/svelte/src/routes/customnode/+page.svelte | 7 +++++++ packages/system/src/utils/edges/smoothstep-edge.ts | 12 ++++++------ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte index d31d07810..a7c852ab9 100644 --- a/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte +++ b/packages/svelte/src/lib/components/KeyHandler/KeyHandler.svelte @@ -55,7 +55,6 @@ key: deleteKeyString, modifier: deleteKeyModifier, callback: () => { - console.log('delete'); deleteKeyPressed.set(true); } } diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte index 384c04206..28d920385 100644 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ b/packages/svelte/src/routes/customnode/+page.svelte @@ -57,6 +57,13 @@ style: 'border: 1px solid #777; padding: 10px', position: { x: 250, y: 50 } }, + { + id: '2a', + type: 'colorNode', + data: { onChange: onChange, color: $bgColor }, + style: 'border: 1px solid #777; padding: 10px', + position: { x: 250, y: 520 } + }, { id: '3', type: 'output', diff --git a/packages/system/src/utils/edges/smoothstep-edge.ts b/packages/system/src/utils/edges/smoothstep-edge.ts index 60e0e9dc5..ba3e95a98 100644 --- a/packages/system/src/utils/edges/smoothstep-edge.ts +++ b/packages/system/src/utils/edges/smoothstep-edge.ts @@ -121,9 +121,9 @@ function getPoints({ if (diff <= offset) { const gapOffset = Math.min(offset - 1, offset - diff); if (sourceDir[dirAccessor] === currDir) { - sourceGapOffset[dirAccessor] = gapOffset; + sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset; } else { - targetGapOffset[dirAccessor] = gapOffset; + targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset; } } } @@ -143,8 +143,8 @@ function getPoints({ } } - const sourceGapPoint = { x: sourceGapped.x - sourceGapOffset.x, y: sourceGapped.y - sourceGapOffset.y }; - const targetGapPoint = { x: targetGapped.x - targetGapOffset.x, y: targetGapped.y - targetGapOffset.y }; + const sourceGapPoint = { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y }; + const targetGapPoint = { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y }; const maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x)); const maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y)); @@ -160,9 +160,9 @@ function getPoints({ const pathPoints = [ source, - { x: sourceGapped.x - sourceGapOffset.x, y: sourceGapped.y - sourceGapOffset.y }, + { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y }, ...points, - { x: targetGapped.x - targetGapOffset.x, y: targetGapped.y - targetGapOffset.y }, + { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y }, target, ]; From 8614297650057281c74b7523f97e221a45194229 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 21 Aug 2023 18:12:29 +0200 Subject: [PATCH 0140/1093] chore(svelte): use on:connect in custom node --- .../svelte/src/routes/customnode/+page.svelte | 16 ++++++++++++++-- .../routes/customnode/CustomNode/Custom.svelte | 12 +++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte index 28d920385..e2c287a41 100644 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ b/packages/svelte/src/routes/customnode/+page.svelte @@ -10,7 +10,8 @@ Position, type Node, type NodeTypes, - type Edge + type Edge, + type Connection } from '../../lib/index'; import { CustomNode } from './CustomNode'; @@ -102,9 +103,20 @@ animated: true } ]); + + const onConnect = (connection: Connection) => { + console.log('on connect', connection); + }; - + diff --git a/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte b/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte index 3158de2af..639b79574 100644 --- a/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte +++ b/packages/svelte/src/routes/customnode/CustomNode/Custom.svelte @@ -6,10 +6,16 @@ export let data: { color: string; onChange: () => void } = { color: '#111', onChange: () => {} }; - +
Custom Color Picker Node: {data.color}
- - + + From 77b4d57ebbbba6b091e22d862694dec50f22e03c Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 21 Aug 2023 18:18:17 +0200 Subject: [PATCH 0141/1093] chore(packages): bump --- packages/svelte/package.json | 2 +- packages/system/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index eee69f3d9..fdfcaeb66 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.11", + "version": "0.0.12", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", diff --git a/packages/system/package.json b/packages/system/package.json index d59801ed4..282501fa9 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/system", - "version": "0.0.1", + "version": "0.0.2", "description": "xyflow core system that powers React Flow and Svelte Flow.", "keywords": [ "node-based UI", From a0921e7a9b95bbc12d6e8a22a923c698fb53d2f6 Mon Sep 17 00:00:00 2001 From: Moritz Klack Date: Tue, 22 Aug 2023 10:56:23 +0200 Subject: [PATCH 0142/1093] chore(svelte-readme): update example --- packages/svelte/README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/svelte/README.md b/packages/svelte/README.md index fc7477c34..e9376ab3e 100644 --- a/packages/svelte/README.md +++ b/packages/svelte/README.md @@ -24,13 +24,11 @@ A basic flow looks like this: import { writable } from 'svelte/store'; import { SvelteFlow, - SvelteFlowProvider, Controls, Background, BackgroundVariant, MiniMap, - Panel, - type NodeTypes + type SnapGrid } from '@xyflow/svelte'; // We are using writables for the nodes and edges to sync them easily. When a user drags a node for example, Svelte Flow updates its position. @@ -60,16 +58,12 @@ A basic flow looks like this: label: 'Edge Text' } ]); - - const snapGrid = [25, 25]; console.log('on node click', event)} > @@ -104,4 +98,4 @@ You can now access the examples under http://127.0.0.1:5173 # License -Svelte Flow is MIT Licensed. \ No newline at end of file +Svelte Flow is MIT Licensed. From d2c23c5149b009d90a54f4c172f6b90bf71a35c0 Mon Sep 17 00:00:00 2001 From: Moritz Klack Date: Tue, 22 Aug 2023 10:56:47 +0200 Subject: [PATCH 0143/1093] chore(svelte-readme): cleanup --- packages/svelte/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/svelte/README.md b/packages/svelte/README.md index e9376ab3e..314e11c81 100644 --- a/packages/svelte/README.md +++ b/packages/svelte/README.md @@ -28,7 +28,6 @@ A basic flow looks like this: Background, BackgroundVariant, MiniMap, - type SnapGrid } from '@xyflow/svelte'; // We are using writables for the nodes and edges to sync them easily. When a user drags a node for example, Svelte Flow updates its position. From bd922889b4346844d77a64bf3e9e7922e895e90c Mon Sep 17 00:00:00 2001 From: Moritz Klack Date: Thu, 24 Aug 2023 14:02:57 +0200 Subject: [PATCH 0144/1093] feat(styles): one stylesheet source for react and svelte (#3350) * feat(styles): create stylesheets for react and svelte based on one source * refactor(styling): cleanup * refactor(postcss): share a config * refactor(postcss): replace env hack with env file --- .../src/examples/CustomNode/index.tsx | 3 +- package.json | 6 - packages/react/package.json | 10 +- .../Background/Background.tsx | 37 +- .../Background/Patterns.tsx | 27 +- .../additional-components/Background/types.ts | 4 +- .../src/container/NodeRenderer/index.tsx | 2 +- packages/react/src/container/Pane/index.tsx | 2 +- .../react/src/container/ZoomPane/index.tsx | 2 +- packages/react/src/styles/base.css | 29 +- packages/react/src/styles/init.css | 238 ----- packages/react/src/styles/node-resizer.css | 105 --- packages/react/src/styles/style.css | 112 +-- .../react/src/styles/{index.ts => utils.ts} | 0 packages/svelte/package.json | 13 +- .../components/Attribution/Attribution.svelte | 14 - .../lib/components/BaseEdge/BaseEdge.svelte | 27 - .../ConnectionLine/ConnectionLine.svelte | 24 - .../components/EdgeWrapper/EdgeWrapper.svelte | 7 - .../src/lib/components/Handle/Handle.svelte | 44 +- .../components/NodeWrapper/NodeWrapper.svelte | 33 +- .../lib/components/Selection/Selection.svelte | 8 - .../EdgeRenderer/EdgeRenderer.svelte | 2 - .../NodeRenderer/NodeRenderer.svelte | 5 +- .../svelte/src/lib/container/Pane/Pane.svelte | 10 - .../src/lib/container/Panel/Panel.svelte | 29 - .../container/SvelteFlow/SvelteFlow.svelte | 28 - .../lib/container/Viewport/Viewport.svelte | 3 - .../lib/plugins/Background/Background.svelte | 9 +- .../lib/plugins/Background/DotPattern.svelte | 21 +- .../lib/plugins/Background/LinePattern.svelte | 18 +- .../src/lib/plugins/Background/types.ts | 1 + .../lib/plugins/Controls/ControlButton.svelte | 56 -- .../svelte/src/routes/overview/+page.svelte | 6 +- .../Custom.svelte => CustomEdge.svelte} | 2 +- .../src/routes/overview/CustomEdge/index.ts | 1 - .../Custom.svelte => CustomNode.svelte} | 2 +- .../src/routes/overview/CustomNode/index.ts | 1 - packages/svelte/src/styles/base.css | 3 + packages/svelte/src/styles/style.css | 3 + packages/svelte/vite.config.ts | 5 +- packages/system/src/styles/base.css | 33 + packages/system/src/styles/init.css | 298 +++++++ packages/system/src/styles/node-resizer.css | 105 +++ packages/system/src/styles/style.css | 138 +++ pnpm-lock.yaml | 829 +++++++++++++++--- tooling/postcss-config/postcss.config.js | 29 +- 47 files changed, 1422 insertions(+), 962 deletions(-) delete mode 100644 packages/react/src/styles/init.css delete mode 100644 packages/react/src/styles/node-resizer.css rename packages/react/src/styles/{index.ts => utils.ts} (100%) rename packages/svelte/src/routes/overview/{CustomEdge/Custom.svelte => CustomEdge.svelte} (97%) delete mode 100644 packages/svelte/src/routes/overview/CustomEdge/index.ts rename packages/svelte/src/routes/overview/{CustomNode/Custom.svelte => CustomNode.svelte} (89%) delete mode 100644 packages/svelte/src/routes/overview/CustomNode/index.ts create mode 100644 packages/svelte/src/styles/base.css create mode 100644 packages/svelte/src/styles/style.css create mode 100644 packages/system/src/styles/base.css create mode 100644 packages/system/src/styles/init.css create mode 100644 packages/system/src/styles/node-resizer.css create mode 100644 packages/system/src/styles/style.css diff --git a/examples/vite-app/src/examples/CustomNode/index.tsx b/examples/vite-app/src/examples/CustomNode/index.tsx index 72c581262..9c62f46af 100644 --- a/examples/vite-app/src/examples/CustomNode/index.tsx +++ b/examples/vite-app/src/examples/CustomNode/index.tsx @@ -11,6 +11,7 @@ import { Connection, useNodesState, useEdgesState, + Background, } from '@xyflow/react'; import ColorSelectorNode from './ColorSelectorNode'; @@ -133,7 +134,6 @@ const CustomNodeFlow = () => { onNodeClick={onNodeClick} onConnect={onConnect} onNodeDragStop={onNodeDragStop} - style={{ background: bgColor }} onInit={onInit} nodeTypes={nodeTypes} connectionLineStyle={connectionLineStyle} @@ -158,6 +158,7 @@ const CustomNodeFlow = () => { }} /> + ); }; diff --git a/package.json b/package.json index be5c86ad2..e9583c5df 100644 --- a/package.json +++ b/package.json @@ -22,17 +22,11 @@ "@changesets/cli": "^2.25.0", "@typescript-eslint/eslint-plugin": "latest", "@typescript-eslint/parser": "latest", - "autoprefixer": "^10.4.8", "concurrently": "^7.6.0", "eslint": "^8.22.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "latest", - "postcss": "^8.4.21", - "postcss-cli": "^10.1.0", - "postcss-combine-duplicated-selectors": "^10.0.3", - "postcss-import": "^15.1.0", - "postcss-nested": "^6.0.0", "prettier": "^2.7.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/react/package.json b/packages/react/package.json index dae94edf4..1c3194d53 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -42,7 +42,7 @@ "scripts": { "dev": "concurrently \"rollup --config node:@xyflow/rollup-config --watch\" pnpm:css-watch", "build": "rollup --config node:@xyflow/rollup-config --environment NODE_ENV:production && npm run css", - "css": "postcss src/styles/{base,style}.css --config ./../../tooling/postcss-config/postcss.config.js --dir dist", + "css": "postcss src/styles/{base,style}.css --config ./../../tooling/postcss-config/ --dir dist ", "css-watch": "pnpm css --watch", "lint": "eslint --ext .js,.jsx,.ts,.tsx src", "typecheck": "tsc --noEmit" @@ -70,6 +70,14 @@ "@xyflow/eslint-config": "workspace:*", "@xyflow/rollup-config": "workspace:*", "@xyflow/tsconfig": "workspace:*", + "autoprefixer": "^10.4.15", + "cssnano": "^6.0.1", + "postcss": "^8.4.21", + "postcss-cli": "^10.1.0", + "postcss-combine-duplicated-selectors": "^10.0.3", + "postcss-import": "^15.1.0", + "postcss-nested": "^6.0.0", + "postcss-rename": "^0.6.1", "react": "^18.2.0", "typescript": "5.1.3" }, diff --git a/packages/react/src/additional-components/Background/Background.tsx b/packages/react/src/additional-components/Background/Background.tsx index 31a280d08..73664f9fe 100644 --- a/packages/react/src/additional-components/Background/Background.tsx +++ b/packages/react/src/additional-components/Background/Background.tsx @@ -1,4 +1,4 @@ -import { memo, useRef } from 'react'; +import { CSSProperties, memo, useRef } from 'react'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; @@ -6,12 +6,7 @@ import { useStore } from '../../hooks/useStore'; import { type ReactFlowState } from '../../types'; import { BackgroundProps, BackgroundVariant } from './types'; import { DotPattern, LinePattern } from './Patterns'; - -const defaultColor = { - [BackgroundVariant.Dots]: '#91919a', - [BackgroundVariant.Lines]: '#eee', - [BackgroundVariant.Cross]: '#e2e2e2', -}; +import { containerStyle } from '../../styles/utils'; const defaultSize = { [BackgroundVariant.Dots]: 1, @@ -31,12 +26,13 @@ function Background({ lineWidth = 1, offset = 2, color, + bgColor, style, className, + patternClassName, }: BackgroundProps) { const ref = useRef(null); const { transform, patternId } = useStore(selector, shallow); - const patternColor = color || defaultColor[variant]; const patternSize = size || defaultSize[variant]; const isDots = variant === BackgroundVariant.Dots; const isCross = variant === BackgroundVariant.Cross; @@ -53,14 +49,14 @@ function Background({ return ( @@ -74,9 +70,14 @@ function Background({ patternTransform={`translate(-${patternOffset[0]},-${patternOffset[1]})`} > {isDots ? ( - + ) : ( - + )} diff --git a/packages/react/src/additional-components/Background/Patterns.tsx b/packages/react/src/additional-components/Background/Patterns.tsx index 8e6007b9f..1fc71ae55 100644 --- a/packages/react/src/additional-components/Background/Patterns.tsx +++ b/packages/react/src/additional-components/Background/Patterns.tsx @@ -1,30 +1,31 @@ +import cc from 'classcat'; + +import { BackgroundVariant } from './types'; + type LinePatternProps = { dimensions: [number, number]; + variant: BackgroundVariant; lineWidth?: number; - color: string; + className?: string; }; -export function LinePattern({ - color, - dimensions, - lineWidth, -}: LinePatternProps) { +export function LinePattern({ dimensions, lineWidth, variant, className }: LinePatternProps) { return ( ); } type DotPatternProps = { radius: number; - color: string; + className?: string; }; -export function DotPattern({ color, radius }: DotPatternProps) { - return ; +export function DotPattern({ radius, className }: DotPatternProps) { + return ( + + ); } diff --git a/packages/react/src/additional-components/Background/types.ts b/packages/react/src/additional-components/Background/types.ts index f4cae1b5c..5d21b23f6 100644 --- a/packages/react/src/additional-components/Background/types.ts +++ b/packages/react/src/additional-components/Background/types.ts @@ -7,9 +7,11 @@ export enum BackgroundVariant { } export type BackgroundProps = { - id?: string + id?: string; color?: string; + bgColor?: string; className?: string; + patternClassName?: string; gap?: number | [number, number]; size?: number; offset?: number; diff --git a/packages/react/src/container/NodeRenderer/index.tsx b/packages/react/src/container/NodeRenderer/index.tsx index f09f65639..34fb4c55f 100644 --- a/packages/react/src/container/NodeRenderer/index.tsx +++ b/packages/react/src/container/NodeRenderer/index.tsx @@ -4,7 +4,7 @@ import { internalsSymbol, errorMessages, Position, clampPosition, getPositionWit import useVisibleNodes from '../../hooks/useVisibleNodes'; import { useStore } from '../../hooks/useStore'; -import { containerStyle } from '../../styles'; +import { containerStyle } from '../../styles/utils'; import { GraphViewProps } from '../GraphView'; import type { NodeTypesWrapped, ReactFlowState, WrapNodeProps } from '../../types'; diff --git a/packages/react/src/container/Pane/index.tsx b/packages/react/src/container/Pane/index.tsx index 84e38b55c..d5d951ca9 100644 --- a/packages/react/src/container/Pane/index.tsx +++ b/packages/react/src/container/Pane/index.tsx @@ -8,7 +8,7 @@ import cc from 'classcat'; import { getNodesInside, getEventPosition, SelectionMode } from '@xyflow/system'; import UserSelection from '../../components/UserSelection'; -import { containerStyle } from '../../styles'; +import { containerStyle } from '../../styles/utils'; import { useStore, useStoreApi } from '../../hooks/useStore'; import { getSelectionChanges, getConnectedEdges } from '../../utils'; import type { ReactFlowProps, ReactFlowState, NodeChange, EdgeChange } from '../../types'; diff --git a/packages/react/src/container/ZoomPane/index.tsx b/packages/react/src/container/ZoomPane/index.tsx index f04ed0f47..e24056cf4 100644 --- a/packages/react/src/container/ZoomPane/index.tsx +++ b/packages/react/src/container/ZoomPane/index.tsx @@ -6,7 +6,7 @@ import { XYPanZoom, PanOnScrollMode, type Transform, type PanZoomInstance } from import useKeyPress from '../../hooks/useKeyPress'; import useResizeHandler from '../../hooks/useResizeHandler'; import { useStore, useStoreApi } from '../../hooks/useStore'; -import { containerStyle } from '../../styles'; +import { containerStyle } from '../../styles/utils'; import type { FlowRendererProps } from '../FlowRenderer'; import type { ReactFlowState } from '../../types'; diff --git a/packages/react/src/styles/base.css b/packages/react/src/styles/base.css index 129006b31..d6be5b101 100644 --- a/packages/react/src/styles/base.css +++ b/packages/react/src/styles/base.css @@ -1,28 +1,3 @@ /* this will be exported as base.css and can be used for a basic styling */ -@import './init.css'; - -.react-flow__handle { - background-color: #333; -} - -.react-flow__node-default, -.react-flow__node-input, -.react-flow__node-output, -.react-flow__node-group { - border-width: 1px; - border-style: solid; - border-color: #bbb; - - &.selected, - &:focus, - &:focus-visible { - outline: none; - border: 1px solid #555; - } -} - -.react-flow__nodesselection-rect, -.react-flow__selection { - background: rgba(150, 150, 180, 0.1); - border: 1px dotted rgba(155, 155, 155, 0.8); -} +@import '../../../system/src/styles/init.css'; +@import '../../../system/src/styles/base.css'; diff --git a/packages/react/src/styles/init.css b/packages/react/src/styles/init.css deleted file mode 100644 index 6b4f5b870..000000000 --- a/packages/react/src/styles/init.css +++ /dev/null @@ -1,238 +0,0 @@ -/* these are the necessary styles for React Flow, they get used by base.css and style.css */ -.react-flow__container { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; -} - -.react-flow__pane { - z-index: 1; - cursor: grab; - - &.selection { - cursor: pointer; - } - - &.dragging { - cursor: grabbing; - } -} - -.react-flow__viewport { - transform-origin: 0 0; - z-index: 2; - pointer-events: none; -} - -.react-flow__renderer { - z-index: 4; -} - -.react-flow__selection { - z-index: 6; -} - -.react-flow__nodesselection-rect:focus, -.react-flow__nodesselection-rect:focus-visible { - outline: none; -} - -.react-flow .react-flow__edges { - pointer-events: none; - overflow: visible; -} - -.react-flow__edge-path, -.react-flow__connection-path { - stroke: #b1b1b7; - stroke-width: 1; - fill: none; -} - -.react-flow__edge { - pointer-events: visibleStroke; - cursor: pointer; - - &.animated path { - stroke-dasharray: 5; - animation: dashdraw 0.5s linear infinite; - } - - &.animated path.react-flow__edge-interaction { - stroke-dasharray: none; - animation: none; - } - - &.inactive { - pointer-events: none; - } - - &.selected, - &:focus, - &:focus-visible { - outline: none; - } - - &.selected .react-flow__edge-path, - &:focus .react-flow__edge-path, - &:focus-visible .react-flow__edge-path { - stroke: #555; - } - - &-textwrapper { - pointer-events: all; - } - - &-textbg { - fill: white; - } - - .react-flow__edge-text { - pointer-events: none; - user-select: none; - } -} - -.react-flow__connection { - pointer-events: none; - - .animated { - stroke-dasharray: 5; - animation: dashdraw 0.5s linear infinite; - } -} - -.react-flow__connectionline { - z-index: 1001; -} - -.react-flow__nodes { - pointer-events: none; - transform-origin: 0 0; -} - -.react-flow__node { - position: absolute; - user-select: none; - pointer-events: all; - transform-origin: 0 0; - box-sizing: border-box; - cursor: grab; - - &.dragging { - cursor: grabbing; - } -} - -.react-flow__nodesselection { - z-index: 3; - transform-origin: left top; - pointer-events: none; - - &-rect { - position: absolute; - pointer-events: all; - cursor: grab; - } -} - -.react-flow__handle { - position: absolute; - pointer-events: none; - min-width: 5px; - min-height: 5px; - - &.connectionindicator { - pointer-events: all; - cursor: crosshair; - } - - &-bottom { - top: auto; - left: 50%; - bottom: -4px; - transform: translate(-50%, 0); - } - - &-top { - left: 50%; - top: -4px; - transform: translate(-50%, 0); - } - - &-left { - top: 50%; - left: -4px; - transform: translate(0, -50%); - } - - &-right { - right: -4px; - top: 50%; - transform: translate(0, -50%); - } -} - -.react-flow__edgeupdater { - cursor: move; - pointer-events: all; -} - -.react-flow__panel { - position: absolute; - z-index: 5; - margin: 15px; - - &.top { - top: 0; - } - - &.bottom { - bottom: 0; - } - - &.left { - left: 0; - } - - &.right { - right: 0; - } - - &.center { - left: 50%; - transform: translateX(-50%); - } -} - -.react-flow__attribution { - font-size: 10px; - background: rgba(255, 255, 255, 0.5); - padding: 2px 3px; - margin: 0; - - a { - text-decoration: none; - color: #999; - } -} - -@keyframes dashdraw { - from { - stroke-dashoffset: 10; - } -} - -.react-flow__edgelabel-renderer { - position: absolute; - width: 100%; - height: 100%; - pointer-events: none; - user-select: none; -} - -.react-flow__minimap { - background-color: #fff; -} diff --git a/packages/react/src/styles/node-resizer.css b/packages/react/src/styles/node-resizer.css deleted file mode 100644 index f0113a53e..000000000 --- a/packages/react/src/styles/node-resizer.css +++ /dev/null @@ -1,105 +0,0 @@ -.react-flow__resize-control { - position: absolute; -} - -.react-flow__resize-control.left, -.react-flow__resize-control.right { - cursor: ew-resize; -} - -.react-flow__resize-control.top, -.react-flow__resize-control.bottom { - cursor: ns-resize; -} - -.react-flow__resize-control.top.left, -.react-flow__resize-control.bottom.right { - cursor: nwse-resize; -} - -.react-flow__resize-control.bottom.left, -.react-flow__resize-control.top.right { - cursor: nesw-resize; -} - -/* handle styles */ -.react-flow__resize-control.handle { - width: 4px; - height: 4px; - border: 1px solid #fff; - border-radius: 1px; - background-color: #3367d9; - transform: translate(-50%, -50%); -} - -.react-flow__resize-control.handle.left { - left: 0; - top: 50%; -} -.react-flow__resize-control.handle.right { - left: 100%; - top: 50%; -} -.react-flow__resize-control.handle.top { - left: 50%; - top: 0; -} -.react-flow__resize-control.handle.bottom { - left: 50%; - top: 100%; -} -.react-flow__resize-control.handle.top.left { - left: 0; -} -.react-flow__resize-control.handle.bottom.left { - left: 0; -} -.react-flow__resize-control.handle.top.right { - left: 100%; -} -.react-flow__resize-control.handle.bottom.right { - left: 100%; -} - -/* line styles */ -.react-flow__resize-control.line { - border-color: #3367d9; - border-width: 0; - border-style: solid; -} - -.react-flow__resize-control.line.left, -.react-flow__resize-control.line.right { - width: 1px; - transform: translate(-50%, 0); - top: 0; - height: 100%; -} - -.react-flow__resize-control.line.left { - left: 0; - border-left-width: 1px; -} - -.react-flow__resize-control.line.right { - left: 100%; - border-right-width: 1px; -} - -.react-flow__resize-control.line.top, -.react-flow__resize-control.line.bottom { - height: 1px; - transform: translate(0, -50%); - left: 0; - width: 100%; -} - -.react-flow__resize-control.line.top { - top: 0; - border-top-width: 1px; -} - -.react-flow__resize-control.line.bottom { - border-bottom-width: 1px; - top: 100%; -} diff --git a/packages/react/src/styles/style.css b/packages/react/src/styles/style.css index 4ac170c49..406af4e9d 100644 --- a/packages/react/src/styles/style.css +++ b/packages/react/src/styles/style.css @@ -1,110 +1,4 @@ /* this gets exported as style.css and can be used for the default theming */ -@import './init.css'; -@import './node-resizer.css'; - -.react-flow__edge { - &.updating { - .react-flow__edge-path { - stroke: #777; - } - } - - &-text { - font-size: 10px; - } -} - -.react-flow__node.selectable { - &:focus, - &:focus-visible { - outline: none; - } -} - -.react-flow__node-default, -.react-flow__node-input, -.react-flow__node-output, -.react-flow__node-group { - padding: 10px; - border-radius: 3px; - width: 150px; - font-size: 12px; - color: #222; - text-align: center; - border-width: 1px; - border-style: solid; - border-color: #1a192b; - background-color: white; - - &.selectable { - &:hover { - box-shadow: 0 1px 4px 1px rgba(0, 0, 0, 0.08); - } - - &.selected, - &:focus, - &:focus-visible { - box-shadow: 0 0 0 0.5px #1a192b; - } - } -} - -.react-flow__node-group { - background-color: rgba(240, 240, 240, 0.25); -} - -.react-flow__nodesselection-rect, -.react-flow__selection { - background: rgba(0, 89, 220, 0.08); - border: 1px dotted rgba(0, 89, 220, 0.8); - - &:focus, - &:focus-visible { - outline: none; - } -} - -.react-flow__handle { - width: 6px; - height: 6px; - background: #1a192b; - border: 1px solid white; - border-radius: 100%; -} - -.react-flow__controls { - box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.08); - - &-button { - border: none; - background: #fefefe; - border-bottom: 1px solid #eee; - box-sizing: content-box; - display: flex; - justify-content: center; - align-items: center; - width: 16px; - height: 16px; - cursor: pointer; - user-select: none; - padding: 5px; - - &:hover { - background: #f4f4f4; - } - - svg { - width: 100%; - max-width: 12px; - max-height: 12px; - } - - &:disabled { - pointer-events: none; - - svg { - fill-opacity: 0.4; - } - } - } -} +@import '../../../system/src/styles/init.css'; +@import '../../../system/src/styles/style.css'; +@import '../../../system/src/styles/node-resizer.css'; diff --git a/packages/react/src/styles/index.ts b/packages/react/src/styles/utils.ts similarity index 100% rename from packages/react/src/styles/index.ts rename to packages/react/src/styles/utils.ts diff --git a/packages/svelte/package.json b/packages/svelte/package.json index fdfcaeb66..c8fc6a5ee 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -12,10 +12,12 @@ "xyflow" ], "scripts": { - "dev": "vite dev", + "dev": "concurrently \"vite dev\" pnpm:css-watch", "build": "svelte-kit sync && svelte-package -o dist", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "css": "postcss src/styles/{base,style}.css --config ./../../tooling/postcss-config --dir dist", + "css-watch": "pnpm css --watch", "lint": "prettier --plugin-search-dir . --check . && eslint .", "format": "prettier --plugin-search-dir . --write .", "typecheck": "pnpm check" @@ -43,9 +45,18 @@ "@sveltejs/package": "^2.2.1", "@typescript-eslint/eslint-plugin": "^5.60.0", "@typescript-eslint/parser": "^5.60.0", + "autoprefixer": "^10.4.15", + "cssnano": "^6.0.1", + "dotenv": "^16.3.1", "eslint": "^8.43.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-svelte": "^2.31.1", + "postcss": "^8.4.21", + "postcss-cli": "^10.1.0", + "postcss-combine-duplicated-selectors": "^10.0.3", + "postcss-import": "^15.1.0", + "postcss-nested": "^6.0.0", + "postcss-rename": "^0.6.1", "prettier": "^2.8.8", "prettier-plugin-svelte": "^2.10.1", "svelte": "^4.2.0", diff --git a/packages/svelte/src/lib/components/Attribution/Attribution.svelte b/packages/svelte/src/lib/components/Attribution/Attribution.svelte index 031327238..0e7d78f82 100644 --- a/packages/svelte/src/lib/components/Attribution/Attribution.svelte +++ b/packages/svelte/src/lib/components/Attribution/Attribution.svelte @@ -24,17 +24,3 @@ {/if} - - diff --git a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte index 7390c17ce..5676d135d 100644 --- a/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte +++ b/packages/svelte/src/lib/components/BaseEdge/BaseEdge.svelte @@ -47,30 +47,3 @@
{/if} - - diff --git a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte index 748fe27d5..f2abe041d 100644 --- a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte +++ b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte @@ -13,27 +13,3 @@ {/if} - - diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index b271bbf81..cc9f4eb07 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -89,10 +89,3 @@ markerEnd={markerEndUrl} /> - - diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index f8cf43d35..84e50bceb 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -93,6 +93,7 @@ class:connectablestart={isConnectableStart} class:connectableend={isConnectableEnd} class:connectable={isConnectable} + class:connectionindicator={isConnectable} on:mousedown={onPointerDown} on:touchstart={onPointerDown} {style} @@ -101,46 +102,3 @@ >
- - diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 549139716..75025c304 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -75,6 +75,8 @@ dispatchEvent('nodeclick'); } + + // @todo: add selectable state @@ -95,6 +97,7 @@ class:selected class:draggable class:connectable + class:selectable class:parent={isParent} style:z-index={zIndex} style:transform="translate({positionOrigin?.x ?? 0}px, {positionOrigin?.y ?? 0}px)" @@ -123,33 +126,3 @@ on:connectend />
- - diff --git a/packages/svelte/src/lib/components/Selection/Selection.svelte b/packages/svelte/src/lib/components/Selection/Selection.svelte index 24755b3ac..552c05ae9 100644 --- a/packages/svelte/src/lib/components/Selection/Selection.svelte +++ b/packages/svelte/src/lib/components/Selection/Selection.svelte @@ -18,13 +18,5 @@ position: absolute; top: 0; left: 0; - background: rgba(0, 89, 220, 0.08); - border: 1px dotted rgba(0, 89, 220, 0.8); - z-index: 6; - } - - .svelte-flow__selection:focus, - .svelte-flow__selection:focus-visible { - outline: none; } diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index 9563cf532..0658f47a5 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -30,7 +30,5 @@ position: absolute; top: 0; left: 0; - pointer-events: none; - overflow: visible; } diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index 154e55781..3d212dba1 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -79,7 +79,8 @@ .svelte-flow__nodes { width: 100%; height: 100%; - pointer-events: none; - transform-origin: 0 0; + position: absolute; + left: 0; + top: 0; } diff --git a/packages/svelte/src/lib/container/Pane/Pane.svelte b/packages/svelte/src/lib/container/Pane/Pane.svelte index dc9772e70..d98fb1062 100644 --- a/packages/svelte/src/lib/container/Pane/Pane.svelte +++ b/packages/svelte/src/lib/container/Pane/Pane.svelte @@ -203,20 +203,10 @@ diff --git a/packages/svelte/src/lib/container/Panel/Panel.svelte b/packages/svelte/src/lib/container/Panel/Panel.svelte index 86b8aa358..e1629cccd 100644 --- a/packages/svelte/src/lib/container/Panel/Panel.svelte +++ b/packages/svelte/src/lib/container/Panel/Panel.svelte @@ -16,32 +16,3 @@
- - diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 1c4753312..bb3593024 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -175,25 +175,10 @@ background-color: var(--background-color, var(--background-color-default)); } - .svelte-flow :global(.svelte-flow__node-default), - .svelte-flow :global(.svelte-flow__node-input), - .svelte-flow :global(.svelte-flow__node-output) { - padding: 10px; - } - - .svelte-flow__edgelabel-renderer { - position: absolute; - width: 100%; - height: 100%; - pointer-events: none; - user-select: none; - } - :root { --background-color-default: #fff; --background-pattern-color-default: #ddd; - --minimap-background-color-default: #fff; --minimap-mask-color-default: rgb(240, 240, 240, 0.6); --minimap-mask-stroke-color-default: none; --minimap-mask-stroke-width-default: 1; @@ -203,18 +188,5 @@ --controls-button-color-default: inherit; --controls-button-color-hover-default: inherit; --controls-button-border-color-default: #eee; - - --edge-color-default: #cfcfcf; - --edge-color-selected-default: #555; - - --node-color-default: inherit; - --node-border-color-default: #1a192b; - --node-background-color-default: #fff; - --node-shadow-color-selected-default: #1a192b; - - --handle-background-color-default: #1a192b; - --handle-border-color-default: #fff; - - --connection-line-color-default: #b1b1b7; } diff --git a/packages/svelte/src/lib/container/Viewport/Viewport.svelte b/packages/svelte/src/lib/container/Viewport/Viewport.svelte index 11b864e62..2d331ba1e 100644 --- a/packages/svelte/src/lib/container/Viewport/Viewport.svelte +++ b/packages/svelte/src/lib/container/Viewport/Viewport.svelte @@ -16,10 +16,7 @@ width: 100%; height: 100%; position: absolute; - transform-origin: 0 0; top: 0; left: 0; - z-index: 2; - pointer-events: none; } diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index c5bfec397..033cdb9f2 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -22,6 +22,7 @@ export let lineWidth: $$Props['lineWidth'] = 1; export let bgColor: $$Props['bgColor'] = undefined; export let patternColor: $$Props['patternColor'] = undefined; + export let patternClassName: $$Props['patternClassName'] = undefined; let className: $$Props['class'] = ''; export { className as class }; @@ -44,6 +45,7 @@ class={cc(['svelte-flow__background', className])} data-testid="svelte-flow__background" style:--background-color-props={bgColor} + style:--pattern-color-props={patternColor} > {#if isDots} - + {:else} - + {/if} @@ -70,8 +72,5 @@ height: 100%; top: 0; left: 0; - pointer-events: none; - z-index: -1; - background-color: var(--background-color-props, 'transparent'); } diff --git a/packages/svelte/src/lib/plugins/Background/DotPattern.svelte b/packages/svelte/src/lib/plugins/Background/DotPattern.svelte index 474e555ce..1951a3d27 100644 --- a/packages/svelte/src/lib/plugins/Background/DotPattern.svelte +++ b/packages/svelte/src/lib/plugins/Background/DotPattern.svelte @@ -1,15 +1,14 @@ - - - + diff --git a/packages/svelte/src/lib/plugins/Background/LinePattern.svelte b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte index 16d720710..6ef755992 100644 --- a/packages/svelte/src/lib/plugins/Background/LinePattern.svelte +++ b/packages/svelte/src/lib/plugins/Background/LinePattern.svelte @@ -1,20 +1,16 @@ - - diff --git a/packages/svelte/src/lib/plugins/Background/types.ts b/packages/svelte/src/lib/plugins/Background/types.ts index 6f44057d7..d0935b4ce 100644 --- a/packages/svelte/src/lib/plugins/Background/types.ts +++ b/packages/svelte/src/lib/plugins/Background/types.ts @@ -7,6 +7,7 @@ export enum BackgroundVariant { export type BackgroundProps = { bgColor?: string; patternColor?: string; + patternClassName?: string; class?: string; gap?: number | [number, number]; size?: number; diff --git a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte index 0fd3dc09a..bd73ee30e 100644 --- a/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte +++ b/packages/svelte/src/lib/plugins/Controls/ControlButton.svelte @@ -24,59 +24,3 @@ > - - diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte index 9285f50f0..d8ac59828 100644 --- a/packages/svelte/src/routes/overview/+page.svelte +++ b/packages/svelte/src/routes/overview/+page.svelte @@ -12,8 +12,10 @@ type EdgeTypes } from '../../lib/index'; - import { CustomNode } from './CustomNode'; - import { CustomEdge } from './CustomEdge'; + import CustomNode from './CustomNode.svelte'; + import CustomEdge from './CustomEdge.svelte'; + + import '../../styles/style.css'; const nodeTypes: NodeTypes = { custom: CustomNode diff --git a/packages/svelte/src/routes/overview/CustomEdge/Custom.svelte b/packages/svelte/src/routes/overview/CustomEdge.svelte similarity index 97% rename from packages/svelte/src/routes/overview/CustomEdge/Custom.svelte rename to packages/svelte/src/routes/overview/CustomEdge.svelte index b858b453b..692961d63 100644 --- a/packages/svelte/src/routes/overview/CustomEdge/Custom.svelte +++ b/packages/svelte/src/routes/overview/CustomEdge.svelte @@ -5,7 +5,7 @@ useSvelteFlow, type EdgeProps, getBezierPath - } from '../../../lib/index'; + } from '../../lib/index'; type $$Props = EdgeProps; diff --git a/packages/svelte/src/routes/overview/CustomEdge/index.ts b/packages/svelte/src/routes/overview/CustomEdge/index.ts deleted file mode 100644 index 6e7bab0ad..000000000 --- a/packages/svelte/src/routes/overview/CustomEdge/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as CustomEdge } from './Custom.svelte'; diff --git a/packages/svelte/src/routes/overview/CustomNode/Custom.svelte b/packages/svelte/src/routes/overview/CustomNode.svelte similarity index 89% rename from packages/svelte/src/routes/overview/CustomNode/Custom.svelte rename to packages/svelte/src/routes/overview/CustomNode.svelte index e636cdfe6..91115e5c6 100644 --- a/packages/svelte/src/routes/overview/CustomNode/Custom.svelte +++ b/packages/svelte/src/routes/overview/CustomNode.svelte @@ -1,5 +1,5 @@ + +
+
+
+ +
+
+ + diff --git a/examples/svelte/src/routes/+page.svelte b/examples/svelte/src/routes/+page.svelte new file mode 100644 index 000000000..45db22288 --- /dev/null +++ b/examples/svelte/src/routes/+page.svelte @@ -0,0 +1 @@ +
this redirects to /overview
diff --git a/examples/svelte/src/routes/customnode/+page.svelte b/examples/svelte/src/routes/customnode/+page.svelte new file mode 100644 index 000000000..e2654938f --- /dev/null +++ b/examples/svelte/src/routes/customnode/+page.svelte @@ -0,0 +1,131 @@ + + + + + + + + + diff --git a/examples/svelte/src/routes/customnode/CustomNode.svelte b/examples/svelte/src/routes/customnode/CustomNode.svelte new file mode 100644 index 000000000..7a40a742c --- /dev/null +++ b/examples/svelte/src/routes/customnode/CustomNode.svelte @@ -0,0 +1,21 @@ + + + +
+ Custom Color Picker Node: {data.color} +
+ + + diff --git a/examples/svelte/src/routes/drag-n-drop/+page.svelte b/examples/svelte/src/routes/drag-n-drop/+page.svelte new file mode 100644 index 000000000..12dec33ca --- /dev/null +++ b/examples/svelte/src/routes/drag-n-drop/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/drag-n-drop/Flow.svelte b/examples/svelte/src/routes/drag-n-drop/Flow.svelte new file mode 100644 index 000000000..661b7f5e1 --- /dev/null +++ b/examples/svelte/src/routes/drag-n-drop/Flow.svelte @@ -0,0 +1,106 @@ + + +
+ + + + + + +
+ + diff --git a/examples/svelte/src/routes/drag-n-drop/Sidebar.svelte b/examples/svelte/src/routes/drag-n-drop/Sidebar.svelte new file mode 100644 index 000000000..98fb2b03c --- /dev/null +++ b/examples/svelte/src/routes/drag-n-drop/Sidebar.svelte @@ -0,0 +1,61 @@ + + + + + diff --git a/examples/svelte/src/routes/edges/+page.svelte b/examples/svelte/src/routes/edges/+page.svelte new file mode 100644 index 000000000..f8d2be0ed --- /dev/null +++ b/examples/svelte/src/routes/edges/+page.svelte @@ -0,0 +1,152 @@ + + + + + + + diff --git a/examples/svelte/src/routes/figma/+page.svelte b/examples/svelte/src/routes/figma/+page.svelte new file mode 100644 index 000000000..7ebdd5008 --- /dev/null +++ b/examples/svelte/src/routes/figma/+page.svelte @@ -0,0 +1,56 @@ + + + + + + diff --git a/examples/svelte/src/routes/interaction/+page.svelte b/examples/svelte/src/routes/interaction/+page.svelte new file mode 100644 index 000000000..05a0a75a5 --- /dev/null +++ b/examples/svelte/src/routes/interaction/+page.svelte @@ -0,0 +1,213 @@ + + + + + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte new file mode 100644 index 000000000..ffe3c7603 --- /dev/null +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -0,0 +1,169 @@ + + + console.log('on node click', event)} + on:nodemouseenter={(event) => console.log('on node enter', event)} + on:nodemouseleave={(event) => console.log('on node leave', event)} + on:edgeclick={(event) => console.log('edge click', event)} + on:connectstart={(event) => console.log('on connect start', event)} + on:connect={(event) => console.log('on connect', event)} + on:connectend={(event) => console.log('on connect end', event)} + on:paneclick={(event) => console.log('on pane click', event)} + on:panecontextmenu={(event) => { + event.preventDefault(); + console.log('on pane contextmenu', event); + }} +> + + + + + + + + + diff --git a/examples/svelte/src/routes/overview/CustomEdge.svelte b/examples/svelte/src/routes/overview/CustomEdge.svelte new file mode 100644 index 000000000..9f0992bb3 --- /dev/null +++ b/examples/svelte/src/routes/overview/CustomEdge.svelte @@ -0,0 +1,59 @@ + + + + + + + + + diff --git a/examples/svelte/src/routes/overview/CustomNode.svelte b/examples/svelte/src/routes/overview/CustomNode.svelte new file mode 100644 index 000000000..a8f6a2262 --- /dev/null +++ b/examples/svelte/src/routes/overview/CustomNode.svelte @@ -0,0 +1,27 @@ + + +
+
{data.label}
+
{~~xPos}, {~~yPos}
+ + + + + + +
+ + diff --git a/examples/svelte/src/routes/stress/+page.svelte b/examples/svelte/src/routes/stress/+page.svelte new file mode 100644 index 000000000..b57384cab --- /dev/null +++ b/examples/svelte/src/routes/stress/+page.svelte @@ -0,0 +1,57 @@ + + + + + + + diff --git a/examples/svelte/src/routes/subflows/+page.svelte b/examples/svelte/src/routes/subflows/+page.svelte new file mode 100644 index 000000000..4c57c1717 --- /dev/null +++ b/examples/svelte/src/routes/subflows/+page.svelte @@ -0,0 +1,134 @@ + + + + + + + + + diff --git a/examples/svelte/src/routes/subflows/DebugNode.svelte b/examples/svelte/src/routes/subflows/DebugNode.svelte new file mode 100644 index 000000000..7b4434be9 --- /dev/null +++ b/examples/svelte/src/routes/subflows/DebugNode.svelte @@ -0,0 +1,24 @@ + + + +
{id}
+
+ x:{Math.round(xPos || 0)} y:{Math.round(yPos || 0)} z:{zIndex} +
+ + + diff --git a/examples/svelte/src/routes/usesvelteflow/+page.svelte b/examples/svelte/src/routes/usesvelteflow/+page.svelte new file mode 100644 index 000000000..12dec33ca --- /dev/null +++ b/examples/svelte/src/routes/usesvelteflow/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/usesvelteflow/Flow.svelte b/examples/svelte/src/routes/usesvelteflow/Flow.svelte new file mode 100644 index 000000000..2ba652a44 --- /dev/null +++ b/examples/svelte/src/routes/usesvelteflow/Flow.svelte @@ -0,0 +1,61 @@ + + +
+ + + + + + +
+ + diff --git a/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte b/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte new file mode 100644 index 000000000..5b81fa4fc --- /dev/null +++ b/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte @@ -0,0 +1,56 @@ + + + + + diff --git a/examples/svelte/src/routes/validation/+page.svelte b/examples/svelte/src/routes/validation/+page.svelte new file mode 100644 index 000000000..1c72199ea --- /dev/null +++ b/examples/svelte/src/routes/validation/+page.svelte @@ -0,0 +1,40 @@ + + + + + + diff --git a/examples/svelte/src/routes/validation/style.css b/examples/svelte/src/routes/validation/style.css new file mode 100644 index 000000000..6839e1298 --- /dev/null +++ b/examples/svelte/src/routes/validation/style.css @@ -0,0 +1,7 @@ +.svelte-flow__handle.connecting { + background: #ff6060; +} + +.svelte-flow__handle.valid { + background: #55dd99; +} diff --git a/examples/svelte/src/styles/base.css b/examples/svelte/src/styles/base.css new file mode 100644 index 000000000..80bc953da --- /dev/null +++ b/examples/svelte/src/styles/base.css @@ -0,0 +1,8 @@ +/* this gets exported as style.css and can be used for the default theming */ +@import '../../../system/src/styles/init.css'; +@import '../../../system/src/styles/base.css'; + +.svelte-flow__edge-label { + text-align: center; + position: absolute; +} diff --git a/examples/svelte/src/styles/style.css b/examples/svelte/src/styles/style.css new file mode 100644 index 000000000..b3f57e6f8 --- /dev/null +++ b/examples/svelte/src/styles/style.css @@ -0,0 +1,8 @@ +/* this gets exported as style.css and can be used for the default theming */ +@import '../../../system/src/styles/init.css'; +@import '../../../system/src/styles/style.css'; + +.svelte-flow__edge-label { + text-align: center; + position: absolute; +} diff --git a/examples/svelte/static/favicon.png b/examples/svelte/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH4.0": { "index": [ - "./dist/index.d.ts" + "./dist/lib/index.d.ts" ] } } diff --git a/packages/svelte/src/app.d.ts b/packages/svelte/src/app.d.ts deleted file mode 100644 index 899c7e8fc..000000000 --- a/packages/svelte/src/app.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface Platform {} - } -} - -export {}; diff --git a/packages/svelte/src/app.html b/packages/svelte/src/app.html deleted file mode 100644 index 0bd925946..000000000 --- a/packages/svelte/src/app.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - %sveltekit.head% - - -
%sveltekit.body%
- - diff --git a/packages/svelte/src/routes/+layout.svelte b/packages/svelte/src/routes/+layout.svelte deleted file mode 100644 index f319ea274..000000000 --- a/packages/svelte/src/routes/+layout.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - -
-
-
- -
-
- - diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 45db22288..977a3ecd0 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1 +1 @@ -
this redirects to /overview
+
404
diff --git a/packages/svelte/src/routes/customnode/+page.svelte b/packages/svelte/src/routes/customnode/+page.svelte deleted file mode 100644 index fdb438ca1..000000000 --- a/packages/svelte/src/routes/customnode/+page.svelte +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - diff --git a/packages/svelte/src/routes/customnode/CustomNode.svelte b/packages/svelte/src/routes/customnode/CustomNode.svelte deleted file mode 100644 index 639b79574..000000000 --- a/packages/svelte/src/routes/customnode/CustomNode.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - -
- Custom Color Picker Node: {data.color} -
- - - diff --git a/packages/svelte/src/routes/drag-n-drop/+page.svelte b/packages/svelte/src/routes/drag-n-drop/+page.svelte deleted file mode 100644 index a59b58c9d..000000000 --- a/packages/svelte/src/routes/drag-n-drop/+page.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/packages/svelte/src/routes/drag-n-drop/Flow.svelte b/packages/svelte/src/routes/drag-n-drop/Flow.svelte deleted file mode 100644 index f4caae4e4..000000000 --- a/packages/svelte/src/routes/drag-n-drop/Flow.svelte +++ /dev/null @@ -1,106 +0,0 @@ - - -
- - - - - - -
- - diff --git a/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte b/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte deleted file mode 100644 index 5e3dabba5..000000000 --- a/packages/svelte/src/routes/drag-n-drop/Sidebar.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - - - - diff --git a/packages/svelte/src/routes/edges/+page.svelte b/packages/svelte/src/routes/edges/+page.svelte deleted file mode 100644 index 1247d02ff..000000000 --- a/packages/svelte/src/routes/edges/+page.svelte +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - diff --git a/packages/svelte/src/routes/figma/+page.svelte b/packages/svelte/src/routes/figma/+page.svelte deleted file mode 100644 index 4447349bf..000000000 --- a/packages/svelte/src/routes/figma/+page.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - diff --git a/packages/svelte/src/routes/interaction/+page.svelte b/packages/svelte/src/routes/interaction/+page.svelte deleted file mode 100644 index b14f4c92d..000000000 --- a/packages/svelte/src/routes/interaction/+page.svelte +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - -
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
diff --git a/packages/svelte/src/routes/overview/+page.svelte b/packages/svelte/src/routes/overview/+page.svelte deleted file mode 100644 index d8ac59828..000000000 --- a/packages/svelte/src/routes/overview/+page.svelte +++ /dev/null @@ -1,169 +0,0 @@ - - - console.log('on node click', event)} - on:nodemouseenter={(event) => console.log('on node enter', event)} - on:nodemouseleave={(event) => console.log('on node leave', event)} - on:edgeclick={(event) => console.log('edge click', event)} - on:connectstart={(event) => console.log('on connect start', event)} - on:connect={(event) => console.log('on connect', event)} - on:connectend={(event) => console.log('on connect end', event)} - on:paneclick={(event) => console.log('on pane click', event)} - on:panecontextmenu={(event) => { - event.preventDefault(); - console.log('on pane contextmenu', event); - }} -> - - - - - - - - - diff --git a/packages/svelte/src/routes/overview/CustomEdge.svelte b/packages/svelte/src/routes/overview/CustomEdge.svelte deleted file mode 100644 index 692961d63..000000000 --- a/packages/svelte/src/routes/overview/CustomEdge.svelte +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - diff --git a/packages/svelte/src/routes/overview/CustomNode.svelte b/packages/svelte/src/routes/overview/CustomNode.svelte deleted file mode 100644 index 91115e5c6..000000000 --- a/packages/svelte/src/routes/overview/CustomNode.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - -
-
{data.label}
-
{~~xPos}, {~~yPos}
- - - - - - -
- - diff --git a/packages/svelte/src/routes/stress/+page.svelte b/packages/svelte/src/routes/stress/+page.svelte deleted file mode 100644 index d9e5a50d7..000000000 --- a/packages/svelte/src/routes/stress/+page.svelte +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - diff --git a/packages/svelte/src/routes/subflows/+page.svelte b/packages/svelte/src/routes/subflows/+page.svelte deleted file mode 100644 index 0e3ccb7e1..000000000 --- a/packages/svelte/src/routes/subflows/+page.svelte +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - diff --git a/packages/svelte/src/routes/subflows/DebugNode.svelte b/packages/svelte/src/routes/subflows/DebugNode.svelte deleted file mode 100644 index d249493bc..000000000 --- a/packages/svelte/src/routes/subflows/DebugNode.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - -
{id}
-
- x:{Math.round(xPos || 0)} y:{Math.round(yPos || 0)} z:{zIndex} -
- - - diff --git a/packages/svelte/src/routes/usesvelteflow/+page.svelte b/packages/svelte/src/routes/usesvelteflow/+page.svelte deleted file mode 100644 index a59b58c9d..000000000 --- a/packages/svelte/src/routes/usesvelteflow/+page.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/packages/svelte/src/routes/usesvelteflow/Flow.svelte b/packages/svelte/src/routes/usesvelteflow/Flow.svelte deleted file mode 100644 index 3b3991fc0..000000000 --- a/packages/svelte/src/routes/usesvelteflow/Flow.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - -
- - - - - - -
- - diff --git a/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte b/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte deleted file mode 100644 index 0ba728aab..000000000 --- a/packages/svelte/src/routes/usesvelteflow/Sidebar.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - - - - diff --git a/packages/svelte/src/routes/validation/+page.svelte b/packages/svelte/src/routes/validation/+page.svelte deleted file mode 100644 index 6be2b32fb..000000000 --- a/packages/svelte/src/routes/validation/+page.svelte +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - diff --git a/packages/svelte/svelte.config.js b/packages/svelte/svelte.config.js index 05e80f6c7..b42b17beb 100644 --- a/packages/svelte/svelte.config.js +++ b/packages/svelte/svelte.config.js @@ -1,12 +1,7 @@ import adapter from '@sveltejs/adapter-auto'; -import { vitePreprocess } from '@sveltejs/kit/vite'; /** @type {import('@sveltejs/kit').Config} */ const config = { - // Consult https://kit.svelte.dev/docs/integrations#preprocessors - // for more information about preprocessors - preprocess: vitePreprocess(), - kit: { adapter: adapter() } diff --git a/packages/svelte/vite.config.ts b/packages/svelte/vite.config.ts deleted file mode 100644 index d0269f724..000000000 --- a/packages/svelte/vite.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { sveltekit } from '@sveltejs/kit/vite'; -import type { UserConfig } from 'vite'; - -const config: UserConfig = { - plugins: [sveltekit()], - css: { - postcss: './../../tooling/postcss-config/' - } -}; - -export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1782aafc5..c0345d891 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,10 +16,10 @@ importers: version: registry.npmjs.org/@changesets/cli@2.26.1 '@typescript-eslint/eslint-plugin': specifier: latest - version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.42.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/eslint-plugin@6.5.0(@typescript-eslint/parser@6.5.0)(eslint@8.42.0)(typescript@5.1.3) '@typescript-eslint/parser': specifier: latest - version: registry.npmjs.org/@typescript-eslint/parser@6.3.0(eslint@8.42.0)(typescript@5.1.3) + version: registry.npmjs.org/@typescript-eslint/parser@6.5.0(eslint@8.42.0)(typescript@5.1.3) concurrently: specifier: ^7.6.0 version: registry.npmjs.org/concurrently@7.6.0 @@ -34,7 +34,7 @@ importers: version: registry.npmjs.org/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.42.0)(prettier@2.8.8) eslint-plugin-react: specifier: latest - version: registry.npmjs.org/eslint-plugin-react@7.33.1(eslint@8.42.0) + version: registry.npmjs.org/eslint-plugin-react@7.33.2(eslint@8.42.0) prettier: specifier: ^2.7.1 version: registry.npmjs.org/prettier@2.8.8 @@ -57,7 +57,7 @@ importers: specifier: 5.1.3 version: registry.npmjs.org/typescript@5.1.3 - examples/vite-app: + examples/react: dependencies: '@xyflow/react': specifier: workspace:* @@ -118,6 +118,55 @@ importers: specifier: 4.4.9 version: registry.npmjs.org/vite@4.4.9 + examples/svelte: + dependencies: + '@xyflow/svelte': + specifier: workspace:^ + 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) + '@sveltejs/kit': + specifier: ^1.20.4 + version: registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.0)(vite@4.4.9) + '@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) + '@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) + eslint: + specifier: ^8.28.0 + version: registry.npmjs.org/eslint@8.43.0 + eslint-config-prettier: + specifier: ^8.5.0 + version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.43.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.0) + prettier: + specifier: ^2.8.0 + version: registry.npmjs.org/prettier@2.8.8 + prettier-plugin-svelte: + specifier: ^2.10.1 + version: registry.npmjs.org/prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.0) + svelte: + specifier: ^4.0.5 + version: registry.npmjs.org/svelte@4.2.0 + svelte-check: + specifier: ^3.4.3 + version: registry.npmjs.org/svelte-check@3.5.0(postcss@8.4.27)(svelte@4.2.0) + tslib: + specifier: ^2.4.1 + version: registry.npmjs.org/tslib@2.5.3 + typescript: + specifier: ^5.0.0 + version: registry.npmjs.org/typescript@5.1.3 + vite: + specifier: ^4.4.2 + version: registry.npmjs.org/vite@4.4.9 + packages/react: dependencies: '@types/d3': @@ -287,9 +336,6 @@ importers: typescript: specifier: 5.1.3 version: registry.npmjs.org/typescript@5.1.3 - vite: - specifier: ^4.3.9 - version: registry.npmjs.org/vite@4.3.9 packages/system: dependencies: @@ -341,10 +387,10 @@ importers: version: registry.npmjs.org/eslint-config-prettier@8.8.0(eslint@8.42.0) eslint-config-turbo: specifier: latest - version: registry.npmjs.org/eslint-config-turbo@1.10.6(eslint@8.42.0) + version: registry.npmjs.org/eslint-config-turbo@1.10.13(eslint@8.42.0) eslint-plugin-react: specifier: latest - version: registry.npmjs.org/eslint-plugin-react@7.33.1(eslint@8.42.0) + version: registry.npmjs.org/eslint-plugin-react@7.33.2(eslint@8.42.0) tooling/rollup-config: devDependencies: @@ -1844,7 +1890,7 @@ packages: peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.0)(vite@4.3.9) + '@sveltejs/kit': registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.0)(vite@4.4.9) import-meta-resolve: registry.npmjs.org/import-meta-resolve@3.0.0 dev: true @@ -1878,6 +1924,36 @@ packages: - supports-color dev: true + registry.npmjs.org/@sveltejs/kit@1.22.6(svelte@4.2.0)(vite@4.4.9): + 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' + version: 1.22.6 + 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.1(svelte@4.2.0)(vite@4.4.9) + '@types/cookie': registry.npmjs.org/@types/cookie@0.5.1 + 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.0 + mime: registry.npmjs.org/mime@3.0.0 + 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.0 + undici: registry.npmjs.org/undici@5.23.0 + vite: registry.npmjs.org/vite@4.4.9 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@sveltejs/package@2.2.1(svelte@4.2.0)(typescript@5.1.3): resolution: {integrity: sha512-7Yv4SdoOZFPYWK1/A8LtZ7+WLlZny/4q5sWbU7dnkEqbIt5j4V3TzrquT9nAE6sUy6Dghxf35dXoPIdvRH7w7g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/package/-/package-2.2.1.tgz} id: registry.npmjs.org/@sveltejs/package/2.2.1 @@ -1917,6 +1993,25 @@ packages: - supports-color dev: true + registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@4.2.0)(vite@4.4.9): + resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz} + id: registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/1.0.2 + name: '@sveltejs/vite-plugin-svelte-inspector' + version: 1.0.2 + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^2.2.0 + 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.1(svelte@4.2.0)(vite@4.4.9) + debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) + svelte: registry.npmjs.org/svelte@4.2.0 + vite: registry.npmjs.org/vite@4.4.9 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.2.0)(vite@4.3.9): resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz} id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1 @@ -1940,6 +2035,29 @@ packages: - supports-color dev: true + registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.2.0)(vite@4.4.9): + resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz} + id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1 + name: '@sveltejs/vite-plugin-svelte' + version: 2.4.1 + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0-next.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@4.2.0)(vite@4.4.9) + 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.0 + svelte: registry.npmjs.org/svelte@4.2.0 + svelte-hmr: registry.npmjs.org/svelte-hmr@0.15.2(svelte@4.2.0) + vite: registry.npmjs.org/vite@4.4.9 + vitefu: registry.npmjs.org/vitefu@0.2.4(vite@4.4.9) + transitivePeerDependencies: + - supports-color + dev: true + registry.npmjs.org/@swc/core-darwin-arm64@1.3.63: resolution: {integrity: sha512-lNR0BgG0/6dGpGP+AyFZoZ3YBhZN5GzvgAUzwy4skqn5sKZ7duQD02CNq1lIy7Im5BzgMUcJ+/Z7z/YUlqBK+Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.63.tgz} name: '@swc/core-darwin-arm64' @@ -2494,11 +2612,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/eslint-plugin@6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz} - id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.3.0 + registry.npmjs.org/@typescript-eslint/eslint-plugin@6.5.0(@typescript-eslint/parser@6.5.0)(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz} + id: registry.npmjs.org/@typescript-eslint/eslint-plugin/6.5.0 name: '@typescript-eslint/eslint-plugin' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2509,17 +2627,16 @@ packages: optional: true dependencies: '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.6.2 - '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.3.0(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0 - '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.3.0(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.3.0(eslint@8.42.0)(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0 + '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser@6.5.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.5.0 + '@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils@6.5.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.5.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.5.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.42.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 - natural-compare-lite: registry.npmjs.org/natural-compare-lite@1.4.0 semver: registry.npmjs.org/semver@7.5.4 ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.1(typescript@5.1.3) typescript: registry.npmjs.org/typescript@5.1.3 @@ -2550,11 +2667,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/parser@6.3.0(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.3.0.tgz} - id: registry.npmjs.org/@typescript-eslint/parser/6.3.0 + registry.npmjs.org/@typescript-eslint/parser@6.5.0(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.5.0.tgz} + id: registry.npmjs.org/@typescript-eslint/parser/6.5.0 name: '@typescript-eslint/parser' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2563,10 +2680,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3) - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0 + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.5.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.5.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.5.0(typescript@5.1.3) + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.5.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.42.0 typescript: registry.npmjs.org/typescript@5.1.3 @@ -2584,14 +2701,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.3.0: - resolution: {integrity: sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz} + registry.npmjs.org/@typescript-eslint/scope-manager@6.5.0: + resolution: {integrity: sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz} name: '@typescript-eslint/scope-manager' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.5.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.5.0 dev: true registry.npmjs.org/@typescript-eslint/type-utils@5.60.0(eslint@8.43.0)(typescript@5.1.3): @@ -2617,11 +2734,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/type-utils@6.3.0(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz} - id: registry.npmjs.org/@typescript-eslint/type-utils/6.3.0 + registry.npmjs.org/@typescript-eslint/type-utils@6.5.0(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz} + id: registry.npmjs.org/@typescript-eslint/type-utils/6.5.0 name: '@typescript-eslint/type-utils' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2630,8 +2747,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3) - '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.3.0(eslint@8.42.0)(typescript@5.1.3) + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.5.0(typescript@5.1.3) + '@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils@6.5.0(eslint@8.42.0)(typescript@5.1.3) debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) eslint: registry.npmjs.org/eslint@8.42.0 ts-api-utils: registry.npmjs.org/ts-api-utils@1.0.1(typescript@5.1.3) @@ -2647,10 +2764,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - registry.npmjs.org/@typescript-eslint/types@6.3.0: - resolution: {integrity: sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.3.0.tgz} + registry.npmjs.org/@typescript-eslint/types@6.5.0: + resolution: {integrity: sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-6.5.0.tgz} name: '@typescript-eslint/types' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -2678,11 +2795,11 @@ packages: - supports-color dev: true - registry.npmjs.org/@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3): - resolution: {integrity: sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz} - id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.3.0 + registry.npmjs.org/@typescript-eslint/typescript-estree@6.5.0(typescript@5.1.3): + resolution: {integrity: sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz} + id: registry.npmjs.org/@typescript-eslint/typescript-estree/6.5.0 name: '@typescript-eslint/typescript-estree' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2690,8 +2807,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 - '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.5.0 + '@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys@6.5.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 @@ -2725,11 +2842,11 @@ packages: - typescript dev: true - registry.npmjs.org/@typescript-eslint/utils@6.3.0(eslint@8.42.0)(typescript@5.1.3): - resolution: {integrity: sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.3.0.tgz} - id: registry.npmjs.org/@typescript-eslint/utils/6.3.0 + registry.npmjs.org/@typescript-eslint/utils@6.5.0(eslint@8.42.0)(typescript@5.1.3): + resolution: {integrity: sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.5.0.tgz} + id: registry.npmjs.org/@typescript-eslint/utils/6.5.0 name: '@typescript-eslint/utils' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2737,9 +2854,9 @@ packages: '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.42.0) '@types/json-schema': registry.npmjs.org/@types/json-schema@7.0.12 '@types/semver': registry.npmjs.org/@types/semver@7.5.0 - '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.3.0 - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 - '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.3) + '@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager@6.5.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.5.0 + '@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree@6.5.0(typescript@5.1.3) eslint: registry.npmjs.org/eslint@8.42.0 semver: registry.npmjs.org/semver@7.5.4 transitivePeerDependencies: @@ -2757,13 +2874,13 @@ packages: eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true - registry.npmjs.org/@typescript-eslint/visitor-keys@6.3.0: - resolution: {integrity: sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz} + registry.npmjs.org/@typescript-eslint/visitor-keys@6.5.0: + resolution: {integrity: sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz} name: '@typescript-eslint/visitor-keys' - version: 6.3.0 + version: 6.5.0 engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.3.0 + '@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types@6.5.0 eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true @@ -2799,7 +2916,7 @@ packages: - supports-color dev: true - registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.8.2): + 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} id: registry.npmjs.org/acorn-jsx/5.3.2 name: acorn-jsx @@ -2807,7 +2924,7 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: registry.npmjs.org/acorn@8.8.2 + acorn: registry.npmjs.org/acorn@8.10.0 dev: true registry.npmjs.org/acorn@8.10.0: @@ -2818,14 +2935,6 @@ packages: hasBin: true dev: true - registry.npmjs.org/acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz} - name: acorn - version: 8.8.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 @@ -3046,6 +3155,14 @@ packages: version: 3.2.4 dev: true + registry.npmjs.org/asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz} + name: asynciterator.prototype + version: 1.0.0 + dependencies: + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + dev: true + registry.npmjs.org/asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz} name: asynckit @@ -4272,6 +4389,27 @@ packages: which-typed-array: registry.npmjs.org/which-typed-array@1.1.11 dev: true + registry.npmjs.org/es-iterator-helpers@1.0.14: + resolution: {integrity: sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz} + name: es-iterator-helpers + version: 1.0.14 + dependencies: + asynciterator.prototype: registry.npmjs.org/asynciterator.prototype@1.0.0 + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 + es-set-tostringtag: registry.npmjs.org/es-set-tostringtag@2.0.1 + function-bind: registry.npmjs.org/function-bind@1.1.1 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + globalthis: registry.npmjs.org/globalthis@1.0.3 + has-property-descriptors: registry.npmjs.org/has-property-descriptors@1.0.0 + has-proto: registry.npmjs.org/has-proto@1.0.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + internal-slot: registry.npmjs.org/internal-slot@1.0.5 + iterator.prototype: registry.npmjs.org/iterator.prototype@1.1.0 + safe-array-concat: registry.npmjs.org/safe-array-concat@1.0.0 + dev: true + registry.npmjs.org/es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz} name: es-set-tostringtag @@ -4417,16 +4555,16 @@ packages: eslint: registry.npmjs.org/eslint@8.43.0 dev: true - registry.npmjs.org/eslint-config-turbo@1.10.6(eslint@8.42.0): - resolution: {integrity: sha512-iZ63etePRUdEIDY5MxdUhU2ekV9TDbVdHg0BK00QqVFgQTXUYuJ7rsQj/wUKTsw3jwhbLfaY6H5sknAgYyWZ2g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.6.tgz} - id: registry.npmjs.org/eslint-config-turbo/1.10.6 + registry.npmjs.org/eslint-config-turbo@1.10.13(eslint@8.42.0): + resolution: {integrity: sha512-Ffa0SxkRCPMtfUX/HDanEqsWoLwZTQTAXO9W4IsOtycb2MzJDrVcLmoFW5sMwCrg7gjqbrC4ZJoD+1SPPzIVqg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.13.tgz} + id: registry.npmjs.org/eslint-config-turbo/1.10.13 name: eslint-config-turbo - version: 1.10.6 + version: 1.10.13 peerDependencies: eslint: '>6.6.0' dependencies: eslint: registry.npmjs.org/eslint@8.42.0 - eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo@1.10.6(eslint@8.42.0) + eslint-plugin-turbo: registry.npmjs.org/eslint-plugin-turbo@1.10.13(eslint@8.42.0) dev: true registry.npmjs.org/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.42.0)(prettier@2.8.8): @@ -4449,11 +4587,11 @@ packages: prettier-linter-helpers: registry.npmjs.org/prettier-linter-helpers@1.0.0 dev: true - registry.npmjs.org/eslint-plugin-react@7.33.1(eslint@8.42.0): - resolution: {integrity: sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz} - id: registry.npmjs.org/eslint-plugin-react/7.33.1 + registry.npmjs.org/eslint-plugin-react@7.33.2(eslint@8.42.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 name: eslint-plugin-react - version: 7.33.1 + version: 7.33.2 engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -4462,6 +4600,7 @@ packages: array.prototype.flatmap: registry.npmjs.org/array.prototype.flatmap@1.3.1 array.prototype.tosorted: registry.npmjs.org/array.prototype.tosorted@1.1.1 doctrine: registry.npmjs.org/doctrine@2.1.0 + es-iterator-helpers: registry.npmjs.org/es-iterator-helpers@1.0.14 eslint: registry.npmjs.org/eslint@8.42.0 estraverse: registry.npmjs.org/estraverse@5.3.0 jsx-ast-utils: registry.npmjs.org/jsx-ast-utils@3.3.5 @@ -4507,11 +4646,11 @@ packages: - ts-node dev: true - registry.npmjs.org/eslint-plugin-turbo@1.10.6(eslint@8.42.0): - resolution: {integrity: sha512-jlzfxYaK8hcz1DTk8Glxxi1r0kgdy85191a4CbFOTiiBulmKHMLJgzhsyE9Ong796MA62n91KFpc20BiKjlHwg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.6.tgz} - id: registry.npmjs.org/eslint-plugin-turbo/1.10.6 + registry.npmjs.org/eslint-plugin-turbo@1.10.13(eslint@8.42.0): + resolution: {integrity: sha512-el4AAmn0zXmvHEyp1h0IQMfse10Vy8g5Vbg4IU3+vD9CSj5sDbX07iFVt8sCKg7og9Q5FAa9mXzlCf7t4vYgzg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.13.tgz} + id: registry.npmjs.org/eslint-plugin-turbo/1.10.13 name: eslint-plugin-turbo - version: 1.10.6 + version: 1.10.13 peerDependencies: eslint: '>6.6.0' dependencies: @@ -4611,7 +4750,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': registry.npmjs.org/@eslint-community/eslint-utils@4.4.0(eslint@8.43.0) - '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.5.1 + '@eslint-community/regexpp': registry.npmjs.org/@eslint-community/regexpp@4.6.2 '@eslint/eslintrc': registry.npmjs.org/@eslint/eslintrc@2.0.3 '@eslint/js': registry.npmjs.org/@eslint/js@8.43.0 '@humanwhocodes/config-array': registry.npmjs.org/@humanwhocodes/config-array@0.11.10 @@ -4624,7 +4763,7 @@ packages: 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.0 - eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.1 + eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 espree: registry.npmjs.org/espree@9.5.2 esquery: registry.npmjs.org/esquery@1.5.0 esutils: registry.npmjs.org/esutils@2.0.3 @@ -4665,8 +4804,8 @@ packages: version: 9.5.2 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: registry.npmjs.org/acorn@8.8.2 - acorn-jsx: registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.8.2) + acorn: registry.npmjs.org/acorn@8.10.0 + acorn-jsx: registry.npmjs.org/acorn-jsx@5.3.2(acorn@8.10.0) eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys@3.4.3 dev: true @@ -4853,19 +4992,6 @@ packages: version: 1.3.0 dev: true - registry.npmjs.org/fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz} - name: fast-glob - version: 3.2.12 - 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-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz} name: fast-glob @@ -5551,6 +5677,15 @@ packages: version: 0.2.1 dev: true + registry.npmjs.org/is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz} + name: is-async-function + version: 2.0.0 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 + dev: true + registry.npmjs.org/is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz} name: is-bigint @@ -5627,6 +5762,14 @@ packages: engines: {node: '>=0.10.0'} dev: true + registry.npmjs.org/is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz} + name: is-finalizationregistry + version: 1.0.2 + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + dev: true + registry.npmjs.org/is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz} name: is-fullwidth-code-point @@ -5634,6 +5777,15 @@ packages: engines: {node: '>=8'} dev: true + registry.npmjs.org/is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz} + name: is-generator-function + version: 1.0.10 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 + dev: true + registry.npmjs.org/is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} name: is-glob @@ -5653,6 +5805,12 @@ packages: is-path-inside: registry.npmjs.org/is-path-inside@3.0.3 dev: true + registry.npmjs.org/is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz} + name: is-map + version: 2.0.2 + dev: true + registry.npmjs.org/is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz} name: is-module @@ -5722,6 +5880,12 @@ packages: has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 dev: true + registry.npmjs.org/is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz} + name: is-set + version: 2.0.2 + dev: true + registry.npmjs.org/is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz} name: is-shared-array-buffer @@ -5786,6 +5950,12 @@ packages: engines: {node: '>=10'} dev: true + registry.npmjs.org/is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz} + name: is-weakmap + version: 2.0.1 + dev: true + registry.npmjs.org/is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz} name: is-weakref @@ -5794,6 +5964,15 @@ packages: call-bind: registry.npmjs.org/call-bind@1.0.2 dev: true + registry.npmjs.org/is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz} + name: is-weakset + version: 2.0.2 + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + dev: true + registry.npmjs.org/is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz} name: is-windows @@ -5819,6 +5998,18 @@ packages: version: 0.1.2 dev: true + registry.npmjs.org/iterator.prototype@1.1.0: + resolution: {integrity: sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz} + name: iterator.prototype + version: 1.1.0 + dependencies: + define-properties: registry.npmjs.org/define-properties@1.2.0 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + has-symbols: registry.npmjs.org/has-symbols@1.0.3 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 + reflect.getprototypeof: registry.npmjs.org/reflect.getprototypeof@1.0.3 + dev: true + registry.npmjs.org/joi@17.9.2: resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/joi/-/joi-17.9.2.tgz} name: joi @@ -7620,6 +7811,20 @@ packages: strip-indent: registry.npmjs.org/strip-indent@3.0.0 dev: true + registry.npmjs.org/reflect.getprototypeof@1.0.3: + resolution: {integrity: sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz} + name: reflect.getprototypeof + version: 1.0.3 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind@1.0.2 + define-properties: registry.npmjs.org/define-properties@1.2.0 + es-abstract: registry.npmjs.org/es-abstract@1.22.1 + get-intrinsic: registry.npmjs.org/get-intrinsic@1.2.1 + globalthis: registry.npmjs.org/globalthis@1.0.3 + which-builtin-type: registry.npmjs.org/which-builtin-type@1.1.3 + dev: true + registry.npmjs.org/regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} name: regenerator-runtime @@ -8345,7 +8550,7 @@ packages: dependencies: '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.18 chokidar: registry.npmjs.org/chokidar@3.5.3 - fast-glob: registry.npmjs.org/fast-glob@3.2.12 + fast-glob: registry.npmjs.org/fast-glob@3.3.1 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 @@ -8533,7 +8738,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map@0.3.3 - acorn: registry.npmjs.org/acorn@8.8.2 + acorn: registry.npmjs.org/acorn@8.10.0 commander: registry.npmjs.org/commander@2.20.3 source-map-support: registry.npmjs.org/source-map-support@0.5.21 dev: true @@ -9073,6 +9278,20 @@ packages: vite: registry.npmjs.org/vite@4.3.9 dev: true + registry.npmjs.org/vitefu@0.2.4(vite@4.4.9): + resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz} + id: registry.npmjs.org/vitefu/0.2.4 + name: vitefu + version: 0.2.4 + peerDependencies: + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: registry.npmjs.org/vite@4.4.9 + dev: true + registry.npmjs.org/wait-on@7.0.1(debug@4.3.4): resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz} id: registry.npmjs.org/wait-on/7.0.1 @@ -9125,6 +9344,37 @@ packages: is-symbol: registry.npmjs.org/is-symbol@1.0.4 dev: true + registry.npmjs.org/which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz} + name: which-builtin-type + version: 1.1.3 + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: registry.npmjs.org/function.prototype.name@1.1.5 + has-tostringtag: registry.npmjs.org/has-tostringtag@1.0.0 + is-async-function: registry.npmjs.org/is-async-function@2.0.0 + is-date-object: registry.npmjs.org/is-date-object@1.0.5 + is-finalizationregistry: registry.npmjs.org/is-finalizationregistry@1.0.2 + is-generator-function: registry.npmjs.org/is-generator-function@1.0.10 + is-regex: registry.npmjs.org/is-regex@1.1.4 + is-weakref: registry.npmjs.org/is-weakref@1.0.2 + isarray: registry.npmjs.org/isarray@2.0.5 + which-boxed-primitive: registry.npmjs.org/which-boxed-primitive@1.0.2 + which-collection: registry.npmjs.org/which-collection@1.0.1 + which-typed-array: registry.npmjs.org/which-typed-array@1.1.11 + dev: true + + registry.npmjs.org/which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz} + name: which-collection + version: 1.0.1 + dependencies: + is-map: registry.npmjs.org/is-map@2.0.2 + is-set: registry.npmjs.org/is-set@2.0.2 + is-weakmap: registry.npmjs.org/is-weakmap@2.0.1 + is-weakset: registry.npmjs.org/is-weakset@2.0.2 + dev: true + registry.npmjs.org/which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz} name: which-module From 30f07762039098322ea975e784cef617bef1327c Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 31 Aug 2023 16:59:34 +0200 Subject: [PATCH 0155/1093] fix(svelte): add nodesDraggable --- .../src/lib/components/Handle/Handle.svelte | 20 +++++++++++-------- .../components/NodeWrapper/NodeWrapper.svelte | 9 +++++++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 84e50bceb..ff1ca8e41 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -5,6 +5,7 @@ import { useStore } from '$lib/store'; import type { HandleComponentProps } from '$lib/types'; + import type { Writable } from 'svelte/store'; type $$Props = HandleComponentProps; @@ -12,16 +13,17 @@ export let type: $$Props['type'] = 'source'; export let position: $$Props['position'] = Position.Top; export let style: $$Props['style'] = undefined; - export let isConnectable: $$Props['isConnectable'] = true; - export let isConnectableStart: $$Props['isConnectableStart'] = true; - export let isConnectableEnd: $$Props['isConnectableEnd'] = true; + export let isConnectable: $$Props['isConnectable'] = undefined; + // export let isConnectableStart: $$Props['isConnectableStart'] = undefined; + // export let isConnectableEnd: $$Props['isConnectableEnd'] = undefined; let className: $$Props['class'] = undefined; export { className as class }; const isTarget = type === 'target'; const nodeId = getContext('svelteflow__node_id'); - // const connectable = getContext('svelteflow__node_connectable'); + const connectable = getContext>('svelteflow__node_connectable'); + $: handleConnectable = isConnectable !== undefined ? isConnectable : $connectable; const handleId = id || null; const dispatch = createEventDispatcher(); @@ -73,6 +75,8 @@ }); } } + + // @todo implement connectablestart, connectableend
> = $nodeTypes[type!] || DefaultNode; const selectNodesOnDrag = false; const dispatch = createEventDispatcher(); + const connectableStore = writable(connectable); + + $: { + connectableStore.set(!!connectable); + } setContext('svelteflow__node_id', id); - setContext('svelteflow__node_connectable', connectable); + setContext('svelteflow__node_connectable', connectableStore); onMount(() => { resizeObserver?.observe(nodeRef); @@ -75,7 +81,6 @@ dispatchEvent('nodeclick'); } - // @todo: add selectable state From 961d1295b4f056dec6532ff785a3cc1de60dc1f6 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 31 Aug 2023 17:01:06 +0200 Subject: [PATCH 0156/1093] chore(packages): bump --- packages/svelte/package.json | 2 +- packages/system/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 161084784..36957c684 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.17", + "version": "0.0.18", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", diff --git a/packages/system/package.json b/packages/system/package.json index e9e44af38..adad97533 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/system", - "version": "0.0.4", + "version": "0.0.5", "description": "xyflow core system that powers React Flow and Svelte Flow.", "keywords": [ "node-based UI", From 43a3755fd9794431c4bdab19f3e51224350fc01b Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 14 Sep 2023 18:12:40 +0200 Subject: [PATCH 0157/1093] fix edge selection: consistent behaviour with node selection closes --- packages/react/src/components/Edges/wrapEdge.tsx | 16 +++++++++++++--- packages/react/src/components/Nodes/utils.ts | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/react/src/components/Edges/wrapEdge.tsx b/packages/react/src/components/Edges/wrapEdge.tsx index 92aaada6a..ad1d8f2ad 100644 --- a/packages/react/src/components/Edges/wrapEdge.tsx +++ b/packages/react/src/components/Edges/wrapEdge.tsx @@ -82,15 +82,25 @@ export default (EdgeComponent: ComponentType) => { } const onEdgeClick = (event: React.MouseEvent): void => { - const { edges, addSelectedEdges } = store.getState(); + const { edges, addSelectedEdges, unselectNodesAndEdges, multiSelectionActive } = store.getState(); + const edge = edges.find((e) => e.id === id); + + if (!edge) { + return; + } if (isSelectable) { store.setState({ nodesSelectionActive: false }); - addSelectedEdges([id]); + + if (edge.selected && multiSelectionActive) { + unselectNodesAndEdges({ nodes: [], edges: [edge] }); + edgeRef.current?.blur(); + } else { + addSelectedEdges([id]); + } } if (onClick) { - const edge = edges.find((e) => e.id === id)!; onClick(event, edge); } }; diff --git a/packages/react/src/components/Nodes/utils.ts b/packages/react/src/components/Nodes/utils.ts index 3c1299e9e..a70ccd34d 100644 --- a/packages/react/src/components/Nodes/utils.ts +++ b/packages/react/src/components/Nodes/utils.ts @@ -48,7 +48,7 @@ export function handleNodeClick({ if (!node.selected) { addSelectedNodes([id]); } else if (unselect || (node.selected && multiSelectionActive)) { - unselectNodesAndEdges({ nodes: [node] }); + unselectNodesAndEdges({ nodes: [node], edges: [] }); requestAnimationFrame(() => nodeRef?.current?.blur()); } From bd6f774de6d3a03d827d1dee30b65bae201a28f0 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 14 Sep 2023 18:13:33 +0200 Subject: [PATCH 0158/1093] fix(edges): make it possible to change edge type dynamically closes #3386 --- examples/svelte/src/routes/overview/+page.svelte | 16 ++++++++++++++++ .../components/EdgeWrapper/EdgeWrapper.svelte | 5 ++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index ffe3c7603..d11381d3e 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -113,6 +113,21 @@ ); } + function updateEdge() { + edges.update((eds) => + eds.map((edge) => { + if (edge.id === '1-2') { + return { + ...edge, + type: edge.type === 'default' ? 'smoothstep' : 'default' + }; + } + + return edge; + }) + ); + } + $: { console.log('nodes changed', $nodes); } @@ -147,6 +162,7 @@ + diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index cc9f4eb07..39c8a73de 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -1,5 +1,5 @@
- - + +
diff --git a/examples/svelte/src/routes/useupdatenodeinternals/+page.svelte b/examples/svelte/src/routes/useupdatenodeinternals/+page.svelte new file mode 100644 index 000000000..12dec33ca --- /dev/null +++ b/examples/svelte/src/routes/useupdatenodeinternals/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte b/examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte new file mode 100644 index 000000000..f4d306ac5 --- /dev/null +++ b/examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte @@ -0,0 +1,29 @@ + + + + + +{#each Array.from({ length: handleCount }) as handle, i} + +{/each} diff --git a/examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte b/examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte new file mode 100644 index 000000000..13b48cb31 --- /dev/null +++ b/examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte @@ -0,0 +1,68 @@ + + +
+ + + + + +
+ + diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 36957c684..3b04d4a12 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.18", + "version": "0.0.19", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", diff --git a/packages/svelte/src/lib/hooks/useSvelteFlow.ts b/packages/svelte/src/lib/hooks/useSvelteFlow.ts index a0dc8cb80..d4a40ac38 100644 --- a/packages/svelte/src/lib/hooks/useSvelteFlow.ts +++ b/packages/svelte/src/lib/hooks/useSvelteFlow.ts @@ -27,7 +27,6 @@ export function useSvelteFlow(): { nodes: SvelteFlowStore['nodes']; edges: SvelteFlowStore['edges']; } { - // how to get the new context here? fit view doesn't work, because the store is not updated (uses old nodes store) const { zoomIn, zoomOut, diff --git a/packages/svelte/src/lib/hooks/useUpdateNodeInternals.ts b/packages/svelte/src/lib/hooks/useUpdateNodeInternals.ts new file mode 100644 index 000000000..9de907633 --- /dev/null +++ b/packages/svelte/src/lib/hooks/useUpdateNodeInternals.ts @@ -0,0 +1,28 @@ +import { get } from 'svelte/store'; +import type { UpdateNodeInternals, NodeDimensionUpdate } from '@xyflow/system'; + +import { useStore } from '$lib/store'; + +export function useUpdateNodeInternals(): UpdateNodeInternals { + const { domNode, updateNodeDimensions } = useStore(); + + // @todo: do we want to add this to system? + const updateInternals = (id: string | string[]) => { + const updateIds = Array.isArray(id) ? id : [id]; + const updates = updateIds.reduce((res, updateId) => { + const nodeElement = get(domNode)?.querySelector( + `.svelte-flow__node[data-id="${updateId}"]` + ) as HTMLDivElement; + + if (nodeElement) { + res.push({ id: updateId, nodeElement, forceUpdate: true }); + } + + return res; + }, []); + + requestAnimationFrame(() => updateNodeDimensions(updates)); + }; + + return updateInternals; +} diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index b3048f188..66b1af100 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -20,6 +20,7 @@ export { useStore } from '$lib/store'; // utils export * from '$lib/utils'; export * from '$lib/hooks/useSvelteFlow'; +export * from '$lib/hooks/useUpdateNodeInternals'; // types export type { Edge, EdgeProps, EdgeTypes, DefaultEdgeOptions } from '$lib/types/edges'; From 5e92f093fd92aa1e5f624596d12ccd366cfd41ef Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 18 Sep 2023 13:41:55 +0200 Subject: [PATCH 0161/1093] [fix](svelte) exposed style for MiniMap --- packages/svelte/src/lib/plugins/Minimap/Minimap.svelte | 2 ++ packages/svelte/src/lib/plugins/Minimap/types.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte index fc3676b8b..beb20d08d 100644 --- a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte +++ b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte @@ -34,6 +34,7 @@ export let zoomable: $$Props['zoomable'] = true; export let inversePan: $$Props['inversePan'] = undefined; export let zoomStep: $$Props['zoomStep'] = undefined; + export let style: $$Props['style'] = ''; let className: $$Props['class'] = ''; export { className as class }; @@ -82,6 +83,7 @@ diff --git a/packages/svelte/src/lib/plugins/Minimap/types.ts b/packages/svelte/src/lib/plugins/Minimap/types.ts index 27ac2f465..c141aac9e 100644 --- a/packages/svelte/src/lib/plugins/Minimap/types.ts +++ b/packages/svelte/src/lib/plugins/Minimap/types.ts @@ -16,6 +16,7 @@ export type MiniMapProps = { maskStrokeWidth?: number; position?: PanelPosition; class?: string; + style?: string; ariaLabel?: string | null; width?: number; height?: number; From 087ef82618cb3b560e22ce6a5131120857277d01 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 18 Sep 2023 14:19:16 +0200 Subject: [PATCH 0162/1093] fix(svelte): pass dragHandle #3398 --- .../svelte/src/routes/overview/+page.svelte | 11 ++++++++++- .../overview/CustomNodeDragHandle.svelte | 19 +++++++++++++++++++ .../components/NodeWrapper/NodeWrapper.svelte | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 examples/svelte/src/routes/overview/CustomNodeDragHandle.svelte diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 36027a67c..5fdd7d476 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -15,12 +15,14 @@ } from '@xyflow/svelte'; import CustomNode from './CustomNode.svelte'; + import CustomNodeDragHandle from './CustomNodeDragHandle.svelte'; import CustomEdge from './CustomEdge.svelte'; import '@xyflow/svelte/dist/style.css'; const nodeTypes: NodeTypes = { - custom: CustomNode + custom: CustomNode, + dragHandle: CustomNodeDragHandle }; const edgeTypes: EdgeTypes = { @@ -68,6 +70,13 @@ style: 'border: 2px solid #ff5050;', position: { x: 450, y: 150 } }, + { + id: 'C', + type: 'dragHandle', + data: { label: 'custom drag handle' }, + dragHandle: '.custom-drag-handle', + position: { x: 450, y: 250 } + }, { id: '4', type: 'custom', diff --git a/examples/svelte/src/routes/overview/CustomNodeDragHandle.svelte b/examples/svelte/src/routes/overview/CustomNodeDragHandle.svelte new file mode 100644 index 000000000..dcdddfc83 --- /dev/null +++ b/examples/svelte/src/routes/overview/CustomNodeDragHandle.svelte @@ -0,0 +1,19 @@ + + +
+
{data.label}
+
+
+ + diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index a629c1071..8730b9e07 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -95,7 +95,7 @@ nodeId: id, isSelectable: selectable, disabled: false, - handleSelector: undefined, + handleSelector: dragHandle, noDragClassName: 'nodrag', store }} From 39a696afcb90efe47310cdc2a2162a84c754e9e9 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 18 Sep 2023 15:59:21 +0200 Subject: [PATCH 0163/1093] chore(libs): add env files --- .gitignore | 1 - packages/react/.env | 1 + packages/svelte/.env | 1 + packages/svelte/.gitignore | 2 -- 4 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 packages/react/.env create mode 100644 packages/svelte/.env diff --git a/.gitignore b/.gitignore index 86da1ac91..e567b884f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ examples/build cypress/videos cypress/screenshots dist -.env stats.html .eslintcache .idea diff --git a/packages/react/.env b/packages/react/.env new file mode 100644 index 000000000..bb845868e --- /dev/null +++ b/packages/react/.env @@ -0,0 +1 @@ +LIB=react \ No newline at end of file diff --git a/packages/svelte/.env b/packages/svelte/.env new file mode 100644 index 000000000..da1be0278 --- /dev/null +++ b/packages/svelte/.env @@ -0,0 +1 @@ +LIB=svelte \ No newline at end of file diff --git a/packages/svelte/.gitignore b/packages/svelte/.gitignore index 6635cf554..e91699ff5 100644 --- a/packages/svelte/.gitignore +++ b/packages/svelte/.gitignore @@ -3,8 +3,6 @@ node_modules /build /.svelte-kit /package -.env -.env.* !.env.example vite.config.js.timestamp-* vite.config.ts.timestamp-* From aaf420f7996bad1334de8e78c36d99e2b9c112ae Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 18 Sep 2023 16:09:13 +0200 Subject: [PATCH 0164/1093] fix(svelte) background plugin pattern-color sets correct css variable --- packages/svelte/src/lib/plugins/Background/Background.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index 033cdb9f2..16d2f05d1 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -45,7 +45,7 @@ class={cc(['svelte-flow__background', className])} data-testid="svelte-flow__background" style:--background-color-props={bgColor} - style:--pattern-color-props={patternColor} + style:--background-pattern-color-props={patternColor} > Date: Mon, 18 Sep 2023 16:10:51 +0200 Subject: [PATCH 0165/1093] chore(system): defaults for controls base styles --- packages/system/src/styles/init.css | 17 +++++++++++++++++ packages/system/src/styles/style.css | 13 ------------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/system/src/styles/init.css b/packages/system/src/styles/init.css index b65c4df47..0bdb9f71f 100644 --- a/packages/system/src/styles/init.css +++ b/packages/system/src/styles/init.css @@ -297,3 +297,20 @@ ); } } + +.xy-flow__controls { + &-button { + display: flex; + justify-content: center; + align-items: center; + height: 26px; + width: 26px; + padding: 4px; + + svg { + width: 100%; + max-width: 12px; + max-height: 12px; + } + } +} diff --git a/packages/system/src/styles/style.css b/packages/system/src/styles/style.css index 350960465..99fa8876a 100644 --- a/packages/system/src/styles/style.css +++ b/packages/system/src/styles/style.css @@ -100,15 +100,8 @@ var(--controls-button-border-color, var(--controls-button-border-color-default)) ); color: var(--controls-button-color-props, var(--controls-button-color, var(--controls-button-color-default))); - box-sizing: content-box; - display: flex; - justify-content: center; - align-items: center; - width: 16px; - height: 16px; cursor: pointer; user-select: none; - padding: 5px; &:hover { background: var( @@ -121,12 +114,6 @@ ); } - svg { - width: 100%; - max-width: 12px; - max-height: 12px; - } - &:disabled { pointer-events: none; From 572505ea15f2aa9b80fe838f3fd0855575ac6a85 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 18 Sep 2023 17:20:59 +0200 Subject: [PATCH 0166/1093] chore(marker-symbols): use style instead of svg attrs --- .../src/container/EdgeRenderer/MarkerSymbols.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/react/src/container/EdgeRenderer/MarkerSymbols.tsx b/packages/react/src/container/EdgeRenderer/MarkerSymbols.tsx index 8ae3bb520..13ebfd921 100644 --- a/packages/react/src/container/EdgeRenderer/MarkerSymbols.tsx +++ b/packages/react/src/container/EdgeRenderer/MarkerSymbols.tsx @@ -8,10 +8,12 @@ type SymbolProps = Omit; const ArrowSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => { return ( @@ -21,11 +23,13 @@ const ArrowSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => { const ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => { return ( ); From f4e9d9ad4c5799cd6b54f1e534216cae51b05afc Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 18 Sep 2023 17:36:53 +0200 Subject: [PATCH 0167/1093] fix(svelte) changed attribute names of className to class in MiniMap & Background plugins --- .../svelte/src/lib/plugins/Background/Background.svelte | 6 +++--- packages/svelte/src/lib/plugins/Background/types.ts | 2 +- packages/svelte/src/lib/plugins/Minimap/Minimap.svelte | 6 +++--- packages/svelte/src/lib/plugins/Minimap/types.ts | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index 16d2f05d1..5086c210a 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -22,7 +22,7 @@ export let lineWidth: $$Props['lineWidth'] = 1; export let bgColor: $$Props['bgColor'] = undefined; export let patternColor: $$Props['patternColor'] = undefined; - export let patternClassName: $$Props['patternClassName'] = undefined; + export let patternClass: $$Props['patternClass'] = undefined; let className: $$Props['class'] = ''; export { className as class }; @@ -57,9 +57,9 @@ patternTransform={`translate(-${patternOffset[0]},-${patternOffset[1]})`} > {#if isDots} - + {:else} - + {/if} diff --git a/packages/svelte/src/lib/plugins/Background/types.ts b/packages/svelte/src/lib/plugins/Background/types.ts index d0935b4ce..dd6a4d3c0 100644 --- a/packages/svelte/src/lib/plugins/Background/types.ts +++ b/packages/svelte/src/lib/plugins/Background/types.ts @@ -7,7 +7,7 @@ export enum BackgroundVariant { export type BackgroundProps = { bgColor?: string; patternColor?: string; - patternClassName?: string; + patternClass?: string; class?: string; gap?: number | [number, number]; size?: number; diff --git a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte index beb20d08d..07ffde00b 100644 --- a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte +++ b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte @@ -21,7 +21,7 @@ export let ariaLabel: $$Props['ariaLabel'] = 'Mini map'; export let nodeStrokeColor: $$Props['nodeStrokeColor'] = 'transparent'; export let nodeColor: $$Props['nodeColor'] = '#e2e2e2'; - export let nodeClassName: $$Props['nodeClassName'] = ''; + export let nodeClass: $$Props['nodeClass'] = ''; export let nodeBorderRadius: $$Props['nodeBorderRadius'] = 5; export let nodeStrokeWidth: $$Props['nodeStrokeWidth'] = 2; export let bgColor: $$Props['bgColor'] = undefined; @@ -53,7 +53,7 @@ const nodeColorFunc = getAttrFunction(nodeColor); const nodeStrokeColorFunc = getAttrFunction(nodeStrokeColor); - const nodeClassNameFunc = getAttrFunction(nodeClassName); + const nodeClassFunc = getAttrFunction(nodeClass); const shapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision'; const labelledBy = `svelte-flow__minimap-desc-${$flowId}`; @@ -126,7 +126,7 @@ strokeColor={nodeStrokeColorFunc(node)} strokeWidth={nodeStrokeWidth} {shapeRendering} - class={nodeClassNameFunc(node)} + class={nodeClassFunc(node)} /> {/if} {/each} diff --git a/packages/svelte/src/lib/plugins/Minimap/types.ts b/packages/svelte/src/lib/plugins/Minimap/types.ts index c141aac9e..d39aab7ae 100644 --- a/packages/svelte/src/lib/plugins/Minimap/types.ts +++ b/packages/svelte/src/lib/plugins/Minimap/types.ts @@ -8,7 +8,7 @@ export type MiniMapProps = { bgColor?: string; nodeColor?: string | GetMiniMapNodeAttribute; nodeStrokeColor?: string | GetMiniMapNodeAttribute; - nodeClassName?: string | GetMiniMapNodeAttribute; + nodeClass?: string | GetMiniMapNodeAttribute; nodeBorderRadius?: number; nodeStrokeWidth?: number; maskColor?: string; From 286753349e187ec41ea1dd7c2d5b62fb27ed1109 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 18 Sep 2023 17:45:21 +0200 Subject: [PATCH 0168/1093] fix(svelte) changed attribute names from className to class in zoom and drag actions --- packages/svelte/src/lib/actions/drag/index.ts | 4 ++-- packages/svelte/src/lib/actions/zoom/index.ts | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 692a17894..5a0d44366 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -6,7 +6,7 @@ import type { SvelteFlowStore } from '$lib/store/types'; type UseDragParams = { store: SvelteFlowStore; disabled?: boolean; - noDragClassName?: string; + noDragClass?: string; handleSelector?: string; nodeId?: string; isSelectable?: boolean; @@ -47,7 +47,7 @@ export default function drag(domNode: Element, params: UseDragParams) { dragInstance.update({ domNode, - noDragClassName: params.noDragClassName, + noDragClassName: params.noDragClass, handleSelector: params.handleSelector, nodeId: params.nodeId, isSelectable: params.isSelectable diff --git a/packages/svelte/src/lib/actions/zoom/index.ts b/packages/svelte/src/lib/actions/zoom/index.ts index ce5797888..d85bc101a 100644 --- a/packages/svelte/src/lib/actions/zoom/index.ts +++ b/packages/svelte/src/lib/actions/zoom/index.ts @@ -30,6 +30,8 @@ type ZoomParams = { panOnScrollMode: PanOnScrollMode; zoomActivationKeyPressed: boolean; preventScrolling: boolean; + // last two instances of 'classname' being used + // changing it to class would require object restructuring for use with panZoomInstance.update noPanClassName: string; noWheelClassName: string; userSelectionActive: boolean; From 581778c76f397cdd29713b94563e1e3c25cfb7a0 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 19 Sep 2023 13:32:32 +0200 Subject: [PATCH 0169/1093] fix(node-selection): cleanup selection when node is not selectable --- packages/system/src/xydrag/XYDrag.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/system/src/xydrag/XYDrag.ts b/packages/system/src/xydrag/XYDrag.ts index 674d678c0..f56a40f46 100644 --- a/packages/system/src/xydrag/XYDrag.ts +++ b/packages/system/src/xydrag/XYDrag.ts @@ -208,7 +208,7 @@ export function XYDrag({ unselectNodesAndEdges, } = getStoreItems(); - if (!selectNodesOnDrag && !multiSelectionActive && nodeId) { + if ((!selectNodesOnDrag || !isSelectable) && !multiSelectionActive && nodeId) { if (!nodes.find((n) => n.id === nodeId)?.selected) { // we need to reset selected nodes when selectNodesOnDrag=false unselectNodesAndEdges(); From c848e32f1dfa598124443a311f3ac6535cd64279 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 19 Sep 2023 14:27:38 +0200 Subject: [PATCH 0170/1093] fix(node-wrapper): use noDragClass --- .../svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 8730b9e07..0e697afdd 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -96,7 +96,7 @@ isSelectable: selectable, disabled: false, handleSelector: dragHandle, - noDragClassName: 'nodrag', + noDragClass: 'nodrag', store }} bind:this={nodeRef} From edbc67e8c4a16f0a36d8ea6dfd88774ec48b8028 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 19 Sep 2023 14:36:04 +0200 Subject: [PATCH 0171/1093] feat(svelte) fixed on:connectstart and on:connectend --- .../svelte/src/lib/components/Handle/Handle.svelte | 11 ++++++++++- packages/svelte/src/lib/container/SvelteFlow/types.ts | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index ff1ca8e41..ac938374c 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -70,7 +70,16 @@ updateConnection, cancelConnection, panBy, - onConnect: onConnectExtended, + onConnect: (params) => { + addEdge(params); + dispatch('connect', params); + }, + onConnectStart: (event, params) => { + dispatch('connectstart', { event, params }); + }, + onConnectEnd: (event) => { + dispatch('connectend', event); + }, getTransform: () => $transform }); } diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index b6d121047..26b60f828 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -64,9 +64,9 @@ export type SvelteFlowProps = DOMAttributes & { 'on:nodemousemove'?: CustomEvent; 'on:nodemouseleave'?: CustomEvent; 'on:edgeclick'?: CustomEvent; - 'on:connectstart'?: CustomEvent; + 'on:connectstart'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; 'on:connect'?: CustomEvent; - 'on:connectend'?: CustomEvent; + 'on:connectend'?: CustomEvent; 'on:paneclick'?: CustomEvent; 'on:panecontextmenu'?: CustomEvent; }; From e27566f27921930d3d02e608a32228b4c984030d Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 19 Sep 2023 14:54:43 +0200 Subject: [PATCH 0172/1093] fix(svelte) fixed type for on:connectstart --- packages/svelte/src/lib/container/SvelteFlow/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 26b60f828..db9ae3084 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -64,7 +64,7 @@ export type SvelteFlowProps = DOMAttributes & { 'on:nodemousemove'?: CustomEvent; 'on:nodemouseleave'?: CustomEvent; 'on:edgeclick'?: CustomEvent; - 'on:connectstart'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; + 'on:connectstart'?: CustomEvent<{ event: MouseEvent | TouchEvent; params: OnConnectStartParams }>; 'on:connect'?: CustomEvent; 'on:connectend'?: CustomEvent; 'on:paneclick'?: CustomEvent; From 1c2bcbef34e539d395cdf1bbdaad062dab5cf6f4 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 19 Sep 2023 15:23:10 +0200 Subject: [PATCH 0173/1093] fix(svelte) adjusted svelteflow types for connect events --- .../src/lib/components/Handle/Handle.svelte | 17 +++++++++++------ .../src/lib/container/SvelteFlow/types.ts | 14 ++++++++++---- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index ac938374c..c3af20ed1 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -70,15 +70,20 @@ updateConnection, cancelConnection, panBy, - onConnect: (params) => { - addEdge(params); - dispatch('connect', params); + onConnect: (connection) => { + addEdge(connection); + dispatch('connect', { connection: connection }); }, - onConnectStart: (event, params) => { - dispatch('connectstart', { event, params }); + onConnectStart: (event, startParams) => { + dispatch('connectstart', { + event, + nodeId: startParams.nodeId, + handleId: startParams.handleId, + handleType: startParams.handleType + }); }, onConnectEnd: (event) => { - dispatch('connectend', event); + dispatch('connectend', { event }); }, getTransform: () => $transform }); diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index db9ae3084..a529bc02a 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -12,7 +12,8 @@ import type { OnMoveEnd, CoordinateExtent, PanOnScrollMode, - IsValidConnection + IsValidConnection, + HandleType } from '@xyflow/system'; import type { Edge, Node, NodeTypes, KeyDefinition, EdgeTypes } from '$lib/types'; @@ -64,9 +65,14 @@ export type SvelteFlowProps = DOMAttributes & { 'on:nodemousemove'?: CustomEvent; 'on:nodemouseleave'?: CustomEvent; 'on:edgeclick'?: CustomEvent; - 'on:connectstart'?: CustomEvent<{ event: MouseEvent | TouchEvent; params: OnConnectStartParams }>; - 'on:connect'?: CustomEvent; - 'on:connectend'?: CustomEvent; + 'on:connectstart'?: CustomEvent<{ + event: MouseEvent | TouchEvent; + nodeId?: string; + handleId?: string; + handleType?: HandleType; + }>; + 'on:connect'?: CustomEvent<{ connection: Connection }>; + 'on:connectend'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; 'on:paneclick'?: CustomEvent; 'on:panecontextmenu'?: CustomEvent; }; From a7228ab5d173859f1a1e17b7fc7fb5878829fbf4 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 19 Sep 2023 15:31:05 +0200 Subject: [PATCH 0174/1093] chore(svelte): add changelog --- packages/svelte/CHANGELOG.md | 71 ++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 packages/svelte/CHANGELOG.md diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md new file mode 100644 index 000000000..1ad9f9832 --- /dev/null +++ b/packages/svelte/CHANGELOG.md @@ -0,0 +1,71 @@ +## 0.0.19 + +- make it possible to change edge type dynamically +- fix hiden attribute for nodes and edges +- add `useUpdateNodeInternals` hook + +## 0.0.18 + +- add `nodesDraggable` prop +- minimap: add default background + +## 0.0.17 + +- export `useStore` to access internals + +## 0.0.16 + +- center edge label by default + +## 0.0.15 + +- fix wrongly displayed connectionline + +## 0.0.14 + +- export css correctly + +## 0.0.13 + +- from now on it's necessary to import the styles like `@xyflow/svelte/styles/style.css` or `@xyflow/svelte/styles/base.css`. This makes it easier to work with tailwind or overwrite styles with regular CSS. + +## 0.0.7 ... 0.0.12 + +- fix event handlers and rename from `on:node:click` to `on:nodeclick` +- add `panActivationKey` prop +- elevate nodes by default when selected +- use css vars internally and let users overwrite them + +## 0.0.6 + +- use svelte 4 + +## 0.0.5 + +this release fixes the path bug introduced in 0.0.4 + +## 0.0.4 + +this version is broken because of a wrong path in the package.json + +## 0.0.3 + +- add `snapGrid` prop +- add `onlyRenderVisibleElements` prop +- cleanup some exports and types + +## 0.0.2 + +- add `connectionRadius` + +## 0.0.1 + +Svelte Flow alpha is here 🔥 You can expect some changes until we reach 1.0.0 but we try to stick as close as possible to the React Flow API. There are no docs yet, but we are working on it! For now the easiest way is to use the autocomplete of your IDE, lookup the props in the SvelteFlow component or check out the React Flow docs. + +This very first release comes with lots of features already: + +- pass `nodes` and `edges` as writables +- draggable, selectable and deletable nodes +- support for custom `nodeTypes` and `edgeTypes` +- basic viewport settings like `fitView`, `minZoom` and `maxZoom` +- additional components: ``, `` & `` \ No newline at end of file From accfc9d200c1bd68a7f542796edd2063092f7533 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 19 Sep 2023 15:37:08 +0200 Subject: [PATCH 0175/1093] chore(svelte): cleanup handle component --- .../src/lib/components/Handle/Handle.svelte | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index c3af20ed1..d53109238 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -1,7 +1,7 @@ diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 0e697afdd..17c8e4cee 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -69,21 +69,21 @@ }; }); - function dispatchEvent(eventName: string) { + function dispatchEvent(eventName: string, event?: MouseEvent | TouchEvent) { const node = $nodes.find((n) => n.id === id); - dispatch(eventName, node); + dispatch(eventName, { node, event }); } - function onSelectNodeHandler(event: MouseEvent) { + function onSelectNodeHandler(event: MouseEvent | TouchEvent) { if (selectable && (!selectNodesOnDrag || !draggable)) { // this handler gets called within the drag start event when selectNodesOnDrag=true addSelectedNodes([id]); } // @todo: support multiselection - - dispatchEvent('nodeclick'); + dispatchEvent('nodeclick', event); } + // @todo: add selectable state @@ -112,9 +112,9 @@ style:transform="translate({positionOrigin?.x ?? 0}px, {positionOrigin?.y ?? 0}px)" {style} on:click={onSelectNodeHandler} - on:mouseenter={() => dispatchEvent('nodemouseenter')} - on:mouseleave={() => dispatchEvent('nodemouseleave')} - on:mousemove={() => dispatchEvent('nodemousemove')} + on:mouseenter={(event) => dispatchEvent('nodemouseenter', event)} + on:mouseleave={(event) => dispatchEvent('nodemouseleave', event)} + on:mousemove={(event) => dispatchEvent('nodemousemove', event)} > diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index a529bc02a..97d5a3a95 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -3,7 +3,6 @@ import type { Connection, ConnectionLineType, NodeOrigin, - OnConnectStartParams, Viewport, SelectionMode, SnapGrid, @@ -60,11 +59,11 @@ export type SvelteFlowProps = DOMAttributes & { onMove?: OnMove; onMoveEnd?: OnMoveEnd; - 'on:nodeclick'?: CustomEvent; - 'on:nodemouseenter'?: CustomEvent; - 'on:nodemousemove'?: CustomEvent; - 'on:nodemouseleave'?: CustomEvent; - 'on:edgeclick'?: CustomEvent; + 'on:nodeclick'?: CustomEvent<{ event: MouseEvent | TouchEvent; node: Node }>; + 'on:nodemouseenter'?: CustomEvent<{ event: MouseEvent; node: Node }>; + 'on:nodemousemove'?: CustomEvent<{ event: MouseEvent; node: Node }>; + 'on:nodemouseleave'?: CustomEvent<{ event: MouseEvent; node: Node }>; + 'on:edgeclick'?: CustomEvent<{ event: MouseEvent; edge: Edge }>; 'on:connectstart'?: CustomEvent<{ event: MouseEvent | TouchEvent; nodeId?: string; @@ -73,6 +72,6 @@ export type SvelteFlowProps = DOMAttributes & { }>; 'on:connect'?: CustomEvent<{ connection: Connection }>; 'on:connectend'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; - 'on:paneclick'?: CustomEvent; - 'on:panecontextmenu'?: CustomEvent; + 'on:paneclick'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; + 'on:panecontextmenu'?: CustomEvent<{ event: MouseEvent }>; }; From c0d5475b5d8a5117e93e471bd54916f2db95bbdc Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 19 Sep 2023 15:54:02 +0200 Subject: [PATCH 0177/1093] chore(svelte): update changelog --- packages/svelte/CHANGELOG.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 1ad9f9832..491aa21f6 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,7 +1,17 @@ +## 0.0.20 + +- [breaking change] use same convention for all custom events: Always pass the original event if possible and additional data + - before: `on:nodeclick: CustomEvent` + - after: `on:nodeclick: CustomEvent<{event: MouseEvent, node: Node}>` +- fix `on:connectstart` and `on:connectend` handlers +- fix default styles for `` component +- fix `dragHandle` node option +- expose `style` prop for minimap + ## 0.0.19 - make it possible to change edge type dynamically -- fix hiden attribute for nodes and edges +- fix `hidden` option for nodes and edges - add `useUpdateNodeInternals` hook ## 0.0.18 @@ -27,7 +37,7 @@ ## 0.0.13 -- from now on it's necessary to import the styles like `@xyflow/svelte/styles/style.css` or `@xyflow/svelte/styles/base.css`. This makes it easier to work with tailwind or overwrite styles with regular CSS. +- [breaking change] from now on it's necessary to import the styles like `@xyflow/svelte/styles/style.css` or `@xyflow/svelte/styles/base.css`. This makes it easier to work with tailwind or overwrite styles with regular CSS. ## 0.0.7 ... 0.0.12 From bc0620d1e677e9f89825413ab03aa07c90171a69 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 19 Sep 2023 15:55:04 +0200 Subject: [PATCH 0178/1093] chore(packages): bump --- packages/svelte/package.json | 2 +- packages/system/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 3b04d4a12..1eee25b6f 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.19", + "version": "0.0.20", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", diff --git a/packages/system/package.json b/packages/system/package.json index adad97533..e1f6f65a8 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/system", - "version": "0.0.5", + "version": "0.0.6", "description": "xyflow core system that powers React Flow and Svelte Flow.", "keywords": [ "node-based UI", From 3eb9c12c20a4f2849dff32f5a62e3f141b9fbfd3 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 19 Sep 2023 16:51:17 +0200 Subject: [PATCH 0179/1093] chore(react): remove unused prop --- packages/react/src/types/component-props.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react/src/types/component-props.ts b/packages/react/src/types/component-props.ts index f49b5097c..65e47b6ab 100644 --- a/packages/react/src/types/component-props.ts +++ b/packages/react/src/types/component-props.ts @@ -115,7 +115,6 @@ export type ReactFlowProps = HTMLAttributes & { nodeOrigin?: NodeOrigin; edgesFocusable?: boolean; edgesUpdatable?: boolean; - initNodeOrigin?: NodeOrigin; elementsSelectable?: boolean; selectNodesOnDrag?: boolean; panOnDrag?: boolean | number[]; From 3c3239afd8788527153570c33be0103bf97c8de8 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 20 Sep 2023 12:05:16 +0200 Subject: [PATCH 0180/1093] feat(svelte) added nodedrag events --- examples/svelte/src/routes/overview/+page.svelte | 9 +++++++++ packages/svelte/src/lib/actions/drag/index.ts | 12 +++++++++--- .../lib/components/NodeWrapper/NodeWrapper.svelte | 9 +++++++++ .../lib/container/NodeRenderer/NodeRenderer.svelte | 3 +++ .../src/lib/container/SvelteFlow/SvelteFlow.svelte | 3 +++ .../svelte/src/lib/container/SvelteFlow/types.ts | 6 +++++- 6 files changed, 38 insertions(+), 4 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 5fdd7d476..2a290401a 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -167,6 +167,15 @@ event.preventDefault(); console.log('on pane contextmenu', event); }} + on:nodedrag={(event) => { + console.log('on node drag', event); + }} + on:nodedragstart={(event) => { + console.log('on node drag start', event); + }} + on:nodedragstop={(event) => { + console.log('on node drag stop', event); + }} > diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 5a0d44366..276e319cc 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -1,22 +1,28 @@ import { get } from 'svelte/store'; -import { XYDrag } from '@xyflow/system'; +import { XYDrag, type OnDrag } from '@xyflow/system'; import type { SvelteFlowStore } from '$lib/store/types'; -type UseDragParams = { +export type UseDragParams = { store: SvelteFlowStore; disabled?: boolean; noDragClass?: string; handleSelector?: string; nodeId?: string; isSelectable?: boolean; + onDrag?: OnDrag; + onDragStart?: OnDrag; + onDragStop?: OnDrag; }; export default function drag(domNode: Element, params: UseDragParams) { + const { store, onDrag, onDragStart, onDragStop } = params; const dragInstance = XYDrag({ domNode, + onDrag, + onDragStart, + onDragStop, getStoreItems: () => { - const { store } = params; const snapGrid = get(store.snapGrid); return { diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 17c8e4cee..7e18ee610 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -97,6 +97,15 @@ disabled: false, handleSelector: dragHandle, noDragClass: 'nodrag', + onDrag: (event, _, node, nodes) => { + dispatch('nodedrag', { event, node, nodes }); + }, + onDragStart: (event, _, node, nodes) => { + dispatch('nodedragstart', { event, node, nodes }); + }, + onDragStop: (event, _, node, nodes) => { + dispatch('nodedragstop', { event, node, nodes }); + }, store }} bind:this={nodeRef} diff --git a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte index bc30ea1a6..a695b03d0 100644 --- a/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte @@ -72,6 +72,9 @@ on:connectstart on:connect on:connectend + on:nodedrag + on:nodedragstart + on:nodedragstop /> {/each}
diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index bb3593024..2d6da2540 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -154,6 +154,9 @@ on:connectstart on:connect on:connectend + on:nodedrag + on:nodedragstart + on:nodedragstop /> diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 97d5a3a95..2b145942b 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -12,7 +12,8 @@ import type { CoordinateExtent, PanOnScrollMode, IsValidConnection, - HandleType + HandleType, + NodeBase } from '@xyflow/system'; import type { Edge, Node, NodeTypes, KeyDefinition, EdgeTypes } from '$lib/types'; @@ -74,4 +75,7 @@ export type SvelteFlowProps = DOMAttributes & { 'on:connectend'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; 'on:paneclick'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; 'on:panecontextmenu'?: CustomEvent<{ event: MouseEvent }>; + 'on:nodedrag'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; + 'on:nodedragstop'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; + 'on:nodedragstart'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; }; From 4dd231a3c9c174ce7a7a3f9d0494ae90be5ca7bb Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 20 Sep 2023 13:06:59 +0200 Subject: [PATCH 0181/1093] chore(svelte-examples) made examples more svelty --- .../svelte/src/routes/overview/+page.svelte | 28 +++---------------- 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 5fdd7d476..27aac391d 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -110,33 +110,13 @@ ]); function updateNode() { - nodes.update((nds) => - nds.map((n) => { - if (n.id === '1') { - return { - ...n, - position: { x: n.position.x + 20, y: n.position.y } - }; - } - - return n; - }) - ); + $nodes[0].position.x += 20; + $nodes = $nodes; } function updateEdge() { - edges.update((eds) => - eds.map((edge) => { - if (edge.id === '1-2') { - return { - ...edge, - type: edge.type === 'default' ? 'smoothstep' : 'default' - }; - } - - return edge; - }) - ); + $edges[0].type = $edges[0].type === 'default' ? 'smoothstep' : 'default'; + $edges = $edges; } $: { From 57413926443f79f5cf4720b21b46dffdda522786 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 20 Sep 2023 15:14:52 +0200 Subject: [PATCH 0182/1093] feat(svelte) added on:nodecontextmenu --- examples/svelte/src/routes/overview/+page.svelte | 3 +++ .../svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte | 1 + .../svelte/src/lib/container/NodeRenderer/NodeRenderer.svelte | 1 + packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 1 + packages/svelte/src/lib/container/SvelteFlow/types.ts | 1 + 5 files changed, 7 insertions(+) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 2a290401a..38a79a3fe 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -176,6 +176,9 @@ on:nodedragstop={(event) => { console.log('on node drag stop', event); }} + on:nodecontextmenu={(event) => { + console.log('on node contextmenu', event); + }} > diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 7e18ee610..2be5c0987 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -124,6 +124,7 @@ on:mouseenter={(event) => dispatchEvent('nodemouseenter', event)} on:mouseleave={(event) => dispatchEvent('nodemouseleave', event)} on:mousemove={(event) => dispatchEvent('nodemousemove', event)} + on:contextmenu={(event) => dispatchEvent('nodecontextmenu', event)} > {/each}
diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 2d6da2540..18b0c722c 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -157,6 +157,7 @@ on:nodedrag on:nodedragstart on:nodedragstop + on:nodecontextmenu />
diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 2b145942b..61e3f8c87 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -78,4 +78,5 @@ export type SvelteFlowProps = DOMAttributes & { 'on:nodedrag'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; 'on:nodedragstop'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; 'on:nodedragstart'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; + 'on:nodecontextmenu'?: CustomEvent<{ event: MouseEvent; node: NodeBase }>; }; From c7f62885aacdf17499c3ee38f77f12030689f467 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 20 Sep 2023 15:34:19 +0200 Subject: [PATCH 0183/1093] fix(svelte) removed the need to search through all nodes when moving mouse over node --- .../components/NodeWrapper/NodeWrapper.svelte | 16 ++++++---------- .../src/lib/components/NodeWrapper/types.ts | 1 + .../container/NodeRenderer/NodeRenderer.svelte | 1 + 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 17c8e4cee..3d14c4a63 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -17,6 +17,7 @@ interface $$Props extends NodeWrapperProps {} + export let node: NodeWrapperProps['node']; export let id: NodeWrapperProps['id']; export let data: NodeWrapperProps['data'] = {}; export let selected: NodeWrapperProps['selected'] = false; @@ -39,7 +40,7 @@ export { className as class }; const store = useStore(); - const { nodes, nodeTypes, addSelectedNodes } = store; + const { nodeTypes, addSelectedNodes } = store; let nodeRef: HTMLDivElement; const nodeTypeValid = !!$nodeTypes[type!]; @@ -69,11 +70,6 @@ }; }); - function dispatchEvent(eventName: string, event?: MouseEvent | TouchEvent) { - const node = $nodes.find((n) => n.id === id); - dispatch(eventName, { node, event }); - } - function onSelectNodeHandler(event: MouseEvent | TouchEvent) { if (selectable && (!selectNodesOnDrag || !draggable)) { // this handler gets called within the drag start event when selectNodesOnDrag=true @@ -81,7 +77,7 @@ } // @todo: support multiselection - dispatchEvent('nodeclick', event); + dispatch('nodeclick', { node, event }); } // @todo: add selectable state @@ -112,9 +108,9 @@ style:transform="translate({positionOrigin?.x ?? 0}px, {positionOrigin?.y ?? 0}px)" {style} on:click={onSelectNodeHandler} - on:mouseenter={(event) => dispatchEvent('nodemouseenter', event)} - on:mouseleave={(event) => dispatchEvent('nodemouseleave', event)} - on:mousemove={(event) => dispatchEvent('nodemousemove', event)} + on:mouseenter={(event) => dispatch('nodemouseenter', { node, event })} + on:mouseleave={(event) => dispatch('nodemouseleave', { node, event })} + on:mousemove={(event) => dispatch('nodemousemove', { node, event })} > Date: Wed, 20 Sep 2023 15:51:17 +0200 Subject: [PATCH 0184/1093] chore(svelte): cleanup node drag handlers, add to changelog --- examples/svelte/src/routes/overview/+page.svelte | 2 +- packages/svelte/CHANGELOG.md | 5 +++++ .../svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 2 +- packages/svelte/src/lib/container/SvelteFlow/types.ts | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 38a79a3fe..c975744f8 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -164,7 +164,6 @@ on:connectend={(event) => console.log('on connect end', event)} on:paneclick={(event) => console.log('on pane click', event)} on:panecontextmenu={(event) => { - event.preventDefault(); console.log('on pane contextmenu', event); }} on:nodedrag={(event) => { @@ -177,6 +176,7 @@ console.log('on node drag stop', event); }} on:nodecontextmenu={(event) => { + event.detail.event.preventDefault(); console.log('on node contextmenu', event); }} > diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 491aa21f6..30da979c4 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.0.21 + +- add `on:nodedragstart`, `on:nodedrag` and `on:nodedragstop` +- add `on:nodecontextmenu` + ## 0.0.20 - [breaking change] use same convention for all custom events: Always pass the original event if possible and additional data diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 18b0c722c..0b2fac706 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -154,8 +154,8 @@ on:connectstart on:connect on:connectend - on:nodedrag on:nodedragstart + on:nodedrag on:nodedragstop on:nodecontextmenu /> diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 61e3f8c87..1c2f6ebb3 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -75,8 +75,8 @@ export type SvelteFlowProps = DOMAttributes & { 'on:connectend'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; 'on:paneclick'?: CustomEvent<{ event: MouseEvent | TouchEvent }>; 'on:panecontextmenu'?: CustomEvent<{ event: MouseEvent }>; + 'on:nodedragstart'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; 'on:nodedrag'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; 'on:nodedragstop'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; - 'on:nodedragstart'?: CustomEvent<{ event: MouseEvent; node: NodeBase; nodes: NodeBase[] }>; 'on:nodecontextmenu'?: CustomEvent<{ event: MouseEvent; node: NodeBase }>; }; From d595e0b6bfa8f99b77ee9b876532ad00fcf47527 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 20 Sep 2023 16:15:04 +0200 Subject: [PATCH 0185/1093] fix(svelte): dont pan when dragHandle is beinng used --- .../svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 058f6dc69..fd44335ac 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -112,6 +112,7 @@ class:draggable class:connectable class:selectable + class:nopan={draggable} class:parent={isParent} style:z-index={zIndex} style:transform="translate({positionOrigin?.x ?? 0}px, {positionOrigin?.y ?? 0}px)" From 8846deb8e8a113065094e08c2b1248cced3e9a69 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 20 Sep 2023 16:24:40 +0200 Subject: [PATCH 0186/1093] fix(system): nopan doesn't work when used with panOnScroll --- packages/system/src/xypanzoom/filter.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/system/src/xypanzoom/filter.ts b/packages/system/src/xypanzoom/filter.ts index 232c66af7..c0d0adddb 100644 --- a/packages/system/src/xypanzoom/filter.ts +++ b/packages/system/src/xypanzoom/filter.ts @@ -59,7 +59,10 @@ export function createFilter({ } // if the target element is inside an element with the nopan class, we prevent panning - if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') { + if ( + isWrappedWithClass(event, noPanClassName) && + ((!panOnScroll && event.type !== 'wheel') || (panOnScroll && event.type === 'wheel')) + ) { return false; } From 1e2ba65fce899178fc0dd817b73fe54fba61eadc Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 20 Sep 2023 16:25:44 +0200 Subject: [PATCH 0187/1093] chore(svelte): bump --- packages/svelte/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 1eee25b6f..131d7922c 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.20", + "version": "0.0.21", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", From fdb50e8ba4f10855439457a6c46926989fe1de7e Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 21 Sep 2023 10:27:05 +0200 Subject: [PATCH 0188/1093] fix(svelte) edge classes get applied --- .../svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index aabff7b71..e22f5c89f 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -33,6 +33,8 @@ export let targetPosition: $$Props['targetPosition']; export let ariaLabel: $$Props['ariaLabel'] = undefined; // @ todo: support edge updates + let className: string = ''; + export { className as class }; const { edges, edgeTypes, flowId, addSelectedEdges } = useStore(); const dispatch = createEventDispatcher(); @@ -69,6 +71,7 @@ > Date: Thu, 21 Sep 2023 12:59:56 +0200 Subject: [PATCH 0189/1093] feat(svelte) add autoPanOnConnect autoPanOnNodeDrag props --- examples/svelte/src/routes/overview/+page.svelte | 2 ++ packages/svelte/src/lib/components/Handle/Handle.svelte | 5 +++-- .../svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 6 +++++- packages/svelte/src/lib/container/SvelteFlow/types.ts | 2 ++ packages/svelte/src/lib/container/SvelteFlow/utils.ts | 2 ++ packages/svelte/src/lib/store/initial-store.ts | 1 + 6 files changed, 15 insertions(+), 3 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 31a8d4595..05bc506b3 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -159,6 +159,8 @@ event.detail.event.preventDefault(); console.log('on node contextmenu', event); }} + autoPanOnConnect + autoPanOnNodeDrag > diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index d53109238..0108357be 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -40,7 +40,8 @@ addEdge, panBy, cancelConnection, - updateConnection + updateConnection, + autoPanOnConnect } = store; function onPointerDown(event: MouseEvent | TouchEvent) { @@ -56,7 +57,7 @@ nodes: $nodes, connectionMode: $connectionMode, lib: $lib, - autoPanOnConnect: true, + autoPanOnConnect: $autoPanOnConnect, isValidConnection: $isValidConnection, updateConnection, cancelConnection, diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 0b2fac706..a24d7aaac 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -51,6 +51,8 @@ export let zoomOnPinch: boolean = true; export let panOnScroll: boolean = false; export let panOnDrag: boolean | number[] = true; + export let autoPanOnConnect: $$Props['autoPanOnConnect'] = true; + export let autoPanOnNodeDrag: $$Props['autoPanOnNodeDrag'] = true; export let defaultMarkerColor = '#b1b1b7'; @@ -102,7 +104,9 @@ nodesConnectable, elementsSelectable, onlyRenderVisibleElements, - isValidConnection + isValidConnection, + autoPanOnConnect, + autoPanOnNodeDrag }; updateStoreByKeys(store, updatableProps); diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 1c2f6ebb3..2e7d8a532 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -49,6 +49,8 @@ export type SvelteFlowProps = DOMAttributes & { panOnScroll?: boolean; panOnDrag?: boolean | number[]; onlyRenderVisibleElements?: boolean; + autoPanOnConnect?: boolean; + autoPanOnNodeDrag?: boolean; class?: string; style?: string; diff --git a/packages/svelte/src/lib/container/SvelteFlow/utils.ts b/packages/svelte/src/lib/container/SvelteFlow/utils.ts index ce82b5cd0..f06a8dab7 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/utils.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/utils.ts @@ -59,6 +59,8 @@ export type UpdatableStoreProps = { elementsSelectable?: UnwrapWritable; onlyRenderVisibleElements?: UnwrapWritable; isValidConnection?: UnwrapWritable; + autoPanOnConnect?: UnwrapWritable; + autoPanOnNodeDrag?: UnwrapWritable; }; export function updateStoreByKeys(store: SvelteFlowStore, keys: UpdatableStoreProps) { diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index f7326e4f2..bf6130850 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -59,6 +59,7 @@ export const getInitialStore = () => ({ nodeExtent: writable(infiniteExtent), translateExtent: writable(infiniteExtent), autoPanOnNodeDrag: writable(true), + autoPanOnConnect: writable(true), fitViewOnInit: writable(false), fitViewOnInitDone: writable(false), panZoom: writable(null), From 75712a1d6c292afe01f5f0a3eaa1b4f9fc63c57b Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 21 Sep 2023 15:35:13 +0200 Subject: [PATCH 0190/1093] chore(svelte): cleanup edgewrapper --- .../svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte | 3 +-- packages/svelte/src/lib/types/edges.ts | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index e22f5c89f..0b99d7441 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -57,7 +57,7 @@ {#if !hidden} & EdgePosition & { sourceHandleId?: string | null; From 1a935de3f99f00f02aae6fdcf165a10da0ae56f2 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 21 Sep 2023 16:00:53 +0200 Subject: [PATCH 0191/1093] feat(svelte): add onError prop closes #3423 --- .../container/SvelteFlow/SvelteFlow.svelte | 36 ++++++++++--------- .../src/lib/container/SvelteFlow/types.ts | 4 ++- .../src/lib/container/SvelteFlow/utils.ts | 1 + packages/svelte/src/lib/store/edge-tree.ts | 8 ++--- packages/svelte/src/lib/store/index.ts | 9 ++--- .../svelte/src/lib/store/initial-store.ts | 9 +++-- packages/svelte/src/lib/store/types.ts | 4 +-- 7 files changed, 36 insertions(+), 35 deletions(-) diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index a24d7aaac..d6e55ee27 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -19,7 +19,7 @@ type $$Props = SvelteFlowProps; - export let id = '1'; + export let id: $$Props['id'] = '1'; export let nodes: $$Props['nodes']; export let edges: $$Props['edges']; export let fitView: $$Props['fitView'] = undefined; @@ -44,15 +44,16 @@ export let isValidConnection: $$Props['isValidConnection'] = undefined; export let translateExtent: $$Props['translateExtent'] = undefined; export let onlyRenderVisibleElements: $$Props['onlyRenderVisibleElements'] = undefined; - export let panOnScrollMode: PanOnScrollMode = PanOnScrollMode.Free; - export let preventScrolling: boolean = true; - export let zoomOnScroll: boolean = true; - export let zoomOnDoubleClick: boolean = true; - export let zoomOnPinch: boolean = true; - export let panOnScroll: boolean = false; - export let panOnDrag: boolean | number[] = true; + export let panOnScrollMode: $$Props['panOnScrollMode'] = PanOnScrollMode.Free; + export let preventScrolling: $$Props['preventScrolling'] = true; + export let zoomOnScroll: $$Props['zoomOnScroll'] = true; + export let zoomOnDoubleClick: $$Props['zoomOnDoubleClick'] = true; + export let zoomOnPinch: $$Props['zoomOnPinch'] = true; + export let panOnScroll: $$Props['panOnScroll'] = false; + export let panOnDrag: $$Props['panOnDrag'] = true; export let autoPanOnConnect: $$Props['autoPanOnConnect'] = true; export let autoPanOnNodeDrag: $$Props['autoPanOnNodeDrag'] = true; + export let onError: $$Props['onError'] = undefined; export let defaultMarkerColor = '#b1b1b7'; @@ -106,7 +107,8 @@ onlyRenderVisibleElements, isValidConnection, autoPanOnConnect, - autoPanOnNodeDrag + autoPanOnNodeDrag, + onError }; updateStoreByKeys(store, updatableProps); @@ -137,15 +139,15 @@ {onMoveStart} {onMove} {onMoveEnd} - {panOnScrollMode} - {preventScrolling} - {zoomOnScroll} - {zoomOnDoubleClick} - {zoomOnPinch} - {panOnScroll} - {panOnDrag} + panOnScrollMode={panOnScrollMode === undefined ? PanOnScrollMode.Free : panOnScrollMode} + preventScrolling={preventScrolling === undefined ? true : preventScrolling} + zoomOnScroll={zoomOnScroll === undefined ? true : zoomOnScroll} + zoomOnDoubleClick={zoomOnDoubleClick === undefined ? true : zoomOnDoubleClick} + zoomOnPinch={zoomOnPinch === undefined ? true : zoomOnPinch} + panOnScroll={panOnScroll === undefined ? false : panOnScroll} + panOnDrag={panOnDrag === undefined ? true : panOnDrag} > - + diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 2e7d8a532..04838c3a3 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -13,7 +13,8 @@ import type { PanOnScrollMode, IsValidConnection, HandleType, - NodeBase + NodeBase, + OnError } from '@xyflow/system'; import type { Edge, Node, NodeTypes, KeyDefinition, EdgeTypes } from '$lib/types'; @@ -61,6 +62,7 @@ export type SvelteFlowProps = DOMAttributes & { onMoveStart?: OnMoveStart; onMove?: OnMove; onMoveEnd?: OnMoveEnd; + onError?: OnError; 'on:nodeclick'?: CustomEvent<{ event: MouseEvent | TouchEvent; node: Node }>; 'on:nodemouseenter'?: CustomEvent<{ event: MouseEvent; node: Node }>; diff --git a/packages/svelte/src/lib/container/SvelteFlow/utils.ts b/packages/svelte/src/lib/container/SvelteFlow/utils.ts index f06a8dab7..8ad5547ba 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/utils.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/utils.ts @@ -61,6 +61,7 @@ export type UpdatableStoreProps = { isValidConnection?: UnwrapWritable; autoPanOnConnect?: UnwrapWritable; autoPanOnNodeDrag?: UnwrapWritable; + onError?: UnwrapWritable; }; export function updateStoreByKeys(store: SvelteFlowStore, keys: UpdatableStoreProps) { diff --git a/packages/svelte/src/lib/store/edge-tree.ts b/packages/svelte/src/lib/store/edge-tree.ts index dbbe98278..f316fee55 100644 --- a/packages/svelte/src/lib/store/edge-tree.ts +++ b/packages/svelte/src/lib/store/edge-tree.ts @@ -1,10 +1,10 @@ import { derived } from 'svelte/store'; -import { groupEdgesByZLevel, isEdgeVisible, getEdgePosition, type OnError } from '@xyflow/system'; +import { groupEdgesByZLevel, isEdgeVisible, getEdgePosition } from '@xyflow/system'; import type { EdgeLayouted } from '$lib/types'; import type { SvelteFlowStoreState } from './types'; -export function getEdgeTree(store: SvelteFlowStoreState, onError: OnError) { +export function getEdgeTree(store: SvelteFlowStoreState) { const visibleEdges = derived( [ store.edges, @@ -40,8 +40,8 @@ export function getEdgeTree(store: SvelteFlowStoreState, onError: OnError) { ); return derived( - [visibleEdges, store.nodes, store.connectionMode], - ([visibleEdges, nodes, connectionMode]) => { + [visibleEdges, store.nodes, store.connectionMode, store.onError], + ([visibleEdges, nodes, connectionMode, onError]) => { const layoutedEdges = visibleEdges.reduce((res, edge) => { const sourceNode = nodes.find((node) => node.id === edge.source); const targetNode = nodes.find((node) => node.id === edge.target); diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 5c41413e7..08fc8b90f 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -286,16 +286,12 @@ export function createStore(): SvelteFlowStore { cancelConnection(); } - function onError(id: string, msg: string) { - console.log(msg); - } - return { // state ...store, // derived state - edgeTree: getEdgeTree(store, onError), + edgeTree: getEdgeTree(store), connectionPath: getConnectionPath(store), visibleNodes: getVisibleNodes(store), markers: derived( @@ -323,8 +319,7 @@ export function createStore(): SvelteFlowStore { panBy, updateConnection, cancelConnection, - reset, - onError + reset }; } diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index bf6130850..f3e69b9e5 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -12,7 +12,9 @@ import { type CoordinateExtent, type IsValidConnection, type GroupedEdges, - type NodeOrigin + type NodeOrigin, + type OnError, + devWarn } from '@xyflow/system'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; @@ -79,8 +81,8 @@ export const getInitialStore = () => ({ domNode: writable(null), connectionPath: readable(null), connection: writable(initConnectionData), - connectionRadius: writable(20), connectionLineType: writable(ConnectionLineType.Bezier), + connectionRadius: writable(20), isValidConnection: writable(() => true), nodesDraggable: writable(true), nodesConnectable: writable(true), @@ -89,5 +91,6 @@ export const getInitialStore = () => ({ markers: readable([]), defaultMarkerColor: writable('#b1b1b7'), lib: readable('svelte'), - onlyRenderVisibleElements: writable(false) + onlyRenderVisibleElements: writable(false), + onError: writable(devWarn) }); diff --git a/packages/svelte/src/lib/store/types.ts b/packages/svelte/src/lib/store/types.ts index 5dda4c395..9156f6f03 100644 --- a/packages/svelte/src/lib/store/types.ts +++ b/packages/svelte/src/lib/store/types.ts @@ -6,8 +6,7 @@ import type { Connection, UpdateNodePositions, CoordinateExtent, - UpdateConnection, - OnError + UpdateConnection } from '@xyflow/system'; import type { getInitialStore } from './initial-store'; @@ -34,7 +33,6 @@ export type SvelteFlowStoreActions = { updateConnection: UpdateConnection; cancelConnection: () => void; reset(): void; - onError: OnError; }; export type SvelteFlowStoreState = ReturnType; From 8100390142690cf63c56e52675c699971830276e Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 25 Sep 2023 10:00:38 +0200 Subject: [PATCH 0192/1093] feat(svelte) add attributionPosition and proOptions, closes #3424 --- examples/svelte/src/routes/overview/+page.svelte | 1 + .../svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 4 +++- packages/svelte/src/lib/container/SvelteFlow/types.ts | 6 +++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 05bc506b3..f6e0e683a 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -161,6 +161,7 @@ }} autoPanOnConnect autoPanOnNodeDrag + attributionPosition={'top-center'} > diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index d6e55ee27..2d2c1a448 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -54,6 +54,8 @@ export let autoPanOnConnect: $$Props['autoPanOnConnect'] = true; export let autoPanOnNodeDrag: $$Props['autoPanOnNodeDrag'] = true; export let onError: $$Props['onError'] = undefined; + export let attributionPosition: $$Props['attributionPosition'] = undefined; + export let proOptions: $$Props['proOptions'] = undefined; export let defaultMarkerColor = '#b1b1b7'; @@ -170,7 +172,7 @@ - +
diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 04838c3a3..a482bbbf5 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -14,7 +14,9 @@ import type { IsValidConnection, HandleType, NodeBase, - OnError + OnError, + PanelPosition, + ProOptions } from '@xyflow/system'; import type { Edge, Node, NodeTypes, KeyDefinition, EdgeTypes } from '$lib/types'; @@ -52,6 +54,8 @@ export type SvelteFlowProps = DOMAttributes & { onlyRenderVisibleElements?: boolean; autoPanOnConnect?: boolean; autoPanOnNodeDrag?: boolean; + attributionPosition?: PanelPosition; + proOptions?: ProOptions; class?: string; style?: string; From 339df4c651b81e21e38907eff884770cdd88f8d4 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 25 Sep 2023 10:36:31 +0200 Subject: [PATCH 0193/1093] feat(svelte) add defaultEdgeOptions, closes #3437 --- examples/svelte/src/routes/overview/+page.svelte | 3 +++ .../lib/container/EdgeRenderer/EdgeRenderer.svelte | 13 ++++++++++++- .../src/lib/container/SvelteFlow/SvelteFlow.svelte | 3 ++- .../svelte/src/lib/container/SvelteFlow/types.ts | 10 +++++++++- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 05bc506b3..0ba5e4dad 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -161,6 +161,9 @@ }} autoPanOnConnect autoPanOnNodeDrag + defaultEdgeOptions={{ + hidden: false + }} > diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index 0658f47a5..19f6848da 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -2,8 +2,19 @@ import { EdgeWrapper } from '$lib/components/EdgeWrapper'; import { MarkerDefinition } from '$lib/container/EdgeRenderer/MarkerDefinition'; import { useStore } from '$lib/store'; + import type { DefaultEdgeOptions } from '$lib/types'; - const { width, height, elementsSelectable, edgeTree } = useStore(); + export let defaultOptions: DefaultEdgeOptions | undefined; + + const { + width, + height, + elementsSelectable, + edgeTree, + edges: { setDefaultOptions } + } = useStore(); + + $: if (defaultOptions) setDefaultOptions(defaultOptions); {#each $edgeTree as group (group.level)} diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index d6e55ee27..cec7597d9 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -54,6 +54,7 @@ export let autoPanOnConnect: $$Props['autoPanOnConnect'] = true; export let autoPanOnNodeDrag: $$Props['autoPanOnNodeDrag'] = true; export let onError: $$Props['onError'] = undefined; + export let defaultEdgeOptions: $$Props['defaultEdgeOptions'] = undefined; export let defaultMarkerColor = '#b1b1b7'; @@ -149,7 +150,7 @@ > - +
& { @@ -52,6 +59,7 @@ export type SvelteFlowProps = DOMAttributes & { onlyRenderVisibleElements?: boolean; autoPanOnConnect?: boolean; autoPanOnNodeDrag?: boolean; + defaultEdgeOptions?: DefaultEdgeOptions; class?: string; style?: string; From ada5b946739fcd7c23b52cdbf145551b4b93f92a Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 25 Sep 2023 12:58:04 +0200 Subject: [PATCH 0194/1093] feat(svelte) add fitViewOptions, closes #3440 --- .../react/src/examples/Overview/index.tsx | 4 +- .../svelte/src/routes/overview/+page.svelte | 12 ++++- packages/react/src/store/index.ts | 17 +++--- .../container/SvelteFlow/SvelteFlow.svelte | 5 ++ .../src/lib/container/SvelteFlow/types.ts | 4 +- packages/svelte/src/lib/store/index.ts | 54 ++++++++++--------- .../svelte/src/lib/store/initial-store.ts | 10 +++- packages/system/src/utils/general.ts | 2 +- packages/system/src/utils/graph.ts | 7 +-- 9 files changed, 71 insertions(+), 44 deletions(-) diff --git a/examples/react/src/examples/Overview/index.tsx b/examples/react/src/examples/Overview/index.tsx index 233aa76c7..6dbe26631 100644 --- a/examples/react/src/examples/Overview/index.tsx +++ b/examples/react/src/examples/Overview/index.tsx @@ -199,7 +199,7 @@ const OverviewFlow = () => { onConnect={onConnect} onPaneClick={onPaneClick} onPaneScroll={onPaneScroll} - onPaneContextMenu={onPaneContextMenu} + // onPaneContextMenu={onPaneContextMenu} onNodeDragStart={onNodeDragStart} onNodeDrag={onNodeDrag} onNodeDragStop={onNodeDragStop} @@ -221,7 +221,7 @@ const OverviewFlow = () => { onEdgeMouseLeave={onEdgeMouseLeave} onEdgeDoubleClick={onEdgeDoubleClick} fitView - fitViewOptions={{ padding: 0.2 }} + fitViewOptions={{ padding: 0.1, nodes: [{ id: '1' }] }} attributionPosition="top-right" maxZoom={Infinity} onNodesDelete={onNodesDelete} diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 0ba5e4dad..6ca40dee6 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -130,8 +130,16 @@ {nodeTypes} {edgeTypes} fitView - minZoom={0.1} - maxZoom={2.5} + fitViewOptions={{ + padding: 10, + nodes: [ + { + id: '1' + } + ] + }} + minZoom={0} + maxZoom={Infinity} selectionMode={SelectionMode.Full} initialViewport={{ x: 100, y: 100, zoom: 2 }} snapGrid={[25, 25]} diff --git a/packages/react/src/store/index.ts b/packages/react/src/store/index.ts index 51ba3eff1..a2a597f62 100644 --- a/packages/react/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -80,13 +80,13 @@ const createRFStore = () => const nextNodes = updateAbsolutePositions(updatedNodes, nodeOrigin); - const nextFitViewDone = - fitViewDone || - (fitViewOnInit && - fitView({ - ...fitViewOnInitOptions, - nodes: nextNodes, - })); + let nextFitViewDone = fitViewDone; + if (!fitViewDone && fitViewOnInit) { + nextFitViewDone = fitView({ + ...fitViewOnInitOptions, + nodes: fitViewOnInitOptions?.nodes || nextNodes, + }); + } set({ nodes: nextNodes, fitViewDone: nextFitViewDone }); @@ -243,7 +243,6 @@ const createRFStore = () => }, fitView: (options?: FitViewOptions): boolean => { const { panZoom, nodes, width, height, minZoom, maxZoom, nodeOrigin } = get(); - const fitViewNodes = options?.nodes || nodes; if (!panZoom) { return false; @@ -251,7 +250,7 @@ const createRFStore = () => return fitViewSystem( { - nodes: fitViewNodes as Node[], + nodes, width, height, panZoom, diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index cec7597d9..93cb0f9d9 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -23,6 +23,7 @@ export let nodes: $$Props['nodes']; export let edges: $$Props['edges']; export let fitView: $$Props['fitView'] = undefined; + export let fitViewOptions: $$Props['fitViewOptions'] = undefined; export let minZoom: $$Props['minZoom'] = undefined; export let maxZoom: $$Props['maxZoom'] = undefined; export let initialViewport: Viewport = { x: 0, y: 0, zoom: 1 }; @@ -79,6 +80,10 @@ store.fitViewOnInit.set(fitView); } + if (fitViewOptions) { + store.fitViewOptions.set(fitViewOptions); + } + updateStore(store, { nodeTypes, edgeTypes, diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 3194ffef8..2585e0fd5 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -23,7 +23,8 @@ import type { NodeTypes, KeyDefinition, EdgeTypes, - DefaultEdgeOptions + DefaultEdgeOptions, + FitViewOptions } from '$lib/types'; import type { Writable } from 'svelte/store'; @@ -37,6 +38,7 @@ export type SvelteFlowProps = DOMAttributes & { panActivationKey?: KeyDefinition; deleteKey?: KeyDefinition; fitView?: boolean; + fitViewOptions?: FitViewOptions; nodeOrigin?: NodeOrigin; minZoom?: number; maxZoom?: number; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 08fc8b90f..dffae5f35 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -90,13 +90,39 @@ export function createStore(): SvelteFlowStore { return; } - const fitViewOnInitDone = - get(store.fitViewOnInitDone) || (get(store.fitViewOnInit) && fitView({ nodes: nextNodes })); + if (!get(store.fitViewOnInitDone) && get(store.fitViewOnInit)) { + const fitViewOptions = get(store.fitViewOptions); + const fitViewOnInitDone = fitView(nextNodes, { + ...fitViewOptions, + nodes: fitViewOptions?.nodes || nextNodes + }); + store.fitViewOnInitDone.set(fitViewOnInitDone); + } - store.fitViewOnInitDone.set(fitViewOnInitDone); store.nodes.set(nextNodes); } + function fitView(nodes: Node[], options?: FitViewOptions) { + const panZoom = get(store.panZoom); + + if (!panZoom) { + return false; + } + + return fitViewUtil( + { + nodes, + width: get(store.width), + height: get(store.height), + minZoom: get(store.minZoom), + maxZoom: get(store.maxZoom), + panZoom, + nodeOrigin: get(store.nodeOrigin) + }, + options + ); + } + function zoomBy(factor: number, options?: ViewportHelperFunctionOptions) { const panZoom = get(store.panZoom); @@ -140,28 +166,6 @@ export function createStore(): SvelteFlowStore { } } - function fitView(options?: FitViewOptions) { - const panZoom = get(store.panZoom); - const fitViewNodes = options?.nodes || get(store.nodes); - - if (!panZoom) { - return false; - } - - return fitViewUtil( - { - nodes: fitViewNodes as Node[], - width: get(store.width), - height: get(store.height), - minZoom: get(store.minZoom), - maxZoom: get(store.maxZoom), - panZoom, - nodeOrigin: get(store.nodeOrigin) - }, - {} - ); - } - function resetSelectedItem(item: T) { if (item.selected) { return { diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index f3e69b9e5..1c82f3010 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -24,7 +24,14 @@ import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; import StepEdge from '$lib/components/edges/StepEdge.svelte'; -import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted, Node } from '$lib/types'; +import type { + ConnectionData, + NodeTypes, + EdgeTypes, + EdgeLayouted, + Node, + FitViewOptions +} from '$lib/types'; import { createNodesStore, createEdgesStore } from './utils'; export const initConnectionData = { @@ -64,6 +71,7 @@ export const getInitialStore = () => ({ autoPanOnConnect: writable(true), fitViewOnInit: writable(false), fitViewOnInitDone: writable(false), + fitViewOptions: writable(undefined), panZoom: writable(null), snapGrid: writable(null), dragging: writable(false), diff --git a/packages/system/src/utils/general.ts b/packages/system/src/utils/general.ts index 0bad94c9e..11bbb902b 100644 --- a/packages/system/src/utils/general.ts +++ b/packages/system/src/utils/general.ts @@ -160,7 +160,7 @@ export const getTransformForBounds = ( height: number, minZoom: number, maxZoom: number, - padding = 0.1 + padding: number ): Transform => { const xZoom = width / (bounds.width * (1 + padding)); const yZoom = height / (bounds.height * (1 + padding)); diff --git a/packages/system/src/utils/graph.ts b/packages/system/src/utils/graph.ts index cde43bd8f..b5e61562d 100644 --- a/packages/system/src/utils/graph.ts +++ b/packages/system/src/utils/graph.ts @@ -180,10 +180,11 @@ export function fitView, Options exte return isVisible; }); - const nodesInitialized = filteredNodes.every((n) => n.width && n.height); + console.log(filteredNodes); - if (nodes.length > 0 && nodesInitialized) { - const bounds = getRectOfNodes(nodes, nodeOrigin); + if (filteredNodes.length > 0) { + const bounds = getRectOfNodes(filteredNodes, nodeOrigin); + console.log(bounds); const [x, y, zoom] = getTransformForBounds( bounds, From 439916e619ebf603529c76ba4e3817c9696160a7 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 25 Sep 2023 13:46:22 +0200 Subject: [PATCH 0195/1093] fix(react) fitViewOptions.nodes are now working as intended --- examples/react/src/examples/Overview/index.tsx | 2 +- examples/svelte/src/routes/overview/+page.svelte | 2 +- packages/react/src/store/index.ts | 6 +++--- packages/react/src/types/store.ts | 2 +- packages/system/src/utils/graph.ts | 5 +---- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/examples/react/src/examples/Overview/index.tsx b/examples/react/src/examples/Overview/index.tsx index 6dbe26631..eb8a8b950 100644 --- a/examples/react/src/examples/Overview/index.tsx +++ b/examples/react/src/examples/Overview/index.tsx @@ -221,7 +221,7 @@ const OverviewFlow = () => { onEdgeMouseLeave={onEdgeMouseLeave} onEdgeDoubleClick={onEdgeDoubleClick} fitView - fitViewOptions={{ padding: 0.1, nodes: [{ id: '1' }] }} + fitViewOptions={{ padding: 0.1 /*nodes: [{ id: '1' }]*/ }} attributionPosition="top-right" maxZoom={Infinity} onNodesDelete={onNodesDelete} diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 6ca40dee6..dc3bbbc42 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -131,7 +131,7 @@ {edgeTypes} fitView fitViewOptions={{ - padding: 10, + padding: 0.1, nodes: [ { id: '1' diff --git a/packages/react/src/store/index.ts b/packages/react/src/store/index.ts index a2a597f62..2f27da45a 100644 --- a/packages/react/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -82,7 +82,7 @@ const createRFStore = () => let nextFitViewDone = fitViewDone; if (!fitViewDone && fitViewOnInit) { - nextFitViewDone = fitView({ + nextFitViewDone = fitView(nextNodes, { ...fitViewOnInitOptions, nodes: fitViewOnInitOptions?.nodes || nextNodes, }); @@ -241,8 +241,8 @@ const createRFStore = () => const { transform, width, height, panZoom, translateExtent } = get(); return panBySystem({ delta, panZoom, transform, translateExtent, width, height }); }, - fitView: (options?: FitViewOptions): boolean => { - const { panZoom, nodes, width, height, minZoom, maxZoom, nodeOrigin } = get(); + fitView: (nodes: Node[], options?: FitViewOptions): boolean => { + const { panZoom, width, height, minZoom, maxZoom, nodeOrigin } = get(); if (!panZoom) { return false; diff --git a/packages/react/src/types/store.ts b/packages/react/src/types/store.ts index 7fff1f732..36e792207 100644 --- a/packages/react/src/types/store.ts +++ b/packages/react/src/types/store.ts @@ -155,7 +155,7 @@ export type ReactFlowActions = { reset: () => void; triggerNodeChanges: (changes: NodeChange[]) => void; panBy: PanBy; - fitView: (options?: FitViewOptions) => boolean; + fitView: (nodes: Node[], options?: FitViewOptions) => boolean; }; export type ReactFlowState = ReactFlowStore & ReactFlowActions; diff --git a/packages/system/src/utils/graph.ts b/packages/system/src/utils/graph.ts index b5e61562d..3da50ebcd 100644 --- a/packages/system/src/utils/graph.ts +++ b/packages/system/src/utils/graph.ts @@ -171,7 +171,7 @@ export function fitView, Options exte options?: Options ) { const filteredNodes = nodes.filter((n) => { - const isVisible = options?.includeHiddenNodes ? n.width && n.height : !n.hidden; + const isVisible = n.width && n.height && (options?.includeHiddenNodes || !n.hidden); if (options?.nodes?.length) { return isVisible && options?.nodes.some((optionNode) => optionNode.id === n.id); @@ -180,11 +180,8 @@ export function fitView, Options exte return isVisible; }); - console.log(filteredNodes); - if (filteredNodes.length > 0) { const bounds = getRectOfNodes(filteredNodes, nodeOrigin); - console.log(bounds); const [x, y, zoom] = getTransformForBounds( bounds, From 852372f41b698d65fab1a54906cf40db57d08b5e Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 25 Sep 2023 15:32:40 +0200 Subject: [PATCH 0196/1093] feat(svelte) added on:edgecontextmenu --- examples/svelte/src/routes/overview/+page.svelte | 4 ++++ .../src/lib/components/EdgeWrapper/EdgeWrapper.svelte | 6 ++++++ .../src/lib/container/EdgeRenderer/EdgeRenderer.svelte | 2 +- .../svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 2 +- packages/svelte/src/lib/container/SvelteFlow/types.ts | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 05bc506b3..769e0662d 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -159,6 +159,10 @@ event.detail.event.preventDefault(); console.log('on node contextmenu', event); }} + on:edgecontextmenu={({ detail: { event, edge } }) => { + event.preventDefault(); + console.log('on edge contextmenu', edge); + }} autoPanOnConnect autoPanOnNodeDrag > diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 0b99d7441..81d35e498 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -51,6 +51,11 @@ const edge = $edges.find((e) => e.id === id); dispatch('edgeclick', { event, edge }); } + + function onContextMenu(event: MouseEvent) { + const edge = $edges.find((e) => e.id === id); + dispatch('edgecontextmenu', { event, edge }); + } @@ -62,6 +67,7 @@ class:selected data-id={id} on:click={onClick} + on:contextmenu={onContextMenu} aria-label={ariaLabel === null ? undefined : ariaLabel diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index 0658f47a5..8835c19ad 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -17,7 +17,7 @@ ($elementsSelectable && typeof edge.selectable === 'undefined') )} - + {/each} diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index d6e55ee27..8b43ddb3b 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -149,7 +149,7 @@ > - +
& { 'on:nodemousemove'?: CustomEvent<{ event: MouseEvent; node: Node }>; 'on:nodemouseleave'?: CustomEvent<{ event: MouseEvent; node: Node }>; 'on:edgeclick'?: CustomEvent<{ event: MouseEvent; edge: Edge }>; + 'on:edgecontextmenu'?: CustomEvent<{ event: MouseEvent; edge: Edge }>; 'on:connectstart'?: CustomEvent<{ event: MouseEvent | TouchEvent; nodeId?: string; From 75434d059bdf2d488571888464c4bad7a88158b3 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 25 Sep 2023 15:58:12 +0200 Subject: [PATCH 0197/1093] feat(svelte) added connectionMode prop --- examples/react/src/examples/Overview/index.tsx | 2 ++ examples/svelte/src/routes/overview/+page.svelte | 4 +++- .../svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 6 ++++-- packages/svelte/src/lib/container/SvelteFlow/types.ts | 4 +++- packages/svelte/src/lib/container/SvelteFlow/utils.ts | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/examples/react/src/examples/Overview/index.tsx b/examples/react/src/examples/Overview/index.tsx index 233aa76c7..7b25f131a 100644 --- a/examples/react/src/examples/Overview/index.tsx +++ b/examples/react/src/examples/Overview/index.tsx @@ -14,6 +14,7 @@ import { Controls, Background, MiniMap, + ConnectionMode, } from '@xyflow/react'; const onNodeDragStart = (_: ReactMouseEvent, node: Node, nodes: Node[]) => console.log('drag start', node, nodes); @@ -193,6 +194,7 @@ const OverviewFlow = () => { diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index d6e55ee27..0b578b63a 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -1,7 +1,7 @@ {#each $edgeTree as group (group.level)} @@ -27,7 +30,6 @@ edge.selectable || ($elementsSelectable && typeof edge.selectable === 'undefined') )} - {/each} From 5d742b4d9c27c7809df734b0d06fc9c981e15626 Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 26 Sep 2023 10:57:02 +0200 Subject: [PATCH 0201/1093] pull request review --- examples/svelte/src/routes/overview/+page.svelte | 3 --- .../src/lib/container/EdgeRenderer/EdgeRenderer.svelte | 6 +++--- .../svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 2056c6195..05bc506b3 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -161,9 +161,6 @@ }} autoPanOnConnect autoPanOnNodeDrag - defaultEdgeOptions={{ - // animated: true - }} > diff --git a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte index babac2177..d9c8602c4 100644 --- a/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte +++ b/packages/svelte/src/lib/container/EdgeRenderer/EdgeRenderer.svelte @@ -1,11 +1,11 @@ diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index cec7597d9..6a7c416b3 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -150,7 +150,7 @@ > - +
Date: Tue, 26 Sep 2023 11:17:21 +0200 Subject: [PATCH 0202/1093] pull request review --- examples/react/src/examples/Overview/index.tsx | 2 +- examples/svelte/src/routes/overview/+page.svelte | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/examples/react/src/examples/Overview/index.tsx b/examples/react/src/examples/Overview/index.tsx index 904f31d68..091105297 100644 --- a/examples/react/src/examples/Overview/index.tsx +++ b/examples/react/src/examples/Overview/index.tsx @@ -201,7 +201,7 @@ const OverviewFlow = () => { onConnect={onConnect} onPaneClick={onPaneClick} onPaneScroll={onPaneScroll} - // onPaneContextMenu={onPaneContextMenu} + onPaneContextMenu={onPaneContextMenu} onNodeDragStart={onNodeDragStart} onNodeDrag={onNodeDrag} onNodeDragStop={onNodeDragStop} diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index 4dcd9149e..ac9394ede 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -133,11 +133,7 @@ fitView fitViewOptions={{ padding: 0.1, - nodes: [ - { - id: '1' - } - ] + nodes: [{ id: '1' }] }} minZoom={0} maxZoom={Infinity} From e3ed768f6deb3a2d7f4cba943db699f9aaca85a2 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 26 Sep 2023 12:41:18 +0200 Subject: [PATCH 0203/1093] chore(changelog): update --- packages/svelte/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 30da979c4..369d0d299 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,3 +1,9 @@ +## WIP + +- add `on:edgecontextmenu` event handler prop +- add `connectionMode` prop +- add `attributionPosition` prop + ## 0.0.21 - add `on:nodedragstart`, `on:nodedrag` and `on:nodedragstop` From b3329253ed1a4480feffaa9aaacaa4ea6a453c49 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 26 Sep 2023 12:46:32 +0200 Subject: [PATCH 0204/1093] chore(svelte): cleanup examples --- examples/svelte/src/routes/overview/+page.svelte | 2 +- examples/svelte/src/routes/validation/+page.svelte | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/examples/svelte/src/routes/overview/+page.svelte b/examples/svelte/src/routes/overview/+page.svelte index ac9394ede..32bef5d00 100644 --- a/examples/svelte/src/routes/overview/+page.svelte +++ b/examples/svelte/src/routes/overview/+page.svelte @@ -133,7 +133,7 @@ fitView fitViewOptions={{ padding: 0.1, - nodes: [{ id: '1' }] + nodes: [{ id: '1' }, { id: '2' }, { id: '3' }] }} minZoom={0} maxZoom={Infinity} diff --git a/examples/svelte/src/routes/validation/+page.svelte b/examples/svelte/src/routes/validation/+page.svelte index 1c72199ea..c973e1931 100644 --- a/examples/svelte/src/routes/validation/+page.svelte +++ b/examples/svelte/src/routes/validation/+page.svelte @@ -32,9 +32,21 @@ const edges = writable([]); const isValidConnection: IsValidConnection = (connection) => connection.target === 'B'; + + const defaultEdgeOptions = { + animated: true + }; - + From 348f311fc79eca5514bf561a46469902671cbfd9 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 26 Sep 2023 13:08:27 +0200 Subject: [PATCH 0205/1093] feat(react,svelte): add nodeDragThreshold --- examples/react/src/examples/Switch/index.tsx | 10 +- examples/svelte/src/routes/edges/+page.svelte | 2 +- .../src/components/StoreUpdater/index.tsx | 3 + .../react/src/container/ReactFlow/index.tsx | 2 + packages/react/src/store/initialState.ts | 1 + packages/react/src/types/component-props.ts | 1 + packages/react/src/types/store.ts | 1 + packages/svelte/CHANGELOG.md | 5 +- packages/svelte/src/lib/actions/drag/index.ts | 1 + .../container/SvelteFlow/SvelteFlow.svelte | 4 +- .../src/lib/container/SvelteFlow/types.ts | 1 + .../src/lib/container/SvelteFlow/utils.ts | 1 + .../svelte/src/lib/store/initial-store.ts | 1 + packages/system/package.json | 2 +- packages/system/src/xydrag/XYDrag.ts | 106 +++++++++++------- 15 files changed, 94 insertions(+), 47 deletions(-) diff --git a/examples/react/src/examples/Switch/index.tsx b/examples/react/src/examples/Switch/index.tsx index d2b237c8b..517cbf8f1 100644 --- a/examples/react/src/examples/Switch/index.tsx +++ b/examples/react/src/examples/Switch/index.tsx @@ -1,9 +1,6 @@ import { MouseEvent, useCallback } from 'react'; import { ReactFlow, addEdge, Node, Connection, Edge, useNodesState, useEdgesState } from '@xyflow/react'; -const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node); -const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node); - const nodesA: Node[] = [ { id: '1a', @@ -83,7 +80,10 @@ const edgesB: Edge[] = [ { id: 'e4b', source: 'inputb', target: '4b' }, ]; +const onNodeDragStart = (_: MouseEvent, node: Node) => console.log('drag start', node); const onNodeDrag = (_: MouseEvent, node: Node) => console.log('drag', node.position); +const onNodeDragStop = (_: MouseEvent, node: Node) => console.log('drag stop', node); +const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node); const BasicFlow = () => { const [nodes, setNodes, onNodesChange] = useNodesState(nodesA); @@ -99,8 +99,10 @@ const BasicFlow = () => { onEdgesChange={onEdgesChange} onNodeClick={onNodeClick} onConnect={onConnect} - onNodeDragStop={onNodeDragStop} + onNodeDragStart={onNodeDragStart} onNodeDrag={onNodeDrag} + onNodeDragStop={onNodeDragStop} + nodeDragThreshold={10} >
+ + + + + + + + ); +}; + +export default () => ( + + + +); diff --git a/examples/svelte/src/components/Header/Header.svelte b/examples/svelte/src/components/Header/Header.svelte index 3d0c9ff53..6755fc2d4 100644 --- a/examples/svelte/src/components/Header/Header.svelte +++ b/examples/svelte/src/components/Header/Header.svelte @@ -3,6 +3,7 @@ import { page } from '$app/stores'; const routes = [ + 'custom-connection-line', 'customnode', 'drag-n-drop', 'edges', @@ -11,10 +12,10 @@ 'overview', 'stress', 'subflows', + 'two-way-viewport', 'usesvelteflow', 'useupdatenodeinternals', - 'validation', - 'custom-connection-line' + 'validation' ]; const onChange = (event: Event) => { diff --git a/examples/svelte/src/routes/two-way-viewport/+page.svelte b/examples/svelte/src/routes/two-way-viewport/+page.svelte new file mode 100644 index 000000000..12dec33ca --- /dev/null +++ b/examples/svelte/src/routes/two-way-viewport/+page.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/examples/svelte/src/routes/two-way-viewport/Flow.svelte b/examples/svelte/src/routes/two-way-viewport/Flow.svelte new file mode 100644 index 000000000..7aa5a9b48 --- /dev/null +++ b/examples/svelte/src/routes/two-way-viewport/Flow.svelte @@ -0,0 +1,46 @@ + + + + + + + + + + + diff --git a/packages/react/src/container/FlowRenderer/index.tsx b/packages/react/src/container/FlowRenderer/index.tsx index 1267eba9e..442cc2bfc 100644 --- a/packages/react/src/container/FlowRenderer/index.tsx +++ b/packages/react/src/container/FlowRenderer/index.tsx @@ -24,6 +24,7 @@ export type FlowRendererProps = Omit< | 'rfId' | 'nodeOrigin' > & { + isControlledViewport: boolean; children: ReactNode; }; @@ -63,6 +64,8 @@ const FlowRenderer = ({ noWheelClassName, noPanClassName, disableKeyboardA11y, + onViewportChange, + isControlledViewport, }: FlowRendererProps) => { const nodesSelectionActive = useStore(selector); const selectionKeyPressed = useKeyPress(selectionKeyCode); @@ -92,6 +95,8 @@ const FlowRenderer = ({ preventScrolling={preventScrolling} noWheelClassName={noWheelClassName} noPanClassName={noPanClassName} + onViewportChange={onViewportChange} + isControlledViewport={isControlledViewport} > { const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes); const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes); useOnInitHandler(onInit); + useViewportSync(viewport); return ( ( style, id, nodeDragThreshold, + viewport, + onViewportChange, ...rest }, ref @@ -242,6 +244,8 @@ const ReactFlow = forwardRef( disableKeyboardA11y={disableKeyboardA11y} nodeOrigin={nodeOrigin} nodeExtent={nodeExtent} + viewport={viewport} + onViewportChange={onViewportChange} /> `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`; diff --git a/packages/react/src/container/ZoomPane/index.tsx b/packages/react/src/container/ZoomPane/index.tsx index e24056cf4..aee6ac871 100644 --- a/packages/react/src/container/ZoomPane/index.tsx +++ b/packages/react/src/container/ZoomPane/index.tsx @@ -18,7 +18,9 @@ type ZoomPaneProps = Omit< | 'noDragClassName' | 'disableKeyboardA11y' | 'selectionOnDrag' ->; +> & { + isControlledViewport: boolean; +}; const selector = (s: ReactFlowState) => ({ userSelectionActive: s.userSelectionActive, @@ -43,6 +45,8 @@ const ZoomPane = ({ children, noWheelClassName, noPanClassName, + onViewportChange, + isControlledViewport, }: ZoomPaneProps) => { const store = useStoreApi(); const zoomPane = useRef(null); @@ -60,7 +64,13 @@ const ZoomPane = ({ maxZoom, translateExtent, viewport: defaultViewport, - onTransformChange: (transform: Transform) => store.setState({ transform }), + onTransformChange: (transform: Transform) => { + onViewportChange?.({ x: transform[0], y: transform[1], zoom: transform[2] }); + + if (!isControlledViewport) { + store.setState({ transform }); + } + }, onDraggingChange: (paneDragging: boolean) => store.setState({ paneDragging }), onPanZoomStart: (event, vp) => { const { onViewportChangeStart, onMoveStart } = store.getState(); diff --git a/packages/react/src/hooks/useViewportSync.ts b/packages/react/src/hooks/useViewportSync.ts new file mode 100644 index 000000000..a34cdcd57 --- /dev/null +++ b/packages/react/src/hooks/useViewportSync.ts @@ -0,0 +1,21 @@ +import { useEffect } from 'react'; +import type { Viewport } from '@xyflow/system'; + +import { useStore, useStoreApi } from './useStore'; +import type { ReactFlowState } from '../types'; + +const selector = (state: ReactFlowState) => state.panZoom?.syncViewport; + +export default function useViewportSync(viewport?: Viewport) { + const syncViewport = useStore(selector); + const store = useStoreApi(); + + useEffect(() => { + if (viewport) { + syncViewport?.(viewport); + store.setState({ transform: [viewport.x, viewport.y, viewport.zoom] }); + } + }, [viewport, syncViewport]); + + return null; +} diff --git a/packages/react/src/types/component-props.ts b/packages/react/src/types/component-props.ts index b1078e7b6..3fe97f078 100644 --- a/packages/react/src/types/component-props.ts +++ b/packages/react/src/types/component-props.ts @@ -120,7 +120,9 @@ export type ReactFlowProps = HTMLAttributes & { panOnDrag?: boolean | number[]; minZoom?: number; maxZoom?: number; + viewport?: Viewport; defaultViewport?: Viewport; + onViewportChange?: (viewport: Viewport) => void; translateExtent?: CoordinateExtent; preventScrolling?: boolean; nodeExtent?: CoordinateExtent; diff --git a/packages/svelte/src/lib/actions/drag/index.ts b/packages/svelte/src/lib/actions/drag/index.ts index 65f7a1e7f..bf93b0419 100644 --- a/packages/svelte/src/lib/actions/drag/index.ts +++ b/packages/svelte/src/lib/actions/drag/index.ts @@ -24,6 +24,7 @@ export default function drag(domNode: Element, params: UseDragParams) { onDragStop, getStoreItems: () => { const snapGrid = get(store.snapGrid); + const vp = get(store.viewport); return { nodes: get(store.nodes), @@ -34,7 +35,7 @@ export default function drag(domNode: Element, params: UseDragParams) { nodeOrigin: [0, 0], multiSelectionActive: false, domNode: get(store.domNode), - transform: get(store.transform), + transform: [vp.x, vp.y, vp.zoom], autoPanOnNodeDrag: get(store.autoPanOnNodeDrag), nodesDraggable: get(store.nodesDraggable), selectNodesOnDrag: get(store.selectNodesOnDrag), diff --git a/packages/svelte/src/lib/actions/zoom/index.ts b/packages/svelte/src/lib/actions/zoom/index.ts index d85bc101a..b96e012fd 100644 --- a/packages/svelte/src/lib/actions/zoom/index.ts +++ b/packages/svelte/src/lib/actions/zoom/index.ts @@ -5,15 +5,14 @@ import { type CoordinateExtent, type OnPanZoom, type PanZoomInstance, - type Transform, type Viewport } from '@xyflow/system'; type ZoomParams = { - transform: Writable; + viewport: Writable; + initialViewport: Viewport; minZoom: number; maxZoom: number; - initialViewport: Viewport; dragging: Writable; onPanZoomStart?: OnPanZoom; onPanZoom?: OnPanZoom; @@ -39,7 +38,7 @@ type ZoomParams = { }; export default function zoom(domNode: Element, params: ZoomParams) { - const { panZoom, minZoom, maxZoom, initialViewport, transform, dragging, translateExtent } = + const { panZoom, minZoom, maxZoom, initialViewport, viewport, dragging, translateExtent } = params; const panZoomInstance = XYPanZoom({ @@ -48,11 +47,12 @@ export default function zoom(domNode: Element, params: ZoomParams) { maxZoom, translateExtent, viewport: initialViewport, - onTransformChange: transform.set, + onTransformChange: (transform) => + viewport.set({ x: transform[0], y: transform[1], zoom: transform[2] }), onDraggingChange: dragging.set }); - const { x, y, zoom } = panZoomInstance.getViewport(); - transform.set([x, y, zoom]); + const currentViewport = panZoomInstance.getViewport(); + viewport.set(currentViewport); panZoom.set(panZoomInstance); panZoomInstance.update(params); diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 0108357be..58d5ad021 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -34,7 +34,7 @@ domNode, nodes, connectionRadius, - transform, + viewport, isValidConnection, lib, addEdge, @@ -80,7 +80,7 @@ onConnectEnd: (event) => { dispatch('connectend', { event }); }, - getTransform: () => $transform + getTransform: () => [$viewport.x, $viewport.y, $viewport.zoom] }); } } diff --git a/packages/svelte/src/lib/container/Pane/Pane.svelte b/packages/svelte/src/lib/container/Pane/Pane.svelte index 1305ccdcb..6727fc44c 100644 --- a/packages/svelte/src/lib/container/Pane/Pane.svelte +++ b/packages/svelte/src/lib/container/Pane/Pane.svelte @@ -45,7 +45,7 @@ const { nodes, edges, - transform, + viewport, dragging, elementsSelectable, selectionRect, @@ -120,7 +120,7 @@ selectedNodes = getNodesInside( $nodes, nextUserSelectRect, - $transform, + [$viewport.x, $viewport.y, $viewport.zoom], $selectionMode === SelectionMode.Partial, true ); diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index aaf510631..ef5d547b4 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -27,6 +27,7 @@ export let minZoom: $$Props['minZoom'] = undefined; export let maxZoom: $$Props['maxZoom'] = undefined; export let initialViewport: Viewport = { x: 0, y: 0, zoom: 1 }; + export let viewport: $$Props['viewport'] = undefined; export let nodeTypes: $$Props['nodeTypes'] = undefined; export let edgeTypes: $$Props['edgeTypes'] = undefined; export let selectionKey: $$Props['selectionKey'] = undefined; @@ -81,6 +82,7 @@ store.syncNodeStores(nodes); store.syncEdgeStores(edges); + store.syncViewport(viewport); if (fitView !== undefined) { store.fitViewOnInit.set(fitView); diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index f0214d4a1..91f3bb704 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -47,6 +47,7 @@ export type SvelteFlowProps = DOMAttributes & { minZoom?: number; maxZoom?: number; initialViewport?: Viewport; + viewport?: Writable; connectionRadius?: number; connectionMode?: ConnectionMode; connectionLineStyle?: string; diff --git a/packages/svelte/src/lib/container/Viewport/Viewport.svelte b/packages/svelte/src/lib/container/Viewport/Viewport.svelte index 2d331ba1e..a6578a874 100644 --- a/packages/svelte/src/lib/container/Viewport/Viewport.svelte +++ b/packages/svelte/src/lib/container/Viewport/Viewport.svelte @@ -1,12 +1,12 @@
diff --git a/packages/svelte/src/lib/container/Zoom/Zoom.svelte b/packages/svelte/src/lib/container/Zoom/Zoom.svelte index 1a4a7008c..d86a8505e 100644 --- a/packages/svelte/src/lib/container/Zoom/Zoom.svelte +++ b/packages/svelte/src/lib/container/Zoom/Zoom.svelte @@ -20,7 +20,7 @@ export let panOnScroll: $$Props['panOnScroll']; const { - transform, + viewport, panZoom, selectionKeyPressed, minZoom, @@ -38,7 +38,7 @@
- viewportWritable.set({ - x: ts[0], - y: ts[1], - zoom: ts[2] - }) - ); - return { zoomIn, zoomOut, setZoom: (zoomLevel, options) => { get(panZoom)?.scaleTo(zoomLevel, { duration: options?.duration }); }, - getZoom: () => get(transform)[2], - setViewport: (viewport, options) => { - const [x, y, zoom] = get(transform); + getZoom: () => get(viewport).zoom, + setViewport: (vieport, options) => { + const currentViewport = get(viewport); get(panZoom)?.setViewport( { - x: viewport.x ?? x, - y: viewport.y ?? y, - zoom: viewport.zoom ?? zoom + x: vieport.x ?? currentViewport.x, + y: vieport.y ?? currentViewport.y, + zoom: vieport.zoom ?? currentViewport.zoom }, { duration: options?.duration } ); }, - getViewport: () => { - const [x, y, zoom] = get(transform); - return { x, y, zoom }; - }, + getViewport: () => get(viewport), setCenter: (x, y, options) => { const _width = get(width); const _height = get(height); @@ -98,15 +80,12 @@ export function useSvelteFlow(): { fitView, project: (position: XYPosition) => { const _snapGrid = get(snapGrid); - return pointToRendererPoint( - position, - get(transform), - _snapGrid !== null, - _snapGrid || [1, 1] - ); + const { x, y, zoom } = get(viewport); + + return pointToRendererPoint(position, [x, y, zoom], _snapGrid !== null, _snapGrid || [1, 1]); }, nodes, edges, - viewport: viewportWritable + viewport: viewport }; } diff --git a/packages/svelte/src/lib/plugins/Background/Background.svelte b/packages/svelte/src/lib/plugins/Background/Background.svelte index 5086c210a..7e6a9bffd 100644 --- a/packages/svelte/src/lib/plugins/Background/Background.svelte +++ b/packages/svelte/src/lib/plugins/Background/Background.svelte @@ -26,15 +26,15 @@ let className: $$Props['class'] = ''; export { className as class }; - const { transform, flowId } = useStore(); + const { viewport, flowId } = useStore(); const patternSize = size || defaultSize[variant!]; const isDots = variant === BackgroundVariant.Dots; const isCross = variant === BackgroundVariant.Cross; const gapXY: number[] = Array.isArray(gap!) ? gap! : [gap!, gap!]; $: patternId = `background-pattern-${$flowId}`; - $: scaledGap = [gapXY[0] * $transform[2] || 1, gapXY[1] * $transform[2] || 1]; - $: scaledSize = patternSize * $transform[2]; + $: scaledGap = [gapXY[0] * $viewport.zoom || 1, gapXY[1] * $viewport.zoom || 1]; + $: scaledSize = patternSize * $viewport.zoom; $: patternDimensions = (isCross ? [scaledSize, scaledSize] : scaledGap) as [number, number]; $: patternOffset = isDots ? [scaledSize / 2, scaledSize / 2] @@ -49,8 +49,8 @@ > = $maxZoom; + $: minZoomReached = $viewport.zoom <= $minZoom; + $: maxZoomReached = $viewport.zoom >= $maxZoom; const onZoomInHandler = () => { zoomIn(); diff --git a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte index 07ffde00b..79b5e1ada 100644 --- a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte +++ b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte @@ -43,7 +43,7 @@ const defaultHeight = 150; const { nodes, - transform, + viewport, width: containerWidth, height: containerHeight, flowId, @@ -59,10 +59,10 @@ const labelledBy = `svelte-flow__minimap-desc-${$flowId}`; $: viewBB = { - x: -$transform[0] / $transform[2], - y: -$transform[1] / $transform[2], - width: $containerWidth / $transform[2], - height: $containerHeight / $transform[2] + x: -$viewport.x / $viewport.zoom, + y: -$viewport.y / $viewport.zoom, + width: $containerWidth / $viewport.zoom, + height: $containerHeight / $viewport.zoom }; $: boundingRect = $nodes.length > 0 ? getBoundsOfRects(getRectOfNodes($nodes), viewBB) : viewBB; $: elementWidth = width ?? defaultWidth; @@ -100,7 +100,7 @@ style:--minimap-mask-stroke-width-props={maskStrokeWidth} use:interactive={{ panZoom: $panZoom, - transform, + viewport, getViewScale, translateExtent: $translateExtent, width: $containerWidth, diff --git a/packages/svelte/src/lib/plugins/Minimap/interactive.ts b/packages/svelte/src/lib/plugins/Minimap/interactive.ts index 9bdbea13f..064f0d272 100644 --- a/packages/svelte/src/lib/plugins/Minimap/interactive.ts +++ b/packages/svelte/src/lib/plugins/Minimap/interactive.ts @@ -2,13 +2,13 @@ import { get, type Writable } from 'svelte/store'; import { XYMinimap, type PanZoomInstance, - type Transform, + type Viewport, type XYMinimapUpdate } from '@xyflow/system'; export type UseInteractiveParams = { panZoom: PanZoomInstance; - transform: Writable; + viewport: Writable; getViewScale: () => number; } & XYMinimapUpdate; @@ -16,7 +16,10 @@ export default function interactive(domNode: Element, params: UseInteractivePara const minimap = XYMinimap({ domNode, panZoom: params.panZoom, - getTransform: () => get(params.transform), + getTransform: () => { + const viewport = get(params.viewport); + return [viewport.x, viewport.y, viewport.zoom]; + }, getViewScale: params.getViewScale }); diff --git a/packages/svelte/src/lib/store/derived-connection-props.ts b/packages/svelte/src/lib/store/derived-connection-props.ts index f95868859..5be1598c3 100644 --- a/packages/svelte/src/lib/store/derived-connection-props.ts +++ b/packages/svelte/src/lib/store/derived-connection-props.ts @@ -57,9 +57,9 @@ export function getDerivedConnectionProps( store.connectionLineType, store.connectionMode, store.nodes, - store.transform + store.viewport ], - ([connection, connectionLineType, connectionMode, nodes, transform]) => { + ([connection, connectionLineType, connectionMode, nodes, viewport]) => { if (!connection.connectionStartHandle?.nodeId) { return initConnectionProps; } @@ -91,8 +91,8 @@ export function getDerivedConnectionProps( sourceX: fromX, sourceY: fromY, sourcePosition: fromPosition, - targetX: ((connection.connectionPosition?.x ?? 0) - transform[0]) / transform[2], - targetY: ((connection.connectionPosition?.y ?? 0) - transform[1]) / transform[2], + targetX: ((connection.connectionPosition?.x ?? 0) - viewport.x) / viewport.zoom, + targetY: ((connection.connectionPosition?.y ?? 0) - viewport.y) / viewport.zoom, targetPosition: toPosition }; diff --git a/packages/svelte/src/lib/store/edge-tree.ts b/packages/svelte/src/lib/store/edge-tree.ts index f316fee55..ff0998685 100644 --- a/packages/svelte/src/lib/store/edge-tree.ts +++ b/packages/svelte/src/lib/store/edge-tree.ts @@ -10,11 +10,11 @@ export function getEdgeTree(store: SvelteFlowStoreState) { store.edges, store.nodes, store.onlyRenderVisibleElements, - store.transform, + store.viewport, store.width, store.height ], - ([edges, nodes, onlyRenderVisibleElements, transform, width, height]) => { + ([edges, nodes, onlyRenderVisibleElements, viewport, width, height]) => { const visibleEdges = onlyRenderVisibleElements && width && height ? edges.filter((edge) => { @@ -29,7 +29,7 @@ export function getEdgeTree(store: SvelteFlowStoreState) { targetNode, width, height, - transform + transform: [viewport.x, viewport.y, viewport.zoom] }) ); }) diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 4d411746b..22d49ac3b 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -22,7 +22,7 @@ import { addEdge as addEdgeUtil } from '$lib/utils'; import type { EdgeTypes, NodeTypes, Node, Edge, FitViewOptions, ConnectionData } from '$lib/types'; import { initialEdgeTypes, initialNodeTypes, getInitialStore } from './initial-store'; import type { SvelteFlowStore } from './types'; -import { syncNodeStores, syncEdgeStores } from './utils'; +import { syncNodeStores, syncEdgeStores, syncViewportStores } from './utils'; import { getEdgeTree } from './edge-tree'; import { getVisibleNodes } from './visible-nodes'; import { getDerivedConnectionProps } from './derived-connection-props'; @@ -241,10 +241,11 @@ export function createStore(): SvelteFlowStore { } function panBy(delta: XYPosition) { + const viewport = get(store.viewport); return panBySystem({ delta, panZoom: get(store.panZoom), - transform: get(store.transform), + transform: [viewport.x, viewport.y, viewport.zoom], translateExtent: get(store.translateExtent), width: get(store.width), height: get(store.height) @@ -298,6 +299,7 @@ export function createStore(): SvelteFlowStore { // actions syncNodeStores: (nodes) => syncNodeStores(store.nodes, nodes), syncEdgeStores: (edges) => syncEdgeStores(store.edges, edges), + syncViewport: (viewport) => syncViewportStores(store.panZoom, store.viewport, viewport), setNodeTypes, setEdgeTypes, addEdge, @@ -305,9 +307,7 @@ export function createStore(): SvelteFlowStore { updateNodeDimensions, zoomIn, zoomOut, - fitView: (options?: FitViewOptions) => { - return fitView(get(store.nodes), options); - }, + fitView: (options?: FitViewOptions) => fitView(get(store.nodes), options), setMinZoom, setMaxZoom, setTranslateExtent, diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index a6bee57be..c9deb6222 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -5,7 +5,6 @@ import { ConnectionMode, ConnectionLineType, type SelectionRect, - type Transform, type SnapGrid, type MarkerProps, type PanZoomInstance, @@ -14,7 +13,8 @@ import { type GroupedEdges, type NodeOrigin, type OnError, - devWarn + devWarn, + type Viewport } from '@xyflow/system'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; @@ -72,7 +72,7 @@ export const getInitialStore = () => ({ selectionMode: writable(SelectionMode.Partial), nodeTypes: writable(initialNodeTypes), edgeTypes: writable(initialEdgeTypes), - transform: writable([0, 0, 1]), + viewport: writable({ x: 0, y: 0, zoom: 1 }), connectionMode: writable(ConnectionMode.Strict), domNode: writable(null), connection: readable(initConnectionProps), diff --git a/packages/svelte/src/lib/store/types.ts b/packages/svelte/src/lib/store/types.ts index 9156f6f03..49213f7a8 100644 --- a/packages/svelte/src/lib/store/types.ts +++ b/packages/svelte/src/lib/store/types.ts @@ -6,7 +6,8 @@ import type { Connection, UpdateNodePositions, CoordinateExtent, - UpdateConnection + UpdateConnection, + Viewport } from '@xyflow/system'; import type { getInitialStore } from './initial-store'; @@ -15,6 +16,7 @@ import type { Node, Edge, NodeTypes, EdgeTypes, FitViewOptions } from '$lib/type export type SvelteFlowStoreActions = { syncNodeStores: (nodesStore: Writable) => void; syncEdgeStores: (edgeStore: Writable) => void; + syncViewport: (viewportStore?: Writable) => void; setNodeTypes: (nodeTypes: NodeTypes) => void; setEdgeTypes: (edgeTypes: EdgeTypes) => void; addEdge: (edge: Edge | Connection) => void; diff --git a/packages/svelte/src/lib/store/utils.ts b/packages/svelte/src/lib/store/utils.ts index 949e2272c..adf64c0fe 100644 --- a/packages/svelte/src/lib/store/utils.ts +++ b/packages/svelte/src/lib/store/utils.ts @@ -6,7 +6,7 @@ import { type Writable, get } from 'svelte/store'; -import { updateNodes } from '@xyflow/system'; +import { updateNodes, type Transform, type Viewport, type PanZoomInstance } from '@xyflow/system'; import type { DefaultEdgeOptions, DefaultNodeOptions, Edge, Node } from '$lib/types'; @@ -56,6 +56,54 @@ export function syncEdgeStores( edgesStore.update = userEdgesStore.update = (fn: (nds: Edge[]) => Edge[]) => _set(fn(val)); } +// it is possible to pass a viewport store to SvelteFlow for having more control +// if that's the case we need to sync the internal viewport with the user viewport +export const syncViewportStores = ( + panZoomStore: Writable, + viewportStore: Writable, + userViewportStore?: Writable +) => { + if (!userViewportStore) { + return; + } + + const panZoom = get(panZoomStore); + + const viewportStoreSetter = viewportStore.set; + const userViewportStoreSetter = userViewportStore.set; + + let val = userViewportStore ? get(userViewportStore) : { x: 0, y: 0, zoom: 1 }; + viewportStore.set(val); + + viewportStore.set = (vp: Viewport) => { + viewportStoreSetter(vp); + userViewportStoreSetter(vp); + + val = vp; + + return vp; + }; + + userViewportStore.set = (vp: Viewport) => { + panZoom?.syncViewport(vp); + + viewportStoreSetter(vp); + userViewportStoreSetter(vp); + + val = vp; + + return vp; + }; + + viewportStore.update = (fn: (vp: Viewport) => Viewport) => { + viewportStore.set(fn(val)); + }; + + userViewportStore.update = (fn: (vp: Viewport) => Viewport) => { + userViewportStore.set(fn(val)); + }; +}; + export type NodeStoreOptions = { elevateNodesOnSelect?: boolean; }; diff --git a/packages/svelte/src/lib/store/visible-nodes.ts b/packages/svelte/src/lib/store/visible-nodes.ts index 5fff7fd63..73ed53a44 100644 --- a/packages/svelte/src/lib/store/visible-nodes.ts +++ b/packages/svelte/src/lib/store/visible-nodes.ts @@ -1,13 +1,14 @@ import { derived } from 'svelte/store'; -import { getNodesInside } from '@xyflow/system'; +import { getNodesInside, type Transform } from '@xyflow/system'; import type { Node } from '$lib/types'; import type { SvelteFlowStoreState } from './types'; export function getVisibleNodes(store: SvelteFlowStoreState) { return derived( - [store.nodes, store.onlyRenderVisibleElements, store.width, store.height, store.transform], - ([nodes, onlyRenderVisibleElements, width, height, transform]) => { + [store.nodes, store.onlyRenderVisibleElements, store.width, store.height, store.viewport], + ([nodes, onlyRenderVisibleElements, width, height, viewport]) => { + const transform: Transform = [viewport.x, viewport.y, viewport.zoom]; return onlyRenderVisibleElements ? getNodesInside(nodes, { x: 0, y: 0, width, height }, transform, true) : nodes; diff --git a/packages/system/src/types/panzoom.ts b/packages/system/src/types/panzoom.ts index 3280ef787..81654bdba 100644 --- a/packages/system/src/types/panzoom.ts +++ b/packages/system/src/types/panzoom.ts @@ -1,6 +1,6 @@ -import { ZoomTransform } from 'd3-zoom'; +import type { ZoomTransform } from 'd3-zoom'; -import { CoordinateExtent, PanOnScrollMode, Transform, Viewport } from './'; +import { PanOnScrollMode, type CoordinateExtent, type Transform, type Viewport } from './'; export type OnDraggingChange = (dragging: boolean) => void; export type OnTransformChange = (transform: Transform) => void; @@ -55,4 +55,5 @@ export type PanZoomInstance = { setTranslateExtent: (translateExtent: CoordinateExtent) => void; scaleTo: (scale: number, options?: PanZoomTransformOptions) => void; scaleBy: (factor: number, options?: PanZoomTransformOptions) => void; + syncViewport: (viewport: Viewport) => void; }; diff --git a/packages/system/src/xypanzoom/XYPanZoom.ts b/packages/system/src/xypanzoom/XYPanZoom.ts index f5a3e5fe5..372e6134d 100644 --- a/packages/system/src/xypanzoom/XYPanZoom.ts +++ b/packages/system/src/xypanzoom/XYPanZoom.ts @@ -194,6 +194,22 @@ export function XYPanZoom({ return nextTransform; } + function syncViewport(viewport: Viewport) { + if (d3Selection) { + const nextTransform = viewportToTransform(viewport); + const currentTransform = d3Selection.property('__zoom'); + + if ( + currentTransform.k !== viewport.zoom || + currentTransform.x !== viewport.x || + currentTransform.y !== viewport.y + ) { + // @ts-ignore + d3ZoomInstance?.transform(d3Selection, nextTransform, null, { sync: true }); + } + } + } + function getViewport(): Viewport { const transform = d3Selection ? zoomTransform(d3Selection.node() as Element) : { x: 0, y: 0, k: 1 }; return { x: transform.x, y: transform.y, zoom: transform.k }; @@ -229,5 +245,6 @@ export function XYPanZoom({ scaleBy, setScaleExtent, setTranslateExtent, + syncViewport, }; } diff --git a/packages/system/src/xypanzoom/eventhandler.ts b/packages/system/src/xypanzoom/eventhandler.ts index 456e2332f..0c2c1d5fe 100644 --- a/packages/system/src/xypanzoom/eventhandler.ts +++ b/packages/system/src/xypanzoom/eventhandler.ts @@ -183,7 +183,9 @@ export function createPanZoomHandler({ onPaneContextMenu && isRightClickPan(panOnDrag, zoomPanValues.mouseButton ?? 0) ); - onTransformChange([event.transform.x, event.transform.y, event.transform.k]); + if (!event.sourceEvent?.sync) { + onTransformChange([event.transform.x, event.transform.y, event.transform.k]); + } if (onPanZoom && !event.sourceEvent?.internal) { onPanZoom?.(event.sourceEvent as MouseEvent | TouchEvent, transformToViewport(event.transform)); From 309126206505219bf7bcb49ae0487cc63cd4c104 Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 2 Oct 2023 12:49:38 +0200 Subject: [PATCH 0223/1093] feat(svelte) added isNodeIntersecting and getIntersectingNodes to svelte-flow --- .../src/components/Header/Header.svelte | 3 +- .../src/routes/intersections/+page.svelte | 8 +++ .../src/routes/intersections/+server.ts | 29 ++++++++ .../src/routes/intersections/Flow.svelte | 60 +++++++++++++++++ .../routes/intersections/nodes-and-edges.ts | 28 ++++++++ .../svelte/src/lib/hooks/useSvelteFlow.ts | 66 ++++++++++++++++++- 6 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 examples/svelte/src/routes/intersections/+page.svelte create mode 100644 examples/svelte/src/routes/intersections/+server.ts create mode 100644 examples/svelte/src/routes/intersections/Flow.svelte create mode 100644 examples/svelte/src/routes/intersections/nodes-and-edges.ts diff --git a/examples/svelte/src/components/Header/Header.svelte b/examples/svelte/src/components/Header/Header.svelte index 6755fc2d4..26b26e1e0 100644 --- a/examples/svelte/src/components/Header/Header.svelte +++ b/examples/svelte/src/components/Header/Header.svelte @@ -15,7 +15,8 @@ 'two-way-viewport', 'usesvelteflow', 'useupdatenodeinternals', - 'validation' + 'validation', + 'intersections' ]; const onChange = (event: Event) => { diff --git a/examples/svelte/src/routes/intersections/+page.svelte b/examples/svelte/src/routes/intersections/+page.svelte new file mode 100644 index 000000000..8937b2c06 --- /dev/null +++ b/examples/svelte/src/routes/intersections/+page.svelte @@ -0,0 +1,8 @@ + + + + + diff --git a/examples/svelte/src/routes/intersections/+server.ts b/examples/svelte/src/routes/intersections/+server.ts new file mode 100644 index 000000000..ceca3ead9 --- /dev/null +++ b/examples/svelte/src/routes/intersections/+server.ts @@ -0,0 +1,29 @@ +// Template for ALL endpoints serving the code snippets +// No need to edit these inside /src/routes/** +// Will be overwritten by "pnpm run create:endpoints" + +import { json } from '@sveltejs/kit'; + +export function POST() { + const files = import.meta.glob(['./*.js', './*.ts', './*.svelte', './*css', '!**/+server.ts'], { + as: 'raw', + eager: true + }); + + // Loose ./ for each filename + // +page.svelte becomes App.svelte for correct display in Sandpack + const filesClean: { [key: string]: string } = Object.entries(files).reduce( + (filesCleanAcc: { [key: string]: string }, [filename, file]) => { + if (filename === './+page.svelte') { + filesCleanAcc['App.svelte'] = file; + } else { + filesCleanAcc[filename.replace('./', '')] = file; + } + + return filesCleanAcc; + }, + {} + ); + + return json(filesClean); +} diff --git a/examples/svelte/src/routes/intersections/Flow.svelte b/examples/svelte/src/routes/intersections/Flow.svelte new file mode 100644 index 000000000..f3f80335e --- /dev/null +++ b/examples/svelte/src/routes/intersections/Flow.svelte @@ -0,0 +1,60 @@ + + +
+ + + + +
+ + diff --git a/examples/svelte/src/routes/intersections/nodes-and-edges.ts b/examples/svelte/src/routes/intersections/nodes-and-edges.ts new file mode 100644 index 000000000..fffb59b89 --- /dev/null +++ b/examples/svelte/src/routes/intersections/nodes-and-edges.ts @@ -0,0 +1,28 @@ +import type { Node, Edge } from '@xyflow/svelte'; + +export const initialNodes: Node[] = [ + { + id: '1', + data: { label: 'Node 1' }, + position: { x: 0, y: 0 }, + style: 'width: 200px; height: 100px;' + }, + { + id: '2', + data: { label: 'Node 2' }, + position: { x: 0, y: 150 } + }, + { + id: '3', + data: { label: 'Node 3' }, + position: { x: 250, y: 0 } + }, + { + id: '4', + data: { label: 'Node' }, + position: { x: 350, y: 150 }, + style: 'width: 50px; height: 50px;' + } +]; + +export const initialEdges: Edge[] = []; diff --git a/packages/svelte/src/lib/hooks/useSvelteFlow.ts b/packages/svelte/src/lib/hooks/useSvelteFlow.ts index 366f104df..ced33dbaf 100644 --- a/packages/svelte/src/lib/hooks/useSvelteFlow.ts +++ b/packages/svelte/src/lib/hooks/useSvelteFlow.ts @@ -1,7 +1,11 @@ import { get, type Writable } from 'svelte/store'; import { + getOverlappingArea, + isRectObject, + nodeToRect, pointToRendererPoint, type Project, + type Rect, type SetCenterOptions, type Viewport, type ViewportHelperFunctionOptions, @@ -10,7 +14,7 @@ import { } from '@xyflow/system'; import { useStore } from '$lib/store'; -import type { FitViewOptions } from '$lib/types'; +import type { FitViewOptions, Node } from '$lib/types'; import type { SvelteFlowStore } from '$lib/store/types'; export function useSvelteFlow(): { @@ -22,6 +26,16 @@ export function useSvelteFlow(): { setViewport: (viewport: Viewport, options?: ViewportHelperFunctionOptions) => void; getViewport: () => Viewport; fitView: (options?: FitViewOptions) => void; + getIntersectingNodes: ( + nodeOrRect: Partial> | Rect, + partially?: boolean, + nodesToIntersect?: Node[] + ) => Node[]; + isNodeIntersecting: ( + nodeOrRect: Partial> | Rect, + area: Rect, + partially?: boolean + ) => boolean; project: Project; viewport: Writable; nodes: SvelteFlowStore['nodes']; @@ -41,6 +55,21 @@ export function useSvelteFlow(): { edges } = useStore(); + const getNodeRect = ( + nodeOrRect: Partial> | Rect + ): [Rect | null, Node | null | undefined, boolean] => { + const isRect = isRectObject(nodeOrRect); + const node = isRect ? null : get(nodes).find((n) => n.id === nodeOrRect.id); + + if (!isRect && !node) { + [null, null, isRect]; + } + + const nodeRect = isRect ? nodeOrRect : nodeToRect(node!); + + return [nodeRect, node, isRect]; + }; + return { zoomIn, zoomOut, @@ -78,6 +107,41 @@ export function useSvelteFlow(): { ); }, fitView, + getIntersectingNodes: ( + nodeOrRect: Partial> | Rect, + partially = true, + nodesToIntersect?: Node[] + ) => { + const [nodeRect, node, isRect] = getNodeRect(nodeOrRect); + + if (!nodeRect) { + return []; + } + + return (nodesToIntersect || get(nodes)).filter((n) => { + if (!isRect && (n.id === node!.id || !n.positionAbsolute)) { + return false; + } + + const currNodeRect = nodeToRect(n); + const overlappingArea = getOverlappingArea(currNodeRect, nodeRect); + const partiallyVisible = partially && overlappingArea > 0; + + return partiallyVisible || overlappingArea >= nodeOrRect.width! * nodeOrRect.height!; + }); + }, + isNodeIntersecting: (nodeOrRect: Partial> | Rect, area: Rect, partially = true) => { + const [nodeRect] = getNodeRect(nodeOrRect); + + if (!nodeRect) { + return false; + } + + const overlappingArea = getOverlappingArea(nodeRect, area); + const partiallyVisible = partially && overlappingArea > 0; + + return partiallyVisible || overlappingArea >= nodeOrRect.width! * nodeOrRect.height!; + }, project: (position: XYPosition) => { const _snapGrid = get(snapGrid); const { x, y, zoom } = get(viewport); From cb72b6a3585bd6772350f728ed1782dc74b7e49f Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 2 Oct 2023 12:51:32 +0200 Subject: [PATCH 0224/1093] fix(svelte) improved type --- packages/svelte/src/lib/hooks/useSvelteFlow.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/svelte/src/lib/hooks/useSvelteFlow.ts b/packages/svelte/src/lib/hooks/useSvelteFlow.ts index ced33dbaf..611c6227b 100644 --- a/packages/svelte/src/lib/hooks/useSvelteFlow.ts +++ b/packages/svelte/src/lib/hooks/useSvelteFlow.ts @@ -27,12 +27,12 @@ export function useSvelteFlow(): { getViewport: () => Viewport; fitView: (options?: FitViewOptions) => void; getIntersectingNodes: ( - nodeOrRect: Partial> | Rect, + nodeOrRect: (Partial> & { id: Node['id'] }) | Rect, partially?: boolean, nodesToIntersect?: Node[] ) => Node[]; isNodeIntersecting: ( - nodeOrRect: Partial> | Rect, + nodeOrRect: (Partial> & { id: Node['id'] }) | Rect, area: Rect, partially?: boolean ) => boolean; @@ -56,7 +56,7 @@ export function useSvelteFlow(): { } = useStore(); const getNodeRect = ( - nodeOrRect: Partial> | Rect + nodeOrRect: (Partial> & { id: Node['id'] }) | Rect ): [Rect | null, Node | null | undefined, boolean] => { const isRect = isRectObject(nodeOrRect); const node = isRect ? null : get(nodes).find((n) => n.id === nodeOrRect.id); @@ -108,7 +108,7 @@ export function useSvelteFlow(): { }, fitView, getIntersectingNodes: ( - nodeOrRect: Partial> | Rect, + nodeOrRect: (Partial> & { id: Node['id'] }) | Rect, partially = true, nodesToIntersect?: Node[] ) => { @@ -130,7 +130,11 @@ export function useSvelteFlow(): { return partiallyVisible || overlappingArea >= nodeOrRect.width! * nodeOrRect.height!; }); }, - isNodeIntersecting: (nodeOrRect: Partial> | Rect, area: Rect, partially = true) => { + isNodeIntersecting: ( + nodeOrRect: (Partial> & { id: Node['id'] }) | Rect, + area: Rect, + partially = true + ) => { const [nodeRect] = getNodeRect(nodeOrRect); if (!nodeRect) { From 53c04e2546cad8081ef8d19ed73286cc025d4198 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 2 Oct 2023 16:16:17 +0200 Subject: [PATCH 0225/1093] chore(react): cleanup viewport component --- packages/react/src/container/Viewport/index.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/react/src/container/Viewport/index.tsx b/packages/react/src/container/Viewport/index.tsx index ab10bada7..b0de6954d 100644 --- a/packages/react/src/container/Viewport/index.tsx +++ b/packages/react/src/container/Viewport/index.tsx @@ -2,7 +2,6 @@ import type { ReactNode } from 'react'; import { useStore } from '../../hooks/useStore'; import type { ReactFlowState } from '../../types'; -import { Viewport } from '@xyflow/system'; const selector = (s: ReactFlowState) => `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`; @@ -10,7 +9,7 @@ type ViewportProps = { children: ReactNode; }; -function Viewport({ children }: ViewportProps) { +export default function Viewport({ children }: ViewportProps) { const transform = useStore(selector); return ( @@ -19,5 +18,3 @@ function Viewport({ children }: ViewportProps) {
); } - -export default Viewport; From 969fa8280a913d470fab8a87c2aa917e9f2a3d29 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 4 Oct 2023 10:37:39 +0200 Subject: [PATCH 0226/1093] fix(svelte-flow) style is now applied properly to the connectionLine --- .../src/lib/components/ConnectionLine/ConnectionLine.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte index eb30d3f7b..904a45d38 100644 --- a/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte +++ b/packages/svelte/src/lib/components/ConnectionLine/ConnectionLine.svelte @@ -12,11 +12,11 @@ {#if $connection.path} - + {#if !isCustomComponent} - + {/if} From e46c3cddaa6b8458fe6fc8c472288b2c4a6b5739 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 4 Oct 2023 11:32:32 +0200 Subject: [PATCH 0227/1093] fix(svelte) prevent unecessary rerenders & execution of reactive statements, closes #3336 --- .../svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte | 2 ++ .../svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index 81d35e498..7d609447f 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -1,3 +1,5 @@ + + {#each $edgeTree as group (group.level)} - + {#if group.isMaxLevel} {/if} {#each group.edges as edge (edge.id)} diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index ef5d547b4..5da987b5c 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -16,6 +16,7 @@ import { key, useStore, createStoreContext } from '$lib/store'; import type { SvelteFlowProps } from './types'; import { updateStore, updateStoreByKeys, type UpdatableStoreProps } from './utils'; + import { get } from 'svelte/store'; type $$Props = SvelteFlowProps; @@ -63,6 +64,8 @@ export let attributionPosition: $$Props['attributionPosition'] = undefined; export let proOptions: $$Props['proOptions'] = undefined; export let defaultEdgeOptions: $$Props['defaultEdgeOptions'] = undefined; + export let width: $$Props['width'] = undefined; + export let height: $$Props['height'] = undefined; export let defaultMarkerColor = '#b1b1b7'; @@ -72,7 +75,9 @@ let domNode: HTMLDivElement; - const store = hasContext(key) ? useStore() : createStoreContext(); + const store = hasContext(key) + ? useStore() + : createStoreContext({ nodes: get(nodes), edges: get(edges), width, height }); onMount(() => { const { width, height } = domNode.getBoundingClientRect(); diff --git a/packages/svelte/src/lib/container/SvelteFlow/types.ts b/packages/svelte/src/lib/container/SvelteFlow/types.ts index 91f3bb704..754a67105 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/types.ts +++ b/packages/svelte/src/lib/container/SvelteFlow/types.ts @@ -72,6 +72,8 @@ export type SvelteFlowProps = DOMAttributes & { attributionPosition?: PanelPosition; proOptions?: ProOptions; defaultEdgeOptions?: DefaultEdgeOptions; + width?: number; + height?: number; class?: string; style?: string; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 22d49ac3b..9b27da789 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -29,8 +29,18 @@ import { getDerivedConnectionProps } from './derived-connection-props'; export const key = Symbol(); -export function createStore(): SvelteFlowStore { - const store = getInitialStore(); +export function createStore({ + nodes, + edges, + width, + height +}: { + nodes?: Node[]; + edges?: Edge[]; + width?: number; + height?: number; +}): SvelteFlowStore { + const store = getInitialStore({ nodes, edges, width, height }); function setNodeTypes(nodeTypes: NodeTypes) { store.nodeTypes.set({ @@ -333,8 +343,18 @@ export function useStore(): SvelteFlowStore { return store.getStore(); } -export function createStoreContext() { - const store = createStore(); +export function createStoreContext({ + nodes, + edges, + width, + height +}: { + nodes?: Node[]; + edges?: Edge[]; + width?: number; + height?: number; +}) { + const store = createStore({ nodes, edges, width, height }); setContext(key, { getStore: () => store diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index c9deb6222..f684dd33e 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -24,7 +24,7 @@ import BezierEdge from '$lib/components/edges/BezierEdge.svelte'; import StraightEdge from '$lib/components/edges/StraightEdge.svelte'; import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte'; import StepEdge from '$lib/components/edges/StepEdge.svelte'; -import type { NodeTypes, EdgeTypes, EdgeLayouted, Node, FitViewOptions } from '$lib/types'; +import type { NodeTypes, EdgeTypes, EdgeLayouted, Node, Edge, FitViewOptions } from '$lib/types'; import { createNodesStore, createEdgesStore } from './utils'; import { initConnectionProps, type ConnectionProps } from './derived-connection-props'; @@ -41,51 +41,63 @@ export const initialEdgeTypes = { step: StepEdge }; -export const getInitialStore = () => ({ - flowId: writable(null), - nodes: createNodesStore([]), - visibleNodes: readable([]), - edges: createEdgesStore([]), - edgeTree: readable[]>([]), - height: writable(500), - width: writable(500), - minZoom: writable(0.5), - maxZoom: writable(2), - nodeOrigin: writable([0, 0]), - nodeDragThreshold: writable(0), - nodeExtent: writable(infiniteExtent), - translateExtent: writable(infiniteExtent), - autoPanOnNodeDrag: writable(true), - autoPanOnConnect: writable(true), - fitViewOnInit: writable(false), - fitViewOnInitDone: writable(false), - fitViewOptions: writable(undefined), - panZoom: writable(null), - snapGrid: writable(null), - dragging: writable(false), - selectionRect: writable(null), - selectionKeyPressed: writable(false), - multiselectionKeyPressed: writable(false), - deleteKeyPressed: writable(false), - panActivationKeyPressed: writable(false), - selectionRectMode: writable(null), - selectionMode: writable(SelectionMode.Partial), - nodeTypes: writable(initialNodeTypes), - edgeTypes: writable(initialEdgeTypes), - viewport: writable({ x: 0, y: 0, zoom: 1 }), - connectionMode: writable(ConnectionMode.Strict), - domNode: writable(null), - connection: readable(initConnectionProps), - connectionLineType: writable(ConnectionLineType.Bezier), - connectionRadius: writable(20), - isValidConnection: writable(() => true), - nodesDraggable: writable(true), - nodesConnectable: writable(true), - elementsSelectable: writable(true), - selectNodesOnDrag: writable(true), - markers: readable([]), - defaultMarkerColor: writable('#b1b1b7'), - lib: readable('svelte'), - onlyRenderVisibleElements: writable(false), - onError: writable(devWarn) -}); +export const getInitialStore = ({ + nodes = [], + edges = [], + width, + height +}: { + nodes?: Node[]; + edges?: Edge[]; + width?: number; + height?: number; +}) => { + return { + flowId: writable(null), + nodes: createNodesStore(nodes), + visibleNodes: readable([]), + edges: createEdgesStore(edges), + edgeTree: readable[]>([]), + height: writable(500), + width: writable(500), + minZoom: writable(0.5), + maxZoom: writable(2), + nodeOrigin: writable([0, 0]), + nodeDragThreshold: writable(0), + nodeExtent: writable(infiniteExtent), + translateExtent: writable(infiniteExtent), + autoPanOnNodeDrag: writable(true), + autoPanOnConnect: writable(true), + fitViewOnInit: writable(false), + fitViewOnInitDone: writable(false), + fitViewOptions: writable(undefined), + panZoom: writable(null), + snapGrid: writable(null), + dragging: writable(false), + selectionRect: writable(null), + selectionKeyPressed: writable(false), + multiselectionKeyPressed: writable(false), + deleteKeyPressed: writable(false), + panActivationKeyPressed: writable(false), + selectionRectMode: writable(null), + selectionMode: writable(SelectionMode.Partial), + nodeTypes: writable(initialNodeTypes), + edgeTypes: writable(initialEdgeTypes), + viewport: writable({ x: 0, y: 0, zoom: 1 }), + connectionMode: writable(ConnectionMode.Strict), + domNode: writable(null), + connection: readable(initConnectionProps), + connectionLineType: writable(ConnectionLineType.Bezier), + connectionRadius: writable(20), + isValidConnection: writable(() => true), + nodesDraggable: writable(true), + nodesConnectable: writable(true), + elementsSelectable: writable(true), + selectNodesOnDrag: writable(true), + markers: readable([]), + defaultMarkerColor: writable('#b1b1b7'), + lib: readable('svelte'), + onlyRenderVisibleElements: writable(false), + onError: writable(devWarn) + }; +}; diff --git a/packages/svelte/src/lib/store/utils.ts b/packages/svelte/src/lib/store/utils.ts index adf64c0fe..cfd5b343a 100644 --- a/packages/svelte/src/lib/store/utils.ts +++ b/packages/svelte/src/lib/store/utils.ts @@ -6,7 +6,7 @@ import { type Writable, get } from 'svelte/store'; -import { updateNodes, type Transform, type Viewport, type PanZoomInstance } from '@xyflow/system'; +import { updateNodes, type Viewport, type PanZoomInstance } from '@xyflow/system'; import type { DefaultEdgeOptions, DefaultNodeOptions, Edge, Node } from '$lib/types'; diff --git a/packages/svelte/src/lib/store/visible-nodes.ts b/packages/svelte/src/lib/store/visible-nodes.ts index 73ed53a44..2d9ab7fb6 100644 --- a/packages/svelte/src/lib/store/visible-nodes.ts +++ b/packages/svelte/src/lib/store/visible-nodes.ts @@ -9,6 +9,7 @@ export function getVisibleNodes(store: SvelteFlowStoreState) { [store.nodes, store.onlyRenderVisibleElements, store.width, store.height, store.viewport], ([nodes, onlyRenderVisibleElements, width, height, viewport]) => { const transform: Transform = [viewport.x, viewport.y, viewport.zoom]; + return onlyRenderVisibleElements ? getNodesInside(nodes, { x: 0, y: 0, width, height }, transform, true) : nodes; From 1acc59e44c9eab0a6e2ce6e787af7184e5fcd2d9 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 5 Oct 2023 17:28:05 +0200 Subject: [PATCH 0240/1093] feat(react): ssr --- .../Controls/Controls.tsx | 11 +----- .../react/src/components/Nodes/wrapNode.tsx | 6 +++- .../components/ReactFlowProvider/index.tsx | 16 +++++++-- .../src/container/NodeRenderer/index.tsx | 5 ++- .../react/src/container/ReactFlow/Wrapper.tsx | 16 +++++++-- .../react/src/container/ReactFlow/index.tsx | 4 ++- packages/react/src/store/index.ts | 14 ++++++-- packages/react/src/store/initialState.ts | 36 +++++++++++++++++-- packages/react/src/types/component-props.ts | 2 ++ packages/react/src/types/nodes.ts | 2 ++ 10 files changed, 90 insertions(+), 22 deletions(-) diff --git a/packages/react/src/additional-components/Controls/Controls.tsx b/packages/react/src/additional-components/Controls/Controls.tsx index 99139b81f..29fcb268b 100644 --- a/packages/react/src/additional-components/Controls/Controls.tsx +++ b/packages/react/src/additional-components/Controls/Controls.tsx @@ -1,4 +1,4 @@ -import { memo, useEffect, useState, type FC, type PropsWithChildren } from 'react'; +import { memo, type FC, type PropsWithChildren } from 'react'; import cc from 'classcat'; import { shallow } from 'zustand/shallow'; @@ -37,18 +37,9 @@ const Controls: FC> = ({ position = 'bottom-left', }) => { const store = useStoreApi(); - const [isVisible, setIsVisible] = useState(false); const { isInteractive, minZoomReached, maxZoomReached } = useStore(selector, shallow); const { zoomIn, zoomOut, fitView } = useReactFlow(); - useEffect(() => { - setIsVisible(true); - }, []); - - if (!isVisible) { - return null; - } - const onZoomInHandler = () => { zoomIn(); onZoomIn?.(); diff --git a/packages/react/src/components/Nodes/wrapNode.tsx b/packages/react/src/components/Nodes/wrapNode.tsx index 43e6334aa..858188cb1 100644 --- a/packages/react/src/components/Nodes/wrapNode.tsx +++ b/packages/react/src/components/Nodes/wrapNode.tsx @@ -52,6 +52,8 @@ export default (NodeComponent: ComponentType) => { disableKeyboardA11y, ariaLabel, rfId, + dimensionWidth, + dimensionHeight, }: WrapNodeProps) => { const store = useStoreApi(); const nodeRef = useRef(null); @@ -181,7 +183,9 @@ export default (NodeComponent: ComponentType) => { zIndex, transform: `translate(${xPosOrigin}px,${yPosOrigin}px)`, pointerEvents: hasPointerEvents ? 'all' : 'none', - visibility: initialized ? 'visible' : 'visible', + visibility: initialized ? 'visible' : 'hidden', + width: dimensionWidth, + height: dimensionHeight, ...style, }} data-id={id} diff --git a/packages/react/src/components/ReactFlowProvider/index.tsx b/packages/react/src/components/ReactFlowProvider/index.tsx index 4a1904bbf..cd3b2139c 100644 --- a/packages/react/src/components/ReactFlowProvider/index.tsx +++ b/packages/react/src/components/ReactFlowProvider/index.tsx @@ -6,11 +6,23 @@ import { Provider } from '../../contexts/RFStoreContext'; import { createRFStore } from '../../store'; import type { ReactFlowState, Node, Edge } from '../../types'; -function ReactFlowProvider({ children, nodes, edges }: { children: ReactNode; nodes?: Node[]; edges?: Edge[] }) { +function ReactFlowProvider({ + children, + nodes, + edges, + width, + height, +}: { + children: ReactNode; + nodes?: Node[]; + edges?: Edge[]; + width?: number; + height?: number; +}) { const storeRef = useRef> | null>(null); if (!storeRef.current) { - storeRef.current = createRFStore({ nodes, edges }); + storeRef.current = createRFStore({ nodes, edges, width, height }); } return {children}; diff --git a/packages/react/src/container/NodeRenderer/index.tsx b/packages/react/src/container/NodeRenderer/index.tsx index 34fb4c55f..8096a9aba 100644 --- a/packages/react/src/container/NodeRenderer/index.tsx +++ b/packages/react/src/container/NodeRenderer/index.tsx @@ -98,6 +98,7 @@ const NodeRenderer = (props: NodeRendererProps) => { height: node.height ?? 0, origin: node.origin || props.nodeOrigin, }); + const initialized = (!!node.width && !!node.height) || (!!node.dimensions?.width && !!node.dimensions?.height); return ( { id={node.id} className={node.className} style={node.style} + dimensionWidth={node.dimensions?.width} + dimensionHeight={node.dimensions?.height} type={nodeType} data={node.data} sourcePosition={node.sourcePosition || Position.Bottom} @@ -131,7 +134,7 @@ const NodeRenderer = (props: NodeRendererProps) => { isParent={!!node[internalsSymbol]?.isParent} noDragClassName={props.noDragClassName} noPanClassName={props.noPanClassName} - initialized={!!node.width && !!node.height} + initialized={initialized} rfId={props.rfId} disableKeyboardA11y={props.disableKeyboardA11y} ariaLabel={node.ariaLabel} diff --git a/packages/react/src/container/ReactFlow/Wrapper.tsx b/packages/react/src/container/ReactFlow/Wrapper.tsx index b4ff1199b..37b465fbb 100644 --- a/packages/react/src/container/ReactFlow/Wrapper.tsx +++ b/packages/react/src/container/ReactFlow/Wrapper.tsx @@ -4,7 +4,19 @@ import StoreContext from '../../contexts/RFStoreContext'; import ReactFlowProvider from '../../components/ReactFlowProvider'; import type { Node, Edge } from '../../types'; -function Wrapper({ children, nodes, edges }: { children: ReactNode; nodes?: Node[]; edges?: Edge[] }) { +function Wrapper({ + children, + nodes, + edges, + width, + height, +}: { + children: ReactNode; + nodes?: Node[]; + edges?: Edge[]; + width?: number; + height?: number; +}) { const isWrapped = useContext(StoreContext); if (isWrapped) { @@ -14,7 +26,7 @@ function Wrapper({ children, nodes, edges }: { children: ReactNode; nodes?: Node } return ( - + {children} ); diff --git a/packages/react/src/container/ReactFlow/index.tsx b/packages/react/src/container/ReactFlow/index.tsx index 20d62cbec..8f748831a 100644 --- a/packages/react/src/container/ReactFlow/index.tsx +++ b/packages/react/src/container/ReactFlow/index.tsx @@ -166,6 +166,8 @@ const ReactFlow = forwardRef( nodeDragThreshold, viewport, onViewportChange, + width, + height, ...rest }, ref @@ -181,7 +183,7 @@ const ReactFlow = forwardRef( data-testid="rf__wrapper" id={id} > - + +const createRFStore = ({ + nodes, + edges, + width, + height, +}: { + nodes?: Node[]; + edges?: Edge[]; + width?: number; + height?: number; +}) => createWithEqualityFn( (set, get) => ({ - ...getInitialState({ nodes, edges }), + ...getInitialState({ nodes, edges, width, height }), setNodes: (nodes: Node[]) => { const { nodes: storeNodes, nodeOrigin, elevateNodesOnSelect } = get(); const nextNodes = updateNodes(nodes, storeNodes, { nodeOrigin, elevateNodesOnSelect }); diff --git a/packages/react/src/store/initialState.ts b/packages/react/src/store/initialState.ts index 4e6ed8e75..c70072a1d 100644 --- a/packages/react/src/store/initialState.ts +++ b/packages/react/src/store/initialState.ts @@ -1,15 +1,45 @@ -import { devWarn, infiniteExtent, ConnectionMode, updateNodes } from '@xyflow/system'; +import { + devWarn, + infiniteExtent, + ConnectionMode, + updateNodes, + getRectOfNodes, + getTransformForBounds, + Transform, +} from '@xyflow/system'; import type { Edge, Node, ReactFlowStore } from '../types'; -const getInitialState = ({ nodes = [], edges = [] }: { nodes?: Node[]; edges?: Edge[] }): ReactFlowStore => { +const getInitialState = ({ + nodes = [], + edges = [], + width, + height, +}: { + nodes?: Node[]; + edges?: Edge[]; + width?: number; + height?: number; +}): ReactFlowStore => { const nextNodes = updateNodes(nodes, [], { nodeOrigin: [0, 0], elevateNodesOnSelect: false }); + let transform: Transform = [0, 0, 1]; + + if (width && height) { + const nodesWithDimensions = nextNodes.map((node) => ({ + ...node, + width: node.dimensions?.width, + height: node.dimensions?.height, + })); + const bounds = getRectOfNodes(nodesWithDimensions, [0, 0]); + transform = getTransformForBounds(bounds, width, height, 0.5, 2, 0.1); + } + return { rfId: '1', width: 0, height: 0, - transform: [0, 0, 1], + transform, nodes: nextNodes, edges: edges, onNodesChange: null, diff --git a/packages/react/src/types/component-props.ts b/packages/react/src/types/component-props.ts index 3fe97f078..e9c7a5ff6 100644 --- a/packages/react/src/types/component-props.ts +++ b/packages/react/src/types/component-props.ts @@ -151,6 +151,8 @@ export type ReactFlowProps = HTMLAttributes & { onError?: OnError; isValidConnection?: IsValidConnection; nodeDragThreshold?: number; + width?: number; + height?: number; }; export type ReactFlowRefType = HTMLDivElement; diff --git a/packages/react/src/types/nodes.ts b/packages/react/src/types/nodes.ts index 9f5edc0a3..f33de6821 100644 --- a/packages/react/src/types/nodes.ts +++ b/packages/react/src/types/nodes.ts @@ -40,4 +40,6 @@ export type WrapNodeProps = Pick< noPanClassName: string; rfId: string; disableKeyboardA11y: boolean; + dimensionWidth?: number; + dimensionHeight?: number; }; From 0888f699095303f42f84cdb3217aa03ca00de36e Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 5 Oct 2023 17:28:30 +0200 Subject: [PATCH 0241/1093] chore(examples): cleanup --- .../{react-ssr => astro-xyflow}/.gitignore | 0 .../.vscode/extensions.json | 0 .../.vscode/launch.json | 0 .../{react-ssr => astro-xyflow}/README.md | 0 .../astro.config.mjs | 3 +- .../{react-ssr => astro-xyflow}/package.json | 9 +- .../public/favicon.svg | 0 .../ReactFlowExample}/CustomNode.tsx | 0 .../src/components/ReactFlowExample/index.tsx | 134 ++++++++++++ .../components/SvelteFlowExample/index.svelte | 46 ++++ .../{react-ssr => astro-xyflow}/src/env.d.ts | 0 .../src/pages/index.astro | 12 +- .../{react-ssr => astro-xyflow}/tsconfig.json | 0 .../react-ssr/src/components/Flow/index.tsx | 71 ------ examples/react/src/examples/Stress/utils.ts | 4 +- examples/react/src/examples/Subflow/index.tsx | 3 - pnpm-lock.yaml | 202 +++++++++++++----- 17 files changed, 352 insertions(+), 132 deletions(-) rename examples/{react-ssr => astro-xyflow}/.gitignore (100%) rename examples/{react-ssr => astro-xyflow}/.vscode/extensions.json (100%) rename examples/{react-ssr => astro-xyflow}/.vscode/launch.json (100%) rename examples/{react-ssr => astro-xyflow}/README.md (100%) rename examples/{react-ssr => astro-xyflow}/astro.config.mjs (66%) rename examples/{react-ssr => astro-xyflow}/package.json (73%) rename examples/{react-ssr => astro-xyflow}/public/favicon.svg (100%) rename examples/{react-ssr/src/components/Flow => astro-xyflow/src/components/ReactFlowExample}/CustomNode.tsx (100%) create mode 100644 examples/astro-xyflow/src/components/ReactFlowExample/index.tsx create mode 100644 examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte rename examples/{react-ssr => astro-xyflow}/src/env.d.ts (100%) rename examples/{react-ssr => astro-xyflow}/src/pages/index.astro (67%) rename examples/{react-ssr => astro-xyflow}/tsconfig.json (100%) delete mode 100644 examples/react-ssr/src/components/Flow/index.tsx diff --git a/examples/react-ssr/.gitignore b/examples/astro-xyflow/.gitignore similarity index 100% rename from examples/react-ssr/.gitignore rename to examples/astro-xyflow/.gitignore diff --git a/examples/react-ssr/.vscode/extensions.json b/examples/astro-xyflow/.vscode/extensions.json similarity index 100% rename from examples/react-ssr/.vscode/extensions.json rename to examples/astro-xyflow/.vscode/extensions.json diff --git a/examples/react-ssr/.vscode/launch.json b/examples/astro-xyflow/.vscode/launch.json similarity index 100% rename from examples/react-ssr/.vscode/launch.json rename to examples/astro-xyflow/.vscode/launch.json diff --git a/examples/react-ssr/README.md b/examples/astro-xyflow/README.md similarity index 100% rename from examples/react-ssr/README.md rename to examples/astro-xyflow/README.md diff --git a/examples/react-ssr/astro.config.mjs b/examples/astro-xyflow/astro.config.mjs similarity index 66% rename from examples/react-ssr/astro.config.mjs rename to examples/astro-xyflow/astro.config.mjs index 7986bcae1..ffcf8fb73 100644 --- a/examples/react-ssr/astro.config.mjs +++ b/examples/astro-xyflow/astro.config.mjs @@ -1,7 +1,8 @@ import { defineConfig } from 'astro/config'; import react from '@astrojs/react'; +import svelte from '@astrojs/svelte'; // https://astro.build/config export default defineConfig({ - integrations: [react()], + integrations: [react(), svelte()], }); diff --git a/examples/react-ssr/package.json b/examples/astro-xyflow/package.json similarity index 73% rename from examples/react-ssr/package.json rename to examples/astro-xyflow/package.json index 717931302..e5ced4765 100644 --- a/examples/react-ssr/package.json +++ b/examples/astro-xyflow/package.json @@ -1,5 +1,5 @@ { - "name": "react-ssr", + "name": "astro", "type": "module", "version": "0.0.1", "scripts": { @@ -11,11 +11,14 @@ }, "dependencies": { "@astrojs/react": "^3.0.2", + "@astrojs/svelte": "^4.0.2", "@types/react": "^18.2.24", "@types/react-dom": "^18.2.8", "@xyflow/react": "workspace:^", + "@xyflow/svelte": "workspace:^", "astro": "^3.2.2", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "svelte": "^4.2.1" } -} \ No newline at end of file +} diff --git a/examples/react-ssr/public/favicon.svg b/examples/astro-xyflow/public/favicon.svg similarity index 100% rename from examples/react-ssr/public/favicon.svg rename to examples/astro-xyflow/public/favicon.svg diff --git a/examples/react-ssr/src/components/Flow/CustomNode.tsx b/examples/astro-xyflow/src/components/ReactFlowExample/CustomNode.tsx similarity index 100% rename from examples/react-ssr/src/components/Flow/CustomNode.tsx rename to examples/astro-xyflow/src/components/ReactFlowExample/CustomNode.tsx diff --git a/examples/astro-xyflow/src/components/ReactFlowExample/index.tsx b/examples/astro-xyflow/src/components/ReactFlowExample/index.tsx new file mode 100644 index 000000000..1bad3481a --- /dev/null +++ b/examples/astro-xyflow/src/components/ReactFlowExample/index.tsx @@ -0,0 +1,134 @@ +import { useCallback } from 'react'; +import { + ReactFlow, + addEdge, + useEdgesState, + useNodesState, + Background, + Controls, + type Connection, + type Edge, + type Node, + Position, +} from '@xyflow/react'; + +import CustomNode from './CustomNode'; + +import '@xyflow/react/dist/style.css'; + +const nodeDimensions = { + width: 100, + height: 40, +}; + +const handleSize = 1; + +const initialNodes: Node[] = [ + { + id: '1', + type: 'input', + data: { label: 'Node 1' }, + position: { x: 250, y: 5 }, + dimensions: nodeDimensions, + handles: [ + { + type: 'source', + position: Position.Bottom, + x: nodeDimensions.width * 0.5, + y: nodeDimensions.height, + width: 1, + height: 1, + }, + ], + }, + { + id: '2', + data: { label: 'Node 2' }, + position: { x: 100, y: 100 }, + dimensions: nodeDimensions, + handles: [ + { + type: 'source', + position: Position.Bottom, + x: nodeDimensions.width * 0.5, + y: nodeDimensions.height, + width: 1, + height: 1, + }, + { + type: 'target', + position: Position.Top, + x: nodeDimensions.width * 0.5, + y: 0, + width: 1, + height: 1, + }, + ], + }, + { + id: '3', + data: { label: 'Node 3' }, + position: { x: 400, y: 100 }, + dimensions: nodeDimensions, + handles: [ + { + type: 'source', + position: Position.Bottom, + x: nodeDimensions.width * 0.5, + y: nodeDimensions.height, + width: 1, + height: 1, + }, + { + type: 'target', + position: Position.Top, + x: nodeDimensions.width * 0.5, + y: 0, + width: 1, + height: 1, + }, + ], + }, + { + id: '4', + data: { label: 'Node 4' }, + position: { x: 400, y: 200 }, + type: 'custom', + }, +]; + +const initialEdges: Edge[] = [ + { id: 'e1-2', source: '1', target: '2', animated: true }, + { id: 'e1-3', source: '1', target: '3', animated: true }, +]; + +const nodeTypes = { + custom: CustomNode, +}; + +function Flow() { + const [nodes, , onNodesChange] = useNodesState(initialNodes); + const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + const onConnect = useCallback((params: Connection | Edge) => setEdges((eds) => addEdge(params, eds)), [setEdges]); + + return ( +
+ + + + +
+ ); +} + +export default Flow; diff --git a/examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte b/examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte new file mode 100644 index 000000000..c7b97e3dc --- /dev/null +++ b/examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte @@ -0,0 +1,46 @@ + + + + + + diff --git a/examples/react-ssr/src/env.d.ts b/examples/astro-xyflow/src/env.d.ts similarity index 100% rename from examples/react-ssr/src/env.d.ts rename to examples/astro-xyflow/src/env.d.ts diff --git a/examples/react-ssr/src/pages/index.astro b/examples/astro-xyflow/src/pages/index.astro similarity index 67% rename from examples/react-ssr/src/pages/index.astro rename to examples/astro-xyflow/src/pages/index.astro index e60c53d57..5dae52a0b 100644 --- a/examples/react-ssr/src/pages/index.astro +++ b/examples/astro-xyflow/src/pages/index.astro @@ -1,5 +1,6 @@ --- -import Flow from '../components/Flow' +import RF from '../components/ReactFlowExample' +import SF from '../components/SvelteFlowExample/index.svelte' --- @@ -18,9 +19,14 @@ import Flow from '../components/Flow' -

Astro

+

Svelte Flow

- + +
+ +

React Flow

+
+
diff --git a/examples/react-ssr/tsconfig.json b/examples/astro-xyflow/tsconfig.json similarity index 100% rename from examples/react-ssr/tsconfig.json rename to examples/astro-xyflow/tsconfig.json diff --git a/examples/react-ssr/src/components/Flow/index.tsx b/examples/react-ssr/src/components/Flow/index.tsx deleted file mode 100644 index 4f8b0aa38..000000000 --- a/examples/react-ssr/src/components/Flow/index.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { useCallback } from 'react'; -import { - ReactFlow, - addEdge, - useEdgesState, - useNodesState, - type Connection, - type Edge, - type Node, - type OnNodesChange, - ReactFlowProvider, -} from '@xyflow/react'; - -import CustomNode from './CustomNode'; - -import '@xyflow/react/dist/style.css'; - -const initialNodes: Node[] = [ - { - id: '1', - type: 'input', - data: { label: 'Node 1' }, - position: { x: 250, y: 5 }, - }, - { - id: '2', - data: { label: 'Node 2' }, - position: { x: 100, y: 100 }, - }, - { - id: '3', - data: { label: 'Node 3' }, - position: { x: 400, y: 100 }, - }, - { - id: '4', - data: { label: 'Node 4' }, - position: { x: 400, y: 200 }, - type: 'custom', - }, -]; - -const initialEdges: Edge[] = [ - { id: 'e1-2', source: '1', target: '2', animated: true }, - { id: 'e1-3', source: '1', target: '3', animated: true }, -]; - -const nodeTypes = { - custom: CustomNode, -}; - -function Flow() { - const [nodes, , onNodesChange] = useNodesState(initialNodes); - const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); - const onConnect = useCallback((params: Connection | Edge) => setEdges((eds) => addEdge(params, eds)), [setEdges]); - - return ( - // - - // - ); -} - -export default Flow; diff --git a/examples/react/src/examples/Stress/utils.ts b/examples/react/src/examples/Stress/utils.ts index 766b4bb70..6278e006f 100644 --- a/examples/react/src/examples/Stress/utils.ts +++ b/examples/react/src/examples/Stress/utils.ts @@ -17,9 +17,11 @@ export function getNodesAndEdges(xElements = 10, yElements = 10): ElementsCollec const data = { label: `Node ${nodeId}` }; const node = { id: nodeId.toString(), - style: { width: 50, fontSize: 11 }, + style: { width: 50, height: 30, fontSize: 11 }, data, position, + width: 50, + height: 30, }; initialNodes.push(node); diff --git a/examples/react/src/examples/Subflow/index.tsx b/examples/react/src/examples/Subflow/index.tsx index 617b68ea4..e2e9af891 100644 --- a/examples/react/src/examples/Subflow/index.tsx +++ b/examples/react/src/examples/Subflow/index.tsx @@ -204,9 +204,6 @@ const Subflow = () => { onNodeDrag={onNodeDrag} onNodeDragStop={onNodeDragStop} className="react-flow-basic-example" - defaultViewport={defaultViewport} - minZoom={0.2} - maxZoom={4} onlyRenderVisibleElements={false} nodeTypes={nodeTypes} fitView diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 129fc144b..f8683c11d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,6 +57,39 @@ importers: specifier: 5.1.3 version: registry.npmjs.org/typescript@5.1.3 + examples/astro-xyflow: + 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) + '@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) + '@types/react': + specifier: ^18.2.24 + version: registry.npmjs.org/@types/react@18.2.24 + '@types/react-dom': + specifier: ^18.2.8 + version: registry.npmjs.org/@types/react-dom@18.2.8 + '@xyflow/react': + specifier: workspace:^ + version: link:../../packages/react + '@xyflow/svelte': + specifier: workspace:^ + version: link:../../packages/svelte + astro: + specifier: ^3.2.2 + version: registry.npmjs.org/astro@3.2.2 + 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) + svelte: + specifier: ^4.2.1 + version: registry.npmjs.org/svelte@4.2.1 + examples/react: dependencies: '@xyflow/react': @@ -118,30 +151,6 @@ importers: specifier: 4.4.9 version: registry.npmjs.org/vite@4.4.9 - examples/react-ssr: - 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) - '@types/react': - specifier: ^18.2.24 - version: registry.npmjs.org/@types/react@18.2.24 - '@types/react-dom': - specifier: ^18.2.8 - version: registry.npmjs.org/@types/react-dom@18.2.8 - '@xyflow/react': - specifier: workspace:^ - version: link:../../packages/react - astro: - specifier: ^3.2.2 - version: registry.npmjs.org/astro@3.2.2 - 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) - examples/svelte: dependencies: '@xyflow/svelte': @@ -527,6 +536,26 @@ 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): + 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' + version: 4.0.2 + engines: {node: '>=18.14.1'} + peerDependencies: + 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) + astro: registry.npmjs.org/astro@3.2.2 + svelte: registry.npmjs.org/svelte@4.2.1 + svelte2tsx: registry.npmjs.org/svelte2tsx@0.6.20(svelte@4.2.1)(typescript@5.1.3) + transitivePeerDependencies: + - supports-color + - typescript + - vite + dev: false + registry.npmjs.org/@astrojs/telemetry@3.0.2: resolution: {integrity: sha512-ef+jqCkqopCzjGfsMsr+8p56Nj6F9ZzouWcWZt+dKsqbRccI3c8K3jfkLcdq4AyfFZtKBDB6N4ZuI68g33oiOg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.0.2.tgz} name: '@astrojs/telemetry' @@ -575,7 +604,7 @@ packages: '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 '@babel/template': registry.npmjs.org/@babel/template@7.22.5 '@babel/traverse': registry.npmjs.org/@babel/traverse@7.22.10 - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 convert-source-map: registry.npmjs.org/convert-source-map@1.9.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) gensync: registry.npmjs.org/gensync@1.0.0-beta.2 @@ -590,7 +619,7 @@ packages: version: 7.22.10 engines: {node: '>=6.9.0'} dependencies: - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping@0.3.3 '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping@0.3.18 jsesc: registry.npmjs.org/jsesc@2.5.2 @@ -705,7 +734,6 @@ packages: name: '@babel/helper-validator-identifier' version: 7.22.20 engines: {node: '>=6.9.0'} - dev: false registry.npmjs.org/@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz} @@ -748,7 +776,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 registry.npmjs.org/@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz} @@ -836,7 +864,7 @@ packages: '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables@7.22.5 '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration@7.22.6 '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 debug: registry.npmjs.org/debug@4.3.4(supports-color@8.1.1) globals: registry.npmjs.org/globals@11.12.0 transitivePeerDependencies: @@ -861,7 +889,6 @@ packages: '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser@7.22.5 '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier@7.22.20 to-fast-properties: registry.npmjs.org/to-fast-properties@2.0.0 - dev: false registry.npmjs.org/@changesets/apply-release-plan@6.1.3: resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.1.3.tgz} @@ -2066,6 +2093,25 @@ packages: - supports-color 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): + 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.1)(vite@4.4.9) + 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 + transitivePeerDependencies: + - supports-color + dev: false + registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.1(svelte@4.2.0)(vite@4.4.9): resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz} id: registry.npmjs.org/@sveltejs/vite-plugin-svelte/2.4.1 @@ -2089,6 +2135,29 @@ packages: - supports-color dev: true + registry.npmjs.org/@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.4.9): + 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.1)(vite@4.4.9) + 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.4 + 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.4(vite@4.4.9) + transitivePeerDependencies: + - supports-color + dev: false + registry.npmjs.org/@swc/core-darwin-arm64@1.3.63: resolution: {integrity: sha512-lNR0BgG0/6dGpGP+AyFZoZ3YBhZN5GzvgAUzwy4skqn5sKZ7duQD02CNq1lIy7Im5BzgMUcJ+/Z7z/YUlqBK+Q==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.63.tgz} name: '@swc/core-darwin-arm64' @@ -2236,7 +2305,7 @@ packages: version: 7.20.2 dependencies: '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 '@types/babel__generator': registry.npmjs.org/@types/babel__generator@7.6.5 '@types/babel__template': registry.npmjs.org/@types/babel__template@7.4.2 '@types/babel__traverse': registry.npmjs.org/@types/babel__traverse@7.20.2 @@ -2247,7 +2316,7 @@ packages: name: '@types/babel__generator' version: 7.6.5 dependencies: - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 dev: false registry.npmjs.org/@types/babel__template@7.4.2: @@ -2256,7 +2325,7 @@ packages: version: 7.4.2 dependencies: '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 dev: false registry.npmjs.org/@types/babel__traverse@7.20.2: @@ -2264,7 +2333,7 @@ packages: name: '@types/babel__traverse' version: 7.20.2 dependencies: - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 dev: false registry.npmjs.org/@types/cookie@0.5.1: @@ -3213,7 +3282,6 @@ packages: version: 5.3.0 dependencies: dequal: registry.npmjs.org/dequal@2.0.3 - dev: true registry.npmjs.org/array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz} @@ -3345,7 +3413,7 @@ packages: '@babel/parser': registry.npmjs.org/@babel/parser@7.22.10 '@babel/plugin-transform-react-jsx': registry.npmjs.org/@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.10) '@babel/traverse': registry.npmjs.org/@babel/traverse@7.22.10 - '@babel/types': registry.npmjs.org/@babel/types@7.22.10 + '@babel/types': registry.npmjs.org/@babel/types@7.23.0 '@types/babel__core': registry.npmjs.org/@types/babel__core@7.20.2 acorn: registry.npmjs.org/acorn@8.10.0 boxen: registry.npmjs.org/boxen@7.1.1 @@ -3488,7 +3556,6 @@ packages: version: 3.2.1 dependencies: dequal: registry.npmjs.org/dequal@2.0.3 - dev: true registry.npmjs.org/b4a@1.6.4: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz} @@ -3955,7 +4022,6 @@ packages: acorn: registry.npmjs.org/acorn@8.10.0 estree-walker: registry.npmjs.org/estree-walker@3.0.3 periscopic: registry.npmjs.org/periscopic@3.1.0 - dev: true registry.npmjs.org/color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz} @@ -4172,7 +4238,6 @@ packages: dependencies: mdn-data: registry.npmjs.org/mdn-data@2.0.30 source-map-js: registry.npmjs.org/source-map-js@1.0.2 - dev: true registry.npmjs.org/css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz} @@ -4568,7 +4633,6 @@ packages: resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz} name: dedent-js version: 1.0.1 - dev: true registry.npmjs.org/deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz} @@ -4589,7 +4653,6 @@ packages: name: deepmerge version: 4.3.1 engines: {node: '>=0.10.0'} - dev: true registry.npmjs.org/defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz} @@ -6588,7 +6651,6 @@ packages: version: 3.0.1 dependencies: '@types/estree': registry.npmjs.org/@types/estree@1.0.1 - dev: true registry.npmjs.org/is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz} @@ -6993,7 +7055,6 @@ packages: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz} name: locate-character version: 3.0.0 - dev: true registry.npmjs.org/locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz} @@ -7097,7 +7158,6 @@ packages: version: 2.0.2 dependencies: tslib: registry.npmjs.org/tslib@2.5.3 - dev: true registry.npmjs.org/lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz} @@ -7353,7 +7413,6 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz} name: mdn-data version: 2.0.30 - dev: true registry.npmjs.org/meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/meow/-/meow-6.1.1.tgz} @@ -7888,7 +7947,6 @@ packages: dependencies: lower-case: registry.npmjs.org/lower-case@2.0.2 tslib: registry.npmjs.org/tslib@2.5.3 - dev: true registry.npmjs.org/node-abi@3.47.0: resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz} @@ -8240,7 +8298,6 @@ packages: dependencies: no-case: registry.npmjs.org/no-case@3.0.4 tslib: registry.npmjs.org/tslib@2.5.3 - dev: true registry.npmjs.org/path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} @@ -8314,7 +8371,6 @@ packages: '@types/estree': registry.npmjs.org/@types/estree@1.0.1 estree-walker: registry.npmjs.org/estree-walker@3.0.3 is-reference: registry.npmjs.org/is-reference@3.0.1 - dev: true registry.npmjs.org/picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz} @@ -10416,6 +10472,18 @@ packages: svelte: registry.npmjs.org/svelte@4.2.0 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 + 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.1 + dev: false + registry.npmjs.org/svelte-preprocess@5.0.4(postcss@8.4.27)(svelte@4.2.0)(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 @@ -10482,6 +10550,21 @@ packages: typescript: registry.npmjs.org/typescript@5.1.3 dev: true + registry.npmjs.org/svelte2tsx@0.6.20(svelte@4.2.1)(typescript@5.1.3): + resolution: {integrity: sha512-zaSnHSERYceKxugFbjiZ3YiNcC2fNbVjpQ9qaE5hrYI4tIOX9ZqHS+I30Hp2HF+MVXLOVWVErgn/6pAlQNnheA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.20.tgz} + id: registry.npmjs.org/svelte2tsx/0.6.20 + name: svelte2tsx + version: 0.6.20 + 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.1.3 + dev: false + registry.npmjs.org/svelte@4.2.0: resolution: {integrity: sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/svelte/-/svelte-4.2.0.tgz} name: svelte @@ -10503,6 +10586,27 @@ packages: periscopic: registry.npmjs.org/periscopic@3.1.0 dev: true + 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} + name: svelte + version: 4.2.1 + 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.18 + acorn: registry.npmjs.org/acorn@8.10.0 + 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.3 + 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.1 + locate-character: registry.npmjs.org/locate-character@3.0.0 + magic-string: registry.npmjs.org/magic-string@0.30.4 + periscopic: registry.npmjs.org/periscopic@3.1.0 + dev: false + 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 @@ -10726,7 +10830,6 @@ packages: resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz} name: tslib version: 2.5.3 - dev: true registry.npmjs.org/tsutils@3.21.0(typescript@5.1.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz} @@ -10955,7 +11058,6 @@ 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} From cdf1c4c3a60c0d543097432ccc88380d0bd68dc8 Mon Sep 17 00:00:00 2001 From: peterkogo <7165378+peterkogo@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:53:57 +0200 Subject: [PATCH 0242/1093] refactor(svelte): cleanup useSvelteFlow, add functions (#3474) * chore(svelte) removed nodes, edges from useSvelteFlow * feat(svelte) added deleteElements to useSvelteFlow * fix(svelte) parent div gets resized correctly, got rid of getBoundingClient Rect * feat(svelte) added screenToFlowCoordinate * feat(svelte) added flowToScreenCoordinate to useSvelteFlow * chore(svelte) removed project from useSvelteFlow * Delete examples/svelte/src/routes/add-node-on-drop/+server.ts --------- Co-authored-by: Moritz Klack --- .../src/components/Header/Header.svelte | 3 +- .../src/routes/add-node-on-drop/+page.svelte | 9 ++ .../src/routes/add-node-on-drop/Flow.svelte | 115 +++++++++++++++++ .../container/SvelteFlow/SvelteFlow.svelte | 9 +- .../svelte/src/lib/hooks/useSvelteFlow.ts | 117 +++++++++++++++--- 5 files changed, 235 insertions(+), 18 deletions(-) create mode 100644 examples/svelte/src/routes/add-node-on-drop/+page.svelte create mode 100644 examples/svelte/src/routes/add-node-on-drop/Flow.svelte diff --git a/examples/svelte/src/components/Header/Header.svelte b/examples/svelte/src/components/Header/Header.svelte index 6755fc2d4..2b8e158e6 100644 --- a/examples/svelte/src/components/Header/Header.svelte +++ b/examples/svelte/src/components/Header/Header.svelte @@ -15,7 +15,8 @@ 'two-way-viewport', 'usesvelteflow', 'useupdatenodeinternals', - 'validation' + 'validation', + 'add-node-on-drop' ]; const onChange = (event: Event) => { diff --git a/examples/svelte/src/routes/add-node-on-drop/+page.svelte b/examples/svelte/src/routes/add-node-on-drop/+page.svelte new file mode 100644 index 000000000..338f964ff --- /dev/null +++ b/examples/svelte/src/routes/add-node-on-drop/+page.svelte @@ -0,0 +1,9 @@ + + + + + + diff --git a/examples/svelte/src/routes/add-node-on-drop/Flow.svelte b/examples/svelte/src/routes/add-node-on-drop/Flow.svelte new file mode 100644 index 000000000..cd12c1a41 --- /dev/null +++ b/examples/svelte/src/routes/add-node-on-drop/Flow.svelte @@ -0,0 +1,115 @@ + + + + +
+ { + // Memorize the nodeId you start draggin a connection line from a node + connectingNodeId = nodeId; + }} + on:connectend={handleConnectEnd} + /> +
+ + diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index ef5d547b4..d9eb867da 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -71,13 +71,14 @@ export { className as class }; let domNode: HTMLDivElement; + let clientWidth: number; + let clientHeight: number; const store = hasContext(key) ? useStore() : createStoreContext(); onMount(() => { - const { width, height } = domNode.getBoundingClientRect(); - store.width.set(width); - store.height.set(height); + store.width.set(clientWidth); + store.height.set(clientHeight); store.domNode.set(domNode); store.syncNodeStores(nodes); @@ -141,6 +142,8 @@
void; getViewport: () => Viewport; fitView: (options?: FitViewOptions) => void; - project: Project; + fitBounds: (bounds: Rect, options?: FitBoundsOptions) => void; + deleteElements: ( + nodesToRemove?: Partial & { id: string }[], + edgesToRemove?: Partial & { id: string }[] + ) => { deletedNodes: Node[]; deletedEdges: Edge[] }; + screenToFlowCoordinate: (position: XYPosition) => XYPosition; + flowToScreenCoordinate: (position: XYPosition) => XYPosition; viewport: Writable; - nodes: SvelteFlowStore['nodes']; - edges: SvelteFlowStore['edges']; } { const { zoomIn, @@ -35,10 +42,12 @@ export function useSvelteFlow(): { viewport, width, height, + minZoom, maxZoom, panZoom, nodes, - edges + edges, + domNode } = useStore(); return { @@ -78,14 +87,94 @@ export function useSvelteFlow(): { ); }, fitView, - project: (position: XYPosition) => { - const _snapGrid = get(snapGrid); - const { x, y, zoom } = get(viewport); + fitBounds: (bounds: Rect, options?: FitBoundsOptions) => { + const _width = get(width); + const _height = get(height); + const _maxZoom = get(maxZoom); + const _minZoom = get(minZoom); - return pointToRendererPoint(position, [x, y, zoom], _snapGrid !== null, _snapGrid || [1, 1]); + const [x, y, zoom] = getTransformForBounds( + bounds, + _width, + _height, + _minZoom, + _maxZoom, + options?.padding ?? 0.1 + ); + + get(panZoom)?.setViewport( + { + x, + y, + zoom + }, + { duration: options?.duration } + ); + }, + deleteElements: ( + nodesToRemove: Partial & { id: string }[] = [], + edgesToRemove: Partial & { id: string }[] = [] + ) => { + const _nodes = get(nodes); + const _edges = get(edges); + const { matchingNodes, matchingEdges } = getElementsToRemove({ + nodesToRemove, + edgesToRemove, + nodes: _nodes, + edges: _edges + }); + + if (matchingNodes) { + nodes.set(_nodes.filter((node) => !matchingNodes.some(({ id }) => id === node.id))); + } + + if (matchingEdges) { + edges.set(_edges.filter((edge) => !matchingEdges.some(({ id }) => id === edge.id))); + } + + return { + deletedNodes: matchingNodes, + deletedEdges: matchingEdges + }; + }, + screenToFlowCoordinate: (position: XYPosition) => { + const _domNode = get(domNode); + if (_domNode) { + const _snapGrid = get(snapGrid); + const { x, y, zoom } = get(viewport); + const { x: domX, y: domY } = _domNode.getBoundingClientRect(); + + const correctedPosition = { + x: position.x - domX, + y: position.y - domY + }; + + return pointToRendererPoint( + correctedPosition, + [x, y, zoom], + _snapGrid !== null, + _snapGrid || [1, 1] + ); + } + + return { x: 0, y: 0 }; + }, + flowToScreenCoordinate: (position: XYPosition) => { + const _domNode = get(domNode); + if (_domNode) { + const { x, y, zoom } = get(viewport); + const { x: domX, y: domY } = _domNode.getBoundingClientRect(); + + const rendererPosition = rendererPointToPoint(position, [x, y, zoom]); + + return { + x: rendererPosition.x + domX, + y: rendererPosition.y + domY + }; + } + + return { x: 0, y: 0 }; }, - nodes, - edges, viewport: viewport }; } From 6f9ebbf609d3ec7e75a123b476cb45857e9eb404 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 9 Oct 2023 15:22:58 +0200 Subject: [PATCH 0243/1093] fix(react/svelte): select nodes on click when nodeDragThreshold > 0 --- packages/react/src/components/Nodes/wrapNode.tsx | 5 +++-- .../src/lib/components/NodeWrapper/NodeWrapper.svelte | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/react/src/components/Nodes/wrapNode.tsx b/packages/react/src/components/Nodes/wrapNode.tsx index c9c08135f..f4e71c8db 100644 --- a/packages/react/src/components/Nodes/wrapNode.tsx +++ b/packages/react/src/components/Nodes/wrapNode.tsx @@ -67,8 +67,9 @@ export default (NodeComponent: ComponentType) => { const onContextMenuHandler = getMouseHandler(id, store.getState, onContextMenu); const onDoubleClickHandler = getMouseHandler(id, store.getState, onDoubleClick); const onSelectNodeHandler = (event: MouseEvent) => { - const { selectNodesOnDrag } = store.getState(); - if (isSelectable && (!selectNodesOnDrag || !isDraggable)) { + const { selectNodesOnDrag, nodeDragThreshold } = store.getState(); + + if (isSelectable && (!selectNodesOnDrag || !isDraggable || nodeDragThreshold > 0)) { // this handler gets called within the drag start event when selectNodesOnDrag=true handleNodeClick({ id, diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 058da8b2d..10906aea8 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -9,13 +9,13 @@ type ComponentType } from 'svelte'; import cc from 'classcat'; + import { get, writable } from 'svelte/store'; import { errorMessages, type NodeProps } from '@xyflow/system'; import drag from '$lib/actions/drag'; import { useStore } from '$lib/store'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; import type { NodeWrapperProps } from './types'; - import { writable } from 'svelte/store'; interface $$Props extends NodeWrapperProps {} @@ -42,7 +42,7 @@ export { className as class }; const store = useStore(); - const { nodeTypes, addSelectedNodes } = store; + const { nodeTypes, nodeDragThreshold, addSelectedNodes } = store; let nodeRef: HTMLDivElement; const nodeTypeValid = !!$nodeTypes[type!]; @@ -73,7 +73,7 @@ }); function onSelectNodeHandler(event: MouseEvent | TouchEvent) { - if (selectable && (!selectNodesOnDrag || !draggable)) { + if (selectable && (!selectNodesOnDrag || !draggable || get(nodeDragThreshold) > 0)) { // this handler gets called within the drag start event when selectNodesOnDrag=true addSelectedNodes([id]); } From a46104cf407fcc5b53323d72148530f38688abae Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 9 Oct 2023 15:51:53 +0200 Subject: [PATCH 0244/1093] refactor(svelte): cleanup nodes selection --- packages/svelte/CHANGELOG.md | 15 +++++++++++++++ packages/svelte/package.json | 2 +- .../components/NodeSelection/NodeSelection.svelte | 11 +++-------- .../src/lib/components/Selection/Selection.svelte | 8 +++++--- packages/svelte/src/styles/style.css | 8 ++++++++ packages/system/package.json | 2 +- 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index bfd9be665..d1ec076b4 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,3 +1,18 @@ +## 0.0.23 + +- updates `useSvelteFlow` hook: + - add `screenToFlowCoordinate` and `flowToScreenCoordinate` + - add `getConnectedEdges`, `getIncomers` and `getOutgoers` + - add `deleteElements` + - add `fitBounds` + - add `getIntersectingNodes` and `isNodeIntersecting` +- add `useConnection` hook +- add `useNodes` hook +- add `useEdges` hook +- add `viewport` prop (writable viewport) +- fix selection style +- fix Background component with lines variant + ## 0.0.22 - add `connectionLine` slot for rendering a custom connection line diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 1de47e737..00bfbaf8e 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@xyflow/svelte", - "version": "0.0.22", + "version": "0.0.23", "description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.", "keywords": [ "svelte", diff --git a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte index ea9ec2025..1a409938b 100644 --- a/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte +++ b/packages/svelte/src/lib/components/NodeSelection/NodeSelection.svelte @@ -17,14 +17,9 @@ class="selection-wrapper nopan" style="width: {rect.width}px; height: {rect.height}px; transform: translate({rect.x}px, {rect.y}px)" use:drag={{ disabled: false, store }} - /> - + > + +
{/if} - diff --git a/examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte b/examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte index 45f37b130..cfa8a449d 100644 --- a/examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte +++ b/examples/astro-xyflow/src/components/SvelteFlowExample/index.svelte @@ -78,7 +78,9 @@ }; - - - - +
+ + + + +
diff --git a/examples/astro-xyflow/src/pages/index.astro b/examples/astro-xyflow/src/pages/index.astro index 5dae52a0b..be9d18850 100644 --- a/examples/astro-xyflow/src/pages/index.astro +++ b/examples/astro-xyflow/src/pages/index.astro @@ -1,15 +1,14 @@ --- -import RF from '../components/ReactFlowExample' -import SF from '../components/SvelteFlowExample/index.svelte' +import ReactFlowApp from '../components/ReactFlowExample' +import SvelteFlowApp from '../components/SvelteFlowExample/index.svelte' --- - - Astro + Astro example for React Flow and Svelte Flow diff --git a/examples/svelte/src/routes/tests/nodes/Flow.svelte b/examples/svelte/src/routes/tests/nodes/Flow.svelte index 6686c9078..6f684cbf3 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 37e2d9998..bd382bef8 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 0f6d36487..000000000 --- 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 d9fea594b..000000000 --- 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 b06de9617..03a3bef92 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 0280/1093] 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 03a3bef92..2136c3f1c 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 bbdff5ab10be24bb67a54816a9d60204998da953 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 30 Oct 2023 11:14:10 +0100 Subject: [PATCH 0281/1093] chore(svelte): prevent undefined for width and height --- .../svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index cfa66d676..36209b17c 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -108,8 +108,10 @@ // Update width & height on resize $: { - store.width.set(clientWidth); - store.height.set(clientHeight); + if (clientWidth !== undefined && clientHeight !== undefined) { + store.width.set(clientWidth); + store.height.set(clientHeight); + } } // this updates the store for simple changes From e899c379d027650edd6e400c0e24f4f4ae34fb79 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 30 Oct 2023 11:52:50 +0100 Subject: [PATCH 0282/1093] chore(svelte): cleanup useSvelteFlow --- .../src/routes/usesvelteflow/Sidebar.svelte | 12 ++++++++++-- packages/svelte/src/lib/hooks/useSvelteFlow.ts | 16 +++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte b/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte index 5b81fa4fc..a195cf1ce 100644 --- a/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte +++ b/examples/svelte/src/routes/usesvelteflow/Sidebar.svelte @@ -1,5 +1,5 @@