diff --git a/packages/core/assemblyManager/assemblyManager.ts b/packages/core/assemblyManager/assemblyManager.ts index 0534f9072b..11a04830a0 100644 --- a/packages/core/assemblyManager/assemblyManager.ts +++ b/packages/core/assemblyManager/assemblyManager.ts @@ -1,13 +1,14 @@ import { addDisposer, - cast, getParent, types, Instance, IAnyType, } from 'mobx-state-tree' -import { when } from '../util' import { reaction } from 'mobx' + +// locals +import { when } from '../util' import { readConfObject, AnyConfigurationModel } from '../configuration' import assemblyFactory, { Assembly } from './assembly' import PluginManager from '../PluginManager' @@ -164,20 +165,17 @@ function assemblyManagerFactory(conf: IAnyType, pm: PluginManager) { reaction( () => self.assemblyList, assemblyConfs => { - self.assemblies.forEach(asm => { + for (const asm of self.assemblies) { if (!asm.configuration) { this.removeAssembly(asm) } - }) - assemblyConfs.forEach(conf => { - if ( - !self.assemblies.some( - a => a.name === readConfObject(conf, 'name'), - ) - ) { + } + for (const conf of assemblyConfs) { + const name = readConfObject(conf, 'name') + if (!self.assemblies.some(a => a.name === name)) { this.addAssembly(conf) } - }) + } }, { fireImmediately: true, name: 'assemblyManagerAfterAttach' }, ), @@ -207,16 +205,6 @@ function assemblyManagerFactory(conf: IAnyType, pm: PluginManager) { addAssembly(configuration: Conf) { self.assemblies.push({ configuration }) }, - - /** - * #action - * private: you would generally want to add to manipulate - * jbrowse.assemblies, session.sessionAssemblies, or - * session.temporaryAssemblies instead of using this directly - */ - replaceAssembly(idx: number, configuration: Conf) { - self.assemblies[idx] = cast({ configuration }) - }, })) } diff --git a/plugins/breakpoint-split-view/src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx b/plugins/breakpoint-split-view/src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx index 6a836a061f..16707c3fb5 100644 --- a/plugins/breakpoint-split-view/src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx +++ b/plugins/breakpoint-split-view/src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx @@ -87,15 +87,16 @@ export async function renderToSvg(model: BSV, opts: ExportSvgOptions) { - + + + @@ -105,15 +106,16 @@ export async function renderToSvg(model: BSV, opts: ExportSvgOptions) { - + + + diff --git a/plugins/comparative-adapters/src/MCScanAnchorsAdapter/MCScanAnchorsAdapter.ts b/plugins/comparative-adapters/src/MCScanAnchorsAdapter/MCScanAnchorsAdapter.ts index f6da0a47fa..197dcf3640 100644 --- a/plugins/comparative-adapters/src/MCScanAnchorsAdapter/MCScanAnchorsAdapter.ts +++ b/plugins/comparative-adapters/src/MCScanAnchorsAdapter/MCScanAnchorsAdapter.ts @@ -73,14 +73,31 @@ export default class MCScanAnchorsAdapter extends BaseFeatureDataAdapter { } async hasDataForRefName() { - // determining this properly is basically a call to getFeatures - // so is not really that important, and has to be true or else - // getFeatures is never called (BaseFeatureDataAdapter filters it out) + // determining this properly is basically a call to getFeatures so is not + // really that important, and has to be true or else getFeatures is never + // called (BaseFeatureDataAdapter filters it out) return true } - async getRefNames() { - // we cannot determine this accurately + getAssemblyNames() { + const assemblyNames = this.getConf('assemblyNames') as string[] + return assemblyNames + } + + async getRefNames(opts: BaseOptions = {}) { + // @ts-expect-error + const r1 = opts.regions?.[0].assemblyName + const { feats } = await this.setup(opts) + + const idx = this.getAssemblyNames().indexOf(r1) + if (idx !== -1) { + const set = new Set() + for (const feat of feats) { + set.add(idx === 0 ? feat[0].refName : feat[1].refName) + } + return [...set] + } + console.warn('Unable to do ref renaming on adapter') return [] } diff --git a/plugins/comparative-adapters/src/MCScanSimpleAnchorsAdapter/MCScanSimpleAnchorsAdapter.ts b/plugins/comparative-adapters/src/MCScanSimpleAnchorsAdapter/MCScanSimpleAnchorsAdapter.ts index 00903fb828..0e3d884557 100644 --- a/plugins/comparative-adapters/src/MCScanSimpleAnchorsAdapter/MCScanSimpleAnchorsAdapter.ts +++ b/plugins/comparative-adapters/src/MCScanSimpleAnchorsAdapter/MCScanSimpleAnchorsAdapter.ts @@ -93,8 +93,31 @@ export default class MCScanAnchorsAdapter extends BaseFeatureDataAdapter { return true } - async getRefNames() { - // we cannot determine this accurately + getAssemblyNames() { + const assemblyNames = this.getConf('assemblyNames') as string[] + return assemblyNames + } + + async getRefNames(opts: BaseOptions = {}) { + // @ts-expect-error + const r1 = opts.regions?.[0].assemblyName + const { feats } = await this.setup(opts) + + const idx = this.getAssemblyNames().indexOf(r1) + if (idx !== -1) { + const set = new Set() + for (const feat of feats) { + if (idx === 0) { + set.add(feat[0].refName) + set.add(feat[1].refName) + } else { + set.add(feat[2].refName) + set.add(feat[3].refName) + } + } + return [...set] + } + console.warn('Unable to do ref renaming on adapter') return [] } diff --git a/plugins/config/src/index.ts b/plugins/config/src/index.ts index 0a1fa9909e..4da311a0c8 100644 --- a/plugins/config/src/index.ts +++ b/plugins/config/src/index.ts @@ -23,6 +23,4 @@ export default class ConfigurationPlugin extends Plugin { } } -export { default as JsonEditor } from './ConfigurationEditorWidget/components/JsonEditor' - export { LazyConfigurationEditorComponent as ConfigurationEditor } diff --git a/plugins/linear-comparative-view/src/LinearComparativeDisplay/stateModelFactory.ts b/plugins/linear-comparative-view/src/LinearComparativeDisplay/stateModelFactory.ts index 040b774122..3023c9bb75 100644 --- a/plugins/linear-comparative-view/src/LinearComparativeDisplay/stateModelFactory.ts +++ b/plugins/linear-comparative-view/src/LinearComparativeDisplay/stateModelFactory.ts @@ -3,7 +3,7 @@ import { ConfigurationReference, AnyConfigurationSchemaType, } from '@jbrowse/core/configuration' -import { types, getSnapshot, Instance } from 'mobx-state-tree' +import { types, getSnapshot, Instance, getParent } from 'mobx-state-tree' import { dedupe, Feature, @@ -34,10 +34,6 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) { * #property */ configuration: ConfigurationReference(configSchema), - /** - * #property - */ - height: 100, }), ) .volatile((/* self */) => ({ @@ -165,20 +161,22 @@ function renderBlockData(self: LinearComparativeDisplay) { const { rpcManager } = getSession(self) const display = self - // Alternative to readConfObject(config) is below used because renderProps is - // something under our control. Compare to serverSideRenderedBlock + // Alternative to readConfObject(config) is below used because + // renderProps is something under our control. Compare to + // serverSideRenderedBlock readConfObject(self.configuration) const { adapterConfig } = self const parent = getContainingView(self) as LinearComparativeViewModel const sessionId = getRpcSessionId(self) getSnapshot(parent) - return parent.initialized ? { rpcManager, renderProps: { ...display.renderProps(), + // @ts-expect-error + level: getParent(self, 4).level as number, view: parent, adapterConfig, sessionId, @@ -195,11 +193,10 @@ async function renderBlockEffect(props: ReturnType) { } const { rpcManager, renderProps } = props - const { adapterConfig } = renderProps - const view0 = renderProps.view.views[0] - + const { adapterConfig, level } = renderProps + const view = renderProps.view.views[level] const features = (await rpcManager.call('getFeats', 'CoreGetFeatures', { - regions: view0.staticBlocks.contentBlocks, + regions: view.staticBlocks.contentBlocks, sessionId: 'getFeats', adapterConfig, })) as Feature[] diff --git a/plugins/linear-comparative-view/src/LinearComparativeView/components/Header.tsx b/plugins/linear-comparative-view/src/LinearComparativeView/components/Header.tsx index e26fbbdecd..ac753e815b 100644 --- a/plugins/linear-comparative-view/src/LinearComparativeView/components/Header.tsx +++ b/plugins/linear-comparative-view/src/LinearComparativeView/components/Header.tsx @@ -1,9 +1,9 @@ import React, { useState } from 'react' -import { IconButton, Typography } from '@mui/material' +import { Typography } from '@mui/material' import { makeStyles } from 'tss-react/mui' import { SearchBox } from '@jbrowse/plugin-linear-genome-view' import { observer } from 'mobx-react' -import { Menu } from '@jbrowse/core/ui' +import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton' // icons import MoreVertIcon from '@mui/icons-material/MoreVert' @@ -11,9 +11,6 @@ import MoreVertIcon from '@mui/icons-material/MoreVert' // locals import { LinearComparativeViewModel } from '../model' import { TrackSelector as TrackSelectorIcon } from '@jbrowse/core/ui/Icons' -import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton' - -type LCV = LinearComparativeViewModel const useStyles = makeStyles()(() => ({ headerBar: { @@ -39,7 +36,11 @@ const useStyles = makeStyles()(() => ({ }, })) -const TrackSelector = observer(({ model }: { model: LCV }) => { +const TrackSelector = observer(function ({ + model, +}: { + model: LinearComparativeViewModel +}) { return ( { ) }) -const Header = observer(function ({ model }: { model: LCV }) { +const Header = observer(function ({ + model, +}: { + model: LinearComparativeViewModel +}) { const { classes } = useStyles() - const [menuAnchorEl, setMenuAnchorEl] = useState() - const anyShowHeaders = model.views.some(view => !view.hideHeader) + const { views } = model + const [showSearchBoxes, setShowSearchBoxes] = useState(false) return (
- - { - setMenuAnchorEl(event.currentTarget) - }} + { + setShowSearchBoxes(!showSearchBoxes) + }, + type: 'checkbox', + }, + ]} > - - {!anyShowHeaders - ? model.views.map(view => ( + + + {showSearchBoxes ? ( +
+ {views.map(view => (
-
- - {Math.round(view.coarseTotalBp).toLocaleString('en-US')} bp - -
+ + {view.assemblyNames.join(',')}{' '} + {Math.round(view.coarseTotalBp).toLocaleString('en-US')} bp +
- )) - : null} + ))} +
+ ) : null}
- - {menuAnchorEl ? ( - { - callback() - setMenuAnchorEl(undefined) - }} - menuItems={model.headerMenuItems()} - onClose={() => { - setMenuAnchorEl(undefined) - }} - /> - ) : null}
) }) diff --git a/plugins/linear-comparative-view/src/LinearComparativeView/components/LinearComparativeRenderArea.tsx b/plugins/linear-comparative-view/src/LinearComparativeView/components/LinearComparativeRenderArea.tsx new file mode 100644 index 0000000000..3d7444fdf4 --- /dev/null +++ b/plugins/linear-comparative-view/src/LinearComparativeView/components/LinearComparativeRenderArea.tsx @@ -0,0 +1,92 @@ +import React from 'react' +import { makeStyles } from 'tss-react/mui' +import { observer } from 'mobx-react' +import { getEnv } from '@jbrowse/core/util' +import { ResizeHandle } from '@jbrowse/core/ui' + +// locals +import { LinearComparativeViewModel } from '../model' +import { getConf } from '@jbrowse/core/configuration' +import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view' + +const useStyles = makeStyles()({ + container: { + display: 'grid', + }, + overlay: { + zIndex: 100, + gridArea: '1/1', + }, + resizeHandle: { + height: 4, + background: '#ccc', + }, +}) + +function View({ view }: { view: LinearGenomeViewModel }) { + const { pluginManager } = getEnv(view) + const { ReactComponent } = pluginManager.getViewType(view.type)! + return +} + +const LinearComparativeRenderArea = observer(function ({ + model, +}: { + model: LinearComparativeViewModel +}) { + const { classes } = useStyles() + const { views, levels } = model + const RenderList = [ + , + ] as React.ReactNode[] + for (let i = 1; i < views.length; i++) { + const view = views[i]! + const level = levels[i - 1]! + RenderList.push( + +
+ +
+ level.setHeight(level.height + n)} + className={classes.resizeHandle} + /> + +
, + ) + } + return
{RenderList}
+}) + +const Overlays = observer(function ({ + model, + level, +}: { + model: LinearComparativeViewModel + level: number +}) { + const { classes } = useStyles() + return ( + <> + {model.levels[level]?.tracks.map(track => { + const [display] = track.displays + const { RenderingComponent } = display + const trackId = getConf(track, 'trackId') + return RenderingComponent ? ( +
+ +
+ ) : null + })} + + ) +}) + +export default LinearComparativeRenderArea diff --git a/plugins/linear-comparative-view/src/LinearComparativeView/components/LinearComparativeView.tsx b/plugins/linear-comparative-view/src/LinearComparativeView/components/LinearComparativeView.tsx index 048576c12b..0ba322ee09 100644 --- a/plugins/linear-comparative-view/src/LinearComparativeView/components/LinearComparativeView.tsx +++ b/plugins/linear-comparative-view/src/LinearComparativeView/components/LinearComparativeView.tsx @@ -1,34 +1,14 @@ import React from 'react' import { makeStyles } from 'tss-react/mui' import { observer } from 'mobx-react' -import { getConf, AnyConfigurationModel } from '@jbrowse/core/configuration' -import { getEnv } from '@jbrowse/core/util' -import { ResizeHandle } from '@jbrowse/core/ui' // locals import { LinearComparativeViewModel } from '../model' import Rubberband from './Rubberband' import Header from './Header' +import LinearComparativeRenderArea from './LinearComparativeRenderArea' const useStyles = makeStyles()(theme => ({ - container: { - display: 'grid', - }, - overlay: { - zIndex: 100, - gridArea: '1/1', - }, - content: { - gridArea: '1/1', - position: 'relative', - }, - grid: { - display: 'grid', - }, - relative: { - position: 'relative', - }, - // this helps keep the vertical guide inside the parent view container, // similar style exists in the single LGV's trackscontainer rubberbandContainer: { @@ -46,39 +26,12 @@ const useStyles = makeStyles()(theme => ({ }, })) -type LCV = LinearComparativeViewModel - -const Overlays = observer(({ model }: { model: LCV }) => { - const { classes } = useStyles() - return ( - <> - {model.tracks.map(track => { - const [display] = track.displays - const { RenderingComponent } = display - const trackId = getConf(track, 'trackId') - return RenderingComponent ? ( -
- -
- ) : null - })} - - ) -}) - -// The comparative is in the middle of the views -const MiddleComparativeView = observer(({ model }: { model: LCV }) => { +const LinearComparativeView = observer(function ({ + model, +}: { + model: LinearComparativeViewModel +}) { const { classes } = useStyles() - const { views } = model - const { pluginManager } = getEnv(model) - const { ReactComponent } = pluginManager.getViewType(views[0]!.type)! return (
@@ -87,68 +40,9 @@ const MiddleComparativeView = observer(({ model }: { model: LCV }) => { model={model} ControlComponent={
} /> -
- -
- -
- - model.setMiddleComparativeHeight(model.middleComparativeHeight + n) - } - style={{ - height: 4, - background: '#ccc', - }} - /> - -
+
) }) -const OverlayComparativeView = observer(({ model }: { model: LCV }) => { - const { classes } = useStyles() - const { views } = model - const { pluginManager } = getEnv(model) - return ( -
-
- } - /> - -
-
-
- {views.map(view => { - const { ReactComponent } = pluginManager.getViewType(view.type)! - return - })} -
- -
-
-
- ) -}) - -const LinearComparativeView = observer(function (props: { - ExtraButtons?: React.ReactNode - model: LCV -}) { - const { model } = props - - const middle = model.tracks.some(({ displays }) => - displays.some((d: { configuration: AnyConfigurationModel }) => - getConf(d, 'middle'), - ), - ) - return middle ? ( - - ) : ( - - ) -}) export default LinearComparativeView diff --git a/plugins/linear-comparative-view/src/LinearComparativeView/model.ts b/plugins/linear-comparative-view/src/LinearComparativeView/model.ts index edc9b796ad..d66a8921e0 100644 --- a/plugins/linear-comparative-view/src/LinearComparativeView/model.ts +++ b/plugins/linear-comparative-view/src/LinearComparativeView/model.ts @@ -66,12 +66,21 @@ function stateModelFactory(pluginManager: PluginManager) { /** * #property */ - middleComparativeHeight: 100, - /** - * #property - */ - tracks: types.array( - pluginManager.pluggableMstType('track', 'stateModel'), + levels: types.array( + types + .model({ + tracks: types.array( + pluginManager.pluggableMstType('track', 'stateModel'), + ), + height: 100, + level: types.number, + }) + .actions(self => ({ + setHeight(n: number) { + self.height = n + return self.height + }, + })), ), /** * #property @@ -100,12 +109,6 @@ function stateModelFactory(pluginManager: PluginManager) { width: undefined as number | undefined, })) .views(self => ({ - /** - * #getter - */ - get highResolutionScaling() { - return 2 - }, /** * #getter */ @@ -178,9 +181,9 @@ function stateModelFactory(pluginManager: PluginManager) { /** * #action */ - setMiddleComparativeHeight(n: number) { - self.middleComparativeHeight = n - return self.middleComparativeHeight + setLevelHeight(n: number, level = 0) { + self.levels[level]!.setHeight(n) + return self.levels[level]!.height }, /** @@ -206,10 +209,10 @@ function stateModelFactory(pluginManager: PluginManager) { /** * #action */ - toggleTrack(trackId: string) { - const hiddenCount = this.hideTrack(trackId) + toggleTrack(trackId: string, level = 0) { + const hiddenCount = this.hideTrack(trackId, level) if (!hiddenCount) { - this.showTrack(trackId) + this.showTrack(trackId, level) return true } return false @@ -218,7 +221,7 @@ function stateModelFactory(pluginManager: PluginManager) { /** * #action */ - showTrack(trackId: string, initialSnapshot = {}) { + showTrack(trackId: string, level = 0, initialSnapshot = {}) { const schema = pluginManager.pluggableConfigSchemaType('track') const configuration = resolveIdentifier(schema, getRoot(self), trackId) if (!configuration) { @@ -240,12 +243,20 @@ function stateModelFactory(pluginManager: PluginManager) { `could not find a compatible display for view type ${self.type}`, ) } - self.tracks.push( + if (!self.levels[level]) { + self.levels[level] = cast({ level }) + } + self.levels[level].tracks.push( trackType.stateModel.create({ ...initialSnapshot, type: configuration.type, configuration, - displays: [{ type: displayConf.type, configuration: displayConf }], + displays: [ + { + type: displayConf.type, + configuration: displayConf, + }, + ], }), ) }, @@ -253,12 +264,16 @@ function stateModelFactory(pluginManager: PluginManager) { /** * #action */ - hideTrack(trackId: string) { + hideTrack(trackId: string, level = 0) { const schema = pluginManager.pluggableConfigSchemaType('track') const config = resolveIdentifier(schema, getRoot(self), trackId) - const shownTracks = self.tracks.filter(t => t.configuration === config) + const shownTracks = self.levels[level]!.tracks.filter( + t => t.configuration === config, + ) transaction(() => { - shownTracks.forEach(t => self.tracks.remove(t)) + shownTracks.forEach(t => { + self.levels[level]!.tracks.remove(t) + }) }) return shownTracks.length }, @@ -281,7 +296,7 @@ function stateModelFactory(pluginManager: PluginManager) { */ clearView() { self.views = cast([]) - self.tracks = cast([]) + self.levels = cast([]) }, })) .views(() => ({ @@ -353,6 +368,15 @@ function stateModelFactory(pluginManager: PluginManager) { ) }, })) + .preProcessSnapshot(snap => { + // @ts-expect-error + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + const { tracks, levels = [{ tracks, level: 0 }], ...rest } = snap || {} + return { + ...rest, + levels, + } + }) } export type LinearComparativeViewStateModel = ReturnType< diff --git a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/afterAttach.ts b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/afterAttach.ts index dfc44ec240..d41449edc8 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/afterAttach.ts +++ b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/afterAttach.ts @@ -1,4 +1,4 @@ -import { addDisposer, getSnapshot } from 'mobx-state-tree' +import { addDisposer, getParent, getSnapshot } from 'mobx-state-tree' import { Feature, getContainingView, getSession } from '@jbrowse/core/util' import { bpToPx } from '@jbrowse/core/util/Base1DUtils' @@ -39,7 +39,7 @@ export function doAfterAttach(self: LinearSyntenyDisplayModel) { return } - const height = view.middleComparativeHeight + const height = self.height const width = view.width ctx1.clearRect(0, 0, width, height) ctx3.clearRect(0, 0, width, height) @@ -86,6 +86,8 @@ export function doAfterAttach(self: LinearSyntenyDisplayModel) { } const { assemblyManager } = getSession(self) const view = getContainingView(self) as LSV + // @ts-expect-error + const level = getParent(self, 4).level const viewSnaps = view.views.map(view => ({ ...getSnapshot(view), width: view.width, @@ -113,8 +115,8 @@ export function doAfterAttach(self: LinearSyntenyDisplayModel) { const r2 = mate.refName const ref1 = a1?.getCanonicalRefName(r1) || r1 const ref2 = a2?.getCanonicalRefName(r2) || r2 - const v1 = viewSnaps[0]! - const v2 = viewSnaps[1]! + const v1 = viewSnaps[level]! + const v2 = viewSnaps[level + 1]! const p11 = bpToPx({ self: v1, refName: ref1, coord: f1s }) const p12 = bpToPx({ self: v1, refName: ref1, coord: f1e }) const p21 = bpToPx({ self: v2, refName: ref2, coord: f2s }) diff --git a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/LinearSyntenyRendering.tsx b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/LinearSyntenyRendering.tsx index a5abb847e5..496578edeb 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/LinearSyntenyRendering.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/LinearSyntenyRendering.tsx @@ -24,12 +24,13 @@ const useStyles = makeStyles()({ rel: { position: 'relative', }, - abs: { + mouseoverCanvas: { position: 'absolute', - }, - none: { pointEvents: 'none', }, + mainCanvas: { + position: 'absolute', + }, }) const LinearSyntenyRendering = observer(function ({ @@ -37,11 +38,10 @@ const LinearSyntenyRendering = observer(function ({ }: { model: LinearSyntenyDisplayModel }) { - const { classes, cx } = useStyles() - const xOffset = useRef(0) + const { classes } = useStyles() + const xOffset = useRef(0) const currScrollFrame = useRef() const view = getContainingView(model) as LinearSyntenyViewModel - const height = view.middleComparativeHeight const width = view.width const delta = useRef(0) const timeout = useRef() @@ -51,7 +51,7 @@ const LinearSyntenyRendering = observer(function ({ const [mouseCurrDownX, setMouseCurrDownX] = useState() const [mouseInitialDownX, setMouseInitialDownX] = useState() const [currY, setCurrY] = useState() - const { mouseoverId } = model + const { mouseoverId, height } = model // these useCallbacks avoid new refs from being created on any mouseover, // etc. @@ -143,7 +143,7 @@ const LinearSyntenyRendering = observer(function ({ ref={k1} width={width} height={height} - className={cx(classes.abs, classes.none)} + className={classes.mouseoverCanvas} /> diff --git a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/SyntenyContextMenu.tsx b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/SyntenyContextMenu.tsx index b578580b94..9df93e7adf 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/SyntenyContextMenu.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/SyntenyContextMenu.tsx @@ -1,6 +1,7 @@ import React from 'react' import { getContainingView, getSession, Feature } from '@jbrowse/core/util' import { Menu } from '@jbrowse/core/ui' +import { getParent } from 'mobx-state-tree' // locals import { LinearSyntenyDisplayModel } from '../model' @@ -54,21 +55,28 @@ export default function SyntenyContextMenu({ label: 'Center on feature', onClick: () => { const { f } = feature + const track = getParent<{ level: number }>(model, 4) const start = f.get('start') const end = f.get('end') const refName = f.get('refName') const mate = f.get('mate') - view.views[0]!.navToLocString(`${refName}:${start}-${end}`).catch( + + const l1 = view.views[track.level]! + const l2 = view.views[track.level + 1]! + l1.navToLocString(`${refName}:${start}-${end}`).catch( (e: unknown) => { - console.error(e) - getSession(model).notifyError(`${e}`, e) + const err = `${l1.assemblyNames[0]}:${e}` + console.error(err) + getSession(model).notifyError(err, e) }, ) - view.views[1]!.navToLocString( + + l2.navToLocString( `${mate.refName}:${mate.start}-${mate.end}`, ).catch((e: unknown) => { - console.error(e) - getSession(model).notifyError(`${e}`, e) + const err = `${l2.assemblyNames[0]}:${e}` + console.error(err) + getSession(model).notifyError(err, e) }) }, }, diff --git a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/util.ts b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/util.ts index 9ba5ee2904..58a9880d1e 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/util.ts +++ b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/components/util.ts @@ -34,6 +34,7 @@ export function drawMatchSimple({ feature, ctx, offsets, + level, cb, height, drawCurves, @@ -44,6 +45,7 @@ export function drawMatchSimple({ feature: FeatPos ctx: CanvasRenderingContext2D offsets: number[] + level: number oobLimit: number viewWidth: number cb: (ctx: CanvasRenderingContext2D) => void @@ -53,10 +55,10 @@ export function drawMatchSimple({ }) { const { p11, p12, p21, p22 } = feature - const x11 = p11.offsetPx - offsets[0]! - const x12 = p12.offsetPx - offsets[0]! - const x21 = p21.offsetPx - offsets[1]! - const x22 = p22.offsetPx - offsets[1]! + const x11 = p11.offsetPx - offsets[level]! + const x12 = p12.offsetPx - offsets[level]! + const x21 = p21.offsetPx - offsets[level + 1]! + const x22 = p22.offsetPx - offsets[level + 1]! const l1 = Math.abs(x12 - x11) const l2 = Math.abs(x22 - x21) diff --git a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/drawSynteny.ts b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/drawSynteny.ts index 0dbfa0ebfa..759896da7c 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/drawSynteny.ts +++ b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/drawSynteny.ts @@ -3,6 +3,7 @@ import { doesIntersect2, getContainingView } from '@jbrowse/core/util' import { LinearSyntenyViewModel } from '../LinearSyntenyView/model' import { LinearSyntenyDisplayModel } from './model' import { draw, drawMatchSimple } from './components/util' +import { getParent } from 'mobx-state-tree' export const MAX_COLOR_RANGE = 255 * 255 * 255 // max color range @@ -36,9 +37,11 @@ export function drawRef( ctx3?: CanvasRenderingContext2D, ) { const view = getContainingView(model) as LinearSyntenyViewModel + // @ts-expect-error + const level = getParent(model, 4).level const drawCurves = view.drawCurves const drawCIGAR = view.drawCIGAR - const height = view.middleComparativeHeight + const { height, featPositions } = model const width = view.width const bpPerPxs = view.views.map(v => v.bpPerPx) @@ -47,20 +50,18 @@ export function drawRef( } ctx1.beginPath() - const featPos = model.featPositions const offsets = view.views.map(v => v.offsetPx) - - const unitMultiplier = Math.floor(MAX_COLOR_RANGE / featPos.length) + const unitMultiplier = Math.floor(MAX_COLOR_RANGE / featPositions.length) // this loop is optimized to draw many thin lines with a single ctx.stroke // call, a separate loop below draws larger boxes ctx1.fillStyle = colorMap.M ctx1.strokeStyle = colorMap.M - for (const { p11, p12, p21, p22 } of featPos) { - const x11 = p11.offsetPx - offsets[0]! - const x12 = p12.offsetPx - offsets[0]! - const x21 = p21.offsetPx - offsets[1]! - const x22 = p22.offsetPx - offsets[1]! + for (const { p11, p12, p21, p22 } of featPositions) { + const x11 = p11.offsetPx - offsets[level]! + const x12 = p12.offsetPx - offsets[level]! + const x21 = p21.offsetPx - offsets[level + 1]! + const x22 = p22.offsetPx - offsets[level + 1]! const l1 = Math.abs(x12 - x11) const l2 = Math.abs(x22 - x21) const y1 = 0 @@ -89,11 +90,11 @@ export function drawRef( // ctx.stroke once is much more efficient than calling stroke() many times ctx1.fillStyle = colorMap.M ctx1.strokeStyle = colorMap.M - for (const { p11, p12, p21, p22, f, cigar } of featPos) { - const x11 = p11.offsetPx - offsets[0]! - const x12 = p12.offsetPx - offsets[0]! - const x21 = p21.offsetPx - offsets[1]! - const x22 = p22.offsetPx - offsets[1]! + for (const { p11, p12, p21, p22, f, cigar } of featPositions) { + const x11 = p11.offsetPx - offsets[level]! + const x12 = p12.offsetPx - offsets[level]! + const x21 = p21.offsetPx - offsets[level + 1]! + const x22 = p22.offsetPx - offsets[level + 1]! const l1 = Math.abs(x12 - x11) const l2 = Math.abs(x22 - x21) const minX = Math.min(x21, x22) @@ -137,8 +138,8 @@ export function drawRef( px2 = cx2 } - const d1 = len / bpPerPxs[0]! - const d2 = len / bpPerPxs[1]! + const d1 = len / bpPerPxs[level]! + const d2 = len / bpPerPxs[level + 1]! if (op === 'M' || op === '=' || op === 'X') { cx1 += d1 * rev1 @@ -170,9 +171,9 @@ export function drawRef( ) { continuingFlag = true } else { - // allow rendering the dominant color when using continuing flag - // if the last element of continuing was a large feature, else - // just use match + // allow rendering the dominant color when using continuing + // flag if the last element of continuing was a large + // feature, else just use match ctx1.fillStyle = colorMap[(continuingFlag && d1 > 1) || d2 > 1 ? op : 'M'] continuingFlag = false @@ -198,8 +199,8 @@ export function drawRef( } ctx2.imageSmoothingEnabled = false ctx2.clearRect(0, 0, width, height) - for (let i = 0; i < featPos.length; i++) { - const feature = featPos[i]! + for (let i = 0; i < featPositions.length; i++) { + const feature = featPositions[i]! const idx = i * unitMultiplier + 1 ctx2.fillStyle = makeColor(idx) @@ -211,6 +212,7 @@ export function drawRef( feature, ctx: ctx2, drawCurves, + level, offsets, oobLimit, viewWidth: view.width, @@ -218,7 +220,6 @@ export function drawRef( height, }) } - return undefined } export function drawMouseoverSynteny(model: LinearSyntenyDisplayModel) { @@ -226,10 +227,12 @@ export function drawMouseoverSynteny(model: LinearSyntenyDisplayModel) { const highResolutionScaling = 1 const view = getContainingView(model) as LinearSyntenyViewModel const drawCurves = view.drawCurves - const height = view.middleComparativeHeight + const height = model.height const width = view.width const ctx = model.mouseoverCanvas?.getContext('2d') const offsets = view.views.map(v => v.offsetPx) + // @ts-expect-error + const level = getParent(model, 4).level if (!ctx) { return @@ -245,6 +248,7 @@ export function drawMouseoverSynteny(model: LinearSyntenyDisplayModel) { ctx.fill() }, feature: feature1, + level, ctx, oobLimit, viewWidth: view.width, @@ -263,6 +267,7 @@ export function drawMouseoverSynteny(model: LinearSyntenyDisplayModel) { }, feature: feature2, ctx, + level, oobLimit, viewWidth: view.width, drawCurves, diff --git a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/model.ts b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/model.ts index 3efaa999de..a95d5fdc8c 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyDisplay/model.ts +++ b/plugins/linear-comparative-view/src/LinearSyntenyDisplay/model.ts @@ -1,4 +1,4 @@ -import { types, Instance } from 'mobx-state-tree' +import { types, Instance, getParent } from 'mobx-state-tree' import { getConf, ConfigurationReference, @@ -143,6 +143,13 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) { get trackIds() { return getConf(self, 'trackIds') as string[] }, + /** + * #getter + */ + get height() { + // @ts-expect-error + return getParent(self, 4).height as number + }, /** * #getter */ diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportCustomTrack.tsx b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportCustomTrack.tsx index a17f83d529..3bf2a8066b 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportCustomTrack.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportCustomTrack.tsx @@ -82,174 +82,172 @@ function getAdapter({ type Conf = SnapshotIn -const OpenTrack = observer( - ({ - assembly1, - assembly2, - setSessionTrackData, - }: { - sessionTrackData: Conf - assembly1: string - assembly2: string - setSessionTrackData: (arg: Conf) => void - }) => { - const [bed2Location, setBed2Location] = useState() - const [bed1Location, setBed1Location] = useState() - const [fileLocation, setFileLocation] = useState() - const [value, setValue] = useState('') - const [error, setError] = useState() - const fileName = getName(fileLocation) +const ImportCustomTrack = observer(function ({ + assembly1, + assembly2, + setSessionTrackData, +}: { + sessionTrackData: Conf + assembly1: string + assembly2: string + setSessionTrackData: (arg: Conf) => void +}) { + const [bed2Location, setBed2Location] = useState() + const [bed1Location, setBed1Location] = useState() + const [fileLocation, setFileLocation] = useState() + const [value, setValue] = useState('') + const [error, setError] = useState() + const fileName = getName(fileLocation) - const radioOption = value || (fileName ? extName(stripGz(fileName)) : '') + const radioOption = value || (fileName ? extName(stripGz(fileName)) : '') - useEffect(() => { - try { - if (fileLocation) { - const fn = fileName ? basename(fileName) : 'MyTrack' - const trackId = `${fn}-${Date.now()}` - setError(undefined) + useEffect(() => { + try { + if (fileLocation) { + const fn = fileName ? basename(fileName) : 'MyTrack' + const trackId = `${fn}-${Date.now()}` + setError(undefined) - setSessionTrackData({ - trackId, - name: fn, - assemblyNames: [assembly2, assembly1], - type: 'SyntenyTrack', - adapter: getAdapter({ - radioOption, - assembly1, - assembly2, - fileLocation, - bed1Location, - bed2Location, - }), - }) - } - } catch (e) { - console.error(e) - setError(e) + setSessionTrackData({ + trackId, + name: fn, + assemblyNames: [assembly2, assembly1], + type: 'SyntenyTrack', + adapter: getAdapter({ + radioOption, + assembly1, + assembly2, + fileLocation, + bed1Location, + bed2Location, + }), + }) } - }, [ - fileName, - assembly1, - assembly2, - bed1Location, - bed2Location, - fileLocation, - radioOption, - setSessionTrackData, - ]) - return ( - - {error ? : null} - - Add a .paf, .out (MashMap), .delta (Mummer), .chain, .anchors or - .anchors.simple (MCScan) file to view in the dotplot. These file types - can also be gzipped. The first assembly should be the query sequence - (e.g. left column of the PAF) and the second assembly should be the - target sequence (e.g. right column of the PAF) - - { - setValue(event.target.value) - }} - > - - - } label=".paf" /> - - - } label=".out" /> - - - } - label=".delta" - /> - - - } - label=".chain" - /> - - - } - label=".anchors" - /> - - - } - label=".anchors.simple" - /> - - - + } catch (e) { + console.error(e) + setError(e) + } + }, [ + fileName, + assembly1, + assembly2, + bed1Location, + bed2Location, + fileLocation, + radioOption, + setSessionTrackData, + ]) + return ( + + {error ? : null} + + Add a .paf, .out (MashMap), .delta (Mummer), .chain, .anchors or + .anchors.simple (MCScan) file to view in the dotplot. These file types + can also be gzipped. The first assembly should be the query sequence + (e.g. left column of the PAF) and the second assembly should be the + target sequence (e.g. right column of the PAF) + + { + setValue(event.target.value) + }} + > - {value === '.anchors' || value === '.anchors.simple' ? ( -
-
- Open the {value} and .bed files for both genome assemblies - from the MCScan (Python version) pipeline{' '} - - (more info) - + } label=".paf" /> + + + } label=".out" /> + + + } + label=".delta" + /> + + + } + label=".chain" + /> + + + } + label=".anchors" + /> + + + } + label=".anchors.simple" + /> + + + + + + {value === '.anchors' || value === '.anchors.simple' ? ( +
+
+ Open the {value} and .bed files for both genome assemblies from + the MCScan (Python version) pipeline{' '} + + (more info) + +
+
+
+ { + setFileLocation(loc) + }} + /> +
+
+ { + setBed1Location(loc) + }} + />
-
-
- { - setFileLocation(loc) - }} - /> -
-
- { - setBed1Location(loc) - }} - /> -
-
- { - setBed2Location(loc) - }} - /> -
+
+ { + setBed2Location(loc) + }} + />
- ) : ( - { - setFileLocation(loc) - }} - /> - )} - +
+ ) : ( + { + setFileLocation(loc) + }} + /> + )} - - ) - }, -) + + + ) +}) -export default OpenTrack +export default ImportCustomTrack diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.tsx b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.tsx index 7a8941e003..6305f6096f 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.tsx @@ -12,73 +12,63 @@ import { observer } from 'mobx-react' // locals import { LinearSyntenyViewModel } from '../../model' -function f(track: AnyConfigurationModel, assembly1: string, assembly2: string) { - const assemblyNames = readConfObject(track, 'assemblyNames') - return ( - assemblyNames.includes(assembly1) && - assemblyNames.includes(assembly2) && - track.type.includes('Synteny') - ) -} - -const Selector = observer( - ({ - model, - assembly1, - assembly2, - setShowTrackId, - }: { - model: LinearSyntenyViewModel - assembly1: string - assembly2: string - setShowTrackId: (arg: string) => void - }) => { - const session = getSession(model) - const { tracks = [], sessionTracks = [] } = session - const allTracks = [...tracks, ...sessionTracks] as AnyConfigurationModel[] - const filteredTracks = allTracks.filter(t => f(t, assembly2, assembly1)) - const resetTrack = filteredTracks[0]?.trackId || '' - const [value, setValue] = useState(resetTrack) - useEffect(() => { - // if assembly1/assembly2 changes, then we will want to use this effect to - // change the state of the useState because it otherwise gets locked to a - // stale value - setValue(resetTrack) - }, [resetTrack]) - - useEffect(() => { - // sets track data in a useEffect because the initial load is needed as well - // as onChange's to the select box - setShowTrackId(value) - }, [value, setShowTrackId]) +const ImportSyntenyTrackSelector = observer(function ({ + model, + assembly1, + assembly2, + setShowTrackId, +}: { + model: LinearSyntenyViewModel + assembly1: string + assembly2: string + setShowTrackId: (arg: string) => void +}) { + const session = getSession(model) + const { tracks = [], sessionTracks = [] } = session + const allTracks = [...tracks, ...sessionTracks] as AnyConfigurationModel[] + const filteredTracks = allTracks.filter(track => { + const assemblyNames = readConfObject(track, 'assemblyNames') return ( - - - Select a track from the select box below, the track will be shown when - you hit "Launch". - - - {filteredTracks.length ? ( - - ) : ( - - )} - + assemblyNames.includes(assembly1) && + assemblyNames.includes(assembly2) && + track.type.includes('Synteny') ) - }, -) + }) + const resetTrack = filteredTracks[0]?.trackId || '' + const [value, setValue] = useState(resetTrack) + + useEffect(() => { + // sets track data in a useEffect because the initial load is needed as well + // as onChange's to the select box + setShowTrackId(value) + }, [value, setShowTrackId]) + return ( + + + Select a track from the select box below, the track will be shown when + you hit "Launch". + + + {filteredTracks.length ? ( + + ) : ( + + )} + + ) +}) -export default Selector +export default ImportSyntenyTrackSelector diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelectorUtil.tsx b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelectorUtil.tsx new file mode 100644 index 0000000000..3da632d3dc --- /dev/null +++ b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelectorUtil.tsx @@ -0,0 +1,91 @@ +import React, { useState, useEffect } from 'react' +import { + FormControl, + FormLabel, + FormControlLabel, + Radio, + RadioGroup, +} from '@mui/material' +import { SnapshotIn } from 'mobx-state-tree' +import { AnyConfigurationModel } from '@jbrowse/core/configuration' + +// locals +import { LinearSyntenyViewModel } from '../../model' +import ImportCustomTrack from './ImportCustomTrack' +import ImportSyntenyTrackSelector from './ImportSyntenyTrackSelector' + +type Conf = SnapshotIn + +export default function TrackSelector({ + setSessionTrackData, + setShowTrackId, + sessionTrackData, + assembly1, + assembly2, + model, + idx, +}: { + sessionTrackData: Conf + setSessionTrackData: (arg: Conf) => void + setShowTrackId: (arg?: string) => void + model: LinearSyntenyViewModel + assembly1: string + assembly2: string + idx: number +}) { + const [choice, setChoice] = useState('tracklist') + + useEffect(() => { + if (choice === 'none') { + setSessionTrackData(undefined) + setShowTrackId(undefined) + } + }, [choice, setSessionTrackData, setShowTrackId]) + return ( + <> + + + (Optional) Select or add a synteny track between row {idx} and{' '} + {idx + 1} + + { + setChoice(event.target.value) + }} + aria-labelledby="group-label" + > + } label="None" /> + } + label="Existing track" + /> + } + label="New track" + /> + + + {choice === 'custom' ? ( + + ) : null} + {choice === 'tracklist' ? ( + + ) : null} + + ) +} diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/index.tsx b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/index.tsx index 04ed6a4001..f7a56da23c 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/index.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyView/components/ImportForm/index.tsx @@ -1,14 +1,11 @@ -import React, { useState, useEffect } from 'react' +import React, { useState } from 'react' import { Button, Container, FormControl, - FormLabel, - FormControlLabel, Grid, + IconButton, Paper, - Radio, - RadioGroup, } from '@mui/material' import { makeStyles } from 'tss-react/mui' import { observer } from 'mobx-react' @@ -16,11 +13,12 @@ import { AnyConfigurationModel } from '@jbrowse/core/configuration' import { SnapshotIn } from 'mobx-state-tree' import { getSession, isSessionWithAddTracks } from '@jbrowse/core/util' import { ErrorMessage, AssemblySelector } from '@jbrowse/core/ui' - +// icons +import ArrowForward from '@mui/icons-material/ArrowForward' +import ArrowBack from '@mui/icons-material/ArrowBack' // locals import { LinearSyntenyViewModel } from '../../model' -import ImportCustomTrack from './ImportCustomTrack' -import ImportSyntenyTrackSelector from './ImportSyntenyTrackSelector' +import TrackSelector from './ImportSyntenyTrackSelectorUtil' const useStyles = makeStyles()(theme => ({ importFormContainer: { @@ -35,76 +33,6 @@ const useStyles = makeStyles()(theme => ({ type Conf = SnapshotIn -function TrackSelector({ - setSessionTrackData, - setShowTrackId, - sessionTrackData, - assembly1, - assembly2, - model, -}: { - sessionTrackData: Conf - setSessionTrackData: (arg: Conf) => void - setShowTrackId: (arg?: string) => void - model: LinearSyntenyViewModel - assembly1: string - assembly2: string -}) { - const [choice, setChoice] = useState('tracklist') - - useEffect(() => { - if (choice === 'none') { - setSessionTrackData(undefined) - setShowTrackId(undefined) - } - }, [choice, setSessionTrackData, setShowTrackId]) - return ( - <> - - - (Optional) Select or add a synteny track - - { - setChoice(event.target.value) - }} - aria-labelledby="group-label" - > - } label="None" /> - } - label="Existing track" - /> - } - label="New track" - /> - - - {choice === 'custom' ? ( - - ) : null} - {choice === 'tracklist' ? ( - - ) : null} - - ) -} - const LinearSyntenyViewImportForm = observer(function ({ model, }: { @@ -113,55 +41,16 @@ const LinearSyntenyViewImportForm = observer(function ({ const { classes } = useStyles() const session = getSession(model) const { assemblyNames } = session - const [assembly2, setAssembly2] = useState(assemblyNames[0] || '') - const [assembly1, setAssembly1] = useState(assemblyNames[0] || '') + const [currIdx, setCurrIdx] = useState(0) + const [assemblies, setAssemblies] = useState([ + assemblyNames[0] || '', + assemblyNames[0] || '', + ]) const [error, setError] = useState() - const [sessionTrackData, setSessionTrackData] = useState() - const [showTrackId, setShowTrackId] = useState() - - async function onOpenClick() { - try { - if (!isSessionWithAddTracks(session)) { - return - } - setError(undefined) - - const { assemblyManager } = session - const assemblies = [assembly1, assembly2] - model.setViews( - await Promise.all( - assemblies.map(async sel => { - const asm = await assemblyManager.waitForAssembly(sel) - if (!asm) { - throw new Error(`Assembly ${sel} failed to load`) - } - return { - type: 'LinearGenomeView' as const, - bpPerPx: 1, - offsetPx: 0, - hideHeader: true, - displayedRegions: asm.regions, - } - }), - ), - ) - model.views.forEach(view => { - view.setWidth(model.width) - }) - model.views.forEach(view => { - view.showAllRegions() - }) - if (sessionTrackData) { - session.addTrackConf(sessionTrackData) - model.toggleTrack(sessionTrackData.trackId) - } else if (showTrackId) { - model.showTrack(showTrackId) - } - } catch (e) { - console.error(e) - setError(e) - } - } + const [sessionTrackData, setSessionTrackData] = useState< + (Conf | undefined)[] + >([]) + const [showTrackId, setShowTrackId] = useState<(string | undefined)[]>([]) // this is a combination of any displayed error message we have const displayError = error @@ -180,49 +69,125 @@ const LinearSyntenyViewImportForm = observer(function ({

