From ef3f5d1d066dc3f97c90d10b514779179b21de38 Mon Sep 17 00:00:00 2001 From: ThHarbig Date: Mon, 8 Jan 2024 16:50:27 +0100 Subject: [PATCH] chore: adapt code to new API (#3) * feat: add parent component for examples * feat: add PhyloTree * feat: write a wrapper for gosling component to avoid passing down the gosling ref * fix: jsdocs * feat: set states for track height and gosling height * feat: create meta component wrapper * feat: adapt table to new API * feat: add very simple example to demonstrate track issue * feat: adapt metatable to new events and fixed track ids * feat: adapt code to new API * feat: fix import * chore: fix import in PhyloTree.tsx * chore: adapt to review --- demo/App.jsx | 317 +-------- demo/GeneSpy.jsx | 84 +++ demo/IslandViewer.jsx | 268 ++++++++ demo/index.jsx | 6 +- package.json | 8 +- src/GoslingComponentWrapper.tsx | 50 ++ src/GoslingMetaComponent.tsx | 73 +- src/MetaComponentWrapper.tsx | 47 ++ src/MetaTable.tsx | 127 ++-- src/PhyloTree.tsx | 183 +++++ src/table-data-transform.ts | 3 +- yarn.lock | 1099 +++++++++++++++++++++---------- 12 files changed, 1529 insertions(+), 736 deletions(-) create mode 100644 demo/GeneSpy.jsx create mode 100644 demo/IslandViewer.jsx create mode 100644 src/GoslingComponentWrapper.tsx create mode 100644 src/MetaComponentWrapper.tsx create mode 100644 src/PhyloTree.tsx diff --git a/demo/App.jsx b/demo/App.jsx index 5b37077..4d0483f 100644 --- a/demo/App.jsx +++ b/demo/App.jsx @@ -1,293 +1,32 @@ -import React from 'react'; -import {GoslingMetaComponent} from '../src/index.ts'; +import * as React from 'react'; +import { Routes, Route, Link } from 'react-router-dom'; +import IslandViewer from './IslandViewer'; +import 'higlass/dist/hglib.css'; +import GeneSpy from "./GeneSpy"; -const islandData = { - data: { - type: 'csv', - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_islands.csv', - chromosomeField: 'Accession', - genomicFields: ['Island start', 'Island end'] - }, - x: {field: 'Island start', type: 'genomic'}, - xe: {field: 'Island end', type: 'genomic'} -}; -const detailID = 'detailedView'; -const circularRadius = 200; -const centerRadius = 0.5; - -const linearHeight = 120; -const linearSize = linearHeight / 6; - -const goslingSpec = { - title: 'IslandViewer 4 (Bertelli et al. 2017)', - subtitle: 'Salmonella enterica subsp. enterica serovar Typhi Ty2, complete genome.', - description: 'Reimplementation of https://www.pathogenomics.sfu.ca/islandviewer/accession/NC_004631.1/', - assembly: [['NC_004631.1', 4791961]], - spacing: 50, - views: [ - { - layout: 'circular', - static: true, - alignment: 'overlay', - spacing: 0.1, - tracks: [ - { - data: { - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_GCcontent.csv', - type: 'csv', - separator: '\t', - genomicFields: ['Position'] - }, - y: {field: 'GCcontent', type: 'quantitative', range: [-250, 0], axis: 'none'}, - mark: 'line', - size: {value: 0.5}, - x: {field: 'Position', type: 'genomic'}, - color: { - value: 'black' - } - }, - { - experimental: {mouseEvents: true}, - style: {outlineWidth: 1, outline: 'black'}, - data: { - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_annotations.csv', - type: 'csv', - genomicFields: ['Gene start'] - }, - dataTransform: [ - { - type: 'displace', - method: 'pile', - boundingBox: { - padding: 3.5, - startField: 'Gene start', - endField: 'Gene start' - }, - newField: 'row' - } - ], - y: {field: 'row', type: 'nominal', flip: true}, - mark: 'point', - x: {field: 'Gene start', type: 'genomic'}, - size: {value: 3}, - color: { - field: 'Type', - type: 'nominal', - domain: ['Victors', 'BLAST', 'RGI', 'PAG'], - range: ['#460B80', '#A684EA', '#FF9CC1', '#FF9CC1'] - } - }, - { - ...islandData, - row: { - field: 'Method', - domain: [ - 'Predicted by at least one method', - 'IslandPath-DIMOB', - 'SIGI-HMM', - 'IslandPick', - 'Islander' - ], - type: 'nominal' - }, - color: { - field: 'Method', - type: 'nominal', - domain: [ - 'Predicted by at least one method', - 'IslandPath-DIMOB', - 'SIGI-HMM', - 'IslandPick', - 'Islander' - ], - range: ['#B22222', '#4169E1', '#FF8C00', '#008001', '#40E0D0'] - }, - mark: 'rect' - }, - { - mark: 'brush', - x: {linkingId: 'detail'} - } - ], - width: circularRadius * 2, - centerRadius: centerRadius - }, - { - layout: 'linear', - xDomain: {chromosome: 'NC_004631.1', interval: [1000000, 1500000]}, - linkingId: 'detail', - alignment: 'overlay', - tracks: [ - { - data: { - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_genes.csv', - type: 'csv', - chromosomeField: 'Accession', - genomicFields: ['Gene start', 'Gene end'] - }, - id: detailID, - x: {field: 'Gene start', type: 'genomic'}, - xe: {field: 'Gene end', type: 'genomic'}, - y: {value: 5.5 * linearSize}, - size: {value: linearSize}, - mark: 'rect', - dataTransform: [{type: 'filter', field: 'Strand', oneOf: ['1']}], - color: {value: '#E9967A'}, - tooltip: [{field: 'Gene name', type: 'nominal', alt: 'Name'}] - }, - { - data: { - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_genes.csv', - type: 'csv', - chromosomeField: 'Accession', - genomicFields: ['Gene start', 'Gene end'] - }, - x: {field: 'Gene start', type: 'genomic'}, - xe: {field: 'Gene end', type: 'genomic'}, - y: {value: 4.5 * linearSize}, - size: {value: linearSize}, - mark: 'rect', - dataTransform: [{type: 'filter', field: 'Strand', oneOf: ['-1']}], - color: {value: '#87976E'}, - tooltip: [{field: 'Gene name', type: 'nominal', alt: 'Name'}] - }, - { - data: { - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_genes.csv', - type: 'csv', - chromosomeField: 'Accession', - genomicFields: ['Gene start', 'Gene end'] - }, - x: {field: 'Gene start', type: 'genomic'}, - xe: {field: 'Gene end', type: 'genomic'}, - y: {value: 5.5 * linearSize}, - mark: 'text', - text: {field: 'Gene name', type: 'nominal'}, - dataTransform: [{type: 'filter', field: 'Strand', oneOf: ['1']}], - color: {value: '#ffffff'}, - visibility: [ - { - operation: 'less-than', - measure: 'width', - threshold: '|xe-x|', - transitionPadding: 10, - target: 'mark' - } - ] - }, - { - data: { - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_genes.csv', - type: 'csv', - chromosomeField: 'Accession', - genomicFields: ['Gene start', 'Gene end'] - }, - x: {field: 'Gene start', type: 'genomic'}, - xe: {field: 'Gene end', type: 'genomic'}, - y: {value: 4.5 * linearSize}, - mark: 'text', - text: {field: 'Gene name', type: 'nominal'}, - dataTransform: [{type: 'filter', field: 'Strand', oneOf: ['-1']}], - color: {value: '#ffffff'}, - visibility: [ - { - operation: 'less-than', - measure: 'width', - threshold: '|xe-x|', - transitionPadding: 10, - target: 'mark' - } - ] - }, - { - ...islandData, - mark: 'rect', - dataTransform: [{type: 'filter', field: 'Method', oneOf: ['IslandPath-DIMOB']}], - y: {value: 0.5 * linearSize}, - size: {value: linearSize}, - color: {value: '#4169E1'} - }, - { - ...islandData, - mark: 'rect', - dataTransform: [{type: 'filter', field: 'Method', oneOf: ['SIGI-HMM']}], - y: {value: 1.5 * linearSize}, - size: {value: linearSize}, - color: {value: '#FF8C00'} - }, - { - ...islandData, - mark: 'rect', - dataTransform: [{type: 'filter', field: 'Method', oneOf: ['IslandPick']}], - y: {value: 2.5 * linearSize}, - size: {value: linearSize}, - color: {value: '#008001'} - }, - { - ...islandData, - mark: 'rect', - dataTransform: [{type: 'filter', field: 'Method', oneOf: ['Islander']}], - y: {value: 3.5 * linearSize}, - size: {value: linearSize}, - color: {value: '#40E0D0'} - }, - { - data: { - url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_annotations.csv', - type: 'csv', - genomicFields: ['Gene start'] - }, - dataTransform: [ - { - type: 'displace', - method: 'pile', - boundingBox: { - padding: 3.5, - startField: 'Gene start', - endField: 'Gene start' - }, - newField: 'row' - } - ], - row: {field: 'row', type: 'nominal'}, - mark: 'point', - x: {field: 'Gene start', type: 'genomic'}, - size: {value: 3}, - color: { - field: 'Type', - type: 'nominal', - domain: ['Victors', 'BLAST', 'RGI', 'PAG'], - range: ['#460B80', '#A684EA', '#FF9CC1', '#FF9CC1'] - }, - tooltip: [{field: 'Type', type: 'nominal', alt: 'Name'}] - } - ], - width: circularRadius * 2, - height: linearHeight - } - ] -}; -const metaSpec = { - type: 'table', - dataTransform: [ - { - type: "merge", - fields: ["Islands", "Annotations"], - mergeChar: "/", - newField: "Prediction Method", - } - ], - width: 600, - genomicColumns: ['Gene start', 'Gene end'], - columns: ['Prediction Method', 'Gene name', 'Accnum', 'Product'] +// The full list of examples +const examples = { + IslandViewer: , + GeneSpy: , } -export default function App() { - return ( - - ); +function App() { + return ( +
+
+
Examples
+
    + {Object.entries(examples).map(entry =>
  1. {entry[0]}
  2. )} +
+
+
+ + + {Object.entries(examples).map(entry => )} + +
+
+ ); } + +export default App; \ No newline at end of file diff --git a/demo/GeneSpy.jsx b/demo/GeneSpy.jsx new file mode 100644 index 0000000..a6c97c5 --- /dev/null +++ b/demo/GeneSpy.jsx @@ -0,0 +1,84 @@ +import React from 'react'; +import {GoslingMetaComponent} from '../src/index.ts'; + +const gosId = 'gosID'; +const goslingSpec = { + title: 'GeneSpy + iTol', + subtitle: 'Genomic neighborhood visualization with aligned phylogenetic tree', + description: 'Idea: https://doi.org/10.1093/bioinformatics/bty459', + assembly: [['', 11000]], + arrangement: 'horizontal', + spacing:0, + static: true, + views: [ + { + tracks: [ + { + type: "dummy-track", + id: "tree", + } + ], + width: 350, + // TODO: see issue #980 + height: 330 + }, + { + alignment: 'overlay', + data: { + url: 'https://s3.amazonaws.com/gosling-lang.org/data/GeneSpy/gene_spy_example.csv', + type: 'csv', + genomicFields: ['Gene start', 'Gene end'] + }, + color: { + field: 'type', + type: 'nominal', + domain: ['anchor', 'conserved', 'disrupted'], + range: ['red', 'gray', 'yellow'] + }, + id: gosId, + row: { + field: 'Accession', + type: 'nominal', + }, + tracks: [ + { + dataTransform: [ + {type: 'filter', field: 'Strand', oneOf: ['+']} + ], + mark: 'triangleRight', + style: {align: 'right'}, + x: {field: 'Gene start', type: 'genomic', axis: 'none'}, + xe: {field: 'Gene end', type: 'genomic'} + }, + { + dataTransform: [ + {type: 'filter', field: 'Strand', oneOf: ['-']} + ], + mark: 'triangleLeft', + style: {align: 'left'}, + x: {field: 'Gene start', type: 'genomic'}, + xe: {field: 'Gene end', type: 'genomic'} + } + ], + height: 300 + } + ] +}; +const metaSpec = { + type: 'tree', + data: { + url: 'https://s3.amazonaws.com/gosling-lang.org/data/GeneSpy/gene_spy_example.nwk', + type: 'nwk', + }, + width: 400, +} + +export default function GeneSpy() { + return ( + + ); +} diff --git a/demo/IslandViewer.jsx b/demo/IslandViewer.jsx new file mode 100644 index 0000000..02dff47 --- /dev/null +++ b/demo/IslandViewer.jsx @@ -0,0 +1,268 @@ +import React from 'react'; +import {GoslingMetaComponent} from '../src/index.ts'; + +const islandData = { + data: { + type: 'csv', + url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_islands.csv', + chromosomeField: 'Accession', + genomicFields: ['Island start', 'Island end'] + }, + x: {field: 'Island start', type: 'genomic'}, + xe: {field: 'Island end', type: 'genomic'} +}; +const detailID = 'detailedView'; +const circularRadius = 200; +const centerRadius = 0.5; + +const linearHeight = 120; +const linearSize = linearHeight / 6; + +const goslingSpec = { + title: 'IslandViewer 4 (Bertelli et al. 2017)', + subtitle: 'Salmonella enterica subsp. enterica serovar Typhi Ty2, complete genome.', + description: 'Reimplementation of https://www.pathogenomics.sfu.ca/islandviewer/accession/NC_004631.1/', + assembly: [['NC_004631.1', 4791961]], + arrangement: 'horizontal', + spacing: 0, + views: [ + { + tracks: [ + { + type: "dummy-track", + id: "table", + } + ], + width: 600, + // TODO: automatically align dummy track to other tracks or find a way to get height of titles etc., see issue #980 + height: linearHeight + circularRadius * 2 + 30 + }, + { + arrangement: 'vertical', + views: [ + { + layout: 'circular', + static: true, + alignment: 'overlay', + spacing: 0.1, + tracks: [ + { + data: { + url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_GCcontent.csv', + type: 'csv', + separator: '\t', + genomicFields: ['Position'] + }, + y: {field: 'GCcontent', type: 'quantitative', range: [-250, 0], axis: 'none'}, + mark: 'line', + size: {value: 0.5}, + x: {field: 'Position', type: 'genomic'}, + color: { + value: 'black' + } + }, + { + style: {outlineWidth: 1, outline: 'black'}, + data: { + url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_annotations.csv', + type: 'csv', + genomicFields: ['Gene start'] + }, + dataTransform: [ + { + type: 'displace', + method: 'pile', + boundingBox: { + padding: 3.5, + startField: 'Gene start', + endField: 'Gene start' + }, + newField: 'row' + } + ], + y: {field: 'row', type: 'nominal', flip: true}, + mark: 'point', + x: {field: 'Gene start', type: 'genomic'}, + size: {value: 3}, + color: { + field: 'Type', + type: 'nominal', + domain: ['Victors', 'BLAST', 'RGI', 'PAG'], + range: ['#460B80', '#A684EA', '#FF9CC1', '#FF9CC1'] + } + }, + { + ...islandData, + row: { + field: 'Method', + domain: [ + 'Predicted by at least one method', + 'IslandPath-DIMOB', + 'SIGI-HMM', + 'IslandPick', + 'Islander' + ], + type: 'nominal' + }, + color: { + field: 'Method', + type: 'nominal', + domain: [ + 'Predicted by at least one method', + 'IslandPath-DIMOB', + 'SIGI-HMM', + 'IslandPick', + 'Islander' + ], + range: ['#B22222', '#4169E1', '#FF8C00', '#008001', '#40E0D0'] + }, + mark: 'rect' + }, + { + mark: 'brush', + x: {linkingId: 'detail'} + } + ], + width: circularRadius * 2, + centerRadius: centerRadius + }, + { + layout: 'linear', + xDomain: {chromosome: 'NC_004631.1', interval: [1000000, 1500000]}, + linkingId: 'detail', + alignment: 'overlay', + tracks: [ + { + data: { + url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_genes.csv', + type: 'csv', + chromosomeField: 'Accession', + genomicFields: ['Gene start', 'Gene end'] + }, + id: detailID, + x: {field: 'Gene start', type: 'genomic'}, + xe: {field: 'Gene end', type: 'genomic'}, + y: {value: 5.5 * linearSize}, + size: {value: linearSize}, + mark: 'rect', + dataTransform: [{type: 'filter', field: 'Strand', oneOf: ['1']}], + color: {value: '#E9967A'}, + tooltip: [{field: 'Gene name', type: 'nominal', alt: 'Name'}] + }, + { + data: { + url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_genes.csv', + type: 'csv', + chromosomeField: 'Accession', + genomicFields: ['Gene start', 'Gene end'] + }, + x: {field: 'Gene start', type: 'genomic'}, + xe: {field: 'Gene end', type: 'genomic'}, + y: {value: 4.5 * linearSize}, + size: {value: linearSize}, + mark: 'rect', + dataTransform: [{type: 'filter', field: 'Strand', oneOf: ['-1']}], + color: {value: '#87976E'}, + tooltip: [{field: 'Gene name', type: 'nominal', alt: 'Name'}] + }, + { + ...islandData, + mark: 'rect', + dataTransform: [{type: 'filter', field: 'Method', oneOf: ['IslandPath-DIMOB']}], + y: {value: 0.5 * linearSize}, + size: {value: linearSize}, + color: {value: '#4169E1'} + }, + { + ...islandData, + mark: 'rect', + dataTransform: [{type: 'filter', field: 'Method', oneOf: ['SIGI-HMM']}], + y: {value: 1.5 * linearSize}, + size: {value: linearSize}, + color: {value: '#FF8C00'} + }, + { + ...islandData, + mark: 'rect', + dataTransform: [{type: 'filter', field: 'Method', oneOf: ['IslandPick']}], + y: {value: 2.5 * linearSize}, + size: {value: linearSize}, + color: {value: '#008001'} + }, + { + ...islandData, + mark: 'rect', + dataTransform: [{type: 'filter', field: 'Method', oneOf: ['Islander']}], + y: {value: 3.5 * linearSize}, + size: {value: linearSize}, + color: {value: '#40E0D0'} + }, + { + data: { + url: 'https://s3.amazonaws.com/gosling-lang.org/data/IslandViewer/NC_004631.1_annotations.csv', + type: 'csv', + genomicFields: ['Gene start'] + }, + dataTransform: [ + { + type: 'displace', + method: 'pile', + boundingBox: { + padding: 3.5, + startField: 'Gene start', + endField: 'Gene start' + }, + newField: 'row' + } + ], + row: {field: 'row', type: 'nominal'}, + mark: 'point', + x: {field: 'Gene start', type: 'genomic'}, + size: {value: 3}, + color: { + field: 'Type', + type: 'nominal', + domain: ['Victors', 'BLAST', 'RGI', 'PAG'], + range: ['#460B80', '#A684EA', '#FF9CC1', '#FF9CC1'] + }, + tooltip: [{field: 'Type', type: 'nominal', alt: 'Name'}] + } + ], + width: circularRadius * 2, + height: linearHeight + } + ] + } + + ] +}; +const metaSpec = { + type: 'table', + dataTransform: [ + { + type: "merge", + fields: ["Islands", "Annotations"], + mergeChar: "/", + newField: "Prediction Method", + } + ], + genomicColumns: ['Gene start', 'Gene end'], + metadataColumns: [ + {type: 'genomic', columnName: 'Gene start'}, + {type: 'genomic', columnName: 'Gene end'}, + {type: 'nominal', columnName: 'Prediction Method'}, + {type: 'nominal', columnName: 'Gene name'}, + {type: 'nominal', columnName: 'Accnum'}, + {type: 'nominal', columnName: 'Product'} + ] +} + +export default function IslandViewer() { + return ( + + ); +} diff --git a/demo/index.jsx b/demo/index.jsx index 07325ab..e1d00d7 100644 --- a/demo/index.jsx +++ b/demo/index.jsx @@ -1,5 +1,9 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; +import {HashRouter} from "react-router-dom"; + const root = ReactDOM.createRoot(document.getElementById('root')); -root.render(); \ No newline at end of file +root.render( + +); \ No newline at end of file diff --git a/package.json b/package.json index 2462aa8..b235d59 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,15 @@ "deploy": "touch dist/.nojekyll; gh-pages -d dist -t --git git" }, "dependencies": { - "gosling.js": "^0.9.30", + "gosling.js": "^0.10.3", "higlass": "^1.12.4", "pixi.js": "^6.3.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.11.2", + "react-vega": "^7.6.0", + "vega": "^5.25.0", + "vega-lite": "^5.9.3" }, "devDependencies": { "@types/react": "^18.2.6", diff --git a/src/GoslingComponentWrapper.tsx b/src/GoslingComponentWrapper.tsx new file mode 100644 index 0000000..3ed3b7a --- /dev/null +++ b/src/GoslingComponentWrapper.tsx @@ -0,0 +1,50 @@ +import React, {useEffect, useRef} from 'react'; +import {GoslingComponent, GoslingRef, GoslingSpec} from "gosling.js"; +import type {Datum} from 'gosling.js/dist/src/gosling-schema'; + +interface GoslingComponentWrapperProps { + type: "table" | "tree"; + spec: GoslingSpec; + trackId: string; + placeholderId: string; + setData: (data: Datum[]) => void; + setRange: (range: [{ chromosome: string, position: number }, { + chromosome: string, + position: number + }]) => void; + setMetaDimensions: (shape: { x: number, y: number, width: number, height: number }) => void; +} + + +/** + * Wrapper for gosling component + * @param props + * @returns + */ +export default function GoslingComponentWrapper(props: GoslingComponentWrapperProps) { + const {type, spec, trackId, placeholderId, setData, setRange, setMetaDimensions} = props; + const gosRef = useRef(null) + useEffect(() => { + if (gosRef.current == null) return; + setMetaDimensions(gosRef.current.api.getTrack(placeholderId).shape) + if (type === "table") { + gosRef.current.api.subscribe('rawData', (type, eventData) => { + if (trackId === eventData.id) { + setData(eventData.data); + } + }) + gosRef.current.api.subscribe('location', (type, eventData) => { + if (eventData.id === trackId) { + setRange(eventData.genomicRange); + } + }); + return () => { + gosRef.current?.api.unsubscribe('location'); + gosRef.current?.api.unsubscribe('rawData'); + + }; + } + }, []); + return (
); +} diff --git a/src/GoslingMetaComponent.tsx b/src/GoslingMetaComponent.tsx index 3f26485..c09d91d 100644 --- a/src/GoslingMetaComponent.tsx +++ b/src/GoslingMetaComponent.tsx @@ -1,17 +1,19 @@ -import React, {useRef, useState, useEffect} from 'react'; -import {GoslingComponent, type GoslingRef, type GoslingSpec} from 'gosling.js'; -import MetaTable, {MetaTableSpec} from './MetaTable'; +import React, {useState} from 'react'; +import {type GoslingSpec} from 'gosling.js'; +import {MetaTableSpec} from './MetaTable'; import 'higlass/dist/hglib.css'; import './index.css'; +import {PhyloTreeSpec} from "./PhyloTree"; +import GoslingComponentWrapper from "./GoslingComponentWrapper"; +import type {Datum} from "gosling.js/dist/src/gosling-schema"; +import MetaComponentWrapper from "./MetaComponentWrapper"; -export type MetaSpec = { - width: number; - height?: number; -} & MetaTableSpec +export type MetaSpec = (MetaTableSpec | PhyloTreeSpec) interface ConnectionType { type: 'weak' | 'strong'; trackId: string; + placeholderId: string; } @@ -28,43 +30,32 @@ interface GoslingMetaComponentProps { */ export default function GoslingMetaComponent(props: GoslingMetaComponentProps) { const {goslingSpec, metaSpec, connectionType} = props; - - const gosRef = useRef(null); - const containerRef = useRef(null); - - let gosPos, metaPos; - if (connectionType.type == 'weak') { - gosPos = {left: 100 + metaSpec.width, top: 100}; - metaPos = {left: 100, top: 100}; - } else { - // TODO: get position of track that is used for alignment when connectionType=="strong" (Related to issue #909) - } - - const [metaHeight, setMetaHeight] = useState(metaSpec.height ?? 100); - useEffect(() => { - if (containerRef.current == null) return; - // if the user does not provide a height and the alignmentType is "loose" use the full height of the gosling component - if (!metaSpec.height && connectionType.type === "weak") { - setMetaHeight(containerRef.current.clientHeight) - } - // TODO: get height of spec when connectionType=="strong" (Related to issue #909) - }, [metaSpec.height, connectionType.type, containerRef.current]) - - + const [goslingSpecUpdateable, setGoslingSpec] = useState(structuredClone(goslingSpec)); + const [metaDimensions, setMetaDimensions] = useState({x: 0, y: 0, width: 100, height: 100}) + // range of data relevant for the meta visualization + const [range, setRange] = useState<[{ chromosome: string, position: number }, { + chromosome: string, + position: number + }]>([{chromosome: "", position: 0}, {chromosome: "", position: 0}]) + // data relevant for the meta visualization + const [data, setData] = useState([]) return (
-
- +
+
-
- {metaSpec.type === 'table' ? - : null} +
+
); diff --git a/src/MetaComponentWrapper.tsx b/src/MetaComponentWrapper.tsx new file mode 100644 index 0000000..5192c1a --- /dev/null +++ b/src/MetaComponentWrapper.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import {GoslingSpec} from "gosling.js"; +import type {Datum} from 'gosling.js/dist/src/gosling-schema'; +import MetaTable from "./MetaTable"; +import PhyloTree from "./PhyloTree"; +import {MetaSpec} from "./GoslingMetaComponent"; + +interface MetaComponentWrapperProps { + metaSpec: MetaSpec; + goslingSpec: GoslingSpec; + setGoslingSpec: (object) => void; + linkedTrackId: string; + data: Datum[]; + range: [{ chromosome: string, position: number }, { + chromosome: string, + position: number + }]; + height: number; + width: number; +} + +/** + * Wrapper for gosling component + * @param props + * @returns + */ +export default function MetaComponentWrapper(props: MetaComponentWrapperProps) { + const {metaSpec, goslingSpec, setGoslingSpec, linkedTrackId, data, range, height, width} = props; + let metaView: React.ReactElement | null = null; + switch (metaSpec.type) { + case "table": + metaView = + break; + case "tree": + metaView = + break; + } + return (
{metaView}
); +} diff --git a/src/MetaTable.tsx b/src/MetaTable.tsx index 1ccf061..842b60e 100644 --- a/src/MetaTable.tsx +++ b/src/MetaTable.tsx @@ -1,21 +1,22 @@ -import React, {useCallback, useEffect, useState} from 'react'; +import React, {useCallback, useMemo} from 'react'; import {mergeData, renameColumns} from "./table-data-transform"; -import {DataDeep, Datum} from "gosling.js/dist/src/core/gosling.schema"; -import {GoslingRef} from "gosling.js"; +import type {Datum, DataDeep} from 'gosling.js/dist/src/gosling-schema'; export type MetaTableSpec = { type: "table", // TODO: allow custom data specification for metatable data?: DataDeep; dataTransform: tableDataTransform[]; - genomicColumns: [string,string] | [string]; - columns?: string[]; + genomicColumns: [string] | [string, string]; + metadataColumns: { type: 'genomic' | 'nominal' | 'quantitative', columnName: string, columnFormat: string }[]; } interface MetaTableProps extends Omit { - data?: Datum[]; - gosRef: React.RefObject; - linkedTrack: string; + data: Datum[]; + range: [{ chromosome: string, position: number }, { + chromosome: string, + position: number + }] width: number | string; height: number | string; } @@ -37,70 +38,56 @@ export interface RenameColumnsTransform { newFields: string[]; } - +/** + * Metadata table component + * @param props + * @constructor + */ export default function MetaTable(props: MetaTableProps) { - const { dataTransform, gosRef, linkedTrack, genomicColumns, columns, width, height} = props; - const [dataInRange, setDataInRange] = useState([]); - const [columnNames, setColumnNames]=useState([]) - const transformData = useCallback((data)=>{ - let dataTransformed: Datum[] = Array.from(data); - dataTransform.forEach(transform => { - switch (transform.type) { - case("merge"): - dataTransformed = mergeData(transform, data); - break; - case("rename"): - dataTransformed = renameColumns(transform, data); - break; - } - }) - return(dataTransformed); - },[dataTransform]); - useEffect(() => { - if (gosRef.current == null) return; - // TODO Better: Use a brush event in gosling.js (related issue: #910) - gosRef.current.api.subscribe('rawData', (type, rawdata) => { - if(rawdata.data.length > 0 && rawdata.id === linkedTrack) { - // TODO remove next two lines when rawdata event is adapted (related issues: #909, #894) - // gets the column names after applying transformations - const transformedColumns=Object.keys(transformData([rawdata.data[0]])[0]) - const tableKeys = columns && columns.length > 0 ? columns : transformedColumns; - setColumnNames(tableKeys); - const range = gosRef.current?.hgApi.api.getLocation(linkedTrack).xDomain; - // TODO remove column check when rawdata event is adapted (related issues: #909, #894) - if (tableKeys.every((col) => transformedColumns.includes(col))) { - let dataInRange: Datum[] = []; - // features have start and end - if (genomicColumns.length === 2) { - const start = genomicColumns[0]; - const end = genomicColumns[1]; - dataInRange = rawdata.data.filter( - entry => - (entry[start] > range[0] && entry[start] < range[1]) || - (entry[end] > range[0] && entry[end] < range[1]) - ); - // features have only start (point features) - } else { - const position = genomicColumns[0]; - dataInRange = rawdata.data.filter( - entry => entry[position] > range[0] && entry[position] < range[1] - ); - } - const uniqueInRange = dataInRange.filter( - (v, i, a) => a.findIndex(v2 => v2['Gene name'] === v['Gene name']) === i - ); - setDataInRange(transformData(uniqueInRange)); - } + const {data, range, dataTransform, genomicColumns, metadataColumns, width, height} = props; + const transformData = useCallback((data) => { + let dataTransformed: Datum[] = Array.from(data); + dataTransform.forEach(transform => { + switch (transform.type) { + case("merge"): + dataTransformed = mergeData(transform, data); + break; + case("rename"): + dataTransformed = renameColumns(transform, data); + break; } - }); - return () => { - gosRef.current?.api.unsubscribe('rawData'); - }; - }, []); - + }) + return (dataTransformed); + }, [dataTransform]); + const dataInRange = useMemo(() => { + let inRange: Datum[]; + // features have start and end + if (genomicColumns.length === 2) { + const start = genomicColumns[0]; + const end = genomicColumns[1]; + inRange = data.filter( + entry => + (Number(entry[start]) > range[0].position && Number(entry[start]) < range[1].position) || + (Number(entry[end]) > range[0].position && Number(entry[end]) < range[1].position) + ); + // features have only start (point features) + } else { + const position = genomicColumns[0]; + inRange = data.filter( + entry => Number(entry[position]) > range[0].position && Number(entry[position]) < range[1].position + ); + } + const uniqueInRange = inRange.filter( + (v, i, a) => a.findIndex(v2 => JSON.stringify(v2) === JSON.stringify(v)) === i + ); + return (transformData(uniqueInRange)); + }, [genomicColumns, data, range]) + const columnNames = useMemo(() => { + return metadataColumns.map(d => d.columnName) ?? (dataInRange.length > 0 ? Object.keys(dataInRange[0]) : []); + }, [metadataColumns, dataInRange]) return ( <> - {dataInRange.length === 0 ? null : ( + {dataInRange.length === 0 ? null :
{dataInRange.map(d => ( - + {columnNames.map(key => { return ( @@ -134,7 +121,7 @@ export default function MetaTable(props: MetaTableProps) {
- )} + } ); } diff --git a/src/PhyloTree.tsx b/src/PhyloTree.tsx new file mode 100644 index 0000000..7a45294 --- /dev/null +++ b/src/PhyloTree.tsx @@ -0,0 +1,183 @@ +import React, {useCallback, useState, useMemo, useEffect} from 'react'; +import type { + DataDeep, + Datum, + PartialTrack, + Track, + View +} from 'gosling.js/dist/src/gosling-schema'; +import {GoslingSpec} from "gosling.js"; +import {Vega} from "react-vega"; + + +export type PhyloTreeSpec = { + type: "tree", + data: DataDeep; +} + +interface PhyloTreeProps { + data?: Datum[]; + gosSpec: GoslingSpec; + setGoslingSpec: (object) => void; + linkedTrackId: string; + width: number; + height: number; +} + + +export default function PhyloTree(props: PhyloTreeProps) { + const {gosSpec, setGoslingSpec, linkedTrackId, width, height} = props; + const [maxDist, setMaxDist] = useState(1); + const [trackOrder, setTrackOrder] = useState([]) + const [containerWidth, setContainerWidth] = useState(width); + // the width of the tree needs to be recalculated since the width of the tree leaves can vary + const localWidth = useMemo(() => { + if (containerWidth > width && containerWidth < 2 * width) { + return width - (containerWidth - width); + } else { + return width; + } + }, [width, containerWidth]) + const traverseTracks = useCallback(( + spec: GoslingSpec | View | PartialTrack, + callback: (t: Partial, i: number, ts: Partial[]) => void) => { + if ('tracks' in spec) { + spec.tracks.forEach((t, i, ts) => { + traverseTracks(t, callback); + }); + } else if ('views' in spec) { + spec.views.forEach((t, i, ts) => { + callback(t, i, ts); + traverseTracks(t, callback); + }); + } + }, []) + + useEffect(() => { + if (trackOrder.length > 0) { + const spec = structuredClone(gosSpec); + traverseTracks(spec, (viewSpec: GoslingSpec | View | PartialTrack, i: number, parentTracks: Partial[]) => { + if (viewSpec.id === linkedTrackId) { + parentTracks[i] = {...viewSpec, row: {...viewSpec.row, domain: trackOrder}}; + setGoslingSpec(spec) + } + }); + } + }, [trackOrder]) + + const vegaSpec = useMemo(() => { + return ({ + $schema: 'https://vega.github.io/schema/vega/v5.json', + description: 'An example of Cartesian layouts for a node-link diagram of hierarchical data.', + width: localWidth, + height: height, + padding: 0, + data: [ + { + name: 'tree', + url: 'https://s3.amazonaws.com/gosling-lang.org/data/GeneSpy/gene_spy_tree.json', + transform: [ + { + type: 'stratify', + key: 'id', + parentKey: 'parent' + }, + { + type: 'tree', + method: 'cluster', + field: {field: 'distance'}, + sort: {field: 'value', order: 'ascending'}, + size: [{signal: 'height'}, {signal: 'width'}], + separation: false, + as: ['y', 'x', 'depth', 'children'] + }, + { + type: 'formula', + expr: 'width * (datum.distance/' + maxDist + ')', + as: 'x' + } + ] + }, + { + name: 'leaves', + source: 'tree', + transform: [ + { + type: 'filter', + expr: '!datum.children' + } + ] + }, + { + name: 'links', + source: 'tree', + transform: [ + {type: 'treelinks'}, + { + type: 'linkpath', + orient: 'horizontal', + shape: 'orthogonal' + } + ] + } + ], + marks: [ + { + type: 'path', + from: {data: 'links'}, + encode: { + update: { + path: {field: 'path'}, + stroke: {value: '#000'} + } + } + }, + { + type: 'rule', + from: {data: 'leaves'}, + encode: { + update: { + x: {field: 'x'}, + y: {field: 'y'}, + x2: {value: localWidth}, + y2: {field: 'y'}, + stroke: {value: '#eee'}, + } + } + }, + { + type: 'text', + from: {data: 'leaves'}, + encode: { + enter: { + text: {field: 'name'}, + fontSize: {value: 9}, + baseline: {value: 'middle'} + }, + update: { + x: {value: localWidth}, + y: {field: 'y'}, + dx: {signal: 'datum.children ? -7 : 7'}, + align: 'right' + } + } + } + ] + }) + }, [maxDist, height, width, localWidth]) + const onNewView = useCallback(view => { + const leaves = view.data('leaves').slice(); + const renderedWidth = view.container().getBoundingClientRect().width; + if (width < renderedWidth) { + setContainerWidth(renderedWidth); + } + leaves.sort((a, b) => a.x - b.x); + setTrackOrder(leaves.map(leaf => leaf.id)) + setMaxDist(Math.max(...leaves.map(d => d.distance))) + }, [width]) + + + return ( + + ); +} diff --git a/src/table-data-transform.ts b/src/table-data-transform.ts index 6bcf2dc..57a5e39 100644 --- a/src/table-data-transform.ts +++ b/src/table-data-transform.ts @@ -1,8 +1,7 @@ -import type * as d3 from 'd3'; import type { MergeColumnsTransform, RenameColumnsTransform } from './MetaTable'; -import {Datum} from "gosling.js/dist/src/core/gosling.schema"; +import type {Datum} from 'gosling.js/dist/src/gosling-schema'; /** diff --git a/yarn.lock b/yarn.lock index 88a7d05..f012b2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -400,6 +400,13 @@ long "^5.1.0" pako "^1.0.11" +"@gmod/gff@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@gmod/gff/-/gff-1.3.0.tgz#d231a6f807cfb8f191c26c6410021c17155e4093" + integrity sha512-OjEnQLR6iIcrau603blFfUkmnWGDVfOu/LQoJNa7TsvKnjWlHYPlvqb5h2IV7wI+zElDY648mQ9zrElt2uR80A== + dependencies: + stream-browserify "^3.0.0" + "@gmod/tabix@^1.5.6": version "1.5.10" resolved "https://registry.yarnpkg.com/@gmod/tabix/-/tabix-1.5.10.tgz#d4ada7789686f1e229897b9a53049af9592bbc75" @@ -693,10 +700,10 @@ eventemitter3 "^3.1.0" url "^0.11.0" -"@types/bezier-js@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@types/bezier-js/-/bezier-js-4.1.0.tgz#e1b023cc0a6e53492d0249a0711a3e73d1dfc8fe" - integrity sha512-ElU16s8E6Pr6magp8ihwH1O8pbUJASbMND/qgUc9RsLmP3lMLHiDMRXdjtaObwW5GPtOVYOsXDUIhTIluT+yaw== +"@remix-run/router@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.6.3.tgz#8205baf6e17ef93be35bf62c37d2d594e9be0dad" + integrity sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q== "@types/chai-subset@^1.3.3": version "1.3.3" @@ -710,225 +717,25 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== -"@types/d3-array@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.0.4.tgz#44eebe40be57476cad6a0cd6a85b0f57d54185a2" - integrity sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ== - -"@types/d3-axis@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-3.0.2.tgz#96e11d51256baf5bdb2fa73a17d302993e79df07" - integrity sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA== - dependencies: - "@types/d3-selection" "*" - -"@types/d3-brush@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-3.0.2.tgz#a610aad5a1e76c375be63e11c5eee1ed9fd2fb40" - integrity sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA== - dependencies: - "@types/d3-selection" "*" - -"@types/d3-chord@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-3.0.2.tgz#cf6f05ad2d8faaad524e9e6f454b4fd06b200930" - integrity sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw== - -"@types/d3-color@*": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.0.tgz#6594da178ded6c7c3842f3cc0ac84b156f12f2d4" - integrity sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA== - -"@types/d3-contour@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-3.0.2.tgz#d8a0e4d12ec14f7d2bb6e59f3fbc1a527457d0b2" - integrity sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ== - dependencies: - "@types/d3-array" "*" - "@types/geojson" "*" - -"@types/d3-delaunay@*": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz#006b7bd838baec1511270cb900bf4fc377bbbf41" - integrity sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ== - -"@types/d3-dispatch@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz#b2fa80bab3bcead68680766e966f59cd6cb9a69f" - integrity sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg== - -"@types/d3-drag@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.2.tgz#5562da3e7b33d782c2c1f9e65c5e91bb01ee82cf" - integrity sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw== - dependencies: - "@types/d3-selection" "*" - -"@types/d3-dsv@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-3.0.1.tgz#c51a3505cee42653454b74a00f8713dc3548c362" - integrity sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw== - -"@types/d3-ease@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.0.tgz#c29926f8b596f9dadaeca062a32a45365681eae0" - integrity sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA== - -"@types/d3-fetch@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-3.0.2.tgz#fe1f335243e07c9bd520c9a71756fed8330c54b1" - integrity sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA== - dependencies: - "@types/d3-dsv" "*" - -"@types/d3-force@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-3.0.4.tgz#2d50bd2b695f709797e1745644f6bc123e6e5f5a" - integrity sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw== - -"@types/d3-format@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.1.tgz#194f1317a499edd7e58766f96735bdc0216bb89d" - integrity sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg== - -"@types/d3-geo@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-3.0.3.tgz#535e5f24be13722964c52354301be09b752f5d6e" - integrity sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw== - dependencies: - "@types/geojson" "*" - -"@types/d3-hierarchy@*": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b3a446b5437faededb30ac32b7cc0486559ab1e2" - integrity sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A== - -"@types/d3-interpolate@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz#e7d17fa4a5830ad56fe22ce3b4fac8541a9572dc" - integrity sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw== - dependencies: - "@types/d3-color" "*" - -"@types/d3-path@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.0.0.tgz#939e3a784ae4f80b1fde8098b91af1776ff1312b" - integrity sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg== - -"@types/d3-polygon@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-3.0.0.tgz#5200a3fa793d7736fa104285fa19b0dbc2424b93" - integrity sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw== - -"@types/d3-quadtree@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz#433112a178eb7df123aab2ce11c67f51cafe8ff5" - integrity sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw== - -"@types/d3-random@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-3.0.1.tgz#5c8d42b36cd4c80b92e5626a252f994ca6bfc953" - integrity sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ== - -"@types/d3-scale-chromatic@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#103124777e8cdec85b20b51fd3397c682ee1e954" - integrity sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw== - -"@types/d3-scale@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.3.tgz#7a5780e934e52b6f63ad9c24b105e33dd58102b5" - integrity sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ== - dependencies: - "@types/d3-time" "*" - -"@types/d3-selection@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.5.tgz#27cd53b7672d405025e2414d98532d7934c16ebd" - integrity sha512-xCB0z3Hi8eFIqyja3vW8iV01+OHGYR2di/+e+AiOcXIOrY82lcvWW8Ke1DYE/EUVMsBl4Db9RppSBS3X1U6J0w== - -"@types/d3-shape@*": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.1.tgz#15cc497751dac31192d7aef4e67a8d2c62354b95" - integrity sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A== - dependencies: - "@types/d3-path" "*" - -"@types/d3-time-format@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.0.tgz#ee7b6e798f8deb2d9640675f8811d0253aaa1946" - integrity sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw== - -"@types/d3-time@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.0.tgz#e1ac0f3e9e195135361fa1a1d62f795d87e6e819" - integrity sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg== - -"@types/d3-timer@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.0.tgz#e2505f1c21ec08bda8915238e397fb71d2fc54ce" - integrity sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g== - -"@types/d3-transition@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-3.0.3.tgz#d4ac37d08703fb039c87f92851a598ba77400402" - integrity sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA== - dependencies: - "@types/d3-selection" "*" - -"@types/d3-zoom@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.2.tgz#067aa6a6ecbc75a78b753cc6f7a7f9f7e4e7d117" - integrity sha512-t09DDJVBI6AkM7N8kuPsnq/3d/ehtRKBN1xSiYjjMCgbiw6HM6Ged5VhvswmhprfKyGvzeTEL/4WBaK9llWvlA== - dependencies: - "@types/d3-interpolate" "*" - "@types/d3-selection" "*" - -"@types/d3@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.4.0.tgz#fc5cac5b1756fc592a3cf1f3dc881bf08225f515" - integrity sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA== - dependencies: - "@types/d3-array" "*" - "@types/d3-axis" "*" - "@types/d3-brush" "*" - "@types/d3-chord" "*" - "@types/d3-color" "*" - "@types/d3-contour" "*" - "@types/d3-delaunay" "*" - "@types/d3-dispatch" "*" - "@types/d3-drag" "*" - "@types/d3-dsv" "*" - "@types/d3-ease" "*" - "@types/d3-fetch" "*" - "@types/d3-force" "*" - "@types/d3-format" "*" - "@types/d3-geo" "*" - "@types/d3-hierarchy" "*" - "@types/d3-interpolate" "*" - "@types/d3-path" "*" - "@types/d3-polygon" "*" - "@types/d3-quadtree" "*" - "@types/d3-random" "*" - "@types/d3-scale" "*" - "@types/d3-scale-chromatic" "*" - "@types/d3-selection" "*" - "@types/d3-shape" "*" - "@types/d3-time" "*" - "@types/d3-time-format" "*" - "@types/d3-timer" "*" - "@types/d3-transition" "*" - "@types/d3-zoom" "*" +"@types/clone@~2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/clone/-/clone-2.1.1.tgz#9b880d0ce9b1f209b5e0bd6d9caa38209db34024" + integrity sha512-BZIU34bSYye0j/BFcPraiDZ5ka6MJADjcDVELGf7glr9K+iE8NYVjFslJFVWzskSxkLLyCrSPScE82/UUoBSvg== "@types/earcut@^2.1.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@types/earcut/-/earcut-2.1.1.tgz#573a0af609f17005c751f6f4ffec49cfe358ea51" integrity sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ== -"@types/geojson@*": - version "7946.0.10" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" - integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== +"@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/geojson@7946.0.4": + version "7946.0.4" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.4.tgz#4e049756383c3f055dd8f3d24e63fb543e98eb07" + integrity sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q== "@types/json-schema@^7.0.9": version "7.0.11" @@ -940,21 +747,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash@^4.14.151": - version "4.14.194" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" - integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== - "@types/node@*": version "20.1.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.7.tgz#ce10c802f7731909d0a44ac9888e8b3a9125eb62" integrity sha512-WCuw/o4GSwDGMoonES8rcvwsig77dGCMbZDrZr2x4ZZiNW4P/gcoZXe/0twgtobcTkmg9TuKflxYL/DuwDyJzg== -"@types/node@^18.6.2": - version "18.16.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.12.tgz#f11e19055c5b3daeb79dc6eb7ccdd3d036313034" - integrity sha512-tIRrjbY9C277MOfP8M3zjMIhtMlUJ6YVqkGgLjz+74jVsdf4/UjC6Hku4+1N0BS0qyC0JAS6tJLUk9H6JUKviQ== - "@types/offscreencanvas@^2019.6.4": version "2019.7.0" resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" @@ -970,11 +767,6 @@ resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.0.tgz#2b72cbd55405e071f1c4d29992638e022b20acc2" integrity sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw== -"@types/rbush@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/rbush/-/rbush-3.0.0.tgz#b6887d99b159e87ae23cd14eceff34f139842aa6" - integrity sha512-W3ue/GYWXBOpkRm0VSoifrP3HV0Ni47aVJWvXyWMcbtpBy/l/K/smBRiJ+fI8f7shXRjZBiux+iJzYbh7VmcZg== - "@types/react-dom@^18.2.4": version "18.2.4" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.4.tgz#13f25bfbf4e404d26f62ac6e406591451acba9e0" @@ -1001,11 +793,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== -"@types/uuid@^8.3.1": - version "8.3.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" - integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== - "@typescript-eslint/eslint-plugin@^5.43.0": version "5.59.6" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.6.tgz#a350faef1baa1e961698240f922d8de1761a9e2b" @@ -1100,45 +887,45 @@ "@babel/plugin-transform-react-jsx-source" "^7.19.6" react-refresh "^0.14.0" -"@vitest/expect@0.31.1": - version "0.31.1" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.31.1.tgz#db8cb5a14a91167b948f377b9d29442229c73747" - integrity sha512-BV1LyNvhnX+eNYzJxlHIGPWZpwJFZaCcOIzp2CNG0P+bbetenTupk6EO0LANm4QFt0TTit+yqx7Rxd1qxi/SQA== +"@vitest/expect@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.31.4.tgz#115c517404488bf3cb6ce4ac411c40d8e86891b8" + integrity sha512-tibyx8o7GUyGHZGyPgzwiaPaLDQ9MMuCOrc03BYT0nryUuhLbL7NV2r/q98iv5STlwMgaKuFJkgBW/8iPKwlSg== dependencies: - "@vitest/spy" "0.31.1" - "@vitest/utils" "0.31.1" + "@vitest/spy" "0.31.4" + "@vitest/utils" "0.31.4" chai "^4.3.7" -"@vitest/runner@0.31.1": - version "0.31.1" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.31.1.tgz#fc06260d4824dde624abaeea1825d6a75bad4583" - integrity sha512-imWuc82ngOtxdCUpXwtEzZIuc1KMr+VlQ3Ondph45VhWoQWit5yvG/fFcldbnCi8DUuFi+NmNx5ehMUw/cGLUw== +"@vitest/runner@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.31.4.tgz#e99abee89132a500d9726a53b58dfc9160db1078" + integrity sha512-Wgm6UER+gwq6zkyrm5/wbpXGF+g+UBB78asJlFkIOwyse0pz8lZoiC6SW5i4gPnls/zUcPLWS7Zog0LVepXnpg== dependencies: - "@vitest/utils" "0.31.1" + "@vitest/utils" "0.31.4" concordance "^5.0.4" p-limit "^4.0.0" pathe "^1.1.0" -"@vitest/snapshot@0.31.1": - version "0.31.1" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.31.1.tgz#7fc3f1e48f0c4313e6cb795c17a2c1aa909a7d64" - integrity sha512-L3w5uU9bMe6asrNzJ8WZzN+jUTX4KSgCinEJPXyny0o90fG4FPQMV0OWsq7vrCWfQlAilMjDnOF9nP8lidsJ+g== +"@vitest/snapshot@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.31.4.tgz#59a42046fec4950a1ac70cf0ec64aada3b995559" + integrity sha512-LemvNumL3NdWSmfVAMpXILGyaXPkZbG5tyl6+RQSdcHnTj6hvA49UAI8jzez9oQyE/FWLKRSNqTGzsHuk89LRA== dependencies: magic-string "^0.30.0" pathe "^1.1.0" pretty-format "^27.5.1" -"@vitest/spy@0.31.1": - version "0.31.1" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.31.1.tgz#1c3b6a3eec4ce81b8889e19c7fac6a603b600b14" - integrity sha512-1cTpt2m9mdo3hRLDyCG2hDQvRrePTDgEJBFQQNz1ydHHZy03EiA6EpFxY+7ODaY7vMRCie+WlFZBZ0/dQWyssQ== +"@vitest/spy@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.31.4.tgz#fce8e348cea32deff79996d116c67893b19cc47d" + integrity sha512-3ei5ZH1s3aqbEyftPAzSuunGICRuhE+IXOmpURFdkm5ybUADk+viyQfejNk6q8M5QGX8/EVKw+QWMEP3DTJDag== dependencies: tinyspy "^2.1.0" -"@vitest/utils@0.31.1": - version "0.31.1" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.31.1.tgz#b810a458b37ef16931ab0d384ce79a9500f34e07" - integrity sha512-yFyRD5ilwojsZfo3E0BnH72pSVSuLg2356cN1tCEe/0RtDzxTPYwOomIC+eQbot7m6DRy4tPZw+09mB7NkbMmA== +"@vitest/utils@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.31.4.tgz#5cfdcecfd604a7dbe3972cfe0f2b1e0af1246ad2" + integrity sha512-DobZbHacWznoGUfYU8XDPY78UubJxXfMNY1+SUdOp1NsI34eopSA6aZMeaGu10waSOeYwE8lxrd/pLfT0RMxjQ== dependencies: concordance "^5.0.4" loupe "^2.3.6" @@ -1205,7 +992,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1479,6 +1266,20 @@ classnames@2.x, classnames@^2.2.5, classnames@^2.3.0: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + clsx@^1.1.1, clsx@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" @@ -1513,6 +1314,11 @@ commander@2, commander@^2.18.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@7: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1580,6 +1386,13 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +"d3-array@1 - 3", "d3-array@2.5.0 - 3", d3-array@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== + dependencies: + internmap "1 - 2" + d3-array@2, d3-array@^2.3.0, d3-array@^2.5.0, d3-array@^2.5.1, d3-array@^2.7.1: version "2.12.1" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" @@ -1594,6 +1407,13 @@ d3-array@2, d3-array@^2.3.0, d3-array@^2.5.0, d3-array@^2.5.1, d3-array@^2.7.1: dependencies: internmap "1 - 2" +d3-array@3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.2.tgz#f8ac4705c5b06914a7e0025bbf8d5f1513f6a86e" + integrity sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ== + dependencies: + internmap "1 - 2" + d3-axis@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-2.1.0.tgz#978db534092711117d032fad5d733d206307f6a0" @@ -1625,6 +1445,13 @@ d3-collection@1: resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== +d3-delaunay@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" + d3-dispatch@1: version "1.0.6" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" @@ -1674,6 +1501,15 @@ d3-dsv@^2.0.0: iconv-lite "0.4" rw "1" +d3-dsv@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== + dependencies: + commander "7" + iconv-lite "0.6" + rw "1" + "d3-ease@1 - 2": version "2.0.0" resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-2.0.0.tgz#fd1762bfca00dae4bacea504b1d628ff290ac563" @@ -1684,16 +1520,41 @@ d3-dsv@^2.0.0: resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== +d3-force@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== + dependencies: + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" + "d3-format@1 - 2", d3-format@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== -"d3-format@1 - 3": +"d3-format@1 - 3", d3-format@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== +d3-geo-projection@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz#dc229e5ead78d31869a4e87cf1f45bd2716c48ca" + integrity sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg== + dependencies: + commander "7" + d3-array "1 - 3" + d3-geo "1.12.0 - 3" + +"d3-geo@1.12.0 - 3", d3-geo@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" + integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA== + dependencies: + d3-array "2.5.0 - 3" + d3-geo@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-2.0.2.tgz#c065c1b71fe8c5f1be657e5f43d9bdd010383c40" @@ -1701,6 +1562,11 @@ d3-geo@^2.0.1: dependencies: d3-array "^2.5.0" +d3-hierarchy@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + "d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2": version "2.0.1" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" @@ -1708,7 +1574,7 @@ d3-geo@^2.0.1: dependencies: d3-color "1 - 2" -"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3": +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== @@ -1720,6 +1586,16 @@ d3-geo@^2.0.1: resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-2.0.0.tgz#55d86ac131a0548adae241eebfb56b4582dd09d8" integrity sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA== +d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +"d3-quadtree@1 - 3": + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + d3-queue@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618" @@ -1782,6 +1658,13 @@ d3-shape@^2.0.0: dependencies: d3-path "1 - 2" +d3-shape@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + "d3-time-format@2 - 3": version "3.0.0" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6" @@ -1789,7 +1672,7 @@ d3-shape@^2.0.0: dependencies: d3-time "1 - 2" -"d3-time-format@2 - 4": +"d3-time-format@2 - 4", d3-time-format@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== @@ -1803,7 +1686,7 @@ d3-shape@^2.0.0: dependencies: d3-array "2" -"d3-time@1 - 3", "d3-time@2.1.1 - 3": +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== @@ -1815,7 +1698,7 @@ d3-shape@^2.0.0: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-2.0.0.tgz#055edb1d170cfe31ab2da8968deee940b56623e6" integrity sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA== -"d3-timer@1 - 3": +"d3-timer@1 - 3", d3-timer@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== @@ -1894,6 +1777,13 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delaunator@5: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" + integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw== + dependencies: + robust-predicates "^3.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1950,6 +1840,11 @@ emitter-component@^1.1.1: resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.1.tgz#065e2dbed6959bf470679edabeaf7981d1003ab6" integrity sha512-G+mpdiAySMuB7kesVRLuyvYRqDmshB7ReKEVuyBPkzQlmiDiLrt7hHHIy4Aff552bgknVN7B2/d3lzhGO5dvpQ== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.21.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" @@ -2322,7 +2217,12 @@ eventemitter3@^5.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -2343,7 +2243,12 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-patch@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" + integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2499,6 +2404,11 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" @@ -2610,27 +2520,17 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -gosling-theme@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/gosling-theme/-/gosling-theme-0.0.10.tgz#5a4c2d0d24f90fe47c293335cd67832be6cf4d54" - integrity sha512-GRm+XGeSGhKBjM/bNyeUkwp6tjnFKpNbywr58WzzA2qSA4RFPOoitS03R7xpYxqLXBGMFgahkyYd9Mostd2Csw== - -gosling.js@^0.9.30: - version "0.9.30" - resolved "https://registry.yarnpkg.com/gosling.js/-/gosling.js-0.9.30.tgz#e82f8f9b82d4d45129d610a08f11d6ac5d6a714c" - integrity sha512-2cPenhQC3WeoVVqXFq3vUtEEnIbMj5xXBBGNxw6NvLGgOOZzeNXUE42xwbYNwid9GrQyJNmZUQCcWzJ/YikmvA== +gosling.js@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/gosling.js/-/gosling.js-0.13.2.tgz#4146580280839a716e898a6701a5854eb022c54f" + integrity sha512-ObLH+Fe26JRQjgyDXfENg4/9U/+uoj86h7CkNFfntBJpKakpnVMgmxc0318cSVndh//24iC3q0gEdRvdJhjCYg== dependencies: "@gmod/bam" "^1.1.18" "@gmod/bbi" "^3.0.1" "@gmod/bed" "^2.1.2" + "@gmod/gff" "^1.3.0" "@gmod/tabix" "^1.5.6" "@gmod/vcf" "^5.0.10" - "@types/bezier-js" "^4.1.0" - "@types/d3" "^7.0.0" - "@types/lodash" "^4.14.151" - "@types/node" "^18.6.2" - "@types/rbush" "^3.0.0" - "@types/uuid" "^8.3.1" allotment "^1.19.0" bezier-js "4.0.3" buffer "^6.0.3" @@ -2638,26 +2538,26 @@ gosling.js@^0.9.30: d3-array "^2.5.1" d3-color "^2.0.0" d3-dsv "^2.0.0" + d3-format "^3.1.0" d3-scale "^3.2.1" d3-scale-chromatic "^2.0.0" d3-shape "^2.0.0" + events "^3.3.0" fflate "^0.7.1" generic-filehandle "^3.0.1" - gosling-theme "^0.0.10" - higlass "^1.12.3" + higlass "^1.13.3" higlass-register "^0.3.0" higlass-text "^0.1.1" json-stringify-pretty-compact "^2.0.0" jspdf "^2.3.1" lodash-es "^4.17.21" - mixwith "^0.1.1" + monaco-editor "^0.27.0" nanoevents "^7.0.1" pubsub-js "^1.9.3" quick-lru "^6.1.1" rbush "^3.0.1" - react-grid-layout "^1.2.5" + stream-browserify "^3.0.0" threads "^1.6.4" - uuid "^8.3.2" graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" @@ -2730,7 +2630,7 @@ higlass-text@^0.1.1: higlass-register "^0.3.0" slugid "^2.0.0" -higlass@^1.12.3, higlass@^1.12.4: +higlass@^1.12.4: version "1.12.4" resolved "https://registry.yarnpkg.com/higlass/-/higlass-1.12.4.tgz#e494908a2316055ba31f01dfba4205da930eaf33" integrity sha512-MfjB6RHjTAqWxi5PjoyetnIigdzjcnTBzOdCSaU5ek6G3ewytuXBLD6KIOKUGBRT2D8cfb4Cz/TP6ZzSDBd3kw== @@ -2775,6 +2675,48 @@ higlass@^1.12.3, higlass@^1.12.4: url-parse "^1.4.3" vkbeautify "^0.99.3" +higlass@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/higlass/-/higlass-1.13.3.tgz#8bf01bce70f64fa333cb589433c2bca808542334" + integrity sha512-aZ+Q+ClF1TTeV81ChuGSd5CHiVJf8+1c6w6/sXGAOonkGVQ54yuZpSYafMatKAjytM6/fwSaHs3uQT2xUEE2MA== + dependencies: + ajv "^6.10.0" + box-intersect "^1.0.1" + buffer "^6.0.3" + clsx "^1.2.1" + css-element-queries "^1.2.3" + d3-array "^2.7.1" + d3-axis "^2.0.0" + d3-brush "^2.1.0" + d3-color "^2.0.0" + d3-drag "^2.0.0" + d3-dsv "^2.0.0" + d3-format "^2.0.0" + d3-geo "^2.0.1" + d3-queue "^3.0.7" + d3-request "^1.0.6" + d3-scale "^4.0.2" + d3-selection "^2.0.0" + d3-transition "^3.0.1" + d3-zoom "^3.0.0" + dom-scroll-into-view "^1.2.1" + genbank-parser "^1.0.0" + ndarray "^1.0.18" + pako "^1.0.10" + prismjs "^1.16.0" + prop-types "^15.6.0" + pub-sub-es "^2.0.1" + react-checkbox-tree "^1.7.3" + react-color "^2.13.8" + react-grid-layout "^0.16.6" + react-simple-code-editor "^0.9.10" + react-sortable-hoc "^1.10.1" + reactcss "^1.2.3" + robust-point-in-polygon "^1.0.3" + slugid "^3.2.0" + url-parse "^1.4.3" + vkbeautify "^0.99.3" + html2canvas@^1.0.0-rc.5: version "1.4.1" resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" @@ -2790,6 +2732,13 @@ iconv-lite@0.4: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.6: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -2821,7 +2770,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2910,6 +2859,11 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -3038,6 +2992,11 @@ json-stringify-pretty-compact@^2.0.0: resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885" integrity sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ== +json-stringify-pretty-compact@^3.0.0, json-stringify-pretty-compact@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz#f71ef9d82ef16483a407869556588e91b681d9ab" + integrity sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA== + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -3231,11 +3190,6 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mixwith@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/mixwith/-/mixwith-0.1.1.tgz#c8995918c5b61fbfda9ad377a857cd47750541c0" - integrity sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A== - mlly@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.2.1.tgz#cd50151f5712b651c5c379085157bcdff661133b" @@ -3246,6 +3200,11 @@ mlly@^1.2.0: pkg-types "^1.0.3" ufo "^1.1.2" +monaco-editor@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.27.0.tgz#4b69108bb1dc1f60174c5dcdf51bc5306ab5ba26" + integrity sha512-UhwP78Wb8w0ZSYoKXQNTV/0CHObp6NS3nCt51QfKE6sKyBo5PBsvuDOHoI2ooBakc6uIwByRLHVeT7+yXQe2fQ== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -3284,7 +3243,7 @@ ndarray@^1.0.18: iota-array "^1.0.0" is-buffer "^1.0.2" -node-fetch@^2.6.11: +node-fetch@^2.6.11, node-fetch@^2.6.7: version "2.6.11" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== @@ -3737,7 +3696,7 @@ react-draggable@3.x: classnames "^2.2.5" prop-types "^15.6.0" -react-draggable@^4.0.0, react-draggable@^4.0.3: +react-draggable@^4.0.3: version "4.4.5" resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.5.tgz#9e37fe7ce1a4cf843030f521a0a4cc41886d7e7c" integrity sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g== @@ -3756,17 +3715,6 @@ react-grid-layout@^0.16.6: react-draggable "3.x" react-resizable "1.x" -react-grid-layout@^1.2.5: - version "1.3.4" - resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-1.3.4.tgz#4fa819be24a1ba9268aa11b82d63afc4762a32ff" - integrity sha512-sB3rNhorW77HUdOjB4JkelZTdJGQKuXLl3gNg+BI8gJkTScspL1myfZzW/EM0dLEn+1eH+xW+wNqk0oIM9o7cw== - dependencies: - clsx "^1.1.1" - lodash.isequal "^4.0.0" - prop-types "^15.8.1" - react-draggable "^4.0.0" - react-resizable "^3.0.4" - react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -3790,13 +3738,20 @@ react-resizable@1.x, react-resizable@^1.8.0: prop-types "15.x" react-draggable "^4.0.3" -react-resizable@^3.0.4: - version "3.0.5" - resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" - integrity sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w== +react-router-dom@^6.11.2: + version "6.12.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.12.0.tgz#372279caaaa1ffb0204926c83e93a139b112d861" + integrity sha512-UzLwZ3ZVaDr6YV0HdjwxuwtDKgwpJx9o1ea9fU0HV4tTvzdB8WPHzlLFMo5orchpIS84e8G4Erlhu7Rl84XDFQ== dependencies: - prop-types "15.x" - react-draggable "^4.0.3" + "@remix-run/router" "1.6.3" + react-router "6.12.0" + +react-router@6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.12.0.tgz#1afae9219c24c8611809469d7a386c8023ade39a" + integrity sha512-/tCGtLq9umxRvbYeIx3j94CmpQfue0E3qnetVm9luKhu58cR4t+3O4ZrQXBdXfJrBATOAj+wF/1ihJJQI8AoTw== + dependencies: + "@remix-run/router" "1.6.3" react-simple-code-editor@^0.9.10: version "0.9.15" @@ -3812,6 +3767,16 @@ react-sortable-hoc@^1.10.1: invariant "^2.2.4" prop-types "^15.5.7" +react-vega@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/react-vega/-/react-vega-7.6.0.tgz#b791c944046b20e02d366c7d0f8dcc21bdb4a6bb" + integrity sha512-2oMML4wH9qWLnZPRxJm06ozwrVN/K+nkjqdI5/ofWWsrBnnH4iB9rRKrsV8px0nlWgZrwfdCH4g5RUiyyJHWSA== + dependencies: + "@types/react" "*" + fast-deep-equal "^3.1.1" + prop-types "^15.8.1" + vega-embed "^6.5.1" + react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -3826,6 +3791,15 @@ reactcss@^1.2.0, reactcss@^1.2.3: dependencies: lodash "^4.0.1" +readable-stream@^3.5.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" @@ -3845,6 +3819,11 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -3907,6 +3886,11 @@ robust-point-in-polygon@^1.0.3: dependencies: robust-orientation "^1.0.2" +robust-predicates@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== + robust-scale@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/robust-scale/-/robust-scale-1.0.2.tgz#775132ed09542d028e58b2cc79c06290bcf78c32" @@ -3951,6 +3935,11 @@ rxjs@^7.8.0: dependencies: tslib "^2.1.0" +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex-test@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" @@ -3960,7 +3949,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3984,6 +3973,13 @@ semver@^7.0.0, semver@^7.3.2, semver@^7.3.7, semver@^7.3.8: dependencies: lru-cache "^6.0.0" +semver@~7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4023,7 +4019,7 @@ slugid@^2.0.0: uuid "^3.2.1" uuid-parse "^1.0.0" -slugid@^3.1.0: +slugid@^3.1.0, slugid@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/slugid/-/slugid-3.2.0.tgz#3731f4debe46b319f6fbbefda58de30316af957d" integrity sha512-f0vZb6VyjUdZG5kaxd9CNpfhy+eUUTC8RnbDolC3ZLjYa7n5AdPkQnqnIjmoZYoPS9dWMOXQdoBREAGQqdZb9A== @@ -4050,6 +4046,14 @@ std-env@^3.3.2: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + stream@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stream/-/stream-0.0.2.tgz#7f5363f057f6592c5595f00bc80a27f5cec1f0ef" @@ -4057,6 +4061,15 @@ stream@0.0.2: dependencies: emitter-component "^1.1.1" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" @@ -4098,7 +4111,14 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -strip-ansi@^6.0.1: +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -4221,6 +4241,13 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +topojson-client@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4253,6 +4280,11 @@ tslib@^2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.5.0, tslib@~2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -4367,6 +4399,11 @@ use-resize-observer@^9.0.0: dependencies: "@juggle/resize-observer" "^3.3.1" +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + utrie@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" @@ -4389,10 +4426,378 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -vite-node@0.31.1: - version "0.31.1" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.31.1.tgz#9fea18cbf9552ab262b969068249a8b8e7fb8b38" - integrity sha512-BajE/IsNQ6JyizPzu9zRgHrBwczkAs0erQf/JRpgTIESpKvNj9/Gd0vxX905klLkb0I0SJVCKbdrl5c6FnqYKA== +vega-canvas@^1.2.6, vega-canvas@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.7.tgz#cf62169518f5dcd91d24ad352998c2248f8974fb" + integrity sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q== + +vega-crossfilter@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/vega-crossfilter/-/vega-crossfilter-4.1.1.tgz#3ff3ca0574883706f7a399dc6d60f4a0f065ece4" + integrity sha512-yesvlMcwRwxrtAd9IYjuxWJJuAMI0sl7JvAFfYtuDkkGDtqfLXUcCzHIATqW6igVIE7tWwGxnbfvQLhLNgK44Q== + dependencies: + d3-array "^3.2.2" + vega-dataflow "^5.7.5" + vega-util "^1.17.1" + +vega-dataflow@^5.7.3, vega-dataflow@^5.7.5, vega-dataflow@~5.7.5: + version "5.7.5" + resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-5.7.5.tgz#0d559f3c3a968831f2995e099a2e270993ddfed9" + integrity sha512-EdsIl6gouH67+8B0f22Owr2tKDiMPNNR8lEvJDcxmFw02nXd8juimclpLvjPQriqn6ta+3Dn5txqfD117H04YA== + dependencies: + vega-format "^1.1.1" + vega-loader "^4.5.1" + vega-util "^1.17.1" + +vega-embed@^6.5.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/vega-embed/-/vega-embed-6.22.1.tgz#102a1c80b00c2dffd85d3492b4216686f94b0484" + integrity sha512-5a3SVhPwG5/Mz3JbcJV4WE38s/7AFrkANtPxoln7E8fbNLIbrurIennaAxB9+l0QOAg63lPSuJBNMUkM6yXvLA== + dependencies: + fast-json-patch "^3.1.1" + json-stringify-pretty-compact "^3.0.0" + semver "~7.4.0" + tslib "^2.5.0" + vega-interpreter "^1.0.5" + vega-schema-url-parser "^2.2.0" + vega-themes "^2.13.0" + vega-tooltip "^0.32.0" + +vega-encode@~4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/vega-encode/-/vega-encode-4.9.2.tgz#2426215fba8e6899cdcdda1800b8df662de4ca1c" + integrity sha512-c3J0LYkgYeXQxwnYkEzL15cCFBYPRaYUon8O2SZ6O4PhH4dfFTXBzSyT8+gh8AhBd572l2yGDfxpEYA6pOqdjg== + dependencies: + d3-array "^3.2.2" + d3-interpolate "^3.0.1" + vega-dataflow "^5.7.5" + vega-scale "^7.3.0" + vega-util "^1.17.1" + +vega-event-selector@^3.0.1, vega-event-selector@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vega-event-selector/-/vega-event-selector-3.0.1.tgz#b99e92147b338158f8079d81b28b2e7199c2e259" + integrity sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A== + +vega-expression@^5.0.1, vega-expression@^5.1.0, vega-expression@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-5.1.0.tgz#4ec0e66b56a2faba88361eb717011303bbb1ff61" + integrity sha512-u8Rzja/cn2PEUkhQN3zUj3REwNewTA92ExrcASNKUJPCciMkHJEjESwFYuI6DWMCq4hQElQ92iosOAtwzsSTqA== + dependencies: + "@types/estree" "^1.0.0" + vega-util "^1.17.1" + +vega-force@~4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/vega-force/-/vega-force-4.2.0.tgz#5374d0dbac674c92620a9801e12b650b0966336a" + integrity sha512-aE2TlP264HXM1r3fl58AvZdKUWBNOGkIvn4EWyqeJdgO2vz46zSU7x7TzPG4ZLuo44cDRU5Ng3I1eQk23Asz6A== + dependencies: + d3-force "^3.0.0" + vega-dataflow "^5.7.5" + vega-util "^1.17.1" + +vega-format@^1.1.1, vega-format@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vega-format/-/vega-format-1.1.1.tgz#92e4876e18064e7ad54f39045f7b24dede0030b8" + integrity sha512-Rll7YgpYbsgaAa54AmtEWrxaJqgOh5fXlvM2wewO4trb9vwM53KBv4Q/uBWCLK3LLGeBXIF6gjDt2LFuJAUtkQ== + dependencies: + d3-array "^3.2.2" + d3-format "^3.1.0" + d3-time-format "^4.1.0" + vega-time "^2.1.1" + vega-util "^1.17.1" + +vega-functions@^5.13.1, vega-functions@~5.13.2: + version "5.13.2" + resolved "https://registry.yarnpkg.com/vega-functions/-/vega-functions-5.13.2.tgz#928348b7867955be3fb6a2b116fd15b6a24992ad" + integrity sha512-YE1Xl3Qi28kw3vdXVYgKFMo20ttd3+SdKth1jUNtBDGGdrOpvPxxFhZkVqX+7FhJ5/1UkDoAYs/cZY0nRKiYgA== + dependencies: + d3-array "^3.2.2" + d3-color "^3.1.0" + d3-geo "^3.1.0" + vega-dataflow "^5.7.5" + vega-expression "^5.1.0" + vega-scale "^7.3.0" + vega-scenegraph "^4.10.2" + vega-selections "^5.4.1" + vega-statistics "^1.8.1" + vega-time "^2.1.1" + vega-util "^1.17.1" + +vega-geo@~4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/vega-geo/-/vega-geo-4.4.1.tgz#3850232bf28c98fab5e26c5fb401acb6fb37b5e5" + integrity sha512-s4WeZAL5M3ZUV27/eqSD3v0FyJz3PlP31XNSLFy4AJXHxHUeXT3qLiDHoVQnW5Om+uBCPDtTT1ROx1smGIf2aA== + dependencies: + d3-array "^3.2.2" + d3-color "^3.1.0" + d3-geo "^3.1.0" + vega-canvas "^1.2.7" + vega-dataflow "^5.7.5" + vega-projection "^1.6.0" + vega-statistics "^1.8.1" + vega-util "^1.17.1" + +vega-hierarchy@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/vega-hierarchy/-/vega-hierarchy-4.1.1.tgz#897974a477dfa70cc0d4efab9465b6cc79a9071f" + integrity sha512-h5mbrDtPKHBBQ9TYbvEb/bCqmGTlUX97+4CENkyH21tJs7naza319B15KRK0NWOHuhbGhFmF8T0696tg+2c8XQ== + dependencies: + d3-hierarchy "^3.1.2" + vega-dataflow "^5.7.5" + vega-util "^1.17.1" + +vega-interpreter@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/vega-interpreter/-/vega-interpreter-1.0.5.tgz#19e1d1b5f84a4ea9cb25c4e90a05ce16cd058484" + integrity sha512-po6oTOmeQqr1tzTCdD15tYxAQLeUnOVirAysgVEemzl+vfmvcEP7jQmlc51jz0jMA+WsbmE6oJywisQPu/H0Bg== + +vega-label@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/vega-label/-/vega-label-1.2.1.tgz#ea45fa5a407991c44edfea9c4ca40874d544a3db" + integrity sha512-n/ackJ5lc0Xs9PInCaGumYn2awomPjJ87EMVT47xNgk2bHmJoZV1Ve/1PUM6Eh/KauY211wPMrNp/9Im+7Ripg== + dependencies: + vega-canvas "^1.2.6" + vega-dataflow "^5.7.3" + vega-scenegraph "^4.9.2" + vega-util "^1.15.2" + +vega-lite@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.9.3.tgz#0c6d93345cef7c1ee995d8cc5615b05846f1aed8" + integrity sha512-S1B81aOkMC/iDU2skeS7ROaIaJuxvGx1PW1LO9ECe2dsrfsaDHk20SGsEhPSKZAgSxOghJ0+AuYdU0glRNjN1Q== + dependencies: + "@types/clone" "~2.1.1" + clone "~2.1.2" + fast-deep-equal "~3.1.3" + fast-json-stable-stringify "~2.1.0" + json-stringify-pretty-compact "~3.0.0" + tslib "~2.5.0" + vega-event-selector "~3.0.1" + vega-expression "~5.1.0" + vega-util "~1.17.2" + yargs "~17.7.2" + +vega-loader@^4.5.1, vega-loader@~4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-4.5.1.tgz#b85262b3cb8376487db0c014a8a13c3a5e6d52ad" + integrity sha512-qy5x32SaT0YkEujQM2yKqvLGV9XWQ2aEDSugBFTdYzu/1u4bxdUSRDREOlrJ9Km3RWIOgFiCkobPmFxo47SKuA== + dependencies: + d3-dsv "^3.0.1" + node-fetch "^2.6.7" + topojson-client "^3.1.0" + vega-format "^1.1.1" + vega-util "^1.17.1" + +vega-parser@~6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/vega-parser/-/vega-parser-6.2.0.tgz#c982aff0a6409486cbbe743a5799412b8b897654" + integrity sha512-as+QnX8Qxe9q51L1C2sVBd+YYYctP848+zEvkBT2jlI2g30aZ6Uv7sKsq7QTL6DUbhXQKR0XQtzlanckSFdaOQ== + dependencies: + vega-dataflow "^5.7.5" + vega-event-selector "^3.0.1" + vega-functions "^5.13.1" + vega-scale "^7.3.0" + vega-util "^1.17.1" + +vega-projection@^1.6.0, vega-projection@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/vega-projection/-/vega-projection-1.6.0.tgz#921acd3220e7d9d04ccd5ce0109433afb3236966" + integrity sha512-LGUaO/kpOEYuTlul+x+lBzyuL9qmMwP1yShdUWYLW+zXoeyGbs5OZW+NbPPwLYqJr5lpXDr/vGztFuA/6g2xvQ== + dependencies: + d3-geo "^3.1.0" + d3-geo-projection "^4.0.0" + vega-scale "^7.3.0" + +vega-regression@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/vega-regression/-/vega-regression-1.2.0.tgz#12e9df88cf49994ac1a1799f64fb9c118a77a5e0" + integrity sha512-6TZoPlhV/280VbxACjRKqlE0Nv48z5g4CSNf1FmGGTWS1rQtElPTranSoVW4d7ET5eVQ6f9QLxNAiALptvEq+g== + dependencies: + d3-array "^3.2.2" + vega-dataflow "^5.7.3" + vega-statistics "^1.9.0" + vega-util "^1.15.2" + +vega-runtime@^6.1.4, vega-runtime@~6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/vega-runtime/-/vega-runtime-6.1.4.tgz#98b67160cea9554e690bfd44719f9d17f90c4220" + integrity sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ== + dependencies: + vega-dataflow "^5.7.5" + vega-util "^1.17.1" + +vega-scale@^7.3.0, vega-scale@~7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/vega-scale/-/vega-scale-7.3.0.tgz#02b83435a892c6d91a87ee7d3d350fac987f464b" + integrity sha512-pMOAI2h+e1z7lsqKG+gMfR6NKN2sTcyjZbdJwntooW0uFHwjLGjMSY7kSd3nSEquF0HQ8qF7zR6gs1eRwlGimw== + dependencies: + d3-array "^3.2.2" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" + vega-time "^2.1.1" + vega-util "^1.17.1" + +vega-scenegraph@^4.10.2, vega-scenegraph@^4.9.2, vega-scenegraph@~4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/vega-scenegraph/-/vega-scenegraph-4.10.2.tgz#3ae9ad8e99bbf75e2a4f3ebf2c1f9dee7562d245" + integrity sha512-R8m6voDZO5+etwNMcXf45afVM3XAtokMqxuDyddRl9l1YqSJfS+3u8hpolJ50c2q6ZN20BQiJwKT1o0bB7vKkA== + dependencies: + d3-path "^3.1.0" + d3-shape "^3.2.0" + vega-canvas "^1.2.7" + vega-loader "^4.5.1" + vega-scale "^7.3.0" + vega-util "^1.17.1" + +vega-schema-url-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vega-schema-url-parser/-/vega-schema-url-parser-2.2.0.tgz#a0d1e02915adfbfcb1fd517c8c2ebe2419985c1e" + integrity sha512-yAtdBnfYOhECv9YC70H2gEiqfIbVkq09aaE4y/9V/ovEFmH9gPKaEgzIZqgT7PSPQjKhsNkb6jk6XvSoboxOBw== + +vega-selections@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/vega-selections/-/vega-selections-5.4.1.tgz#3233acb920703bfc323df8b960aa52e55ac08c70" + integrity sha512-EtYc4DvA+wXqBg9tq+kDomSoVUPCmQfS7hUxy2qskXEed79YTimt3Hcl1e1fW226I4AVDBEqTTKebmKMzbSgAA== + dependencies: + d3-array "3.2.2" + vega-expression "^5.0.1" + vega-util "^1.17.1" + +vega-statistics@^1.8.1, vega-statistics@^1.9.0, vega-statistics@~1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.9.0.tgz#7d6139cea496b22d60decfa6abd73346f70206f9" + integrity sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ== + dependencies: + d3-array "^3.2.2" + +vega-themes@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/vega-themes/-/vega-themes-2.13.0.tgz#be1a4e2eeec948d9ac4459e530473c1abe371c26" + integrity sha512-SVr/YDqGhkVDO2bRS62TeGyr1dVuXaNLJNCu42b1tbcnnmX2m9cyaq8G6gcputPeibArvHT1MsTF7MUzboOIWg== + +vega-time@^2.1.1, vega-time@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/vega-time/-/vega-time-2.1.1.tgz#0f1fb4e220dd5ed57401b58fb2293241f049ada0" + integrity sha512-z1qbgyX0Af2kQSGFbApwBbX2meenGvsoX8Nga8uyWN8VIbiySo/xqizz1KrP6NbB6R+x5egKmkjdnyNThPeEWA== + dependencies: + d3-array "^3.2.2" + d3-time "^3.1.0" + vega-util "^1.17.1" + +vega-tooltip@^0.32.0: + version "0.32.0" + resolved "https://registry.yarnpkg.com/vega-tooltip/-/vega-tooltip-0.32.0.tgz#730f3408a1bded4237a881047f81c4971987c0f5" + integrity sha512-Sc4/vZsXDM9nOiHrxc8hfpc9lYc7Nr0FIYYkIi90v2d6IoE6thm6T4Exo2m7cMK4rwevwf6c4/FABwjOMIs4MQ== + dependencies: + vega-util "^1.17.1" + +vega-transforms@~4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-4.10.2.tgz#3a5ff3e92d8b0ee86868aed88e57b847b459d64e" + integrity sha512-sJELfEuYQ238PRG+GOqQch8D69RYnJevYSGLsRGQD2LxNz3j+GlUX6Pid+gUEH5HJy22Q5L0vsTl2ZNhIr4teQ== + dependencies: + d3-array "^3.2.2" + vega-dataflow "^5.7.5" + vega-statistics "^1.8.1" + vega-time "^2.1.1" + vega-util "^1.17.1" + +vega-typings@~0.24.0: + version "0.24.1" + resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.24.1.tgz#7e1e87557a9bf09e934687197c5e964bd9b416ca" + integrity sha512-WNw6tDxwMsynQ9osJb3RZi3g8GZruxVgXfe8N7nbqvNOgDQkUuVjqTZiwGg5kqjmLqx09lRRlskgp/ov7lEGeg== + dependencies: + "@types/geojson" "7946.0.4" + vega-event-selector "^3.0.1" + vega-expression "^5.0.1" + vega-util "^1.17.1" + +vega-util@^1.15.2, vega-util@^1.17.1, vega-util@~1.17.2: + version "1.17.2" + resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.17.2.tgz#f69aa09fd5d6110c19c4a0f0af9e35945b99987d" + integrity sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw== + +vega-view-transforms@~4.5.9: + version "4.5.9" + resolved "https://registry.yarnpkg.com/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz#5f109555c08ee9ac23ff9183d578eb9cbac6fe61" + integrity sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g== + dependencies: + vega-dataflow "^5.7.5" + vega-scenegraph "^4.10.2" + vega-util "^1.17.1" + +vega-view@~5.11.1: + version "5.11.1" + resolved "https://registry.yarnpkg.com/vega-view/-/vega-view-5.11.1.tgz#a703d7d6344489c6a6e9e9d9c7a732519bf4432c" + integrity sha512-RoWxuoEMI7xVQJhPqNeLEHCezudsf3QkVMhH5tCovBqwBADQGqq9iWyax3ZzdyX1+P3eBgm7cnLvpqtN2hU8kA== + dependencies: + d3-array "^3.2.2" + d3-timer "^3.0.1" + vega-dataflow "^5.7.5" + vega-format "^1.1.1" + vega-functions "^5.13.1" + vega-runtime "^6.1.4" + vega-scenegraph "^4.10.2" + vega-util "^1.17.1" + +vega-voronoi@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vega-voronoi/-/vega-voronoi-4.2.1.tgz#521a22d3d4c545fe1d5eea19eac0fd3ac5e58b1b" + integrity sha512-zzi+fxU/SBad4irdLLsG3yhZgXWZezraGYVQfZFWe8kl7W/EHUk+Eqk/eetn4bDeJ6ltQskX+UXH3OP5Vh0Q0Q== + dependencies: + d3-delaunay "^6.0.2" + vega-dataflow "^5.7.5" + vega-util "^1.17.1" + +vega-wordcloud@~4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/vega-wordcloud/-/vega-wordcloud-4.1.4.tgz#38584cf47ef52325d6a8dc38908b5d2378cc6e62" + integrity sha512-oeZLlnjiusLAU5vhk0IIdT5QEiJE0x6cYoGNq1th+EbwgQp153t4r026fcib9oq15glHFOzf81a8hHXHSJm1Jw== + dependencies: + vega-canvas "^1.2.7" + vega-dataflow "^5.7.5" + vega-scale "^7.3.0" + vega-statistics "^1.8.1" + vega-util "^1.17.1" + +vega@^5.25.0: + version "5.25.0" + resolved "https://registry.yarnpkg.com/vega/-/vega-5.25.0.tgz#086a799dfcd6958b6ca8eb41c92673ea591db323" + integrity sha512-lr+uj0mhYlSN3JOKbMNp1RzZBenWp9DxJ7kR3lha58AFNCzzds7pmFa7yXPbtbaGhB7Buh/t6n+Bzk3Y0VnF5g== + dependencies: + vega-crossfilter "~4.1.1" + vega-dataflow "~5.7.5" + vega-encode "~4.9.2" + vega-event-selector "~3.0.1" + vega-expression "~5.1.0" + vega-force "~4.2.0" + vega-format "~1.1.1" + vega-functions "~5.13.2" + vega-geo "~4.4.1" + vega-hierarchy "~4.1.1" + vega-label "~1.2.1" + vega-loader "~4.5.1" + vega-parser "~6.2.0" + vega-projection "~1.6.0" + vega-regression "~1.2.0" + vega-runtime "~6.1.4" + vega-scale "~7.3.0" + vega-scenegraph "~4.10.2" + vega-statistics "~1.9.0" + vega-time "~2.1.1" + vega-transforms "~4.10.2" + vega-typings "~0.24.0" + vega-util "~1.17.2" + vega-view "~5.11.1" + vega-view-transforms "~4.5.9" + vega-voronoi "~4.2.1" + vega-wordcloud "~4.1.4" + +vite-node@0.31.4: + version "0.31.4" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.31.4.tgz#0437f76c35fa83f0a868d3fb5896ca9e164291f5" + integrity sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ== dependencies: cac "^6.7.14" debug "^4.3.4" @@ -4412,19 +4817,19 @@ vite-node@0.31.1: optionalDependencies: fsevents "~2.3.2" -vitest@^0.31.1: - version "0.31.1" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.31.1.tgz#e3d1b68a44e76e24f142c1156fe9772ef603e52c" - integrity sha512-/dOoOgzoFk/5pTvg1E65WVaobknWREN15+HF+0ucudo3dDG/vCZoXTQrjIfEaWvQXmqScwkRodrTbM/ScMpRcQ== +vitest@^0.31.2: + version "0.31.4" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.31.4.tgz#5abe02562675262949c10e40811f348a80f6b2a6" + integrity sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ== dependencies: "@types/chai" "^4.3.5" "@types/chai-subset" "^1.3.3" "@types/node" "*" - "@vitest/expect" "0.31.1" - "@vitest/runner" "0.31.1" - "@vitest/snapshot" "0.31.1" - "@vitest/spy" "0.31.1" - "@vitest/utils" "0.31.1" + "@vitest/expect" "0.31.4" + "@vitest/runner" "0.31.4" + "@vitest/snapshot" "0.31.4" + "@vitest/spy" "0.31.4" + "@vitest/utils" "0.31.4" acorn "^8.8.2" acorn-walk "^8.2.0" cac "^6.7.14" @@ -4440,7 +4845,7 @@ vitest@^0.31.1: tinybench "^2.5.0" tinypool "^0.5.0" vite "^3.0.0 || ^4.0.0" - vite-node "0.31.1" + vite-node "0.31.4" why-is-node-running "^2.2.2" vkbeautify@^0.99.3: @@ -4509,6 +4914,15 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -4519,6 +4933,11 @@ xmlhttprequest@1: resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -4529,6 +4948,24 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@~17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"