From e08700c1b5dd9217585e84a79506ed9767d0d8ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Thu, 25 Jan 2024 07:32:07 +0100 Subject: [PATCH] Dashboard: New EmbeddedDashboard runtime component (#78916) * Embedding dashboards exploratino * Update * Update * Added e2e test * Update * initial state, and onStateChange, only explore panel menu action and other fixes and tests * fix e2e spec * Fix url * fixing test --- .../embedded-dashboard.spec.ts | 24 + packages/grafana-runtime/package.json | 1 + .../src/components/EmbeddedDashboard.tsx | 32 + packages/grafana-runtime/src/index.ts | 1 + public/app/app.ts | 3 + .../embedding/EmbeddedDashboard.tsx | 130 ++ .../embedding/EmbeddedDashboardLazy.tsx | 12 + .../embedding/EmbeddedDashboardTestPage.tsx | 22 + .../pages/DashboardScenePage.tsx | 4 +- .../DashboardScenePageStateManager.test.ts | 34 +- .../pages/DashboardScenePageStateManager.ts | 33 +- .../scene/PanelMenuBehavior.test.tsx | 21 +- .../scene/PanelMenuBehavior.tsx | 251 +-- .../transformSaveModelToScene.ts | 4 + .../HelpWizard/SupportSnapshotService.ts | 2 +- .../containers/DashboardPageProxy.tsx | 2 +- public/app/routes/routes.tsx | 10 + public/app/types/dashboard.ts | 1 + yarn.lock | 1499 +++++++++++++++-- 19 files changed, 1768 insertions(+), 318 deletions(-) create mode 100644 e2e/dashboards-suite/embedded-dashboard.spec.ts create mode 100644 packages/grafana-runtime/src/components/EmbeddedDashboard.tsx create mode 100644 public/app/features/dashboard-scene/embedding/EmbeddedDashboard.tsx create mode 100644 public/app/features/dashboard-scene/embedding/EmbeddedDashboardLazy.tsx create mode 100644 public/app/features/dashboard-scene/embedding/EmbeddedDashboardTestPage.tsx diff --git a/e2e/dashboards-suite/embedded-dashboard.spec.ts b/e2e/dashboards-suite/embedded-dashboard.spec.ts new file mode 100644 index 00000000000..8c52271994c --- /dev/null +++ b/e2e/dashboards-suite/embedded-dashboard.spec.ts @@ -0,0 +1,24 @@ +import { selectors } from '@grafana/e2e-selectors'; + +import { e2e } from '../utils'; +import { fromBaseUrl } from '../utils/support/url'; + +describe('Embedded dashboard', function () { + beforeEach(() => { + e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD')); + }); + + it('open test page', function () { + cy.visit(fromBaseUrl('/dashboards/embedding-test')); + + // Verify pie charts are rendered + cy.get( + `[data-viz-panel-key="panel-11"] [data-testid^="${selectors.components.Panels.Visualization.PieChart.svgSlice}"]` + ).should('have.length', 5); + + // Verify no url sync + e2e.components.TimePicker.openButton().click(); + cy.get('label:contains("Last 1 hour")').click(); + cy.url().should('eq', fromBaseUrl('/dashboards/embedding-test')); + }); +}); diff --git a/packages/grafana-runtime/package.json b/packages/grafana-runtime/package.json index 45c81d0ce36..6ad2bbe3db3 100644 --- a/packages/grafana-runtime/package.json +++ b/packages/grafana-runtime/package.json @@ -40,6 +40,7 @@ "@grafana/data": "10.4.0-pre", "@grafana/e2e-selectors": "10.4.0-pre", "@grafana/faro-web-sdk": "^1.3.6", + "@grafana/schema": "10.4.0-pre", "@grafana/ui": "10.4.0-pre", "history": "4.10.1", "lodash": "4.17.21", diff --git a/packages/grafana-runtime/src/components/EmbeddedDashboard.tsx b/packages/grafana-runtime/src/components/EmbeddedDashboard.tsx new file mode 100644 index 00000000000..92a78e5d4ea --- /dev/null +++ b/packages/grafana-runtime/src/components/EmbeddedDashboard.tsx @@ -0,0 +1,32 @@ +import React from 'react'; + +export interface EmbeddedDashboardProps { + uid?: string; + /** + * Use this property to override initial time and variable state. + * Example: ?from=now-5m&to=now&var-varname=value1 + */ + initialState?: string; + /** + * Is called when ever the internal embedded dashboards url state changes. + * Can be used to sync the internal url state (Which is not synced to URL) with the external context, or to + * preserve some of the state when moving to other embedded dashboards. + */ + onStateChange?: (state: string) => void; +} + +/** + * Returns a React component that renders an embedded dashboard. + * @alpha + */ +export let EmbeddedDashboard: React.ComponentType = () => { + throw new Error('EmbeddedDashboard requires runtime initialization'); +}; + +/** + * + * @internal + */ +export function setEmbeddedDashboard(component: React.ComponentType) { + EmbeddedDashboard = component; +} diff --git a/packages/grafana-runtime/src/index.ts b/packages/grafana-runtime/src/index.ts index d9ff32a39c0..2d7b8be9e9d 100644 --- a/packages/grafana-runtime/src/index.ts +++ b/packages/grafana-runtime/src/index.ts @@ -55,3 +55,4 @@ export { createDataSourcePluginEventProperties, } from './analytics/plugins/eventProperties'; export { usePluginInteractionReporter } from './analytics/plugins/usePluginInteractionReporter'; +export { type EmbeddedDashboardProps, EmbeddedDashboard, setEmbeddedDashboard } from './components/EmbeddedDashboard'; diff --git a/public/app/app.ts b/public/app/app.ts index 9535e431516..5d91e64dca8 100644 --- a/public/app/app.ts +++ b/public/app/app.ts @@ -33,6 +33,7 @@ import { setRunRequest, setPluginImportUtils, setPluginExtensionGetter, + setEmbeddedDashboard, setAppEvents, type GetPluginExtensions, } from '@grafana/runtime'; @@ -72,6 +73,7 @@ import { startMeasure, stopMeasure } from './core/utils/metrics'; import { initDevFeatures } from './dev'; import { initAuthConfig } from './features/auth-config'; import { getTimeSrv } from './features/dashboard/services/TimeSrv'; +import { EmbeddedDashboardLazy } from './features/dashboard-scene/embedding/EmbeddedDashboardLazy'; import { initGrafanaLive } from './features/live'; import { PanelDataErrorView } from './features/panel/components/PanelDataErrorView'; import { PanelRenderer } from './features/panel/components/PanelRenderer'; @@ -134,6 +136,7 @@ export class GrafanaApp { setPluginPage(PluginPage); setPanelDataErrorView(PanelDataErrorView); setLocationSrv(locationService); + setEmbeddedDashboard(EmbeddedDashboardLazy); setTimeZoneResolver(() => config.bootData.user.timezone); initGrafanaLive(); diff --git a/public/app/features/dashboard-scene/embedding/EmbeddedDashboard.tsx b/public/app/features/dashboard-scene/embedding/EmbeddedDashboard.tsx new file mode 100644 index 00000000000..7cab41afc7c --- /dev/null +++ b/public/app/features/dashboard-scene/embedding/EmbeddedDashboard.tsx @@ -0,0 +1,130 @@ +import { css } from '@emotion/css'; +import React, { useEffect, useState } from 'react'; + +import { GrafanaTheme2, urlUtil } from '@grafana/data'; +import { EmbeddedDashboardProps } from '@grafana/runtime'; +import { SceneObjectStateChangedEvent, sceneUtils } from '@grafana/scenes'; +import { Spinner, Alert, useStyles2 } from '@grafana/ui'; + +import { getDashboardScenePageStateManager } from '../pages/DashboardScenePageStateManager'; +import { DashboardScene } from '../scene/DashboardScene'; + +export function EmbeddedDashboard(props: EmbeddedDashboardProps) { + const stateManager = getDashboardScenePageStateManager(); + const { dashboard, loadError } = stateManager.useState(); + + useEffect(() => { + stateManager.loadDashboard({ uid: props.uid!, isEmbedded: true }); + return () => { + stateManager.clearState(); + }; + }, [stateManager, props.uid]); + + if (loadError) { + return ( + + {loadError} + + ); + } + + if (!dashboard) { + return ; + } + + return ; +} + +interface RendererProps extends EmbeddedDashboardProps { + model: DashboardScene; +} + +function EmbeddedDashboardRenderer({ model, initialState, onStateChange }: RendererProps) { + const [isActive, setIsActive] = useState(false); + const { controls, body } = model.useState(); + const styles = useStyles2(getStyles); + + useEffect(() => { + setIsActive(true); + + if (initialState) { + const searchParms = new URLSearchParams(initialState); + sceneUtils.syncStateFromSearchParams(model, searchParms); + } + + return model.activate(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [model]); + + useSubscribeToEmbeddedUrlState(onStateChange, model); + + if (!isActive) { + return null; + } + + return ( +
+ {controls && ( +
+ {controls.map((control) => ( + + ))} +
+ )} +
+ +
+
+ ); +} + +function useSubscribeToEmbeddedUrlState(onStateChange: ((state: string) => void) | undefined, model: DashboardScene) { + useEffect(() => { + if (!onStateChange) { + return; + } + + let lastState = ''; + const sub = model.subscribeToEvent(SceneObjectStateChangedEvent, (evt) => { + if (evt.payload.changedObject.urlSync) { + const state = sceneUtils.getUrlState(model); + const stateAsString = urlUtil.renderUrl('', state); + + if (lastState !== stateAsString) { + lastState = stateAsString; + onStateChange(stateAsString); + } + } + }); + + return () => sub.unsubscribe(); + }, [model, onStateChange]); +} + +function getStyles(theme: GrafanaTheme2) { + return { + canvas: css({ + label: 'canvas-content', + display: 'flex', + flexDirection: 'column', + flexBasis: '100%', + flexGrow: 1, + }), + body: css({ + label: 'body', + flexGrow: 1, + display: 'flex', + gap: '8px', + marginBottom: theme.spacing(2), + }), + controls: css({ + display: 'flex', + flexWrap: 'wrap', + alignItems: 'center', + gap: theme.spacing(1), + top: 0, + zIndex: theme.zIndex.navbarFixed, + padding: theme.spacing(0, 0, 2, 0), + }), + }; +} diff --git a/public/app/features/dashboard-scene/embedding/EmbeddedDashboardLazy.tsx b/public/app/features/dashboard-scene/embedding/EmbeddedDashboardLazy.tsx new file mode 100644 index 00000000000..b52299cb9bc --- /dev/null +++ b/public/app/features/dashboard-scene/embedding/EmbeddedDashboardLazy.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +import { EmbeddedDashboardProps } from '@grafana/runtime'; + +export function EmbeddedDashboardLazy(props: EmbeddedDashboardProps) { + return ; +} + +const Component = React.lazy(async () => { + const { EmbeddedDashboard } = await import(/* webpackChunkName: "EmbeddedDashboard" */ './EmbeddedDashboard'); + return { default: EmbeddedDashboard }; +}); diff --git a/public/app/features/dashboard-scene/embedding/EmbeddedDashboardTestPage.tsx b/public/app/features/dashboard-scene/embedding/EmbeddedDashboardTestPage.tsx new file mode 100644 index 00000000000..065469b08c6 --- /dev/null +++ b/public/app/features/dashboard-scene/embedding/EmbeddedDashboardTestPage.tsx @@ -0,0 +1,22 @@ +import React, { useState } from 'react'; + +import { Box } from '@grafana/ui'; +import { Page } from 'app/core/components/Page/Page'; + +import { EmbeddedDashboard } from './EmbeddedDashboard'; + +export function EmbeddedDashboardTestPage() { + const [state, setState] = useState('?from=now-5m&to=now'); + + return ( + + Internal url state: {state} + + + ); +} + +export default EmbeddedDashboardTestPage; diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx b/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx index 9b04f129591..67cd440c42b 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx +++ b/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx @@ -18,9 +18,9 @@ export function DashboardScenePage({ match, route }: Props) { useEffect(() => { if (route.routeName === DashboardRoutes.Home) { - stateManager.loadDashboard(route.routeName); + stateManager.loadDashboard({ uid: route.routeName }); } else { - stateManager.loadDashboard(match.params.uid!); + stateManager.loadDashboard({ uid: match.params.uid! }); } return () => { diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts index dce180fa0df..df2b87c9279 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts +++ b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts @@ -14,12 +14,12 @@ describe('DashboardScenePageStateManager', () => { const loadDashboardMock = setupLoadDashboardMock({ dashboard: { uid: 'fake-dash', editable: true }, meta: {} }); const loader = new DashboardScenePageStateManager({}); - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); expect(loadDashboardMock).toHaveBeenCalledWith('db', '', 'fake-dash'); // should use cache second time - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); expect(loadDashboardMock.mock.calls.length).toBe(1); }); @@ -27,7 +27,7 @@ describe('DashboardScenePageStateManager', () => { setupLoadDashboardMock({ dashboard: undefined, meta: {} }); const loader = new DashboardScenePageStateManager({}); - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); expect(loader.state.dashboard).toBeUndefined(); expect(loader.state.isLoading).toBe(false); @@ -38,7 +38,7 @@ describe('DashboardScenePageStateManager', () => { setupLoadDashboardMock({ dashboard: { uid: 'fake-dash' }, meta: {} }); const loader = new DashboardScenePageStateManager({}); - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); expect(loader.state.dashboard?.state.uid).toBe('fake-dash'); expect(loader.state.loadError).toBe(undefined); @@ -49,7 +49,7 @@ describe('DashboardScenePageStateManager', () => { setupLoadDashboardMock({ dashboard: { uid: 'fake-dash' }, meta: {} }); const loader = new DashboardScenePageStateManager({}); - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); expect(loader.state.dashboard).toBeInstanceOf(DashboardScene); expect(loader.state.isLoading).toBe(false); @@ -61,7 +61,7 @@ describe('DashboardScenePageStateManager', () => { locationService.partial({ from: 'now-5m', to: 'now' }); const loader = new DashboardScenePageStateManager({}); - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); const dash = loader.state.dashboard; expect(dash!.state.$timeRange?.state.from).toEqual('now-5m'); @@ -71,12 +71,24 @@ describe('DashboardScenePageStateManager', () => { // try loading again (and hitting cache) locationService.partial({ from: 'now-10m', to: 'now' }); - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); const dash2 = loader.state.dashboard; expect(dash2!.state.$timeRange?.state.from).toEqual('now-10m'); }); + it('should not initialize url sync for embedded dashboards', async () => { + setupLoadDashboardMock({ dashboard: { uid: 'fake-dash' }, meta: {} }); + + locationService.partial({ from: 'now-5m', to: 'now' }); + + const loader = new DashboardScenePageStateManager({}); + await loader.loadDashboard({ uid: 'fake-dash', isEmbedded: true }); + const dash = loader.state.dashboard; + + expect(dash!.state.$timeRange?.state.from).toEqual('now-6h'); + }); + describe('caching', () => { it('should cache the dashboard DTO', async () => { setupLoadDashboardMock({ dashboard: { uid: 'fake-dash' }, meta: {} }); @@ -85,7 +97,7 @@ describe('DashboardScenePageStateManager', () => { expect(loader.getFromCache('fake-dash')).toBeNull(); - await loader.loadDashboard('fake-dash'); + await loader.loadDashboard({ uid: 'fake-dash' }); expect(loader.getFromCache('fake-dash')).toBeDefined(); }); @@ -98,15 +110,15 @@ describe('DashboardScenePageStateManager', () => { expect(loader.getFromCache('fake-dash')).toBeNull(); - await loader.fetchDashboard('fake-dash'); + await loader.fetchDashboard({ uid: 'fake-dash' }); expect(loadDashSpy).toHaveBeenCalledTimes(1); advanceBy(DASHBOARD_CACHE_TTL / 2); - await loader.fetchDashboard('fake-dash'); + await loader.fetchDashboard({ uid: 'fake-dash' }); expect(loadDashSpy).toHaveBeenCalledTimes(1); advanceBy(DASHBOARD_CACHE_TTL / 2 + 1); - await loader.fetchDashboard('fake-dash'); + await loader.fetchDashboard({ uid: 'fake-dash' }); expect(loadDashSpy).toHaveBeenCalledTimes(2); }); }); diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts index 1b55e729798..f061185d88a 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts +++ b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts @@ -26,6 +26,12 @@ interface DashboardCacheEntry { dashboard: DashboardDTO; ts: number; } + +export interface LoadDashboardOptions { + uid: string; + isEmbedded?: boolean; +} + export class DashboardScenePageStateManager extends StateManagerBase { private cache: Record = {}; // This is a simplistic, short-term cache for DashboardDTOs to avoid fetching the same dashboard multiple times across a short time span. @@ -33,7 +39,7 @@ export class DashboardScenePageStateManager extends StateManagerBase { - const fromCache = this.cache[uid]; + private async loadScene(options: LoadDashboardOptions): Promise { + const fromCache = this.cache[options.uid]; if (fromCache) { + // Need to update this in case we cached an embedded but now opening it standard mode + fromCache.state.meta.isEmbedded = options.isEmbedded; return fromCache; } this.setState({ isLoading: true }); - const rsp = await this.fetchDashboard(uid); + const rsp = await this.fetchDashboard(options); if (rsp?.dashboard) { + if (options.isEmbedded) { + rsp.meta.isEmbedded = true; + } + const scene = transformSaveModelToScene(rsp); - this.cache[uid] = scene; + this.cache[options.uid] = scene; return scene; } diff --git a/public/app/features/dashboard-scene/scene/PanelMenuBehavior.test.tsx b/public/app/features/dashboard-scene/scene/PanelMenuBehavior.test.tsx index 58472bc82e5..c582b1ed06e 100644 --- a/public/app/features/dashboard-scene/scene/PanelMenuBehavior.test.tsx +++ b/public/app/features/dashboard-scene/scene/PanelMenuBehavior.test.tsx @@ -468,10 +468,28 @@ describe('panelMenuBehavior', () => { ]) ); }); + + it('should only contain explore when embedded', async () => { + const { menu, panel } = await buildTestScene({ isEmbedded: true }); + + panel.getPlugin = () => getPanelPlugin({ skipDataQuery: false }); + + mocks.contextSrv.hasAccessToExplore.mockReturnValue(true); + mocks.getExploreUrl.mockReturnValue(Promise.resolve('/explore')); + + menu.activate(); + + await new Promise((r) => setTimeout(r, 1)); + + expect(menu.state.items?.length).toBe(1); + expect(menu.state.items?.[0].text).toBe('Explore'); + }); }); }); -interface SceneOptions {} +interface SceneOptions { + isEmbedded?: boolean; +} async function buildTestScene(options: SceneOptions) { const menu = new VizPanelMenu({ @@ -503,6 +521,7 @@ async function buildTestScene(options: SceneOptions) { }), meta: { canEdit: true, + isEmbedded: options.isEmbedded ?? false, }, body: new SceneGridLayout({ children: [ diff --git a/public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx b/public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx index 2f1e2a3a080..d85d6dc7564 100644 --- a/public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx +++ b/public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx @@ -1,6 +1,7 @@ import { InterpolateFunction, PanelMenuItem, + PanelPlugin, PluginExtensionPanelContext, PluginExtensionPoints, getTimeZone, @@ -18,7 +19,7 @@ import { addDataTrailPanelAction } from 'app/features/trails/dashboardIntegratio import { ShareModal } from '../sharing/ShareModal'; import { DashboardInteractions } from '../utils/interactions'; import { getEditPanelUrl, getInspectUrl, getViewPanelUrl, tryGetExploreUrlForPanel } from '../utils/urlBuilders'; -import { getPanelIdForVizPanel, getQueryRunnerFor } from '../utils/utils'; +import { getDashboardSceneFor, getPanelIdForVizPanel, getQueryRunnerFor } from '../utils/utils'; import { DashboardScene } from './DashboardScene'; import { LibraryVizPanel } from './LibraryVizPanel'; @@ -36,139 +37,92 @@ export function panelMenuBehavior(menu: VizPanelMenu) { const items: PanelMenuItem[] = []; const moreSubMenu: PanelMenuItem[] = []; - const inspectSubMenu: PanelMenuItem[] = []; const panelId = getPanelIdForVizPanel(panel); - const dashboard = panel.getRoot(); + const dashboard = getDashboardSceneFor(panel); + const { isEmbedded } = dashboard.state.meta; - if (dashboard instanceof DashboardScene) { + const exploreMenuItem = await getExploreMenuItem(panel); + + // For embedded dashboards we only have explore action for now + if (isEmbedded) { + if (exploreMenuItem) { + menu.setState({ items: [exploreMenuItem] }); + } + return; + } + + items.push({ + text: t('panel.header-menu.view', `View`), + iconClassName: 'eye', + shortcut: 'v', + onClick: () => DashboardInteractions.panelMenuItemClicked('view'), + href: getViewPanelUrl(panel), + }); + + if (dashboard.canEditDashboard()) { + // We could check isEditing here but I kind of think this should always be in the menu, + // and going into panel edit should make the dashboard go into edit mode is it's not already items.push({ - text: t('panel.header-menu.view', `View`), + text: t('panel.header-menu.edit', `Edit`), iconClassName: 'eye', - shortcut: 'v', - onClick: () => DashboardInteractions.panelMenuItemClicked('view'), - href: getViewPanelUrl(panel), + shortcut: 'e', + onClick: () => DashboardInteractions.panelMenuItemClicked('edit'), + href: getEditPanelUrl(panelId), }); + } - if (dashboard.canEditDashboard()) { - // We could check isEditing here but I kind of think this should always be in the menu, - // and going into panel edit should make the dashboard go into edit mode is it's not already - items.push({ - text: t('panel.header-menu.edit', `Edit`), - iconClassName: 'eye', - shortcut: 'e', - onClick: () => DashboardInteractions.panelMenuItemClicked('edit'), - href: getEditPanelUrl(panelId), - }); - } + items.push({ + text: t('panel.header-menu.share', `Share`), + iconClassName: 'share-alt', + onClick: () => { + DashboardInteractions.panelMenuItemClicked('share'); + dashboard.showModal(new ShareModal({ panelRef: panel.getRef(), dashboardRef: dashboard.getRef() })); + }, + shortcut: 'p s', + }); - items.push({ - text: t('panel.header-menu.share', `Share`), + if (panel.parent instanceof LibraryVizPanel) { + // TODO: Implement lib panel unlinking + } else { + moreSubMenu.push({ + text: t('panel.header-menu.create-library-panel', `Create library panel`), iconClassName: 'share-alt', onClick: () => { - DashboardInteractions.panelMenuItemClicked('share'); - dashboard.showModal(new ShareModal({ panelRef: panel.getRef(), dashboardRef: dashboard.getRef() })); + DashboardInteractions.panelMenuItemClicked('createLibraryPanel'); + dashboard.showModal( + new ShareModal({ + panelRef: panel.getRef(), + dashboardRef: dashboard.getRef(), + activeTab: 'Library panel', + }) + ); }, - shortcut: 'p s', }); - - if (panel.parent instanceof LibraryVizPanel) { - // TODO: Implement lib panel unlinking - } else { - moreSubMenu.push({ - text: t('panel.header-menu.create-library-panel', `Create library panel`), - iconClassName: 'share-alt', - onClick: () => { - DashboardInteractions.panelMenuItemClicked('createLibraryPanel'); - dashboard.showModal( - new ShareModal({ - panelRef: panel.getRef(), - dashboardRef: dashboard.getRef(), - activeTab: 'Library panel', - }) - ); - }, - }); - } - - if (config.featureToggles.datatrails) { - addDataTrailPanelAction(dashboard, panel, items); - } } - const exploreUrl = await tryGetExploreUrlForPanel(panel); - if (exploreUrl) { - items.push({ - text: t('panel.header-menu.explore', `Explore`), - iconClassName: 'compass', - shortcut: 'p x', - onClick: () => DashboardInteractions.panelMenuItemClicked('explore'), - href: exploreUrl, - }); + if (config.featureToggles.datatrails) { + addDataTrailPanelAction(dashboard, panel, items); } - if (plugin && !plugin.meta.skipDataQuery) { - inspectSubMenu.push({ - text: t('panel.header-menu.inspect-data', `Data`), - href: getInspectUrl(panel, InspectTab.Data), - onClick: (e) => { - e.preventDefault(); - locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.Data }); - DashboardInteractions.panelMenuInspectClicked(InspectTab.Data); - }, - }); - - if (dashboard instanceof DashboardScene && dashboard.state.meta.canEdit) { - inspectSubMenu.push({ - text: t('panel.header-menu.query', `Query`), - href: getInspectUrl(panel, InspectTab.Query), - onClick: (e) => { - e.preventDefault(); - locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.Query }); - DashboardInteractions.panelMenuInspectClicked(InspectTab.Query); - }, - }); - } + if (exploreMenuItem) { + items.push(exploreMenuItem); } - inspectSubMenu.push({ - text: t('panel.header-menu.inspect-json', `Panel JSON`), - href: getInspectUrl(panel, InspectTab.JSON), - onClick: (e) => { - e.preventDefault(); - locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.JSON }); - DashboardInteractions.panelMenuInspectClicked(InspectTab.JSON); - }, - }); + items.push(getInspectMenuItem(plugin, panel, dashboard)); - items.push({ - text: t('panel.header-menu.inspect', `Inspect`), - iconClassName: 'info-circle', - shortcut: 'i', - href: getInspectUrl(panel), - onClick: (e) => { - if (!e.isDefaultPrevented()) { - locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.Data }); - DashboardInteractions.panelMenuInspectClicked(InspectTab.Data); - } - }, - subMenu: inspectSubMenu.length > 0 ? inspectSubMenu : undefined, + const { extensions } = getPluginLinkExtensions({ + extensionPointId: PluginExtensionPoints.DashboardPanelMenu, + context: createExtensionContext(panel, dashboard), + limitPerPlugin: 3, }); - if (dashboard instanceof DashboardScene) { - const { extensions } = getPluginLinkExtensions({ - extensionPointId: PluginExtensionPoints.DashboardPanelMenu, - context: createExtensionContext(panel, dashboard), - limitPerPlugin: 3, + if (extensions.length > 0 && !dashboard.state.isEditing) { + items.push({ + text: 'Extensions', + iconClassName: 'plug', + type: 'submenu', + subMenu: createExtensionSubMenu(extensions), }); - - if (extensions.length > 0 && !dashboard.state.isEditing) { - items.push({ - text: 'Extensions', - iconClassName: 'plug', - type: 'submenu', - subMenu: createExtensionSubMenu(extensions), - }); - } } if (moreSubMenu.length) { @@ -189,6 +143,77 @@ export function panelMenuBehavior(menu: VizPanelMenu) { asyncFunc(); } +async function getExploreMenuItem(panel: VizPanel): Promise { + const exploreUrl = await tryGetExploreUrlForPanel(panel); + if (!exploreUrl) { + return undefined; + } + + return { + text: t('panel.header-menu.explore', `Explore`), + iconClassName: 'compass', + shortcut: 'p x', + onClick: () => DashboardInteractions.panelMenuItemClicked('explore'), + href: exploreUrl, + }; +} + +function getInspectMenuItem( + plugin: PanelPlugin | undefined, + panel: VizPanel, + dashboard: DashboardScene +): PanelMenuItem { + const inspectSubMenu: PanelMenuItem[] = []; + + if (plugin && !plugin.meta.skipDataQuery) { + inspectSubMenu.push({ + text: t('panel.header-menu.inspect-data', `Data`), + href: getInspectUrl(panel, InspectTab.Data), + onClick: (e) => { + e.preventDefault(); + locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.Data }); + DashboardInteractions.panelMenuInspectClicked(InspectTab.Data); + }, + }); + + if (dashboard instanceof DashboardScene && dashboard.state.meta.canEdit) { + inspectSubMenu.push({ + text: t('panel.header-menu.query', `Query`), + href: getInspectUrl(panel, InspectTab.Query), + onClick: (e) => { + e.preventDefault(); + locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.Query }); + DashboardInteractions.panelMenuInspectClicked(InspectTab.Query); + }, + }); + } + } + + inspectSubMenu.push({ + text: t('panel.header-menu.inspect-json', `Panel JSON`), + href: getInspectUrl(panel, InspectTab.JSON), + onClick: (e) => { + e.preventDefault(); + locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.JSON }); + DashboardInteractions.panelMenuInspectClicked(InspectTab.JSON); + }, + }); + + return { + text: t('panel.header-menu.inspect', `Inspect`), + iconClassName: 'info-circle', + shortcut: 'i', + href: getInspectUrl(panel), + onClick: (e) => { + if (!e.isDefaultPrevented()) { + locationService.partial({ inspect: panel.state.key, inspectTab: InspectTab.Data }); + DashboardInteractions.panelMenuInspectClicked(InspectTab.Data); + } + }, + subMenu: inspectSubMenu.length > 0 ? inspectSubMenu : undefined, + }; +} + /** * Behavior is called when VizPanelLinksMenu is activated (when it's opened). */ diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts index 566b6847ca0..a9df0e84e81 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts @@ -62,6 +62,10 @@ export interface DashboardLoaderState { loadError?: string; } +export interface SaveModelToSceneOptions { + isEmbedded?: boolean; +} + export function transformSaveModelToScene(rsp: DashboardDTO): DashboardScene { // Just to have migrations run const oldModel = new DashboardModel(rsp.dashboard, rsp.meta, { diff --git a/public/app/features/dashboard/components/HelpWizard/SupportSnapshotService.ts b/public/app/features/dashboard/components/HelpWizard/SupportSnapshotService.ts index f771602d0a2..bd03eadee8c 100644 --- a/public/app/features/dashboard/components/HelpWizard/SupportSnapshotService.ts +++ b/public/app/features/dashboard/components/HelpWizard/SupportSnapshotService.ts @@ -82,7 +82,7 @@ export class SupportSnapshotService extends StateManagerBase import(/* webpackChunkName: "DashboardPage" */ '../features/dashboard/containers/DashboardPageProxy') ), }, + { + // We currently have no core usage of the embedded dashboard so is to have a page for e2e to test + path: '/dashboards/embedding-test', + component: SafeDynamicImport( + () => + import( + /* webpackChunkName: "DashboardPage"*/ 'app/features/dashboard-scene/embedding/EmbeddedDashboardTestPage' + ) + ), + }, { path: '/d-solo/:uid/:slug', pageClass: 'dashboard-solo', diff --git a/public/app/types/dashboard.ts b/public/app/types/dashboard.ts index 8a37867ab97..5d9097e8ccb 100644 --- a/public/app/types/dashboard.ts +++ b/public/app/types/dashboard.ts @@ -50,6 +50,7 @@ export interface DashboardMeta { publicDashboardUid?: string; publicDashboardEnabled?: boolean; dashboardNotFound?: boolean; + isEmbedded?: boolean; } export interface AnnotationActions { diff --git a/yarn.lock b/yarn.lock index 6328a64ca4f..69c1535a774 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@adobe/css-tools@npm:^4.3.0": + version: 4.3.1 + resolution: "@adobe/css-tools@npm:4.3.1" + checksum: 039a42ffdd41ecf3abcaf09c9fef0ffd634ccbe81c04002fc989e74564eba99bb19169a8f48dadf6442aa2c5c9f0925a7b27ec5c36a1ed1a3515fe77d6930996 + languageName: node + linkType: hard + "@adobe/css-tools@npm:^4.3.2": version: 4.3.2 resolution: "@adobe/css-tools@npm:4.3.2" @@ -103,7 +110,19 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.23.6, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" + dependencies: + "@babel/types": "npm:^7.23.0" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: bd1598bd356756065d90ce26968dd464ac2b915c67623f6f071fb487da5f9eb454031a380e20e7c9a7ce5c4a49d23be6cb9efde404952b0b3f3c0c3a9b73d68a + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.6": version: 7.23.6 resolution: "@babel/generator@npm:7.23.6" dependencies: @@ -165,7 +184,20 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": + version: 7.22.9 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + regexpu-core: "npm:^5.3.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6f3475a7661bc34527201c07eeeec3077c8adab0ed74bff728dc479da6c74bb393b6121ddf590ef1671f3f508fab3c7792a5ada65672665d84db4556daebd210 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" dependencies: @@ -321,6 +353,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 7f275a7f1a9504da06afc33441e219796352a4a3d0288a961bc14d1e30e06833a71621b33c3e60ee3ac1ff3c502d55e392bcbc0665f6f9d2629809696fab7cdd + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.23.4": version: 7.23.4 resolution: "@babel/helper-string-parser@npm:7.23.4" @@ -687,13 +726,13 @@ __metadata: linkType: hard "@babel/plugin-syntax-typescript@npm:^7.22.5, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.23.3 - resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: abfad3a19290d258b028e285a1f34c9b8a0cbe46ef79eafed4ed7ffce11b5d0720b5e536c82f91cbd8442cde35a3dd8e861fa70366d87ff06fdc0d4756e30876 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a languageName: node linkType: hard @@ -1175,6 +1214,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-display-name@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a12bfd1e4e93055efca3ace3c34722571bda59d9740dca364d225d9c6e3ca874f134694d21715c42cc63d79efd46db9665bd4a022998767f9245f1e29d5d204d + languageName: node + linkType: hard + "@babel/plugin-transform-react-display-name@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-react-display-name@npm:7.23.3" @@ -1212,6 +1262,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-pure-annotations@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 092021c4f404e267002099ec20b3f12dd730cb90b0d83c5feed3dc00dbe43b9c42c795a18e7c6c7d7bddea20c7dd56221b146aec81b37f2e7eb5137331c61120 + languageName: node + linkType: hard + "@babel/plugin-transform-react-pure-annotations@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.23.3" @@ -1580,7 +1642,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:7.23.3, @babel/preset-react@npm:^7.22.5": +"@babel/preset-react@npm:7.23.3": version: 7.23.3 resolution: "@babel/preset-react@npm:7.23.3" dependencies: @@ -1596,6 +1658,22 @@ __metadata: languageName: node linkType: hard +"@babel/preset-react@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/preset-react@npm:7.22.15" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-validator-option": "npm:^7.22.15" + "@babel/plugin-transform-react-display-name": "npm:^7.22.5" + "@babel/plugin-transform-react-jsx": "npm:^7.22.15" + "@babel/plugin-transform-react-jsx-development": "npm:^7.22.5" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f9296e45346c3b6ab8296952edde5f1774cc9fdbdbefbc76047278fc3e889d3e15740f038ce017aca562d89f32fcbb6c11783d464fc6ae3066433178fa58513c + languageName: node + linkType: hard + "@babel/preset-typescript@npm:^7.13.0": version: 7.23.2 resolution: "@babel/preset-typescript@npm:7.23.2" @@ -1643,7 +1721,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:7.23.8, @babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.0, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:7.23.8, @babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.0, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.19.4, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.23.8 resolution: "@babel/runtime@npm:7.23.8" dependencies: @@ -1681,7 +1759,18 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: ca5b896a26c91c5672254725c4c892a35567d2122afc47bd5331d1611a7f9230c19fc9ef591a5a6f80bf0d80737e104a9ac205c96447c74bee01d4319db58001 + languageName: node + linkType: hard + +"@babel/types@npm:^7.23.6": version: 7.23.6 resolution: "@babel/types@npm:7.23.6" dependencies: @@ -3516,6 +3605,7 @@ __metadata: "@grafana/data": "npm:10.4.0-pre" "@grafana/e2e-selectors": "npm:10.4.0-pre" "@grafana/faro-web-sdk": "npm:^1.3.6" + "@grafana/schema": "npm:10.4.0-pre" "@grafana/tsconfig": "npm:^1.2.0-rc1" "@grafana/ui": "npm:10.4.0-pre" "@rollup/plugin-commonjs": "npm:25.0.7" @@ -3853,6 +3943,20 @@ __metadata: languageName: node linkType: hard +"@jest/console@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/console@npm:29.6.4" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + jest-message-util: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + slash: "npm:^3.0.0" + checksum: c482f87a43bb2c48da79c53ad4157542a67c6c90972a8615b852f889da73fd4bcd2a2b85d41b1c867e3df7e7f55e83b4ac91f226511d5645bc20f6498f114c0d + languageName: node + linkType: hard + "@jest/console@npm:^29.7.0": version: 29.7.0 resolution: "@jest/console@npm:29.7.0" @@ -3908,6 +4012,47 @@ __metadata: languageName: node linkType: hard +"@jest/core@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/core@npm:29.6.4" + dependencies: + "@jest/console": "npm:^29.6.4" + "@jest/reporters": "npm:^29.6.4" + "@jest/test-result": "npm:^29.6.4" + "@jest/transform": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-changed-files: "npm:^29.6.3" + jest-config: "npm:^29.6.4" + jest-haste-map: "npm:^29.6.4" + jest-message-util: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.6.4" + jest-resolve-dependencies: "npm:^29.6.4" + jest-runner: "npm:^29.6.4" + jest-runtime: "npm:^29.6.4" + jest-snapshot: "npm:^29.6.4" + jest-util: "npm:^29.6.3" + jest-validate: "npm:^29.6.3" + jest-watcher: "npm:^29.6.4" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.6.3" + slash: "npm:^3.0.0" + strip-ansi: "npm:^6.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: a1e47946d715a1735f89fdf9fcf6e99278cef691ac893db4c13e283f753a5c62cec47d68d4f3d7fe823aac0fc603257740f630591e8029846e83f451456a4716 + languageName: node + linkType: hard + "@jest/environment@npm:^29.3.1, @jest/environment@npm:^29.7.0": version: 29.7.0 resolution: "@jest/environment@npm:29.7.0" @@ -3920,6 +4065,27 @@ __metadata: languageName: node linkType: hard +"@jest/environment@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/environment@npm:29.6.4" + dependencies: + "@jest/fake-timers": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.6.3" + checksum: 8c31ed7f3992f450b994684a2a92d2a023e5e182773e13ea7c627edd25598279d5d1a958bea970e3868bc4d45e20881ddcf9bf9af9425f87d38959141f42693d + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/expect-utils@npm:29.6.4" + dependencies: + jest-get-type: "npm:^29.6.3" + checksum: 47f17bb3262175600130c698fdaaa680ec7f4612bfdb3f4f9f03e0252c341f31135ae854246f5548453634deef949533aa35b3638cfa776ce5596fd4bd8f1c6e + languageName: node + linkType: hard + "@jest/expect-utils@npm:^29.7.0": version: 29.7.0 resolution: "@jest/expect-utils@npm:29.7.0" @@ -3929,6 +4095,16 @@ __metadata: languageName: node linkType: hard +"@jest/expect@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/expect@npm:29.6.4" + dependencies: + expect: "npm:^29.6.4" + jest-snapshot: "npm:^29.6.4" + checksum: e6564697562885e2b96294740a507e82e76b9f0af83f6101e2979a8650ec14055452e0ea68c154f92ef93ef83b258f1a45aa39df4e0f472e5ff5c4468de4170f + languageName: node + linkType: hard + "@jest/expect@npm:^29.7.0": version: 29.7.0 resolution: "@jest/expect@npm:29.7.0" @@ -3953,6 +4129,32 @@ __metadata: languageName: node linkType: hard +"@jest/fake-timers@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/fake-timers@npm:29.6.4" + dependencies: + "@jest/types": "npm:^29.6.3" + "@sinonjs/fake-timers": "npm:^10.0.2" + "@types/node": "npm:*" + jest-message-util: "npm:^29.6.3" + jest-mock: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + checksum: 87df3df08111adb51a425edcbd6a454ec5bf1fec582946d04e68616d669fadad64fefee3ddb05b3c91984e47e718917fac907015095c55c2acd58e4f863b0523 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/globals@npm:29.6.4" + dependencies: + "@jest/environment": "npm:^29.6.4" + "@jest/expect": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + jest-mock: "npm:^29.6.3" + checksum: a41b18871a248151264668a38b13cb305f03db112bfd89ec44e858af0e79066e0b03d6b68c8baf1ec6c578be6fdb87519389c83438608b91471d17a5724858e0 + languageName: node + linkType: hard + "@jest/globals@npm:^29.7.0": version: 29.7.0 resolution: "@jest/globals@npm:29.7.0" @@ -3965,6 +4167,43 @@ __metadata: languageName: node linkType: hard +"@jest/reporters@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/reporters@npm:29.6.4" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:^29.6.4" + "@jest/test-result": "npm:^29.6.4" + "@jest/transform": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + collect-v8-coverage: "npm:^1.0.0" + exit: "npm:^0.1.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^4.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + jest-worker: "npm:^29.6.4" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.1" + strip-ansi: "npm:^6.0.0" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: ba6f6d9f621ef80cc8f2fae001f2c9b9e9186f2b570d386b2cfaf298a391332cf65121f72b700e037c9fb7813af4230f821f5f2e0c71c2bd3d301bfa2aa9b935 + languageName: node + linkType: hard + "@jest/reporters@npm:^29.7.0": version: 29.7.0 resolution: "@jest/reporters@npm:29.7.0" @@ -4022,6 +4261,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-result@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/test-result@npm:29.6.4" + dependencies: + "@jest/console": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + collect-v8-coverage: "npm:^1.0.0" + checksum: d0dd2beaa4e9f3e7cebec44de1ab09a1020e77e4742c018f91bf281d49b824875a6d8f86408fdde195f53dd1ba8b7943b2843a9f002c5b0286f8933c21e65527 + languageName: node + linkType: hard + "@jest/test-result@npm:^29.7.0": version: 29.7.0 resolution: "@jest/test-result@npm:29.7.0" @@ -4034,6 +4285,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-sequencer@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/test-sequencer@npm:29.6.4" + dependencies: + "@jest/test-result": "npm:^29.6.4" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.6.4" + slash: "npm:^3.0.0" + checksum: f0f09dc5c1cc190ae8944531072b598746c725c81d2810f47d4459a2d3113b3658469ff4e59cd028b221e4f2d015e0b968940e9ae08d800b2e8911590fbc184e + languageName: node + linkType: hard + "@jest/test-sequencer@npm:^29.7.0": version: 29.7.0 resolution: "@jest/test-sequencer@npm:29.7.0" @@ -4069,6 +4332,29 @@ __metadata: languageName: node linkType: hard +"@jest/transform@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/transform@npm:29.6.4" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + babel-plugin-istanbul: "npm:^6.1.1" + chalk: "npm:^4.0.0" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.6.4" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + micromatch: "npm:^4.0.4" + pirates: "npm:^4.0.4" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^4.0.2" + checksum: cba6b5a59de89b4446c0c0dc6ca08ea52fb1308caeaa72c70a232a1b81d178cad1a2fcce4e25db95d7623c03c34a244bdfe6769cc6ac71b8c3fcd2838bab583e + languageName: node + linkType: hard + "@jest/types@npm:^26.6.2": version: 26.6.2 resolution: "@jest/types@npm:26.6.2" @@ -4117,6 +4403,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: 320ceb37af56953757b28e5b90c34556157676d41e3d0a3ff88769274d62373582bb0f0276a4f2d29c3f4fdd55b82b8be5731f52d391ad2ecae9b321ee1c742d + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.1 resolution: "@jridgewell/resolve-uri@npm:3.1.1" @@ -4131,6 +4424,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/source-map@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/source-map@npm:0.3.2" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.0" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 1aaa42075bac32a551708025da0c07b11c11fb05ccd10fb70df2cb0db88773338ab0f33f175d9865379cb855bb3b1cda478367747a1087309fda40a7b9214bfa + languageName: node + linkType: hard + "@jridgewell/source-map@npm:^0.3.3": version: 0.3.5 resolution: "@jridgewell/source-map@npm:0.3.5" @@ -4141,6 +4444,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 26e768fae6045481a983e48aa23d8fcd23af5da70ebd74b0649000e815e7fbb01ea2bc088c9176b3fffeb9bec02184e58f46125ef3320b30eaa1f4094cfefa38 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" @@ -4158,7 +4468,17 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" + dependencies: + "@jridgewell/resolve-uri": "npm:3.1.0" + "@jridgewell/sourcemap-codec": "npm:1.4.14" + checksum: f4fabdddf82398a797bcdbb51c574cd69b383db041a6cae1a6a91478681d6aab340c01af655cfd8c6e01cde97f63436a1445f08297cdd33587621cf05ffa0d55 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.20": version: 0.3.21 resolution: "@jridgewell/trace-mapping@npm:0.3.21" dependencies: @@ -6211,13 +6531,27 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.14.2, @remix-run/router@npm:^1.5.0": +"@remix-run/router@npm:1.14.2": version: 1.14.2 resolution: "@remix-run/router@npm:1.14.2" checksum: 422844e88b985f1e287301b302c6cf8169c9eea792f80d40464f97b25393bb2e697228ebd7a7b61444d5a51c5873c4a637aad20acde5886a5caf62e833c5ceee languageName: node linkType: hard +"@remix-run/router@npm:1.5.0": + version: 1.5.0 + resolution: "@remix-run/router@npm:1.5.0" + checksum: 3da27d64519df94919020f4b42aaa016f26891331be98468cbc807bc4d2cfb401d7e47d4f88a4a3d777fc3af23d162c668357a8e5d2c5947acdbca7b691bc325 + languageName: node + linkType: hard + +"@remix-run/router@npm:^1.5.0": + version: 1.11.0 + resolution: "@remix-run/router@npm:1.11.0" + checksum: 629ec578b9dfd3c5cb5de64a0798dd7846ec5ba0351aa66f42b1c65efb43da8f30366be59b825303648965b0df55b638c110949b24ef94fd62e98117fdfb0c0f + languageName: node + linkType: hard + "@rollup/plugin-commonjs@npm:25.0.7": version: 25.0.7 resolution: "@rollup/plugin-commonjs@npm:25.0.7" @@ -7510,6 +7844,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-darwin-arm64@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-darwin-arm64@npm:1.3.90" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@swc/core-darwin-x64@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-darwin-x64@npm:1.3.105" @@ -7517,6 +7858,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-darwin-x64@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-darwin-x64@npm:1.3.90" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@swc/core-linux-arm-gnueabihf@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.105" @@ -7524,6 +7872,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-linux-arm-gnueabihf@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.90" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@swc/core-linux-arm64-gnu@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-linux-arm64-gnu@npm:1.3.105" @@ -7531,6 +7886,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-linux-arm64-gnu@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.90" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@swc/core-linux-arm64-musl@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-linux-arm64-musl@npm:1.3.105" @@ -7538,6 +7900,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-linux-arm64-musl@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.90" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@swc/core-linux-x64-gnu@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-linux-x64-gnu@npm:1.3.105" @@ -7545,6 +7914,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-linux-x64-gnu@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.90" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@swc/core-linux-x64-musl@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-linux-x64-musl@npm:1.3.105" @@ -7552,6 +7928,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-linux-x64-musl@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-linux-x64-musl@npm:1.3.90" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@swc/core-win32-arm64-msvc@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-win32-arm64-msvc@npm:1.3.105" @@ -7559,6 +7942,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-win32-arm64-msvc@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.90" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@swc/core-win32-ia32-msvc@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-win32-ia32-msvc@npm:1.3.105" @@ -7566,6 +7956,13 @@ __metadata: languageName: node linkType: hard +"@swc/core-win32-ia32-msvc@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.90" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@swc/core-win32-x64-msvc@npm:1.3.105": version: 1.3.105 resolution: "@swc/core-win32-x64-msvc@npm:1.3.105" @@ -7573,7 +7970,14 @@ __metadata: languageName: node linkType: hard -"@swc/core@npm:1.3.105, @swc/core@npm:^1.3.49": +"@swc/core-win32-x64-msvc@npm:1.3.90": + version: 1.3.90 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.90" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:1.3.105": version: 1.3.105 resolution: "@swc/core@npm:1.3.105" dependencies: @@ -7619,6 +8023,52 @@ __metadata: languageName: node linkType: hard +"@swc/core@npm:^1.3.49": + version: 1.3.90 + resolution: "@swc/core@npm:1.3.90" + dependencies: + "@swc/core-darwin-arm64": "npm:1.3.90" + "@swc/core-darwin-x64": "npm:1.3.90" + "@swc/core-linux-arm-gnueabihf": "npm:1.3.90" + "@swc/core-linux-arm64-gnu": "npm:1.3.90" + "@swc/core-linux-arm64-musl": "npm:1.3.90" + "@swc/core-linux-x64-gnu": "npm:1.3.90" + "@swc/core-linux-x64-musl": "npm:1.3.90" + "@swc/core-win32-arm64-msvc": "npm:1.3.90" + "@swc/core-win32-ia32-msvc": "npm:1.3.90" + "@swc/core-win32-x64-msvc": "npm:1.3.90" + "@swc/counter": "npm:^0.1.1" + "@swc/types": "npm:^0.1.5" + peerDependencies: + "@swc/helpers": ^0.5.0 + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 214af37af77b968203d495745a86db985734527f4696243bda5fb9ce868830d70e7a2cdbb268da2ee994d9fcedded25073d7b709fa09b75e96f9ba7d13a63da0 + languageName: node + linkType: hard + "@swc/counter@npm:^0.1.1": version: 0.1.1 resolution: "@swc/counter@npm:0.1.1" @@ -7626,7 +8076,7 @@ __metadata: languageName: node linkType: hard -"@swc/helpers@npm:0.5.3, @swc/helpers@npm:^0.5.0": +"@swc/helpers@npm:0.5.3": version: 0.5.3 resolution: "@swc/helpers@npm:0.5.3" dependencies: @@ -7635,6 +8085,15 @@ __metadata: languageName: node linkType: hard +"@swc/helpers@npm:^0.5.0": + version: 0.5.1 + resolution: "@swc/helpers@npm:0.5.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 4954c4d2dd97bf965e863a10ffa44c3fdaf7653f2fa9ef1a6cf7ffffd67f3f832216588f9751afd75fdeaea60c4688c75c01e2405119c448f1a109c9a7958c54 + languageName: node + linkType: hard + "@swc/types@npm:^0.1.5": version: 0.1.5 resolution: "@swc/types@npm:0.1.5" @@ -7658,36 +8117,66 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:6.3.0, @testing-library/jest-dom@npm:^6.1.2": - version: 6.3.0 - resolution: "@testing-library/jest-dom@npm:6.3.0" +"@testing-library/jest-dom@npm:6.3.0": + version: 6.3.0 + resolution: "@testing-library/jest-dom@npm:6.3.0" + dependencies: + "@adobe/css-tools": "npm:^4.3.2" + "@babel/runtime": "npm:^7.9.2" + aria-query: "npm:^5.0.0" + chalk: "npm:^3.0.0" + css.escape: "npm:^1.5.1" + dom-accessibility-api: "npm:^0.6.3" + lodash: "npm:^4.17.15" + redent: "npm:^3.0.0" + peerDependencies: + "@jest/globals": ">= 28" + "@types/bun": "*" + "@types/jest": ">= 28" + jest: ">= 28" + vitest: ">= 0.32" + peerDependenciesMeta: + "@jest/globals": + optional: true + "@types/bun": + optional: true + "@types/jest": + optional: true + jest: + optional: true + vitest: + optional: true + checksum: d96e552cfe5a72fa0a4c21655a9fabe6ffce6a066323c8a0f5847f39ff88229cd2455c9af41d3381b672d65469e74752d29e35dd04c15d8241a9f6a1e7cb78c6 + languageName: node + linkType: hard + +"@testing-library/jest-dom@npm:^6.1.2": + version: 6.1.2 + resolution: "@testing-library/jest-dom@npm:6.1.2" dependencies: - "@adobe/css-tools": "npm:^4.3.2" + "@adobe/css-tools": "npm:^4.3.0" "@babel/runtime": "npm:^7.9.2" aria-query: "npm:^5.0.0" chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" - dom-accessibility-api: "npm:^0.6.3" + dom-accessibility-api: "npm:^0.5.6" lodash: "npm:^4.17.15" redent: "npm:^3.0.0" peerDependencies: "@jest/globals": ">= 28" - "@types/bun": "*" "@types/jest": ">= 28" jest: ">= 28" vitest: ">= 0.32" peerDependenciesMeta: "@jest/globals": optional: true - "@types/bun": - optional: true "@types/jest": optional: true jest: optional: true vitest: optional: true - checksum: d96e552cfe5a72fa0a4c21655a9fabe6ffce6a066323c8a0f5847f39ff88229cd2455c9af41d3381b672d65469e74752d29e35dd04c15d8241a9f6a1e7cb78c6 + checksum: 36e27f9011dd60de8936d3edb2a81753ef7a370480019e571c6e85b935b5fa2aba47244104badf6d6b636fd170fdee5c0fdd92fb3630957d4a6f11d302b57398 languageName: node linkType: hard @@ -7886,9 +8375,9 @@ __metadata: linkType: hard "@types/chance@npm:^1.1.3": - version: 1.1.6 - resolution: "@types/chance@npm:1.1.6" - checksum: f4366f1b3144d143af3e6f0fad2ed1db7b9bdfa7d82d40944e9619d57fe7e6b60e8c1452f47a8ededa6b2188932879518628ecd9aac81c40384ded39c26338ba + version: 1.1.3 + resolution: "@types/chance@npm:1.1.3" + checksum: 5fffaa9f1a54690cb1236aeda31fdc833e3c5e6049c1e70e6d94c6b41d8f590088bf61a8a45934d1ea9cfde001ec90857363bd35b1775b523098d51da2e444bc languageName: node linkType: hard @@ -7902,9 +8391,9 @@ __metadata: linkType: hard "@types/common-tags@npm:^1.8.0": - version: 1.8.4 - resolution: "@types/common-tags@npm:1.8.4" - checksum: 40c95a2f6388beb1cdeed3c9986ac0d6a3a551fce706e3e364a00ded48ab624b06b1ac8b94679bb2da9653e5eb3e450bad26873f5189993a5d8e8bdace74cbb2 + version: 1.8.1 + resolution: "@types/common-tags@npm:1.8.1" + checksum: 0800298cca3be151b26cedbb8d69d686140f98fd68decb4069c29611ccb7c0572d1e8ffca55e5a6dd7615a15c897337fe1c983d36d92a4a50b5664a2b03ed01b languageName: node linkType: hard @@ -8039,9 +8528,9 @@ __metadata: linkType: hard "@types/d3-force@npm:*, @types/d3-force@npm:^3.0.0": - version: 3.0.9 - resolution: "@types/d3-force@npm:3.0.9" - checksum: e7f2260b9d57d0623f24b2876a10f6e4f7b9690035a5d9e776513b5f9261d0d1a8c436b0b977445f1753686b88ce1cecf3dd4538907da833c6ddc03cfbf45936 + version: 3.0.4 + resolution: "@types/d3-force@npm:3.0.4" + checksum: 99d7513a71ec35e6dd1285b1acadeadd9f104055e0ae1f7e8a0aee599566e5c83e1f7afdad2f50f0e83b90af1d171d3b81edc3397c081f88856791dad0aa00c1 languageName: node linkType: hard @@ -8271,9 +8760,9 @@ __metadata: linkType: hard "@types/diff@npm:^5": - version: 5.0.9 - resolution: "@types/diff@npm:5.0.9" - checksum: 6924740cb67a49771ea3753ee9b15c676860a6227b2bf0200ed9cef4111ff0f59fec8c51c1170bd30a8c7370b32673b308a9cd2da28525130f842194a822ef42 + version: 5.0.5 + resolution: "@types/diff@npm:5.0.5" + checksum: d3b2f90dcc511a2034ec0eb76f24b36ae8dca93e629742d72af01a9b9e38ec627207ca93e8601608698c6b6126a73247b340e6ef9c285e88eb0cca380a67ac5d languageName: node linkType: hard @@ -8467,7 +8956,7 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:3.3.5, @types/hoist-non-react-statics@npm:^3.3.0, @types/hoist-non-react-statics@npm:^3.3.1": +"@types/hoist-non-react-statics@npm:3.3.5, @types/hoist-non-react-statics@npm:^3.3.0": version: 3.3.5 resolution: "@types/hoist-non-react-statics@npm:3.3.5" dependencies: @@ -8477,6 +8966,16 @@ __metadata: languageName: node linkType: hard +"@types/hoist-non-react-statics@npm:^3.3.1": + version: 3.3.4 + resolution: "@types/hoist-non-react-statics@npm:3.3.4" + dependencies: + "@types/react": "npm:*" + hoist-non-react-statics: "npm:^3.3.0" + checksum: dee430941a9ea16b7f665ecafa9b134066a49d13ae497fc051cf5d41b3aead394ab1a8179c3c98c9a3584f80aed16fab82dd7979c7dcddfbb5f74a132575d362 + languageName: node + linkType: hard + "@types/html-minifier-terser@npm:^6.0.0": version: 6.0.0 resolution: "@types/html-minifier-terser@npm:6.0.0" @@ -8525,13 +9024,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:*, @types/jest@npm:29.5.11, @types/jest@npm:^29.5.4": - version: 29.5.11 - resolution: "@types/jest@npm:29.5.11" +"@types/jest@npm:*, @types/jest@npm:^29.5.4": + version: 29.5.4 + resolution: "@types/jest@npm:29.5.4" dependencies: expect: "npm:^29.0.0" pretty-format: "npm:^29.0.0" - checksum: 798f4c89407d9457bea1256de74c26f2b279f6c789c0e3311cd604cc75cdab333b9a29b00c51b0090d31abdf11cc788b4103282851a653bef6daf72edf97eef2 + checksum: c56081b958c06f4f3a30f7beabf4e94e70db96a4b41b8a73549fea7f9bf0a8c124ab3998ea4e6d040d1b8c95cfbe0b8d4a607da4bdea03c9e116f92c147df193 languageName: node linkType: hard @@ -8545,6 +9044,16 @@ __metadata: languageName: node linkType: hard +"@types/jest@npm:29.5.11": + version: 29.5.11 + resolution: "@types/jest@npm:29.5.11" + dependencies: + expect: "npm:^29.0.0" + pretty-format: "npm:^29.0.0" + checksum: 798f4c89407d9457bea1256de74c26f2b279f6c789c0e3311cd604cc75cdab333b9a29b00c51b0090d31abdf11cc788b4103282851a653bef6daf72edf97eef2 + languageName: node + linkType: hard + "@types/jquery@npm:3.5.29": version: 3.5.29 resolution: "@types/jquery@npm:3.5.29" @@ -8569,9 +9078,9 @@ __metadata: linkType: hard "@types/js-yaml@npm:^4.0.5": - version: 4.0.9 - resolution: "@types/js-yaml@npm:4.0.9" - checksum: a0ce595db8a987904badd21fc50f9f444cb73069f4b95a76cc222e0a17b3ff180669059c763ec314bc4c3ce284379177a9da80e83c5f650c6c1310cafbfaa8e6 + version: 4.0.5 + resolution: "@types/js-yaml@npm:4.0.5" + checksum: 6fff5f47d97070f1a01022517ce4bd81a0cfac7cd30f9dbc7222dc5f8db4bfe5f5c8cba3f4b02bdbd6f31f691050db97395b33c8df66d1e7c4f66096b41a3df6 languageName: node linkType: hard @@ -8586,7 +9095,14 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.9 + resolution: "@types/json-schema@npm:7.0.9" + checksum: 7ceb41e396240aa69ae15c02ffbb6548ea2bb2f845a7378c711c7c908a9a8438a0330f3135f1ccb6e82e334b9e2ec5b94fb57a1435f2b15362d38e9d5109e5ea + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.12": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 @@ -8631,18 +9147,18 @@ __metadata: linkType: hard "@types/logfmt@npm:^1.2.3": - version: 1.2.6 - resolution: "@types/logfmt@npm:1.2.6" + version: 1.2.3 + resolution: "@types/logfmt@npm:1.2.3" dependencies: "@types/node": "npm:*" - checksum: ac69ee5c99e074bf3ad31d27f877402b84be59e2c200fc4ecfbf295244505a2b6408db1c377c96f90d0444a18fd253d34f0f0810c162e73f6e82c327022c3008 + checksum: d5872ab0432c687dc95a4c3a1c21c8eca24553415ef6a34f6cbbe0eefc4b7b8fb8b2af80df4a53fcf7cc7b212569df568bed1b17f7c2a976c4416f4a67b285de languageName: node linkType: hard "@types/lucene@npm:^2": - version: 2.1.7 - resolution: "@types/lucene@npm:2.1.7" - checksum: 38bf8521a071697612f3629839f5d55558ae40ebba1486300f35b862d1b403758a0c5e9a8370bc1baae11d1779e6b1dae28c82f528ec8064dcee33dca008c910 + version: 2.1.4 + resolution: "@types/lucene@npm:2.1.4" + checksum: 418057a390752b36745428887ef527121740d54137a2b2da9f10388d2e9d1fe13d1d04b9b2605101bdd99a38ae357d1d5b08f6302f2eca7cead4e28f30ec964d languageName: node linkType: hard @@ -8727,20 +9243,20 @@ __metadata: linkType: hard "@types/node-forge@npm:^1": - version: 1.3.11 - resolution: "@types/node-forge@npm:1.3.11" + version: 1.3.2 + resolution: "@types/node-forge@npm:1.3.2" dependencies: "@types/node": "npm:*" - checksum: 670c9b377c48189186ec415e3c8ed371f141ecc1a79ab71b213b20816adeffecba44dae4f8406cc0d09e6349a4db14eb8c5893f643d8e00fa19fc035cf49dee0 + checksum: e49aa578159e353e93c5b8c5a2f010e1ea53e7da509bf4ee82775ee43eb78aead8407d5f27a53ce57e49c7a5b86739e78d14714c37f1e37bca979025dbaea932 languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:20.11.6, @types/node@npm:>=13.7.0": - version: 20.11.6 - resolution: "@types/node@npm:20.11.6" +"@types/node@npm:*, @types/node@npm:>=13.7.0": + version: 20.8.10 + resolution: "@types/node@npm:20.8.10" dependencies: undici-types: "npm:~5.26.4" - checksum: 375dfc75f0aa8b7fb99382d84c317e5dab2969dcc3f54d8490b119151060923eae6483839552347bc78262bbcefb2951ee131e15372f4e80b755be2dda9afe80 + checksum: 8930039077c8ad74de74c724909412bea8110c3f8892bcef8dda3e9629073bed65632ee755f94b252bcdae8ca71cf83e89a4a440a105e2b1b7c9797b43483049 languageName: node linkType: hard @@ -8751,6 +9267,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:20.11.6": + version: 20.11.6 + resolution: "@types/node@npm:20.11.6" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 375dfc75f0aa8b7fb99382d84c317e5dab2969dcc3f54d8490b119151060923eae6483839552347bc78262bbcefb2951ee131e15372f4e80b755be2dda9afe80 + languageName: node + linkType: hard + "@types/node@npm:^14.14.31": version: 14.18.36 resolution: "@types/node@npm:14.18.36" @@ -8874,7 +9399,16 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:*, @types/react-dom@npm:18.2.18, @types/react-dom@npm:^18.0.0": +"@types/react-dom@npm:*, @types/react-dom@npm:^18.0.0": + version: 18.2.7 + resolution: "@types/react-dom@npm:18.2.7" + dependencies: + "@types/react": "npm:*" + checksum: 9b70ef66cbe2d2898ea37eb79ee3697e0e4ad3d950e769a601f79be94097d43b8ef45b98a0b29528203c7d731c81666f637b2b7032deeced99214b4bc0662614 + languageName: node + linkType: hard + +"@types/react-dom@npm:18.2.18": version: 18.2.18 resolution: "@types/react-dom@npm:18.2.18" dependencies: @@ -8961,7 +9495,7 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:4.4.10, @types/react-transition-group@npm:^4.4.0": +"@types/react-transition-group@npm:4.4.10": version: 4.4.10 resolution: "@types/react-transition-group@npm:4.4.10" dependencies: @@ -8970,6 +9504,15 @@ __metadata: languageName: node linkType: hard +"@types/react-transition-group@npm:^4.4.0": + version: 4.4.6 + resolution: "@types/react-transition-group@npm:4.4.6" + dependencies: + "@types/react": "npm:*" + checksum: eb4a14df7ad283be56d44c4bd4351136bd50dfedf6958299fbbc571d6871fad17a373b5b9a6d44adac27154d1f2059225a26c4fee79053349a4d52eb89277787 + languageName: node + linkType: hard + "@types/react-virtualized-auto-sizer@npm:1.0.4": version: 1.0.4 resolution: "@types/react-virtualized-auto-sizer@npm:1.0.4" @@ -8980,12 +9523,12 @@ __metadata: linkType: hard "@types/react-window-infinite-loader@npm:^1": - version: 1.0.9 - resolution: "@types/react-window-infinite-loader@npm:1.0.9" + version: 1.0.6 + resolution: "@types/react-window-infinite-loader@npm:1.0.6" dependencies: "@types/react": "npm:*" "@types/react-window": "npm:*" - checksum: 9f2c27f24bfa726ceaef6612a4adbda745f3455c877193f68dfa48591274c670a6df4fa6870785cff5f948e289ceb9a247fb7cbf67e3cd555ab16d11866fd63f + checksum: d4648dfb44614e4f0137d7b77eb1868b0c5252f451a78edfc4520e508157ce7687d4b7d9efd6df8f01e72e0d92224338b8c8d934220f32a3081b528599a25829 languageName: node linkType: hard @@ -9387,13 +9930,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" +"@typescript-eslint/scope-manager@npm:5.59.9": + version: 5.59.9 + resolution: "@typescript-eslint/scope-manager@npm:5.59.9" dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: e827770baa202223bc0387e2fd24f630690809e460435b7dc9af336c77322290a770d62bd5284260fa881c86074d6a9fd6c97b07382520b115f6786b8ed499da + "@typescript-eslint/types": "npm:5.59.9" + "@typescript-eslint/visitor-keys": "npm:5.59.9" + checksum: 83b538212fc422cd6a26eee49deab60a29fa6d8bbd0dffca6daa02318959c76ddf1dc00db9ce0236258f26c1f726be78a25d2f6c5603233f591716d6299480e5 languageName: node linkType: hard @@ -9451,10 +9994,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 24e8443177be84823242d6729d56af2c4b47bfc664dd411a1d730506abf2150d6c31bdefbbc6d97c8f91043e3a50e0c698239dcb145b79bb6b0c34469aaf6c45 +"@typescript-eslint/types@npm:5.59.9": + version: 5.59.9 + resolution: "@typescript-eslint/types@npm:5.59.9" + checksum: 49226e5384ac801db245fe668b4bd7610a11c5ade9c05ee93767fd188462c4d25755b8592f21210cc9856fae3c5566d4811ed0f7fefe30e48e5823e71ab4623e languageName: node linkType: hard @@ -9472,12 +10015,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" +"@typescript-eslint/typescript-estree@npm:5.59.9": + version: 5.59.9 + resolution: "@typescript-eslint/typescript-estree@npm:5.59.9" dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.59.9" + "@typescript-eslint/visitor-keys": "npm:5.59.9" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -9486,7 +10029,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 06c975eb5f44b43bd19fadc2e1023c50cf87038fe4c0dd989d4331c67b3ff509b17fa60a3251896668ab4d7322bdc56162a9926971218d2e1a1874d2bef9a52e + checksum: 79cf330815244f2ab12762df9296812c20f3ff859f14dc997a79ce09eabd7c8d0d190ed00fcdf380288a2b4035ca40c9f0002dc9c6c2875885ad3b94c2eab58b languageName: node linkType: hard @@ -9563,30 +10106,30 @@ __metadata: linkType: hard "@typescript-eslint/utils@npm:^5.10.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" + version: 5.59.9 + resolution: "@typescript-eslint/utils@npm:5.59.9" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@types/json-schema": "npm:^7.0.9" "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" + "@typescript-eslint/scope-manager": "npm:5.59.9" + "@typescript-eslint/types": "npm:5.59.9" + "@typescript-eslint/typescript-estree": "npm:5.59.9" eslint-scope: "npm:^5.1.1" semver: "npm:^7.3.7" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 15ef13e43998a082b15f85db979f8d3ceb1f9ce4467b8016c267b1738d5e7cdb12aa90faf4b4e6dd6486c236cf9d33c463200465cf25ff997dbc0f12358550a1 + checksum: e48429d9dd83d7ae1b95c64b35af790e36cd8c1b2b9b63b2f69b5f804bb58a12918396f2f0540afd413673e1e0d22399a2cd2e2ad6534e50af2990a04e8ca7c4 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" +"@typescript-eslint/visitor-keys@npm:5.59.9": + version: 5.59.9 + resolution: "@typescript-eslint/visitor-keys@npm:5.59.9" dependencies: - "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.59.9" eslint-visitor-keys: "npm:^3.3.0" - checksum: dc613ab7569df9bbe0b2ca677635eb91839dfb2ca2c6fa47870a5da4f160db0b436f7ec0764362e756d4164e9445d49d5eb1ff0b87f4c058946ae9d8c92eb388 + checksum: 85761ef0be6910cb4de841b3cd8f39a734f5373ed92f808365882ef357f0a33ad6f75c4b3bf0b408f0399781ac5d14f12033de3e4b53a46b61015444b05854c0 languageName: node linkType: hard @@ -10300,6 +10843,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.5.0": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 522310c20fdc3c271caed3caf0f06c51d61cb42267279566edd1d58e83dbc12eebdafaab666a0f0be1b7ad04af9c6bc2a6f478690a9e6391c3c8b165ada917dd + languageName: node + linkType: hard + "add-dom-event-listener@npm:^1.1.0": version: 1.1.0 resolution: "add-dom-event-listener@npm:1.1.0" @@ -10733,20 +11285,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.3": - version: 1.2.3 - resolution: "array.prototype.findlastindex@npm:1.2.3" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - es-shim-unscopables: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.1" - checksum: 063cbab8eeac3aa01f3e980eecb9a8c5d87723032b49f7f814ecc6d75c33c03c17e3f43a458127a62e16303cab412f95d6ad9dc7e0ae6d9dc27a9bb76c24df7a - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": +"array.prototype.flat@npm:^1.3.1": version: 1.3.2 resolution: "array.prototype.flat@npm:1.3.2" dependencies: @@ -10989,13 +11528,20 @@ __metadata: languageName: node linkType: hard -"axe-core@npm:=4.7.0, axe-core@npm:^4.2.0": +"axe-core@npm:=4.7.0": version: 4.7.0 resolution: "axe-core@npm:4.7.0" checksum: 615c0f7722c3c9fcf353dbd70b00e2ceae234d4c17cbc839dd85c01d16797c4e4da45f8d27c6118e9e6b033fb06efd196106e13651a1b2f3a10e0f11c7b2f660 languageName: node linkType: hard +"axe-core@npm:^4.2.0": + version: 4.6.3 + resolution: "axe-core@npm:4.6.3" + checksum: 280f6a7067129875380f733ae84093ce29c4b8cfe36e1a8ff46bd5d2bcd57d093f11b00223ddf5fef98ca147e0e6568ddd0ada9415cf8ae15d379224bf3cbb51 + languageName: node + linkType: hard + "axios@npm:^1.0.0": version: 1.5.1 resolution: "axios@npm:1.5.1" @@ -11042,6 +11588,23 @@ __metadata: languageName: node linkType: hard +"babel-jest@npm:^29.6.4": + version: 29.6.4 + resolution: "babel-jest@npm:29.6.4" + dependencies: + "@jest/transform": "npm:^29.6.4" + "@types/babel__core": "npm:^7.1.14" + babel-plugin-istanbul: "npm:^6.1.1" + babel-preset-jest: "npm:^29.6.3" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + slash: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 1e26438368719336d3cb6144b68155f4837154b38d917180b9d0a2344e17dacb59b1213e593005fa7f63041052ad0e38cd1fb1de1c6b54f7d353f617a2ad20cf + languageName: node + linkType: hard + "babel-loader@npm:9.1.3, babel-loader@npm:^9.0.0": version: 9.1.3 resolution: "babel-loader@npm:9.1.3" @@ -13983,13 +14546,20 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.0, deepmerge@npm:^4.2.2": +"deepmerge@npm:^4.0": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 languageName: node linkType: hard +"deepmerge@npm:^4.2.2": + version: 4.2.2 + resolution: "deepmerge@npm:4.2.2" + checksum: 0e58ed14f530d08f9b996cfc3a41b0801691620235bc5e1883260e3ed1c1b4a1dfb59f865770e45d5dfb1d7ee108c4fc10c2f85e822989d4123490ea90be2545 + languageName: node + linkType: hard + "default-browser-id@npm:3.0.0": version: 3.0.0 resolution: "default-browser-id@npm:3.0.0" @@ -14293,7 +14863,7 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": version: 0.5.10 resolution: "dom-accessibility-api@npm:0.5.10" checksum: 3ce183680c598392f89ec13fd04f495f95890c09d3da45909123ff549a10621ca21eee0258f929e4ed16a2cc73255d649174402b5fb7cd790983aa33b5a6fa3f @@ -15206,18 +15776,18 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" +"eslint-import-resolver-node@npm:^0.3.7": + version: 0.3.7 + resolution: "eslint-import-resolver-node@npm:0.3.7" dependencies: debug: "npm:^3.2.7" - is-core-module: "npm:^2.13.0" - resolve: "npm:^1.22.4" - checksum: d52e08e1d96cf630957272e4f2644dcfb531e49dcfd1edd2e07e43369eb2ec7a7d4423d417beee613201206ff2efa4eb9a582b5825ee28802fc7c71fcd53ca83 + is-core-module: "npm:^2.11.0" + resolve: "npm:^1.22.1" + checksum: 31c6dfbd3457d1e6170ac2326b7ba9c323ff1ea68e3fcc5309f234bd1cefed050ee9b35e458b5eaed91323ab0d29bb2eddb41a1720ba7ca09bbacb00a0339d64 languageName: node linkType: hard -"eslint-module-utils@npm:^2.8.0": +"eslint-module-utils@npm:^2.7.4": version: 2.8.0 resolution: "eslint-module-utils@npm:2.8.0" dependencies: @@ -15230,29 +15800,27 @@ __metadata: linkType: hard "eslint-plugin-import@npm:^2.26.0": - version: 2.29.1 - resolution: "eslint-plugin-import@npm:2.29.1" + version: 2.27.5 + resolution: "eslint-plugin-import@npm:2.27.5" dependencies: - array-includes: "npm:^3.1.7" - array.prototype.findlastindex: "npm:^1.2.3" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" + array-includes: "npm:^3.1.6" + array.prototype.flat: "npm:^1.3.1" + array.prototype.flatmap: "npm:^1.3.1" debug: "npm:^3.2.7" doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.8.0" - hasown: "npm:^2.0.0" - is-core-module: "npm:^2.13.1" + eslint-import-resolver-node: "npm:^0.3.7" + eslint-module-utils: "npm:^2.7.4" + has: "npm:^1.0.3" + is-core-module: "npm:^2.11.0" is-glob: "npm:^4.0.3" minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.7" - object.groupby: "npm:^1.0.1" - object.values: "npm:^1.1.7" - semver: "npm:^6.3.1" - tsconfig-paths: "npm:^3.15.0" + object.values: "npm:^1.1.6" + resolve: "npm:^1.22.1" + semver: "npm:^6.3.0" + tsconfig-paths: "npm:^3.14.1" peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 5865f05c38552145423c535326ec9a7113ab2305c7614c8b896ff905cfabc859c8805cac21e979c9f6f742afa333e6f62f812eabf891a7e8f5f0b853a32593c1 + checksum: b8ab9521bd47acdad959309cbb5635069cebd0f1dfd14b5f6ad24f609dfda82c604b029c7366cafce1d359845300957ec246587cd5e4b237a0378118a9d3dfa7 languageName: node linkType: hard @@ -15743,6 +16311,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.6.4": + version: 29.6.4 + resolution: "expect@npm:29.6.4" + dependencies: + "@jest/expect-utils": "npm:^29.6.4" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.6.4" + jest-message-util: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + checksum: 1e9224ce01de2bcd861b5a2b9409cc316c4f298beaa2c4ffb8a907a593e15ddff905506676f2b1f20d31fb1c0919a4527310b37b6d93f2ba4c4f77bf9881a90e + languageName: node + linkType: hard + "expose-loader@npm:4.1.0": version: 4.1.0 resolution: "expose-loader@npm:4.1.0" @@ -15881,7 +16462,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1": +"fast-glob@npm:^3.0.3, fast-glob@npm:^3.3.1": version: 3.3.1 resolution: "fast-glob@npm:3.3.1" dependencies: @@ -15894,6 +16475,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9": + version: 3.3.0 + resolution: "fast-glob@npm:3.3.0" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 4cd74914f13eab48dd1a0d16051aa102c13d30ea8a79c991563ea3111a37ff6d888518964291d52d723e7ad2a946149ce9f13d27ad9a07a1e4e1aefb4717ed29 + languageName: node + linkType: hard + "fast-json-parse@npm:^1.0.3": version: 1.0.3 resolution: "fast-json-parse@npm:1.0.3" @@ -16248,12 +16842,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.0": - version: 1.15.4 - resolution: "follow-redirects@npm:1.15.4" + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" peerDependenciesMeta: debug: optional: true - checksum: 2e8f5f259a6b02dfa8dc199e08431848a7c3beed32eb4c19945966164a52c89f07b86c3afcc32ebe4279cf0a960520e45a63013d6350309c5ec90133c5d9351a + checksum: 60d98693f4976892f8c654b16ef6d1803887a951898857ab0cdc009570b1c06314ad499505b7a040ac5b98144939f8597766e5e6a6859c0945d157b473aa6f5f languageName: node linkType: hard @@ -17111,13 +17705,20 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.0.0, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:4.2.11": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 languageName: node linkType: hard +"graceful-fs@npm:^4.0.0, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 0c83c52b62c68a944dcfb9d66b0f9f10f7d6e3d081e8067b9bfdc9e5f3a8896584d576036f82915773189eec1eba599397fc620e75c03c0610fb3d67c6713c1a + languageName: node + linkType: hard + "grafana@workspace:.": version: 0.0.0-use.local resolution: "grafana@workspace:." @@ -18148,11 +18749,11 @@ __metadata: linkType: hard "i18next-browser-languagedetector@npm:^7.0.2": - version: 7.2.0 - resolution: "i18next-browser-languagedetector@npm:7.2.0" + version: 7.0.2 + resolution: "i18next-browser-languagedetector@npm:7.0.2" dependencies: - "@babel/runtime": "npm:^7.23.2" - checksum: 5117b4961e0f32818f0d4587e81767d38c3a8e27305f1734fff2b07fe8c256161e2cdbd453b766b3c097055813fe89c43bce68b1d8f765b5b7f694d9852fe703 + "@babel/runtime": "npm:^7.19.4" + checksum: 9f07be9d94e4df342f0eb2aab1437534db0832edb9b20b0504ae6afda0db0294cacb0d11d723fd39f522c47a3c9ba91b8e834a8c0d7f4ec2261a1e37dcd63b61 languageName: node linkType: hard @@ -18313,7 +18914,7 @@ __metadata: languageName: node linkType: hard -"import-local@npm:3.1.0, import-local@npm:^3.0.2": +"import-local@npm:3.1.0": version: 3.1.0 resolution: "import-local@npm:3.1.0" dependencies: @@ -18325,6 +18926,18 @@ __metadata: languageName: node linkType: hard +"import-local@npm:^3.0.2": + version: 3.0.3 + resolution: "import-local@npm:3.0.3" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 38ae57d35e7fd5f63b55895050c798d4dd590e4e2337e9ffa882fb3ea7a7716f3162c7300e382e0a733ca5d07b389fadff652c00fa7b072d5cb6ea34ca06b179 + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -18653,7 +19266,16 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.11.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: "npm:^1.0.3" + checksum: 35d5f90c95f7c737d287121e924bdfcad0a47b33efd7f89c58e9ab3810b43b1f1d377b641797326bde500e47edf5a7bf74a464e0c336a5c7e827b13fa41b57af + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -19060,7 +19682,20 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: "npm:^1.0.5" + call-bind: "npm:^1.0.2" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.0" + checksum: 2392b2473bbc994f5c30d6848e32bab3cab6c80b795aaec3020baf5419ff7df38fc11b3a043eb56d50f842394c578dbb204a7a29398099f895cf111c5b27f327 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.12": version: 1.1.12 resolution: "is-typed-array@npm:1.1.12" dependencies: @@ -19319,6 +19954,17 @@ __metadata: languageName: node linkType: hard +"jest-changed-files@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-changed-files@npm:29.6.3" + dependencies: + execa: "npm:^5.0.0" + jest-util: "npm:^29.6.3" + p-limit: "npm:^3.1.0" + checksum: ffcd0add3351c54ee0eb3ed88e2352ecf46d9118daed99ab0b73cb25502848a19db3ff3027f8b6ac1a168e158bc87d2d30adbd6c88119fad19f5f87357896f82 + languageName: node + linkType: hard + "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -19330,6 +19976,34 @@ __metadata: languageName: node linkType: hard +"jest-circus@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-circus@npm:29.6.4" + dependencies: + "@jest/environment": "npm:^29.6.4" + "@jest/expect": "npm:^29.6.4" + "@jest/test-result": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + co: "npm:^4.6.0" + dedent: "npm:^1.0.0" + is-generator-fn: "npm:^2.0.0" + jest-each: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.6.4" + jest-message-util: "npm:^29.6.3" + jest-runtime: "npm:^29.6.4" + jest-snapshot: "npm:^29.6.4" + jest-util: "npm:^29.6.3" + p-limit: "npm:^3.1.0" + pretty-format: "npm:^29.6.3" + pure-rand: "npm:^6.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 70dd56c1dec25a7499df85d942f27549ce257430b36597e984dbb3dac630a6707133e50a67285cbcf5564aace700e54748c6b7290136b188363678d0af8db17a + languageName: node + linkType: hard + "jest-circus@npm:^29.7.0": version: 29.7.0 resolution: "jest-circus@npm:29.7.0" @@ -19384,6 +20058,71 @@ __metadata: languageName: node linkType: hard +"jest-cli@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-cli@npm:29.6.4" + dependencies: + "@jest/core": "npm:^29.6.4" + "@jest/test-result": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + import-local: "npm:^3.0.2" + jest-config: "npm:^29.6.4" + jest-util: "npm:^29.6.3" + jest-validate: "npm:^29.6.3" + prompts: "npm:^2.0.1" + yargs: "npm:^17.3.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 24b6ca6c8409433a8da621d91a7637ff67e606c0d6c18b606bbbc1a0c7f7e819b935ec1bc6c45c8e6892faf9f073c409f058cdf0ac454f9379ddb826175d40cf + languageName: node + linkType: hard + +"jest-config@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-config@npm:29.6.4" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/test-sequencer": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + babel-jest: "npm:^29.6.4" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + deepmerge: "npm:^4.2.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-circus: "npm:^29.6.4" + jest-environment-node: "npm:^29.6.4" + jest-get-type: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.6.4" + jest-runner: "npm:^29.6.4" + jest-util: "npm:^29.6.3" + jest-validate: "npm:^29.6.3" + micromatch: "npm:^4.0.4" + parse-json: "npm:^5.2.0" + pretty-format: "npm:^29.6.3" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 5d9019f046684bf45e87c01996197ccfb96936bca67242f59fdf40d9bd76622c97b5b57bbb257591e12edb941285662dac106f8f327910b26c822adda7057c6d + languageName: node + linkType: hard + "jest-config@npm:^29.7.0": version: 29.7.0 resolution: "jest-config@npm:29.7.0" @@ -19465,6 +20204,27 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-diff@npm:29.6.4" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.6.3" + checksum: b1720b78d1de8e6efaf74425df57e749008049b7c2f8a60af73667fd886653bbc7ee69a452076073ad4b2e3d9d1cd6599bb9dc00a8fb69f02b9075423aafee3c + languageName: node + linkType: hard + +"jest-docblock@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-docblock@npm:29.6.3" + dependencies: + detect-newline: "npm:^3.0.0" + checksum: fa9d8d344f093659beb741e2efa22db663ef8c441200b74707da7749a8799a0022824166d7fdd972e773f7c4fab01227f1847e3315fa63584f539b7b78b285eb + languageName: node + linkType: hard + "jest-docblock@npm:^29.7.0": version: 29.7.0 resolution: "jest-docblock@npm:29.7.0" @@ -19474,6 +20234,19 @@ __metadata: languageName: node linkType: hard +"jest-each@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-each@npm:29.6.3" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + pretty-format: "npm:^29.6.3" + checksum: e08c01ffba3c6254b6555b749eb7b2e55ca4f153d4e1d8ac15b7dcec4d5c06b150b9f9a272cf3cd622b3b2c495c2d5ee656165b9a93c1c06dcb1a82f13fa95e0 + languageName: node + linkType: hard + "jest-each@npm:^29.7.0": version: 29.7.0 resolution: "jest-each@npm:29.7.0" @@ -19529,6 +20302,20 @@ __metadata: languageName: node linkType: hard +"jest-environment-node@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-environment-node@npm:29.6.4" + dependencies: + "@jest/environment": "npm:^29.6.4" + "@jest/fake-timers": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + checksum: 7c7bb39a35eaff23eb553c5b7cae776c0622737e64bcd6b558b745012da1366d5f7e2de0a6f659c39f3869783c0b92a5a3dc64649638dbf8f3208c82832b6321 + languageName: node + linkType: hard + "jest-environment-node@npm:^29.7.0": version: 29.7.0 resolution: "jest-environment-node@npm:29.7.0" @@ -19571,6 +20358,29 @@ __metadata: languageName: node linkType: hard +"jest-haste-map@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-haste-map@npm:29.6.4" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/graceful-fs": "npm:^4.1.3" + "@types/node": "npm:*" + anymatch: "npm:^3.0.3" + fb-watchman: "npm:^2.0.0" + fsevents: "npm:^2.3.2" + graceful-fs: "npm:^4.2.9" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + jest-worker: "npm:^29.6.4" + micromatch: "npm:^4.0.4" + walker: "npm:^1.0.8" + dependenciesMeta: + fsevents: + optional: true + checksum: 5fb2dc9cd028b6d02a8d4dcaf81b790b60f9034a20b6a1deca9a4ad529741362cd1035020f3d94f6c160103b1ea3d46771f40a3330ab4d8d3c073d515e11b810 + languageName: node + linkType: hard + "jest-haste-map@npm:^29.7.0": version: 29.7.0 resolution: "jest-haste-map@npm:29.7.0" @@ -19606,6 +20416,16 @@ __metadata: languageName: node linkType: hard +"jest-leak-detector@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-leak-detector@npm:29.6.3" + dependencies: + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.6.3" + checksum: 27548fcfc7602fe1b88f8600185e35ffff71751f3631e52bbfdfc72776f5a13a430185cf02fc632b41320a74f99ae90e40ce101c8887509f0f919608a7175129 + languageName: node + linkType: hard + "jest-leak-detector@npm:^29.7.0": version: 29.7.0 resolution: "jest-leak-detector@npm:29.7.0" @@ -19628,6 +20448,35 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-matcher-utils@npm:29.6.4" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^29.6.4" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.6.3" + checksum: de306e3592d316ff9725b8e2595c6a4bb9c05b1f296b3e73aef5cf945a4b4799dbfc3fc080e74f4e6259b65123a70b2dc3595db5cfcbaaa30ed3d37ec59551a0 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-message-util@npm:29.6.3" + dependencies: + "@babel/code-frame": "npm:^7.12.13" + "@jest/types": "npm:^29.6.3" + "@types/stack-utils": "npm:^2.0.0" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.6.3" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: fe659a92a32e6f9c3fdb9b07792a2a362b3d091334eb230b12524ffb5023457ea39d7fc412187e4f245dbe394fd012591878a2b5932eaedd7e82d5c9b416035c + languageName: node + linkType: hard + "jest-message-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-message-util@npm:29.7.0" @@ -19656,6 +20505,17 @@ __metadata: languageName: node linkType: hard +"jest-mock@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-mock@npm:29.6.3" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-util: "npm:^29.6.3" + checksum: 9da22e0edfb77b2ed2d4204f305b41a17c2133c0cb638ee81e875115ae6e01adf57681a0ab8f7c2b7e0cde7dcd916d62c7b5d28176c342bb80bbfcea8a168729 + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.2": version: 1.2.2 resolution: "jest-pnp-resolver@npm:1.2.2" @@ -19675,6 +20535,16 @@ __metadata: languageName: node linkType: hard +"jest-resolve-dependencies@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-resolve-dependencies@npm:29.6.4" + dependencies: + jest-regex-util: "npm:^29.6.3" + jest-snapshot: "npm:^29.6.4" + checksum: 8a1616558e78213bc4c7c445e7188776f7d4940e3858684e0404c485bbc23e1e10093bf59640fbc4b88141f361f0c01e760eb2c79bf088ad1896971941869158 + languageName: node + linkType: hard + "jest-resolve-dependencies@npm:^29.7.0": version: 29.7.0 resolution: "jest-resolve-dependencies@npm:29.7.0" @@ -19685,6 +20555,23 @@ __metadata: languageName: node linkType: hard +"jest-resolve@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-resolve@npm:29.6.4" + dependencies: + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.6.4" + jest-pnp-resolver: "npm:^1.2.2" + jest-util: "npm:^29.6.3" + jest-validate: "npm:^29.6.3" + resolve: "npm:^1.20.0" + resolve.exports: "npm:^2.0.0" + slash: "npm:^3.0.0" + checksum: 63fcd739106363a8928a96131fd0fd7dfa8b052b70d0c3a3f1099f33666b2d9086880f01e714e46b1044f7d107caaae81fd1547bd2c149d6b7a06453d5cc14b3 + languageName: node + linkType: hard + "jest-resolve@npm:^29.7.0": version: 29.7.0 resolution: "jest-resolve@npm:29.7.0" @@ -19702,6 +20589,35 @@ __metadata: languageName: node linkType: hard +"jest-runner@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-runner@npm:29.6.4" + dependencies: + "@jest/console": "npm:^29.6.4" + "@jest/environment": "npm:^29.6.4" + "@jest/test-result": "npm:^29.6.4" + "@jest/transform": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + graceful-fs: "npm:^4.2.9" + jest-docblock: "npm:^29.6.3" + jest-environment-node: "npm:^29.6.4" + jest-haste-map: "npm:^29.6.4" + jest-leak-detector: "npm:^29.6.3" + jest-message-util: "npm:^29.6.3" + jest-resolve: "npm:^29.6.4" + jest-runtime: "npm:^29.6.4" + jest-util: "npm:^29.6.3" + jest-watcher: "npm:^29.6.4" + jest-worker: "npm:^29.6.4" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: b51345e07b78b546dd192f734d1e5324f41fe5aceafba6a8238b3f38f3bcafa433ee9a5bdf41f853bed4279b044ce0621be75b33b840f4a9745b6c958220a21e + languageName: node + linkType: hard + "jest-runner@npm:^29.7.0": version: 29.7.0 resolution: "jest-runner@npm:29.7.0" @@ -19731,6 +20647,36 @@ __metadata: languageName: node linkType: hard +"jest-runtime@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-runtime@npm:29.6.4" + dependencies: + "@jest/environment": "npm:^29.6.4" + "@jest/fake-timers": "npm:^29.6.4" + "@jest/globals": "npm:^29.6.4" + "@jest/source-map": "npm:^29.6.3" + "@jest/test-result": "npm:^29.6.4" + "@jest/transform": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + cjs-module-lexer: "npm:^1.0.0" + collect-v8-coverage: "npm:^1.0.0" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.6.4" + jest-message-util: "npm:^29.6.3" + jest-mock: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.6.4" + jest-snapshot: "npm:^29.6.4" + jest-util: "npm:^29.6.3" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: e70669b5a439f5a26156b972462471fbac997e6779fe7421df000f5fe8f1f11abe0c7cb664edd1cf3849c3f2d8329dc7e8495ce89251352a6cabff9153dcf99a + languageName: node + linkType: hard + "jest-runtime@npm:^29.7.0": version: 29.7.0 resolution: "jest-runtime@npm:29.7.0" @@ -19761,6 +20707,34 @@ __metadata: languageName: node linkType: hard +"jest-snapshot@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-snapshot@npm:29.6.4" + dependencies: + "@babel/core": "npm:^7.11.6" + "@babel/generator": "npm:^7.7.2" + "@babel/plugin-syntax-jsx": "npm:^7.7.2" + "@babel/plugin-syntax-typescript": "npm:^7.7.2" + "@babel/types": "npm:^7.3.3" + "@jest/expect-utils": "npm:^29.6.4" + "@jest/transform": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + chalk: "npm:^4.0.0" + expect: "npm:^29.6.4" + graceful-fs: "npm:^4.2.9" + jest-diff: "npm:^29.6.4" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.6.4" + jest-message-util: "npm:^29.6.3" + jest-util: "npm:^29.6.3" + natural-compare: "npm:^1.4.0" + pretty-format: "npm:^29.6.3" + semver: "npm:^7.5.3" + checksum: 998476c7ffef43cfe97ef9b786c6c6489440b0042537b0c1ad8b4366de73fc6b1ec16d148ef294b24b835d045c186b2543217e6906dd495b4d20112e85007168 + languageName: node + linkType: hard + "jest-snapshot@npm:^29.7.0": version: 29.7.0 resolution: "jest-snapshot@npm:29.7.0" @@ -19803,6 +20777,34 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-util@npm:29.6.3" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 455af2b5e064213b33b837a18ddd3d31878aee31ad40bbd599de2a4977f860a797e491cb94894e38bbd352cb7b31d41448b7ec3b346408613015411cd88ed57f + languageName: node + linkType: hard + +"jest-validate@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-validate@npm:29.6.3" + dependencies: + "@jest/types": "npm:^29.6.3" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + leven: "npm:^3.1.0" + pretty-format: "npm:^29.6.3" + checksum: 4e0a3ef5a2c181f10dcd979ae62188166effd52d7aec7916deaa29b75b29bdf4e01b77375246c7c16032d95cb7364ceae69c5d146e4348ccdf8a3a43d1c6862c + languageName: node + linkType: hard + "jest-validate@npm:^29.7.0": version: 29.7.0 resolution: "jest-validate@npm:29.7.0" @@ -19817,6 +20819,22 @@ __metadata: languageName: node linkType: hard +"jest-watcher@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-watcher@npm:29.6.4" + dependencies: + "@jest/test-result": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + jest-util: "npm:^29.6.3" + string-length: "npm:^4.0.1" + checksum: 01c008b2f3e76b024f9e9dd242ba5b172634a6b9bc201d7f27cb82563071f06ae87e3ae8db50336034264a98d20a45459068f089597c956a96959109527498c4 + languageName: node + linkType: hard + "jest-watcher@npm:^29.7.0": version: 29.7.0 resolution: "jest-watcher@npm:29.7.0" @@ -19867,6 +20885,18 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-worker@npm:29.6.4" + dependencies: + "@types/node": "npm:*" + jest-util: "npm:^29.6.3" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 52b2f238f21ff20dd4cb74ab85c1b32ba8ce5709355ae2f6d3e908a06ac0828658ab9d94562d752833d0e469f35517ceba9b68ca6b0d27fa1057115f065864ce + languageName: node + linkType: hard + "jest@npm:29.3.1": version: 29.3.1 resolution: "jest@npm:29.3.1" @@ -19886,7 +20916,7 @@ __metadata: languageName: node linkType: hard -"jest@npm:29.7.0, jest@npm:^29.6.4": +"jest@npm:29.7.0": version: 29.7.0 resolution: "jest@npm:29.7.0" dependencies: @@ -19905,6 +20935,25 @@ __metadata: languageName: node linkType: hard +"jest@npm:^29.6.4": + version: 29.6.4 + resolution: "jest@npm:29.6.4" + dependencies: + "@jest/core": "npm:^29.6.4" + "@jest/types": "npm:^29.6.3" + import-local: "npm:^3.0.2" + jest-cli: "npm:^29.6.4" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: d747e293bd63f583e7978ac0693ab7a019812fa44b9bf3b3fe20e75e8a343bcd8251d292326d73151dc0b8a2b5a974d878b3aa9ffb146dfa7980553f64a35b43 + languageName: node + linkType: hard + "jiti@npm:^1.20.0": version: 1.21.0 resolution: "jiti@npm:1.21.0" @@ -20165,7 +21214,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.2": +"json5@npm:^1.0.1": version: 1.0.2 resolution: "json5@npm:1.0.2" dependencies: @@ -20853,14 +21902,14 @@ __metadata: linkType: hard "logfmt@npm:^1.3.2": - version: 1.4.0 - resolution: "logfmt@npm:1.4.0" + version: 1.3.2 + resolution: "logfmt@npm:1.3.2" dependencies: split: "npm:0.2.x" through: "npm:2.3.x" bin: - logfmt: bin/logfmt - checksum: 4576cc77faa5596c62bdbb4aec9efeba8e6758495b395a48ab2c7ee49e0673c85c2498ed792740b21607e011c4d94e4fc7449034ba7ba67f8a9ae14a2fb1e801 + logfmt: ./bin/logfmt + checksum: 08a4d4467cc8e066f05394a966ea103fa8785da3e22fb82a502e62cc0edc3c8679405bb8bbdd93c859da7defffe1d7feeeb47a59da11cdd76e48bf9374430cdd languageName: node linkType: hard @@ -21426,7 +22475,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": +"minimatch@npm:9.0.3, minimatch@npm:^9.0.0": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -21453,6 +22502,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.1": + version: 9.0.1 + resolution: "minimatch@npm:9.0.1" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: b4e98f4dc740dcf33999a99af23ae6e5e1c47632f296dc95cb649a282150f92378d41434bf64af4ea2e5975255a757d031c3bf014bad9214544ac57d97f3ba63 + languageName: node + linkType: hard + "minimist-options@npm:4.1.0": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" @@ -22604,18 +23662,6 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.1": - version: 1.0.1 - resolution: "object.groupby@npm:1.0.1" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - get-intrinsic: "npm:^1.2.1" - checksum: b7123d91403f95d63978513b23a6079c30f503311f64035fafc863c291c787f287b58df3b21ef002ce1d0b820958c9009dd5a8ab696e0eca325639d345e41524 - languageName: node - linkType: hard - "object.hasown@npm:^1.1.2": version: 1.1.2 resolution: "object.hasown@npm:1.1.2" @@ -22626,7 +23672,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.6, object.values@npm:^1.1.7": +"object.values@npm:^1.1.6": version: 1.1.7 resolution: "object.values@npm:1.1.7" dependencies: @@ -23959,6 +25005,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.6.3": + version: 29.6.3 + resolution: "pretty-format@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 4a17a0953b3e2d334e628dc9ff11cfad988e6adb00c074bf9d10f3eb1919ad56b30d987148ac0ce1d0317ad392cd78b39a74b6cbac4e66af609f6127ad3aaaf0 + languageName: node + linkType: hard + "pretty-hrtime@npm:^1.0.3": version: 1.0.3 resolution: "pretty-hrtime@npm:1.0.3" @@ -25197,16 +26254,16 @@ __metadata: linkType: hard "react-router-dom-v5-compat@npm:^6.10.0": - version: 6.21.3 - resolution: "react-router-dom-v5-compat@npm:6.21.3" + version: 6.10.0 + resolution: "react-router-dom-v5-compat@npm:6.10.0" dependencies: history: "npm:^5.3.0" - react-router: "npm:6.21.3" + react-router: "npm:6.10.0" peerDependencies: react: ">=16.8" react-dom: ">=16.8" react-router-dom: 4 || 5 - checksum: ed40e3e241a8c2a85aa0a95b52b77b9b9667e3f1a48a8a60e0b33e3c615c3b490b6c3a645ea92efc5783251111d039a5c809b779e1a93b9da23de6e97e4e1bd0 + checksum: b86edb22640e25687a843fd46c22b58e147316ee957653e684d9f46a7e71da113a761a2f74c60d42f5d4222e497f825e541a1f4d8872b26edb4b623fb7c87928 languageName: node linkType: hard @@ -25247,6 +26304,17 @@ __metadata: languageName: node linkType: hard +"react-router@npm:6.10.0": + version: 6.10.0 + resolution: "react-router@npm:6.10.0" + dependencies: + "@remix-run/router": "npm:1.5.0" + peerDependencies: + react: ">=16.8" + checksum: 3c78db213d2c67c7ae06125b296889ebf3407963268ef23319312b4d7bf455ecfaa59164be73d6b4e19fb2ef6c2771d7dfe764d5a91cbdbb7c8e84c95aca99cc + languageName: node + linkType: hard + "react-router@npm:6.21.3": version: 6.21.3 resolution: "react-router@npm:6.21.3" @@ -25674,14 +26742,14 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" +"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" dependencies: inherits: "npm:^2.0.3" string_decoder: "npm:^1.1.1" util-deprecate: "npm:^1.0.1" - checksum: d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 + checksum: b80b3e6a7fafb1c79de7db541de357f4a5ee73bd70c21672f5a7c840d27bb27bdb0151e7ba2fd82c4a888df22ce0c501b0d9f3e4dfe51688876701c437d59536 languageName: node linkType: hard @@ -25712,6 +26780,17 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^3.5.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -26145,7 +27224,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4": +"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -26171,7 +27250,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.12.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.12.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -28260,7 +29339,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:5.3.10, terser-webpack-plugin@npm:^5.1.3, terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.10, terser-webpack-plugin@npm:^5.3.7": +"terser-webpack-plugin@npm:5.3.10, terser-webpack-plugin@npm:^5.3.10": version: 5.3.10 resolution: "terser-webpack-plugin@npm:5.3.10" dependencies: @@ -28282,6 +29361,28 @@ __metadata: languageName: node linkType: hard +"terser-webpack-plugin@npm:^5.1.3, terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.7": + version: 5.3.9 + resolution: "terser-webpack-plugin@npm:5.3.9" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.17" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^3.1.1" + serialize-javascript: "npm:^6.0.1" + terser: "npm:^5.16.8" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 339737a407e034b7a9d4a66e31d84d81c10433e41b8eae2ca776f0e47c2048879be482a9aa08e8c27565a2a949bc68f6e07f451bf4d9aa347dd61b3d000f5353 + languageName: node + linkType: hard + "terser@npm:^5.0.0, terser@npm:^5.14.2, terser@npm:^5.26.0, terser@npm:^5.7.2": version: 5.26.0 resolution: "terser@npm:5.26.0" @@ -28296,6 +29397,20 @@ __metadata: languageName: node linkType: hard +"terser@npm:^5.16.8": + version: 5.17.2 + resolution: "terser@npm:5.17.2" + dependencies: + "@jridgewell/source-map": "npm:^0.3.2" + acorn: "npm:^8.5.0" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 6df529586a4913657547dd8bfe2b5a59704b7acbe4e49ac938a16f829a62226f98dafb19c88b7af66b245ea281ee5dbeec33a41349ac3c035855417b06ebd646 + languageName: node + linkType: hard + "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -28822,15 +29937,15 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" +"tsconfig-paths@npm:^3.14.1": + version: 3.14.1 + resolution: "tsconfig-paths@npm:3.14.1" dependencies: "@types/json5": "npm:^0.0.29" - json5: "npm:^1.0.2" + json5: "npm:^1.0.1" minimist: "npm:^1.2.6" strip-bom: "npm:^3.0.0" - checksum: 2041beaedc6c271fc3bedd12e0da0cc553e65d030d4ff26044b771fac5752d0460944c0b5e680f670c2868c95c664a256cec960ae528888db6ded83524e33a14 + checksum: 51be8bd8f90e49d2f8b3f61f544557e631dd5cee35e247dd316be27d723c9e99de9ce59eb39395ca20f1e43aedfc1fef0272ba25acb0a0e0e9a38cffd692256d languageName: node linkType: hard @@ -30066,7 +31181,7 @@ __metadata: languageName: node linkType: hard -"webpack-merge@npm:5.10.0, webpack-merge@npm:^5.7.3": +"webpack-merge@npm:5.10.0": version: 5.10.0 resolution: "webpack-merge@npm:5.10.0" dependencies: @@ -30077,6 +31192,16 @@ __metadata: languageName: node linkType: hard +"webpack-merge@npm:^5.7.3": + version: 5.9.0 + resolution: "webpack-merge@npm:5.9.0" + dependencies: + clone-deep: "npm:^4.0.1" + wildcard: "npm:^2.0.0" + checksum: d23dd1f0bad0b9821bf58443d2d29097d65cd9353046c2d8a6d7b57877ec19cf64be57cc7ef2a371a15cf9264fe6eaf8dea4015dc87487e664ffab2a28329d56 + languageName: node + linkType: hard + "webpack-sources@npm:^1.4.3": version: 1.4.3 resolution: "webpack-sources@npm:1.4.3" @@ -30328,7 +31453,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.11": version: 1.1.11 resolution: "which-typed-array@npm:1.1.11" dependencies: @@ -30341,6 +31466,20 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": + version: 1.1.9 + resolution: "which-typed-array@npm:1.1.9" + dependencies: + available-typed-arrays: "npm:^1.0.5" + call-bind: "npm:^1.0.2" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.0" + is-typed-array: "npm:^1.1.10" + checksum: 90ef760a09dcffc479138a6bc77fd2933a81a41d531f4886ae212f6edb54a0645a43a6c24de2c096aea910430035ac56b3d22a06f3d64e5163fa178d0f24e08e + languageName: node + linkType: hard + "which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -30633,9 +31772,9 @@ __metadata: linkType: hard "yaml@npm:^2.0.0": - version: 2.3.4 - resolution: "yaml@npm:2.3.4" - checksum: f8207ce43065a22268a2806ea6a0fa3974c6fde92b4b2fa0082357e487bc333e85dc518910007e7ac001b532c7c84bd3eccb6c7757e94182b564028b0008f44b + version: 2.3.1 + resolution: "yaml@npm:2.3.1" + checksum: 66501d597e43766eb94dc175d28ec8b2c63087d6a78783e59b4218eee32b9172740f9f27d54b7bc0ca8af61422f7134929f9974faeaac99d583787e793852fd2 languageName: node linkType: hard