Select assemblies for linear synteny view

- - - { - setAssembly1(val) - }} - session={session} - /> - - - { - setAssembly2(val) - }} - session={session} - /> - - + <> + {assemblies.map((assembly, idx) => ( +
+ Row {idx + 1}: + { + setAssemblies( + assemblies.map((value, index) => + index === idx ? newValue : value, + ), + ) + }} + session={session} + /> +
+ ))} + +
- - +
+ + { + setCurrIdx(currIdx - 1) + }} + > + + + = assemblies.length - 2} + onClick={() => { + setCurrIdx(currIdx + 1) + }} + > + + { + const clone = [...showTrackId] + clone[currIdx] = arg + setShowTrackId(clone) + }} + assembly1={assemblies[currIdx]!} + assembly2={assemblies[currIdx + 1]!} + setSessionTrackData={arg => { + const clone = [...sessionTrackData] + clone[currIdx] = arg + setSessionTrackData(clone) + }} + sessionTrackData={sessionTrackData[currIdx]} model={model} />
diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/components/LinearSyntenyView.tsx b/plugins/linear-comparative-view/src/LinearSyntenyView/components/LinearSyntenyView.tsx index b7145c4907..b9662b7c4e 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyView/components/LinearSyntenyView.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyView/components/LinearSyntenyView.tsx @@ -9,7 +9,7 @@ const ImportForm = lazy(() => import('./ImportForm')) type LSV = LinearSyntenyViewModel -const LinearSyntenyView = observer(({ model }: { model: LSV }) => { +const LinearSyntenyView = observer(function ({ model }: { model: LSV }) { return !model.initialized ? ( ) : ( diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/model.test.ts b/plugins/linear-comparative-view/src/LinearSyntenyView/model.test.ts deleted file mode 100644 index 5761fb9989..0000000000 --- a/plugins/linear-comparative-view/src/LinearSyntenyView/model.test.ts +++ /dev/null @@ -1,1605 +0,0 @@ -import PluginManager from '@jbrowse/core/PluginManager' -import LinearGenomeViewPlugin from '@jbrowse/plugin-linear-genome-view' -import SequencePlugin from '@jbrowse/plugin-sequence' -import stateModelFactory from './model' - -test('creation', () => { - const pluginManager = new PluginManager([ - new LinearGenomeViewPlugin(), - new SequencePlugin(), - ]) - .createPluggableElements() - .configure() - const model = stateModelFactory(pluginManager) - model.create({ - // @ts-expect-error - type: 'LinearSyntenyView', - views: [ - { - type: 'LinearGenomeView', - displayedRegions: [ - { - refName: 'Pp01', - start: 0, - end: 47851208, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'Pp02', - start: 0, - end: 30405870, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'Pp03', - start: 0, - end: 27368013, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'Pp04', - start: 0, - end: 25843236, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'Pp05', - start: 0, - end: 18496696, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'Pp06', - start: 0, - end: 30767194, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'Pp07', - start: 0, - end: 22388614, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'Pp08', - start: 0, - end: 22573980, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_12', - start: 0, - end: 167479, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_15', - start: 0, - end: 72028, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_13', - start: 0, - end: 69962, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_16', - start: 0, - end: 38727, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_18', - start: 0, - end: 32503, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_19', - start: 0, - end: 32043, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_20', - start: 0, - end: 30119, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_21', - start: 0, - end: 28663, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_23', - start: 0, - end: 27846, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_24', - start: 0, - end: 25707, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_26', - start: 0, - end: 23005, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_32', - start: 0, - end: 22324, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_28', - start: 0, - end: 21453, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_40', - start: 0, - end: 18616, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_30', - start: 0, - end: 18507, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_38', - start: 0, - end: 18477, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_34', - start: 0, - end: 18055, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_33', - start: 0, - end: 17159, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_35', - start: 0, - end: 16788, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_37', - start: 0, - end: 16633, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_39', - start: 0, - end: 15657, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_101', - start: 0, - end: 15118, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_42', - start: 0, - end: 14945, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_58', - start: 0, - end: 14802, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_57', - start: 0, - end: 13972, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_199', - start: 0, - end: 13173, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_51', - start: 0, - end: 12576, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_295', - start: 0, - end: 12535, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_69', - start: 0, - end: 12322, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_53', - start: 0, - end: 12283, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_54', - start: 0, - end: 12175, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_62', - start: 0, - end: 12137, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_55', - start: 0, - end: 12005, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_61', - start: 0, - end: 11986, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_60', - start: 0, - end: 11897, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_67', - start: 0, - end: 11828, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_68', - start: 0, - end: 11057, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_73', - start: 0, - end: 11032, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_66', - start: 0, - end: 11015, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_78', - start: 0, - end: 10992, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_70', - start: 0, - end: 10689, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_104', - start: 0, - end: 10646, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_72', - start: 0, - end: 10595, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_71', - start: 0, - end: 10576, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_77', - start: 0, - end: 10450, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_196', - start: 0, - end: 10371, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_80', - start: 0, - end: 9725, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_84', - start: 0, - end: 9539, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_297', - start: 0, - end: 8994, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_92', - start: 0, - end: 8951, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_90', - start: 0, - end: 8670, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_135', - start: 0, - end: 8639, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_129', - start: 0, - end: 8426, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_121', - start: 0, - end: 8362, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_97', - start: 0, - end: 8262, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_136', - start: 0, - end: 8239, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_144', - start: 0, - end: 7971, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_260', - start: 0, - end: 7959, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_111', - start: 0, - end: 7938, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_108', - start: 0, - end: 7601, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_123', - start: 0, - end: 7505, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_158', - start: 0, - end: 7410, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_112', - start: 0, - end: 7332, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_130', - start: 0, - end: 7301, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_225', - start: 0, - end: 7279, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_167', - start: 0, - end: 7275, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_127', - start: 0, - end: 7029, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_143', - start: 0, - end: 7028, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_116', - start: 0, - end: 7027, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_125', - start: 0, - end: 6961, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_242', - start: 0, - end: 6946, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_157', - start: 0, - end: 6895, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_149', - start: 0, - end: 6780, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_155', - start: 0, - end: 6743, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_353', - start: 0, - end: 6571, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_137', - start: 0, - end: 6550, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_328', - start: 0, - end: 6504, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_200', - start: 0, - end: 6486, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_134', - start: 0, - end: 6400, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_194', - start: 0, - end: 6379, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_302', - start: 0, - end: 6282, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_138', - start: 0, - end: 6232, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_232', - start: 0, - end: 6198, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_139', - start: 0, - end: 6164, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_146', - start: 0, - end: 6143, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_140', - start: 0, - end: 6128, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_141', - start: 0, - end: 6087, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_166', - start: 0, - end: 6011, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_335', - start: 0, - end: 6007, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_147', - start: 0, - end: 6001, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_171', - start: 0, - end: 6000, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_339', - start: 0, - end: 5997, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_325', - start: 0, - end: 5815, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_162', - start: 0, - end: 5735, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_151', - start: 0, - end: 5646, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_164', - start: 0, - end: 5625, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_211', - start: 0, - end: 5602, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_153', - start: 0, - end: 5581, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_165', - start: 0, - end: 5579, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_340', - start: 0, - end: 5575, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_156', - start: 0, - end: 5507, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_202', - start: 0, - end: 5495, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_161', - start: 0, - end: 5491, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_213', - start: 0, - end: 5334, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_187', - start: 0, - end: 5301, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_168', - start: 0, - end: 5300, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_183', - start: 0, - end: 5295, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_163', - start: 0, - end: 5263, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_169', - start: 0, - end: 5261, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_174', - start: 0, - end: 5192, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_249', - start: 0, - end: 5131, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_189', - start: 0, - end: 5090, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_175', - start: 0, - end: 5047, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_181', - start: 0, - end: 5029, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_326', - start: 0, - end: 5022, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_256', - start: 0, - end: 4999, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_332', - start: 0, - end: 4969, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_234', - start: 0, - end: 4914, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_319', - start: 0, - end: 4850, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_272', - start: 0, - end: 4837, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_208', - start: 0, - end: 4817, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_182', - start: 0, - end: 4817, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_219', - start: 0, - end: 4624, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_188', - start: 0, - end: 4608, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_191', - start: 0, - end: 4575, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_192', - start: 0, - end: 4533, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_247', - start: 0, - end: 4525, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_221', - start: 0, - end: 4499, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_220', - start: 0, - end: 4478, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_258', - start: 0, - end: 4446, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_231', - start: 0, - end: 4391, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_203', - start: 0, - end: 4346, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_236', - start: 0, - end: 4257, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_288', - start: 0, - end: 4251, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_237', - start: 0, - end: 4247, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_228', - start: 0, - end: 4116, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_215', - start: 0, - end: 4100, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_281', - start: 0, - end: 4092, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_244', - start: 0, - end: 4017, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_246', - start: 0, - end: 4016, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_285', - start: 0, - end: 3892, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_280', - start: 0, - end: 3885, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_298', - start: 0, - end: 3815, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_286', - start: 0, - end: 3789, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_276', - start: 0, - end: 3789, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_336', - start: 0, - end: 3708, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_259', - start: 0, - end: 3708, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_239', - start: 0, - end: 3699, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_254', - start: 0, - end: 3576, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_248', - start: 0, - end: 3541, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_250', - start: 0, - end: 3536, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_255', - start: 0, - end: 3476, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_330', - start: 0, - end: 3429, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_279', - start: 0, - end: 3424, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_266', - start: 0, - end: 3415, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_337', - start: 0, - end: 3411, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_270', - start: 0, - end: 3362, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_291', - start: 0, - end: 3320, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_324', - start: 0, - end: 3154, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_271', - start: 0, - end: 3153, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_296', - start: 0, - end: 3020, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_307', - start: 0, - end: 2997, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_346', - start: 0, - end: 2995, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_306', - start: 0, - end: 2957, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_284', - start: 0, - end: 2907, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_311', - start: 0, - end: 2890, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_347', - start: 0, - end: 2805, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_321', - start: 0, - end: 2536, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_308', - start: 0, - end: 2380, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_313', - start: 0, - end: 2374, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_312', - start: 0, - end: 2068, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_334', - start: 0, - end: 1821, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_327', - start: 0, - end: 1589, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_331', - start: 0, - end: 1501, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_333', - start: 0, - end: 1452, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_338', - start: 0, - end: 1306, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_343', - start: 0, - end: 1164, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_344', - start: 0, - end: 1163, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_345', - start: 0, - end: 1145, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_349', - start: 0, - end: 1099, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_350', - start: 0, - end: 1092, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_351', - start: 0, - end: 1071, - reversed: false, - assemblyName: 'peach', - }, - { - refName: 'scaffold_352', - start: 0, - end: 1061, - reversed: false, - assemblyName: 'peach', - }, - ], - bpPerPx: 19914.295609223023, - offsetPx: 3973, - tracks: [], - }, - { - type: 'LinearGenomeView', - displayedRegions: [ - { - refName: 'chr1', - start: 0, - end: 23037639, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr10', - start: 0, - end: 18140952, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr10_random', - start: 0, - end: 789605, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr11', - start: 0, - end: 19818926, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr11_random', - start: 0, - end: 282498, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr12', - start: 0, - end: 22702307, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr12_random', - start: 0, - end: 1566225, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr13', - start: 0, - end: 24396255, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr13_random', - start: 0, - end: 3268264, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr14', - start: 0, - end: 30274277, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr15', - start: 0, - end: 20304914, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr16', - start: 0, - end: 22053297, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr16_random', - start: 0, - end: 740079, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr17', - start: 0, - end: 17126926, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr17_random', - start: 0, - end: 829735, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr18', - start: 0, - end: 29360087, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr18_random', - start: 0, - end: 5170003, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr19', - start: 0, - end: 24021853, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr1_random', - start: 0, - end: 568933, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr2', - start: 0, - end: 18779844, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr3', - start: 0, - end: 19341862, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr3_random', - start: 0, - end: 1220746, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr4', - start: 0, - end: 23867706, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr4_random', - start: 0, - end: 76237, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr5', - start: 0, - end: 25021643, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr5_random', - start: 0, - end: 421237, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr6', - start: 0, - end: 21508407, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr7', - start: 0, - end: 21026613, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr7_random', - start: 0, - end: 1447032, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr8', - start: 0, - end: 22385789, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr9', - start: 0, - end: 23006712, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chr9_random', - start: 0, - end: 487831, - reversed: false, - assemblyName: 'grape', - }, - { - refName: 'chrUn', - start: 0, - end: 43154196, - reversed: false, - assemblyName: 'grape', - }, - ], - bpPerPx: 67300.98485738254, - offsetPx: 5893, - tracks: [], - }, - ], - displayName: 'A vs B', - }) -}) diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.tsx b/plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.tsx new file mode 100644 index 0000000000..9023db2a8e --- /dev/null +++ b/plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.tsx @@ -0,0 +1,55 @@ +import React from 'react' +import { useTheme } from '@mui/material' +import { getFillProps } from '@jbrowse/core/util' +import { + SVGTracks, + SVGRuler, + LinearGenomeViewModel, +} from '@jbrowse/plugin-linear-genome-view' + +export default function SVGLinearGenomeView({ + trackLabelOffset, + fontSize, + textHeight, + trackLabels, + view, + displayResults, + rulerHeight, + shift, +}: { + textHeight: number + trackLabels: string + trackLabelOffset: number + fontSize: number + view: LinearGenomeViewModel + + displayResults: any + rulerHeight: number + shift: number +}) { + const theme = useTheme() + return ( + + + + {view.assemblyNames.join(', ')} + + + + + + + + ) +} diff --git a/plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.tsx b/plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.tsx index 32f6a68444..6aabb90f9b 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.tsx @@ -11,29 +11,25 @@ import { renderToAbstractCanvas, renderToStaticMarkup, sum, - getFillProps, } from '@jbrowse/core/util' import { getTrackName } from '@jbrowse/core/util/tracks' import { createJBrowseTheme } from '@jbrowse/core/ui' -import { - SVGTracks, - SVGRuler, - totalHeight, -} from '@jbrowse/plugin-linear-genome-view' +import { totalHeight } from '@jbrowse/plugin-linear-genome-view' // locals import SVGBackground from './SVGBackground' +import SVGLinearGenomeView from './SVGLinearGenomeView' import { ExportSvgOptions, LinearSyntenyViewModel } from '../model' import { drawRef } from '../../LinearSyntenyDisplay/drawSynteny' -type LSV = LinearSyntenyViewModel - // render LGV to SVG -export async function renderToSvg(model: LSV, opts: ExportSvgOptions) { +export async function renderToSvg( + model: LinearSyntenyViewModel, + opts: ExportSvgOptions, +) { await when(() => model.initialized) const { textHeight = 18, - headerHeight = 30, rulerHeight = 30, fontSize = 13, trackLabels = 'offset', @@ -42,15 +38,16 @@ export async function renderToSvg(model: LSV, opts: ExportSvgOptions) { } = opts const session = getSession(model) const themeVar = session.allThemes?.()[themeName] - const { width, views, middleComparativeHeight: synH, tracks } = model + const { width, views, levels } = model const shift = 50 - const offset = headerHeight + rulerHeight + const offset = rulerHeight const { createRootFn } = getRoot(model) const heights = views.map( v => totalHeight(v.tracks, textHeight, trackLabels) + offset, ) - const totalHeightSvg = sum(heights) + synH + 100 + const totalHeightSvg = sum(heights) + sum(levels.map(l => l.height)) + 100 + const displayResults = await Promise.all( views.map( async view => @@ -71,40 +68,45 @@ export async function renderToSvg(model: LSV, opts: ExportSvgOptions) { ) const renderings = await Promise.all( - tracks.map(async track => { - const d = track.displays[0] - await when(() => (d.ready !== undefined ? d.ready : true)) - const r = await renderToAbstractCanvas( - width, - synH, - { exportSVG: opts }, - ctx => { - drawRef(d, ctx) - return undefined - }, - ) + levels.map( + async level => + await Promise.all( + level.tracks.map(async track => { + const d = track.displays[0] + await when(() => (d.ready !== undefined ? d.ready : true)) + const r = await renderToAbstractCanvas( + width, + level.height, + { exportSVG: opts }, + ctx => { + drawRef(d, ctx) + return undefined + }, + ) - if ('imageData' in r) { - throw new Error('found a canvas in svg export, probably a bug') - } - if ('canvasRecordedData' in r) { - return { - html: await getSerializedSvg({ - ...r, - width, - height: synH, + if ('imageData' in r) { + throw new Error('found a canvas in svg export, probably a bug') + } else if ('canvasRecordedData' in r) { + return { + html: await getSerializedSvg({ + ...r, + width, + height: level.height, + }), + } + } else { + return r + } }), - } - } - return r - }), + ), + ), ) const trackLabelMaxLen = max( views.flatMap(view => - view.tracks.map(t => - measureText(getTrackName(t.configuration, session), fontSize), + view.tracks.map(track => + measureText(getTrackName(track.configuration, session), fontSize), ), ), 0, @@ -112,6 +114,58 @@ export async function renderToSvg(model: LSV, opts: ExportSvgOptions) { const trackLabelOffset = trackLabels === 'left' ? trackLabelMaxLen : 0 const w = width + trackLabelOffset const theme = createJBrowseTheme(themeVar) + const RenderList = [ + , + ] as React.ReactNode[] + let currOffset = heights[0]! + fontSize + rulerHeight + for (let i = 1; i < views.length; i++) { + const view = views[i]! + const level = levels[i - 1]! + const rendering = renderings[i - 1]! + const height = heights[i]! + RenderList.push( + + + + + + + + {rendering.map((r, i) => ( + /* biome-ignore lint/suspicious/noArrayIndexKey: */ + + ))} + + + + + , + ) + currOffset += height + level.height + fontSize + rulerHeight + } // the xlink namespace is used for rendering tag return renderToStaticMarkup( @@ -125,66 +179,7 @@ export async function renderToSvg(model: LSV, opts: ExportSvgOptions) { viewBox={[0, 0, w + shift * 2, totalHeightSvg].toString()} > - - - - {views[0]!.assemblyNames.join(', ')} - - - - - - - - - - - - - - {renderings.map((r, i) => ( - /* biome-ignore lint/suspicious/noArrayIndexKey: */ - - ))} - - - - - {views[1]!.assemblyNames.join(', ')} - - - - - + {RenderList} , diff --git a/plugins/linear-genome-view/src/LinearGenomeView/components/Scalebar.tsx b/plugins/linear-genome-view/src/LinearGenomeView/components/Scalebar.tsx index 2811a898dd..32a934f1a3 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/components/Scalebar.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/components/Scalebar.tsx @@ -103,7 +103,7 @@ const RenderedRefNameLabels = observer(function ({ model }: { model: LGV }) { ) }) -const RenderedBlockTicks = function ({ +const RenderedBlockTickLabels = function ({ block, bpPerPx, }: { @@ -145,7 +145,9 @@ const RenderedScalebarLabels = observer(function ({ model }: { model: LGV }) { const { key, widthPx } = block const k = `${key}-${idx}` if (block.type === 'ContentBlock') { - return + return ( + + ) } else if (block.type === 'ElidedBlock') { return } else if (block.type === 'InterRegionPaddingBlock') { diff --git a/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGLinearGenomeView.tsx b/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGLinearGenomeView.tsx index 8664632bbc..68328121c8 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGLinearGenomeView.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGLinearGenomeView.tsx @@ -82,15 +82,16 @@ export async function renderToSvg(model: LGV, opts: ExportSvgOptions) { cytobandHeight={cytobandHeight} /> - + + + diff --git a/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGTracks.tsx b/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGTracks.tsx index 877eea01a6..4a058eca08 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGTracks.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/svgcomponents/SVGTracks.tsx @@ -21,7 +21,6 @@ interface DisplayResult { export default function SVGTracks({ displayResults, model, - offset, textHeight, fontSize, trackLabels = 'offset', @@ -29,7 +28,6 @@ export default function SVGTracks({ }: { displayResults: DisplayResult[] model: LGV - offset: number textHeight: number fontSize: number trackLabels?: string @@ -37,6 +35,7 @@ export default function SVGTracks({ }) { const session = getSession(model) const textOffset = trackLabels === 'offset' ? textHeight : 0 + let offset = 0 return ( <> {displayResults.map(({ track, result }) => { diff --git a/products/jbrowse-web/src/tests/__image_snapshots__/breakpoint_split_view_snapshot.svg b/products/jbrowse-web/src/tests/__image_snapshots__/breakpoint_split_view_snapshot.svg index 4c62a82fcd..65d47b62b8 100644 --- a/products/jbrowse-web/src/tests/__image_snapshots__/breakpoint_split_view_snapshot.svg +++ b/products/jbrowse-web/src/tests/__image_snapshots__/breakpoint_split_view_snapshot.svg @@ -1 +1 @@ -hg19chr3186,698,000186,700,000chr3186,702,000186,704,0000077HG002.hs37d5.11kbpbsv.BND.3:186700648-6:56758392T[6:56758392[pbsv.BND.3:186700648-6:56758392T[6:56758392[HG002.hs37d5.bndshg19chr656,754,00056,756,00056,758,000chr656,758,00056,760,00056,762,0000088HG002.hs37d5.11kbpbsv.BND.6:56758392-3:186700648]3:186700648]Tpbsv.BND.6:56758392-3:186700648]3:186700648]THG002.hs37d5.bnds \ No newline at end of file +hg19chr3186,698,000186,700,000chr3186,702,000186,704,0000077HG002.hs37d5.11kbpbsv.BND.3:186700648-6:56758392T[6:56758392[pbsv.BND.3:186700648-6:56758392T[6:56758392[HG002.hs37d5.bndshg19chr656,754,00056,756,00056,758,000chr656,758,00056,760,00056,762,0000088HG002.hs37d5.11kbpbsv.BND.6:56758392-3:186700648]3:186700648]Tpbsv.BND.6:56758392-3:186700648]3:186700648]THG002.hs37d5.bnds \ No newline at end of file diff --git a/products/jbrowse-web/src/tests/__image_snapshots__/lgv_snapshot.svg b/products/jbrowse-web/src/tests/__image_snapshots__/lgv_snapshot.svg index 772d0c130a..6563442670 100644 --- a/products/jbrowse-web/src/tests/__image_snapshots__/lgv_snapshot.svg +++ b/products/jbrowse-web/src/tests/__image_snapshots__/lgv_snapshot.svg @@ -1 +1 @@ -volvox80bpctgA020406080001111GTACAGAGTGACGCTCAAAGCvolvox-sorted.bam (ctgA, canvas) \ No newline at end of file +volvox80bpctgA020406080001111GTACAGAGTGACGCTCAAAGCvolvox-sorted.bam (ctgA, canvas) \ No newline at end of file diff --git a/products/jbrowse-web/src/tests/__image_snapshots__/synteny_snapshot.svg b/products/jbrowse-web/src/tests/__image_snapshots__/synteny_snapshot.svg index 8b6b61590c..d6a4525239 100644 --- a/products/jbrowse-web/src/tests/__image_snapshots__/synteny_snapshot.svg +++ b/products/jbrowse-web/src/tests/__image_snapshots__/synteny_snapshot.svg @@ -1 +1 @@ -volvoxctgA1,8001,9002,0002,100333619537636283334354210515volvox_inv_indelsvolvox_random_invctgA1,8001,9002,0002,1003345844231067567193728415volvox_inv_indels \ No newline at end of file +volvoxctgA1,8001,9002,0002,100333619537636283334354210515volvox_inv_indelsvolvox_random_invctgA1,8001,9002,0002,1003345844231067567193728415volvox_inv_indels \ No newline at end of file diff --git a/products/jbrowse-web/src/tests/__snapshots__/ExportSvg.test.tsx.snap b/products/jbrowse-web/src/tests/__snapshots__/ExportSvg.test.tsx.snap index 2cbd14b784..19a09e82fd 100644 --- a/products/jbrowse-web/src/tests/__snapshots__/ExportSvg.test.tsx.snap +++ b/products/jbrowse-web/src/tests/__snapshots__/ExportSvg.test.tsx.snap @@ -4,6 +4,6 @@ exports[`export svg of circular 1`] = `"ctgA16,00018,00020,00022,00024,000volvoxctgA13,00014,00015,00016,00017,00018,00019,00020,000volvox_random_inv"`; -exports[`export svg of lgv 1`] = `"volvox80bpctgA020406080001111GTACAGAGTGACGCTCAAAGCvolvox-sorted.bam (ctgA, canvas)"`; +exports[`export svg of lgv 1`] = `"volvox80bpctgA020406080001111GTACAGAGTGACGCTCAAAGCvolvox-sorted.bam (ctgA, canvas)"`; -exports[`export svg of synteny 1`] = `"volvoxctgA1,8001,9002,0002,100333619537636283334354210515volvox_inv_indelsvolvox_random_invctgA1,8001,9002,0002,1003345844231067567193728415volvox_inv_indels"`; +exports[`export svg of synteny 1`] = `"volvoxctgA1,8001,9002,0002,100333619537636283334354210515volvox_inv_indelsvolvox_random_invctgA1,8001,9002,0002,1003345844231067567193728415volvox_inv_indels"`; diff --git a/products/jbrowse-web/src/tests/__snapshots__/ExportSvgBreakpointSplitView.test.tsx.snap b/products/jbrowse-web/src/tests/__snapshots__/ExportSvgBreakpointSplitView.test.tsx.snap index 678bcf503d..a2b2980663 100644 --- a/products/jbrowse-web/src/tests/__snapshots__/ExportSvgBreakpointSplitView.test.tsx.snap +++ b/products/jbrowse-web/src/tests/__snapshots__/ExportSvgBreakpointSplitView.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`export svg of breakpoint split view 1`] = `"hg19chr3186,698,000186,700,000chr3186,702,000186,704,0000077HG002.hs37d5.11kbpbsv.BND.3:186700648-6:56758392T[6:56758392[pbsv.BND.3:186700648-6:56758392T[6:56758392[HG002.hs37d5.bndshg19chr656,754,00056,756,00056,758,000chr656,758,00056,760,00056,762,0000088HG002.hs37d5.11kbpbsv.BND.6:56758392-3:186700648]3:186700648]Tpbsv.BND.6:56758392-3:186700648]3:186700648]THG002.hs37d5.bnds"`; +exports[`export svg of breakpoint split view 1`] = `"hg19chr3186,698,000186,700,000chr3186,702,000186,704,0000077HG002.hs37d5.11kbpbsv.BND.3:186700648-6:56758392T[6:56758392[pbsv.BND.3:186700648-6:56758392T[6:56758392[HG002.hs37d5.bndshg19chr656,754,00056,756,00056,758,000chr656,758,00056,760,00056,762,0000088HG002.hs37d5.11kbpbsv.BND.6:56758392-3:186700648]3:186700648]Tpbsv.BND.6:56758392-3:186700648]3:186700648]THG002.hs37d5.bnds"`; diff --git a/test_data/config_demo.json b/test_data/config_demo.json index b723b05a04..ac59c1bbc2 100644 --- a/test_data/config_demo.json +++ b/test_data/config_demo.json @@ -4326,6 +4326,26 @@ }, "assemblyNames": ["chm13v2.0"] }, + { + "type": "FeatureTrack", + "trackId": "hprc-v1.0-minigraph-grch38.bb.bed", + "name": "hprc-v1.0-minigraph-grch38.bb.bed", + "adapter": { + "type": "BedTabixAdapter", + "bedGzLocation": { + "uri": "hprc-v1.0-minigraph-grch38.bb.bed.gz", + "locationType": "UriLocation" + }, + "index": { + "location": { + "uri": "hprc-v1.0-minigraph-grch38.bb.bed.gz.tbi", + "locationType": "UriLocation" + }, + "indexType": "TBI" + } + }, + "assemblyNames": ["hg38"] + }, { "type": "VariantTrack", "trackId": "NA12878_LINE1", diff --git a/website/yarn.lock b/website/yarn.lock index 4e67079201..788c192bd9 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -214,38 +214,38 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" - integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.8": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.9.tgz#53eee4e68f1c1d0282aa0eb05ddb02d033fc43a0" + integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng== "@babel/core@^7.21.3", "@babel/core@^7.23.3": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.9.tgz#dc07c9d307162c97fa9484ea997ade65841c7c82" + integrity sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" + "@babel/generator" "^7.24.9" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-module-transforms" "^7.24.9" + "@babel/helpers" "^7.24.8" + "@babel/parser" "^7.24.8" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.3", "@babel/generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" - integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== +"@babel/generator@^7.23.3", "@babel/generator@^7.24.8", "@babel/generator@^7.24.9": + version "7.24.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76" + integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg== dependencies: - "@babel/types" "^7.25.0" + "@babel/types" "^7.24.9" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" @@ -265,40 +265,42 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271" + integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw== dependencies: - "@babel/compat-data" "^7.25.2" + "@babel/compat-data" "^7.24.8" "@babel/helper-validator-option" "^7.24.8" browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" - integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== +"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz#47f546408d13c200c0867f9d935184eaa0851b09" + integrity sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" "@babel/helper-member-expression-to-functions" "^7.24.8" "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-replace-supers" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/helper-split-export-declaration" "^7.24.7" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" - integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" + integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.2": +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== @@ -309,7 +311,29 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.24.8": +"@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-member-expression-to-functions@^7.24.7", "@babel/helper-member-expression-to-functions@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== @@ -325,15 +349,16 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.24.9": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29" + integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw== dependencies: + "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-module-imports" "^7.24.7" "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" "@babel/helper-optimise-call-expression@^7.24.7": version "7.24.7" @@ -347,23 +372,23 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" - integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== +"@babel/helper-remap-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7" + integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-wrap-function" "^7.25.0" - "@babel/traverse" "^7.25.0" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-wrap-function" "^7.24.7" -"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" - integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== +"@babel/helper-replace-supers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" + integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== dependencies: - "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.7" "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/traverse" "^7.25.0" "@babel/helper-simple-access@^7.24.7": version "7.24.7" @@ -381,6 +406,13 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + "@babel/helper-string-parser@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" @@ -396,22 +428,23 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== -"@babel/helper-wrap-function@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" - integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== +"@babel/helper-wrap-function@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" + integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw== dependencies: - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/helper-function-name" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helpers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" - integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== +"@babel/helpers@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.8.tgz#2820d64d5d6686cca8789dd15b074cd862795873" + integrity sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ== dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.8" "@babel/highlight@^7.24.7": version "7.24.7" @@ -423,34 +456,25 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.25.0", "@babel/parser@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" - integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== - dependencies: - "@babel/types" "^7.25.2" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" - integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.3" +"@babel/parser@^7.24.7", "@babel/parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" + integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" - integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" + integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" - integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" + integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": version "7.24.7" @@ -461,13 +485,13 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-optional-chaining" "^7.24.7" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" - integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" + integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -622,15 +646,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-async-generator-functions@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz#b785cf35d73437f6276b1e30439a57a50747bddf" - integrity sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q== +"@babel/plugin-transform-async-generator-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" + integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-remap-async-to-generator" "^7.25.0" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/traverse" "^7.25.0" "@babel/plugin-transform-async-to-generator@^7.24.7": version "7.24.7" @@ -648,12 +672,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-block-scoping@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" - integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== +"@babel/plugin-transform-block-scoping@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" + integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-class-properties@^7.24.7": version "7.24.7" @@ -672,16 +696,18 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" - integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== +"@babel/plugin-transform-classes@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz#ad23301fe5bc153ca4cf7fb572a9bc8b0b711cf7" + integrity sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/traverse" "^7.25.0" + "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.24.7": @@ -714,14 +740,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" - integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-transform-dynamic-import@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" @@ -754,14 +772,14 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" - integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== +"@babel/plugin-transform-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" + integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== dependencies: - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.1" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-json-strings@^7.24.7": version "7.24.7" @@ -771,12 +789,12 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" - integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== +"@babel/plugin-transform-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" + integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-logical-assignment-operators@^7.24.7": version "7.24.7" @@ -810,15 +828,15 @@ "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-simple-access" "^7.24.7" -"@babel/plugin-transform-modules-systemjs@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" - integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== +"@babel/plugin-transform-modules-systemjs@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" + integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== dependencies: - "@babel/helper-module-transforms" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" "@babel/plugin-transform-modules-umd@^7.24.7": version "7.24.7" @@ -927,11 +945,11 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz#71a665ed16ce618067d05f4a98130207349d82ae" - integrity sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.7.tgz#b85e8f240b14400277f106c9c9b585d9acf608a1" + integrity sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-display-name@^7.24.7": version "7.24.7" @@ -948,15 +966,15 @@ "@babel/plugin-transform-react-jsx" "^7.24.7" "@babel/plugin-transform-react-jsx@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" - integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz#17cd06b75a9f0e2bd076503400e7c4b99beedac4" + integrity sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/types" "^7.25.2" + "@babel/types" "^7.24.7" "@babel/plugin-transform-react-pure-annotations@^7.24.7": version "7.24.7" @@ -1030,14 +1048,13 @@ "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-typescript@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" - integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.8.tgz#c104d6286e04bf7e44b8cba1b686d41bad57eb84" + integrity sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-create-class-features-plugin" "^7.24.8" "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-typescript" "^7.24.7" "@babel/plugin-transform-unicode-escapes@^7.24.7": @@ -1072,19 +1089,18 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/preset-env@^7.20.2", "@babel/preset-env@^7.22.9": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" - integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.8.tgz#e0db94d7f17d6f0e2564e8d29190bc8cdacec2d1" + integrity sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ== dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-compilation-targets" "^7.25.2" + "@babel/compat-data" "^7.24.8" + "@babel/helper-compilation-targets" "^7.24.8" "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -1105,30 +1121,29 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.0" + "@babel/plugin-transform-async-generator-functions" "^7.24.7" "@babel/plugin-transform-async-to-generator" "^7.24.7" "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-block-scoping" "^7.24.7" "@babel/plugin-transform-class-properties" "^7.24.7" "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.25.0" + "@babel/plugin-transform-classes" "^7.24.8" "@babel/plugin-transform-computed-properties" "^7.24.7" "@babel/plugin-transform-destructuring" "^7.24.8" "@babel/plugin-transform-dotall-regex" "^7.24.7" "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" "@babel/plugin-transform-dynamic-import" "^7.24.7" "@babel/plugin-transform-exponentiation-operator" "^7.24.7" "@babel/plugin-transform-export-namespace-from" "^7.24.7" "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-function-name" "^7.24.7" "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-literals" "^7.24.7" "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" "@babel/plugin-transform-member-expression-literals" "^7.24.7" "@babel/plugin-transform-modules-amd" "^7.24.7" "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.25.0" + "@babel/plugin-transform-modules-systemjs" "^7.24.7" "@babel/plugin-transform-modules-umd" "^7.24.7" "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" "@babel/plugin-transform-new-target" "^7.24.7" @@ -1198,46 +1213,49 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.22.6": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.25.0.tgz#0a318b66dfc765ad10562d829fea372ed7e1eb7d" - integrity sha512-BOehWE7MgQ8W8Qn0CQnMtg2tHPHPulcS/5AVpFvs2KCK1ET+0WqZqPvnpRpFN81gYoFopdIEJX9Sgjw3ZBccPg== + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.8.tgz#c0ae5a1c380f8442920866d0cc51de8024507e28" + integrity sha512-DXG/BhegtMHhnN7YPIvxWd303/9aXvYFD1TjNL3CD6tUrhI2LVsg3Lck0aql5TRH29n4sj3emcROypkZVUfSuA== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.22.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" - integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.8.tgz#5d958c3827b13cc6d05e038c07fb2e5e3420d82e" + integrity sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7", "@babel/template@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== +"@babel/template@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/traverse@^7.22.8", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" - integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== +"@babel/traverse@^7.22.8", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" + integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/parser" "^7.25.3" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.2" + "@babel/generator" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.8" + "@babel/types" "^7.24.8" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.4.4": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" - integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== +"@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9", "@babel/types@^7.4.4": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" + integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" @@ -1741,9 +1759,9 @@ stylis "4.2.0" "@emotion/cache@^11.11.0", "@emotion/cache@^11.13.0": - version "11.13.1" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7" - integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw== + version "11.13.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.0.tgz#8f51748b8116691dee0408b08ad758b8d246b097" + integrity sha512-hPV345J/tH0Cwk2wnU/3PBzORQ9HeX+kQSbwI+jslzpRCHE6fSGTohswksA/Ensr8znPzwfzKZCmAM9Lmlhp7g== dependencies: "@emotion/memoize" "^0.9.0" "@emotion/sheet" "^1.4.0" @@ -1942,28 +1960,28 @@ dependencies: "@types/mdx" "^2.0.0" -"@mui/core-downloads-tracker@^5.16.6": - version "5.16.6" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.6.tgz#f029e12ffda8eb79838cc85897f03a628010037c" - integrity sha512-kytg6LheUG42V8H/o/Ptz3olSO5kUXW9zF0ox18VnblX6bO2yif1FPItgc3ey1t5ansb1+gbe7SatntqusQupg== +"@mui/core-downloads-tracker@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.4.tgz#a34de72acd7e81fdbcc7eeb07786205e90dda148" + integrity sha512-rNdHXhclwjEZnK+//3SR43YRx0VtjdHnUFhMSGYmAMJve+KiwEja/41EYh8V3pZKqF2geKyfcFUenTfDTYUR4w== "@mui/icons-material@^5.11.16": - version "5.16.6" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.6.tgz#7067ddba693bec22f77592cb9cd516e2f1c1fd6e" - integrity sha512-ceNGjoXheH9wbIFa1JHmSc9QVjJUvh18KvHrR4/FkJCSi9HXJ+9ee1kUhCOEFfuxNF8UB6WWVrIUOUgRd70t0A== + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.4.tgz#8c7e228c1e178992d89fab47e057222c8209bd7b" + integrity sha512-j9/CWctv6TH6Dou2uR2EH7UOgu79CW/YcozxCYVLJ7l03pCsiOlJ5sBArnWJxJ+nGkFwyL/1d1k8JEPMDR125A== dependencies: "@babel/runtime" "^7.23.9" "@mui/material@^5.12.0": - version "5.16.6" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.6.tgz#c7d695f4a9a473052dc086e64471d0435b7e4a52" - integrity sha512-0LUIKBOIjiFfzzFNxXZBRAyr9UQfmTAFzbt6ziOU2FDXhorNN2o3N9/32mNJbCA8zJo2FqFU6d3dtoqUDyIEfA== + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.4.tgz#992d630637d9d38620e4937fb11d0a97965fdabf" + integrity sha512-dBnh3/zRYgEVIS3OE4oTbujse3gifA0qLMmuUk13ywsDCbngJsdgwW5LuYeiT5pfA8PGPGSqM7mxNytYXgiMCw== dependencies: "@babel/runtime" "^7.23.9" - "@mui/core-downloads-tracker" "^5.16.6" - "@mui/system" "^5.16.6" + "@mui/core-downloads-tracker" "^5.16.4" + "@mui/system" "^5.16.4" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.6" + "@mui/utils" "^5.16.4" "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" @@ -1972,35 +1990,35 @@ react-is "^18.3.1" react-transition-group "^4.4.5" -"@mui/private-theming@^5.16.6": - version "5.16.6" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.6.tgz#547671e7ae3f86b68d1289a0b90af04dfcc1c8c9" - integrity sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw== +"@mui/private-theming@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.4.tgz#0118f137975b35dc4774c6d593b8fcf86594c3fc" + integrity sha512-ZsAm8cq31SJ37SVWLRlu02v9SRthxnfQofaiv14L5Bht51B0dz6yQEoVU/V8UduZDCCIrWkBHuReVfKhE/UuXA== dependencies: "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.16.6" + "@mui/utils" "^5.16.4" prop-types "^15.8.1" -"@mui/styled-engine@^5.16.6": - version "5.16.6" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.6.tgz#60110c106dd482dfdb7e2aa94fd6490a0a3f8852" - integrity sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g== +"@mui/styled-engine@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.4.tgz#a7a8c9079c307bab91ccd65ed5dd1496ddf2a3ab" + integrity sha512-0+mnkf+UiAmTVB8PZFqOhqf729Yh0Cxq29/5cA3VAyDVTRIUUQ8FXQhiAhUIbijFmM72rY80ahFPXIm4WDbzcA== dependencies: "@babel/runtime" "^7.23.9" "@emotion/cache" "^11.11.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.16.6": - version "5.16.6" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.6.tgz#2dabe63d2e45816ce611c40d6e3f79b9c2ccbcd7" - integrity sha512-5xgyJjBIMPw8HIaZpfbGAaFYPwImQn7Nyh+wwKWhvkoIeDosQ1ZMVrbTclefi7G8hNmqhip04duYwYpbBFnBgw== +"@mui/system@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.4.tgz#c03f971ed273f0ad06c69c949c05e866ad211407" + integrity sha512-ET1Ujl2/8hbsD611/mqUuNArMCGv/fIWO/f8B3ZqF5iyPHM2aS74vhTNyjytncc4i6dYwGxNk+tLa7GwjNS0/w== dependencies: "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.16.6" - "@mui/styled-engine" "^5.16.6" + "@mui/private-theming" "^5.16.4" + "@mui/styled-engine" "^5.16.4" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.6" + "@mui/utils" "^5.16.4" clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" @@ -2010,13 +2028,12 @@ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.15.tgz#dadd232fe9a70be0d526630675dff3b110f30b53" integrity sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q== -"@mui/utils@^5.16.6": - version "5.16.6" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.6.tgz#905875bbc58d3dcc24531c3314a6807aba22a711" - integrity sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA== +"@mui/utils@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.4.tgz#8e50e27a630e3d8eeb3e9d3bc31cbb0e4956f5fd" + integrity sha512-nlppYwq10TBIFqp7qxY0SvbACOXeOjeVL3pOcDsK0FT8XjrEXh9/+lkg8AEIzD16z7YfiJDQjaJG2OLkE7BxNg== dependencies: "@babel/runtime" "^7.23.9" - "@mui/types" "^7.2.15" "@types/prop-types" "^15.7.12" clsx "^2.1.1" prop-types "^15.8.1" @@ -2056,9 +2073,9 @@ graceful-fs "4.2.10" "@pnpm/npm-conf@^2.1.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.0.tgz#c687bd4eecd16347e197db3bfe7e28b12aa80bfd" - integrity sha512-DqrO+oXGR7HCuicNy6quk6ALJSDDPKI7RZz1bP5im8mSL8J2e+9w26LdkjuAfpAjOutYUJVbnXnx4IbTQeIgfw== + version "2.2.2" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" + integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== dependencies: "@pnpm/config.env-replace" "^1.1.0" "@pnpm/network.ca-file" "^1.0.1" @@ -2291,9 +2308,9 @@ "@types/estree" "*" "@types/eslint@*": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff" - integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2423,11 +2440,11 @@ "@types/node" "*" "@types/node@*": - version "22.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" - integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== + version "20.14.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.11.tgz#09b300423343460455043ddd4d0ded6ac579b74b" + integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA== dependencies: - undici-types "~6.13.0" + undici-types "~5.26.4" "@types/node@^17.0.5": version "17.0.45" @@ -2554,9 +2571,9 @@ integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== "@types/ws@^8.5.5": - version "8.5.12" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" - integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + version "8.5.11" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.11.tgz#90ad17b3df7719ce3e6bc32f83ff954d38656508" + integrity sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w== dependencies: "@types/node" "*" @@ -2905,15 +2922,15 @@ at-least-node@^1.0.0: integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== autoprefixer@^10.4.14, autoprefixer@^10.4.19: - version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + version "10.4.19" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001599" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.1" + picocolors "^1.0.0" postcss-value-parser "^4.2.0" babel-loader@^9.1.3: @@ -2950,12 +2967,12 @@ babel-plugin-polyfill-corejs2@^0.4.10: semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" babel-plugin-polyfill-regenerator@^0.6.1: version "0.6.2" @@ -3063,14 +3080,14 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^4.23.1: + version "4.23.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" + integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" + caniuse-lite "^1.0.30001640" + electron-to-chromium "^1.4.820" + node-releases "^2.0.14" update-browserslist-db "^1.1.0" buffer-from@^1.0.0: @@ -3150,10 +3167,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646: - version "1.0.30001649" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz#3ec700309ca0da2b0d3d5fb03c411b191761c992" - integrity sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001640: + version "1.0.30001642" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz#6aa6610eb24067c246d30c57f055a9d0a7f8d05f" + integrity sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA== ccount@^2.0.0: version "2.0.1" @@ -3496,22 +3513,22 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.37.1, core-js-compat@^3.38.0: - version "3.38.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" - integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== +core-js-compat@^3.36.1, core-js-compat@^3.37.1: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== dependencies: - browserslist "^4.23.3" + browserslist "^4.23.0" core-js-pure@^3.30.2: - version "3.38.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.38.0.tgz#bc802cd152e33d5b0ec733b656c71cb847cac701" - integrity sha512-8balb/HAXo06aHP58mZMtXgD8vcnXz9tUDePgqBgJgKdmTlMt+jw3ujqniuBDQXMvTzxnMpxHFeuSM3g1jWQuQ== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.37.1.tgz#2b4b34281f54db06c9a9a5bd60105046900553bd" + integrity sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA== core-js@^3.31.1: - version "3.38.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.0.tgz#8acb7c050bf2ccbb35f938c0d040132f6110f636" - integrity sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" + integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== core-util-is@~1.0.0: version "1.0.3" @@ -3732,9 +3749,9 @@ debug@2.6.9, debug@^2.6.0: ms "2.0.0" debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" @@ -3973,10 +3990,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz#cd477c830dd6fca41fbd5465c1ff6ce08ac22343" - integrity sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA== +electron-to-chromium@^1.4.820: + version "1.4.832" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.832.tgz#d25882ce0a9237577b039bffa124ecef1822003b" + integrity sha512-cTen3SB0H2SGU7x467NRe1eVcQgcuS6jckKfWJHia2eo0cHIGOqHoAxevIYZD4eRHcWjkvFzo93bi3vJ9W+1lA== emoji-regex@^8.0.0: version "8.0.0" @@ -3999,9 +4016,9 @@ emojis-list@^3.0.0: integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== emoticon@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" - integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.0.1.tgz#2d2bbbf231ce3a5909e185bbb64a9da703a1e749" + integrity sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw== encodeurl@~1.0.2: version "1.0.2" @@ -4009,9 +4026,9 @@ encodeurl@~1.0.2: integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== enhanced-resolve@^5.17.0: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + version "5.17.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" + integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -5433,9 +5450,9 @@ latest-version@^7.0.0: package-json "^8.1.0" launch-editor@^2.6.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.1.tgz#3bda72af213ec9b46b170e39661916ec66c2f463" - integrity sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.0.tgz#7255d90bdba414448e2138faa770a74f28451305" + integrity sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" @@ -6400,10 +6417,10 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +node-releases@^2.0.14: + version "2.0.17" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.17.tgz#d74bc4fec38d839eec5db2a3c9c963d4f33cb366" + integrity sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -7029,18 +7046,18 @@ postcss-zindex@^6.0.2: integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4.38: - version "8.4.41" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" - integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== + version "8.4.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3" + integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== dependencies: nanoid "^3.3.7" picocolors "^1.0.1" source-map-js "^1.2.0" preact@^10.13.2: - version "10.23.1" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.23.1.tgz#d400107289bc979881c5212cb5f5cd22cd1dc38c" - integrity sha512-O5UdRsNh4vdZaTieWe3XOgSpdMAmkIYBCT3VhQDlKrzyCm8lUYsk0fmVEvoQQifoOjFRTaHZO69ylrzTW2BH+A== + version "10.22.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.22.1.tgz#6a3589973fe0c6e53211091607d31f4b7b27334d" + integrity sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A== pretty-error@^4.0.0: version "4.0.0" @@ -7626,9 +7643,9 @@ rtl-detect@^1.0.4: integrity sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ== rtlcss@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.2.0.tgz#627b08806bd6851adb4d0670b63919fb6a3ea038" - integrity sha512-AV+V3oOVvCrqyH5Q/6RuT1IDH1Xy5kJTkEWTWZPN5rdQ3HCFOd8SrbC7c6N5Y8bPpCfZSR6yYbUATXslvfvu5g== + version "4.1.1" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.1.1.tgz#f20409fcc197e47d1925996372be196fee900c0c" + integrity sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -8290,14 +8307,14 @@ typedarray-to-buffer@^3.1.5: is-typedarray "^1.0.0" typescript@^5.0.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - -undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== + version "5.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" + integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0"