mirror of
https://github.com/podman-desktop/podman-desktop
synced 2026-04-21 17:47:22 +00:00
chore: update to svelte5 (#7854)
* chore: update to svelte5 Signed-off-by: Florent Benoit <fbenoit@redhat.com>
This commit is contained in:
parent
2efe9bef3f
commit
43db9b0a3f
88 changed files with 575 additions and 825 deletions
|
|
@ -70,7 +70,7 @@
|
|||
"test:extensions:registries": "vitest run -r extensions/registries --passWithNoTests --coverage ",
|
||||
"test:extensions:kubectl-cli": "vitest run -r extensions/kubectl-cli --passWithNoTests --coverage ",
|
||||
"test:renderer": "npm run build:ui && vitest -c packages/renderer/vite.config.js run packages/renderer --passWithNoTests --coverage",
|
||||
"test:ui": "vitest run -r packages/ui --passWithNoTests --coverage",
|
||||
"test:ui": "vitest --config packages/ui/vite.config.js run --passWithNoTests --coverage",
|
||||
"test:tools": "vitest run tools --passWithNoTests --coverage",
|
||||
"test:scripts:stylesheet": "vitest run ./scripts/generate-stylesheet.spec.ts --passWithNoTests",
|
||||
"test:watch": "vitest watch",
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
"lint:clean": "rimraf .eslintcache",
|
||||
"lint:fix": "node --max-old-space-size=6144 node_modules/eslint/bin/eslint.js --cache . --fix --ext js,ts,tsx,svelte",
|
||||
"lint:check": "node --max-old-space-size=6144 node_modules/eslint/bin/eslint.js --cache . --ext js,ts,tsx,svelte",
|
||||
"svelte:check": "svelte-check --ignore \"packages/ui/dist\"",
|
||||
"svelte:check": "svelte-check --ignore \"packages/ui/dist,packages/renderer/src/lib/ui/DetailsPage.svelte,packages/renderer/src/lib/ui/EngineFormPage.svelte,packages/renderer/src/lib/ui/FormPage.svelte,storybook\"",
|
||||
"typecheck:extension-api": "tsc --noEmit -p packages/extension-api/tsconfig.json",
|
||||
"typecheck:main": "tsc --noEmit -p packages/main/tsconfig.json",
|
||||
"typecheck:preload": "tsc --noEmit -p packages/preload/tsconfig.json",
|
||||
|
|
@ -158,6 +158,7 @@
|
|||
"husky": "^9.0.11",
|
||||
"js-yaml": "^4.1.0",
|
||||
"lint-staged": "^15.2.7",
|
||||
"minimist": "^1.2.8",
|
||||
"nock": "^14.0.0-beta.7",
|
||||
"postcss-import": "^16.1.0",
|
||||
"prettier": "^3.3.2",
|
||||
|
|
@ -177,7 +178,6 @@
|
|||
"adm-zip": "^0.5.14",
|
||||
"check-disk-space": "^3.4.0",
|
||||
"chokidar": "^3.6.0",
|
||||
"minimist ": "^1.2.8",
|
||||
"compare-versions": "^6.1.0",
|
||||
"date.js": "^0.3.3",
|
||||
"dockerode": "^4.0.2",
|
||||
|
|
@ -188,6 +188,7 @@
|
|||
"getos": "^3.2.1",
|
||||
"got": "^14.2.1",
|
||||
"hpagent": "^1.2.0",
|
||||
"minimist": "^1.2.8",
|
||||
"moment": "^2.30.1",
|
||||
"os-locale": "^6.0.2",
|
||||
"stream-json": "^1.8.0",
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"serve": "vite preview",
|
||||
"test": "vitest run --coverage --passWithNoTests",
|
||||
"test:watch": "vitest watch --coverage --passWithNoTests",
|
||||
"check": "svelte-check --tsconfig ./tsconfig.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
@ -14,10 +16,10 @@
|
|||
"@fortawesome/free-brands-svg-icons": "^6.5.2",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.5.2",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
||||
"@sveltejs/vite-plugin-svelte": "3.1.1",
|
||||
"@sveltejs/vite-plugin-svelte": "4.0.0-next.3",
|
||||
"@testing-library/dom": "^10.2.0",
|
||||
"@testing-library/jest-dom": "^6.4.6",
|
||||
"@testing-library/svelte": "^5.1.0",
|
||||
"@testing-library/svelte": "^5.2.0",
|
||||
"@testing-library/user-event": "^14.5.2",
|
||||
"@tsconfig/svelte": "^5.0.4",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
|
|
@ -34,7 +36,7 @@
|
|||
"monaco-editor": "^0.50.0",
|
||||
"postcss": "^8.4.39",
|
||||
"postcss-load-config": "^6.0.1",
|
||||
"svelte": "4.2.18",
|
||||
"svelte": "5.0.0-next.164",
|
||||
"svelte-check": "^3.8.4",
|
||||
"svelte-eslint-parser": "^0.39.1",
|
||||
"svelte-fa": "^4.0.2",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**********************************************************************
|
||||
* Copyright (C) 2023 Red Hat, Inc.
|
||||
* Copyright (C) 2023-2024 Red Hat, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -19,7 +19,10 @@
|
|||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
|
||||
import { render } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { router } from 'tinro';
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -85,6 +88,8 @@ test('Loader should redirect to the installation page when receiving the event',
|
|||
expect(callback).toBeDefined();
|
||||
await callback();
|
||||
|
||||
await tick();
|
||||
|
||||
// check that we have been redirected
|
||||
expect(router.goto).toHaveBeenCalledWith(`/extensions/details/${dummyExtensionId}`);
|
||||
|
||||
|
|
|
|||
|
|
@ -62,8 +62,7 @@ afterEach(() => {
|
|||
});
|
||||
|
||||
test('Expect no error and status starting compose', async () => {
|
||||
const { component } = render(ComposeActions, { compose });
|
||||
component.$on('update', updateMock);
|
||||
render(ComposeActions, { compose, onUpdate: updateMock });
|
||||
|
||||
// click on start button
|
||||
const startButton = screen.getByRole('button', { name: 'Start Compose' });
|
||||
|
|
@ -77,8 +76,7 @@ test('Expect no error and status starting compose', async () => {
|
|||
});
|
||||
|
||||
test('Expect no error and status stopping compose', async () => {
|
||||
const { component } = render(ComposeActions, { compose });
|
||||
component.$on('update', updateMock);
|
||||
render(ComposeActions, { compose, onUpdate: updateMock });
|
||||
|
||||
// click on stop button
|
||||
const stopButton = screen.getByRole('button', { name: 'Stop Compose' });
|
||||
|
|
@ -92,8 +90,7 @@ test('Expect no error and status stopping compose', async () => {
|
|||
});
|
||||
|
||||
test('Expect no error and status restarting compose', async () => {
|
||||
const { component } = render(ComposeActions, { compose });
|
||||
component.$on('update', updateMock);
|
||||
render(ComposeActions, { compose, onUpdate: updateMock });
|
||||
|
||||
// click on restart button
|
||||
const restartButton = screen.getByRole('button', { name: 'Restart Compose' });
|
||||
|
|
@ -109,8 +106,7 @@ test('Expect no error and status restarting compose', async () => {
|
|||
test('Expect no error and status deleting compose', async () => {
|
||||
// Mock the showMessageBox to return 0 (yes)
|
||||
showMessageBoxMock.mockResolvedValue({ response: 0 });
|
||||
const { component } = render(ComposeActions, { compose });
|
||||
component.$on('update', updateMock);
|
||||
render(ComposeActions, { compose, onUpdate: updateMock });
|
||||
|
||||
// click on delete button
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete Compose' });
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@ export let dropdownMenu = false;
|
|||
export let detailed = false;
|
||||
|
||||
const dispatch = createEventDispatcher<{ update: ComposeInfoUI }>();
|
||||
|
||||
export let onUpdate: (update: ComposeInfoUI) => void = update => {
|
||||
dispatch('update', update);
|
||||
};
|
||||
const composeLabel = 'com.docker.compose.project';
|
||||
|
||||
let contributions: Menu[] = [];
|
||||
|
|
@ -46,14 +48,14 @@ function inProgress(inProgress: boolean, state?: string): void {
|
|||
container.state = state;
|
||||
}
|
||||
}
|
||||
dispatch('update', compose);
|
||||
onUpdate(compose);
|
||||
}
|
||||
|
||||
function handleError(errorMessage: string): void {
|
||||
compose.actionError = errorMessage;
|
||||
compose.status = 'ERROR';
|
||||
|
||||
dispatch('update', compose);
|
||||
onUpdate(compose);
|
||||
}
|
||||
|
||||
async function startCompose() {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,10 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import type { ContainerInspectInfo } from '@podman-desktop/api';
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import { mockBreadcrumb } from '../../stores/breadcrumb.spec';
|
||||
|
|
@ -68,11 +71,8 @@ beforeAll(() => {
|
|||
});
|
||||
|
||||
async function waitRender(name: string, engineId: string): Promise<void> {
|
||||
const result = render(ComposeDetails, { composeName: name, engineId: engineId });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ComposeDetails, { composeName: name, engineId: engineId });
|
||||
await tick();
|
||||
}
|
||||
|
||||
const containerInspectInfo: ContainerInspectInfo = {
|
||||
|
|
|
|||
|
|
@ -50,8 +50,7 @@ afterEach(() => {
|
|||
});
|
||||
|
||||
test('Expect no error and status starting container', async () => {
|
||||
const { component } = render(ContainerActions, { container });
|
||||
component.$on('update', updateMock);
|
||||
render(ContainerActions, { container, onUpdate: updateMock });
|
||||
|
||||
// click on start button
|
||||
const startButton = screen.getByRole('button', { name: 'Start Container' });
|
||||
|
|
@ -63,8 +62,7 @@ test('Expect no error and status starting container', async () => {
|
|||
});
|
||||
|
||||
test('Expect no error and status stopping container', async () => {
|
||||
const { component } = render(ContainerActions, { container });
|
||||
component.$on('update', updateMock);
|
||||
render(ContainerActions, { container, onUpdate: updateMock });
|
||||
|
||||
// click on stop button
|
||||
const stopButton = screen.getByRole('button', { name: 'Stop Container' });
|
||||
|
|
@ -76,8 +74,7 @@ test('Expect no error and status stopping container', async () => {
|
|||
});
|
||||
|
||||
test('Expect no error and status restarting container', async () => {
|
||||
const { component } = render(ContainerActions, { container });
|
||||
component.$on('update', updateMock);
|
||||
render(ContainerActions, { container, onUpdate: updateMock });
|
||||
|
||||
// click on restart button
|
||||
const restartButton = screen.getByRole('button', { name: 'Restart Container' });
|
||||
|
|
@ -91,8 +88,7 @@ test('Expect no error and status restarting container', async () => {
|
|||
test('Expect no error and status deleting container', async () => {
|
||||
// Mock the showMessageBox to return 0 (yes)
|
||||
showMessageBoxMock.mockResolvedValue({ response: 0 });
|
||||
const { component } = render(ContainerActions, { container });
|
||||
component.$on('update', updateMock);
|
||||
render(ContainerActions, { container, onUpdate: updateMock });
|
||||
|
||||
// click on delete button
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete Container' });
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ export let dropdownMenu = false;
|
|||
export let detailed = false;
|
||||
|
||||
const dispatch = createEventDispatcher<{ update: ContainerInfoUI }>();
|
||||
|
||||
export let onUpdate: (update: ContainerInfoUI) => void = update => {
|
||||
dispatch('update', update);
|
||||
};
|
||||
let contributions: Menu[] = [];
|
||||
onMount(async () => {
|
||||
contributions = await window.getContributedMenus(MenuContext.DASHBOARD_CONTAINER);
|
||||
|
|
@ -45,13 +47,13 @@ function inProgress(inProgress: boolean, state?: string): void {
|
|||
if (state) {
|
||||
container.state = state;
|
||||
}
|
||||
dispatch('update', container);
|
||||
onUpdate(container);
|
||||
}
|
||||
|
||||
function handleError(errorMessage: string): void {
|
||||
container.actionError = errorMessage;
|
||||
container.state = 'ERROR';
|
||||
dispatch('update', container);
|
||||
onUpdate(container);
|
||||
}
|
||||
|
||||
async function startContainer(): Promise<void> {
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ test('expect being able to reconnect ', async () => {
|
|||
expect(terminals.length).toBe(0);
|
||||
|
||||
// destroy the object
|
||||
renderObject.component.$destroy();
|
||||
renderObject.unmount();
|
||||
|
||||
// now, check that we have a terminal that is in the store
|
||||
const terminalsAfterDestroy = get(containerTerminals);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
import type { Uri } from '@podman-desktop/api';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { tick } from 'svelte';
|
||||
import { router } from 'tinro';
|
||||
import { beforeAll, beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -51,11 +52,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(): Promise<void> {
|
||||
const result = render(ContainerExport);
|
||||
// wait that result.component.$$.ctx[1] is set
|
||||
while (result.component.$$.ctx[1] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ContainerExport);
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect export button to be disabled', async () => {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import { containersInfos } from '../../stores/containers';
|
||||
|
|
@ -66,11 +69,8 @@ beforeAll(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(ContainerList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ContainerList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect no container engines being displayed', async () => {
|
||||
|
|
|
|||
|
|
@ -21,7 +21,10 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { fireEvent, render, screen, waitFor } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import { containersInfos } from '../../stores/containers';
|
||||
|
|
@ -67,11 +70,8 @@ beforeAll(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(ContainerList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ContainerList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect no container engines being displayed', async () => {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import type { ProviderStatus } from '@podman-desktop/api';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { router } from 'tinro';
|
||||
import { expect, test } from 'vitest';
|
||||
|
||||
|
|
@ -30,11 +31,8 @@ import type { ProviderContainerConnectionInfo, ProviderInfo } from '/@api/provid
|
|||
import NewContentOnDashboardBadge from './NewContentOnDashboardBadge.svelte';
|
||||
|
||||
async function waitRender(): Promise<void> {
|
||||
const result = render(NewContentOnDashboardBadge);
|
||||
// wait that result.component.$$.ctx[3] is set
|
||||
while (result.component.$$.ctx[3] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(NewContentOnDashboardBadge);
|
||||
await tick();
|
||||
}
|
||||
|
||||
const notification1: NotificationCard = {
|
||||
|
|
|
|||
|
|
@ -22,12 +22,12 @@ async function removeNotification(id: number) {
|
|||
</div>
|
||||
<div class="flex flex-col text-sm space-y-2">
|
||||
<div class="font-bold" aria-label="Notification title">{notification.title}</div>
|
||||
<div aria-label="Notification description"><Markdown>{notification.body ?? ''}</Markdown></div>
|
||||
<div aria-label="Notification description"><Markdown markdown="{notification.body ?? ''}" /></div>
|
||||
</div>
|
||||
</div>
|
||||
{#if notification.markdownActions}
|
||||
<div class="w-full flex justify-center mt-2">
|
||||
<Markdown>{notification.markdownActions}</Markdown>
|
||||
<Markdown markdown="{notification.markdownActions}" />
|
||||
</div>
|
||||
{/if}
|
||||
<div class="absolute top-2 right-2">
|
||||
|
|
|
|||
|
|
@ -51,8 +51,7 @@ test('Expect no error and status deleting deployment', async () => {
|
|||
(window as any).showMessageBox = showMessageBoxMock;
|
||||
showMessageBoxMock.mockResolvedValue({ response: 0 });
|
||||
|
||||
const { component } = render(DeploymentActions, { deployment });
|
||||
component.$on('update', updateMock);
|
||||
render(DeploymentActions, { deployment, onUpdate: updateMock });
|
||||
|
||||
// click on delete buttons
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete Deployment' });
|
||||
|
|
|
|||
|
|
@ -11,10 +11,12 @@ export let deployment: DeploymentUI;
|
|||
export let detailed = false;
|
||||
|
||||
const dispatch = createEventDispatcher<{ update: DeploymentUI }>();
|
||||
|
||||
export let onUpdate: (update: DeploymentUI) => void = update => {
|
||||
dispatch('update', update);
|
||||
};
|
||||
async function deleteDeployment(): Promise<void> {
|
||||
deployment.status = 'DELETING';
|
||||
dispatch('update', deployment);
|
||||
onUpdate(deployment);
|
||||
|
||||
await window.kubernetesDeleteDeployment(deployment.name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import type { V1Deployment } from '@kubernetes/client-node';
|
||||
import { render, screen, within } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
import { kubernetesCurrentContextDeployments } from '/@/stores/kubernetes-contexts-state';
|
||||
|
|
@ -44,11 +47,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(DeploymentsList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(DeploymentsList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect deployment empty screen', async () => {
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@ function handleMousedown(e: MouseEvent) {
|
|||
<div class="relative text-gray-400 pt-2 px-1 h-7 overflow-y-auto">{prompt}</div>
|
||||
{#if markdownDescription && markdownDescription.length > 0}
|
||||
<div class="relative text-gray-400 pt-2 px-1 h-fit overflow-y-auto">
|
||||
<Markdown>{markdownDescription}</Markdown>
|
||||
<Markdown markdown="{markdownDescription}" />
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
import { type CombinedExtensionInfoUI } from '/@/stores/all-installed-extensions';
|
||||
|
|
@ -33,11 +34,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(ExtensionDetails, { ...customProperties });
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
console.log(result.component.$$.ctx);
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ExtensionDetails, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
export const aFakeExtension: CatalogExtension = {
|
||||
|
|
|
|||
|
|
@ -19,15 +19,19 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
import ExtensionDetailsReadme from './ExtensionDetailsReadme.svelte';
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(ExtensionDetailsReadme, { ...customProperties });
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ExtensionDetailsReadme, { ...customProperties });
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ test('install button should always be disable when extensionInstallFromImage is
|
|||
|
||||
const progressBar = screen.getByRole('progressbar', { name: 'Installation progress' });
|
||||
await vi.waitFor(() => {
|
||||
expect(progressBar.getAttribute('style')).toBe('width: 100%;');
|
||||
expect(progressBar.getAttribute('style')).toBe('width: 100%');
|
||||
});
|
||||
|
||||
// expect button done to be disabled
|
||||
|
|
@ -176,7 +176,7 @@ test('progressbar should match latest log', async () => {
|
|||
logCallback(`Downloading sha256:random-sha256.tar - ${i}% - (${i}/64)`);
|
||||
|
||||
await vi.waitFor(() => {
|
||||
expect(progressBar.getAttribute('style')).toBe(`width: ${i}%;`);
|
||||
expect(progressBar.getAttribute('style')).toBe(`width: ${i}%`);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -203,7 +203,7 @@ test('install button should be enable while extensionInstallFromImage is resolve
|
|||
logCallback('Downloading sha256:random-sha256.tar - 100% - (521578/521578)');
|
||||
const progressBar = screen.getByRole('progressbar', { name: 'Installation progress' });
|
||||
await vi.waitFor(() => {
|
||||
expect(progressBar.getAttribute('style')).toBe('width: 100%;');
|
||||
expect(progressBar.getAttribute('style')).toBe('width: 100%');
|
||||
});
|
||||
|
||||
// resolve extensionInstallFromImage
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ test('Expect that the install button is hidden if extension is not installable',
|
|||
});
|
||||
|
||||
test('Expect that we can see the button and click on the install', async () => {
|
||||
const featuredExtension: FeaturedExtension = {
|
||||
let featuredExtension: FeaturedExtension = {
|
||||
builtin: true,
|
||||
id: 'foo.bar',
|
||||
displayName: 'FooBar',
|
||||
|
|
@ -72,7 +72,7 @@ test('Expect that we can see the button and click on the install', async () => {
|
|||
installed: false,
|
||||
};
|
||||
|
||||
const { component } = render(FeaturedExtensionDownload, { extension: featuredExtension });
|
||||
const renderResult = render(FeaturedExtensionDownload, { extension: featuredExtension });
|
||||
|
||||
// expect to have the button if installable
|
||||
const installButton = screen.getByRole('button', { name: 'Install foo.bar Extension' });
|
||||
|
|
@ -83,7 +83,8 @@ test('Expect that we can see the button and click on the install', async () => {
|
|||
extensionInstallFromImageMock.mockImplementation(async () => {
|
||||
featuredExtension.installed = true;
|
||||
featuredExtension.fetchable = false;
|
||||
component.$set({ extension: featuredExtension });
|
||||
featuredExtension = { ...featuredExtension };
|
||||
renderResult.rerender({ extension: featuredExtension });
|
||||
});
|
||||
|
||||
// click on the button
|
||||
|
|
|
|||
|
|
@ -20,35 +20,39 @@
|
|||
|
||||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { expect, test } from 'vitest';
|
||||
import { expect, test, vi } from 'vitest';
|
||||
|
||||
import BuildImageFromContainerfileCard from '/@/lib/image/BuildImageFromContainerfileCard.svelte';
|
||||
|
||||
test('check click', async () => {
|
||||
const component = render(BuildImageFromContainerfileCard, {
|
||||
const onCardMock = vi.fn().mockImplementation((value: { mode: string; value: string }) => {
|
||||
events.push(value);
|
||||
});
|
||||
|
||||
render(BuildImageFromContainerfileCard, {
|
||||
title: 'ARM64',
|
||||
badge: 'arm64',
|
||||
isDefault: false,
|
||||
checked: false,
|
||||
value: 'arm64',
|
||||
icon: undefined,
|
||||
onCard: onCardMock,
|
||||
});
|
||||
|
||||
const events: { mode: string; value: string }[] = [];
|
||||
|
||||
component.component.$on('card', (e: any) => {
|
||||
events.push(e.detail);
|
||||
});
|
||||
|
||||
// expect checkbox is unchecked
|
||||
expect(screen.getByRole('checkbox')).not.toBeChecked();
|
||||
|
||||
expect(events).toEqual([]);
|
||||
|
||||
// click on the card and expect to be checked
|
||||
await userEvent.click(screen.getByRole('button'));
|
||||
await fireEvent.click(screen.getByRole('button'));
|
||||
|
||||
// wait 500ms
|
||||
await new Promise(r => setTimeout(r, 100));
|
||||
|
||||
expect(events).toEqual([{ mode: 'add', value: 'arm64' }]);
|
||||
});
|
||||
|
|
@ -83,7 +87,11 @@ test('Expect default tooltip', async () => {
|
|||
});
|
||||
|
||||
test('check we can add a new card', async () => {
|
||||
const component = render(BuildImageFromContainerfileCard, {
|
||||
const onAddcardMock = vi.fn().mockImplementation((obj: { value: string }) => {
|
||||
addCards.push(obj);
|
||||
});
|
||||
|
||||
render(BuildImageFromContainerfileCard, {
|
||||
title: '',
|
||||
badge: '',
|
||||
isDefault: false,
|
||||
|
|
@ -91,14 +99,11 @@ test('check we can add a new card', async () => {
|
|||
value: '',
|
||||
icon: undefined,
|
||||
additionalItem: true,
|
||||
onAddcard: onAddcardMock,
|
||||
});
|
||||
|
||||
const addCards: { value: string }[] = [];
|
||||
|
||||
component.component.$on('addcard', (e: any) => {
|
||||
addCards.push(e.detail);
|
||||
});
|
||||
|
||||
expect(addCards).toEqual([]);
|
||||
|
||||
// click on the card and expect to be checked
|
||||
|
|
|
|||
|
|
@ -23,9 +23,17 @@ let badges: string[] = [];
|
|||
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
export let onAddcard: (obj: { value: string }) => void = obj => {
|
||||
dispatch('addcard', obj);
|
||||
};
|
||||
|
||||
export let onCard: (obj: { mode: 'add' | 'remove'; value: string }) => void = obj => {
|
||||
dispatch('card', obj);
|
||||
};
|
||||
|
||||
function handleKeydownAdditionalField(event: KeyboardEvent) {
|
||||
if (event.key === 'Enter') {
|
||||
dispatch('addcard', { value: additionalValue });
|
||||
onAddcard({ value: additionalValue });
|
||||
displayValueFieldInput = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -46,11 +54,10 @@ function handleClick() {
|
|||
}
|
||||
|
||||
checked = !checked;
|
||||
|
||||
if (checked) {
|
||||
dispatch('card', { mode: 'add', value: value });
|
||||
onCard({ mode: 'add', value: value });
|
||||
} else {
|
||||
dispatch('card', { mode: 'remove', value: value });
|
||||
onCard({ mode: 'remove', value: value });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -69,7 +76,7 @@ onMount(() => {
|
|||
}
|
||||
|
||||
if (isDefault) {
|
||||
dispatch('card', { mode: 'add', value: value });
|
||||
onCard({ mode: 'add', value: value });
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -20,7 +20,8 @@
|
|||
|
||||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render } from '@testing-library/svelte';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import BuildImageFromContainerfileCards from './BuildImageFromContainerfileCards.svelte';
|
||||
|
|
@ -40,28 +41,30 @@ test('check default on arm64', async () => {
|
|||
vi.mocked(window.getOsArch).mockResolvedValue('arm64');
|
||||
|
||||
const platforms = '';
|
||||
const rendered = render(BuildImageFromContainerfileCards, {
|
||||
render(BuildImageFromContainerfileCards, {
|
||||
platforms,
|
||||
});
|
||||
|
||||
// wait a little with setTimeout
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
|
||||
// check we have a platform
|
||||
expect(rendered.component.$$.ctx[5]).toEqual('linux/arm64');
|
||||
await tick();
|
||||
await tick();
|
||||
const button = screen.getByRole('button', { name: 'linux/arm64' });
|
||||
expect(button).toBeInTheDocument();
|
||||
// should contain the text Default platform of your computer
|
||||
expect(button.textContent).toContain('Default platform of your computer');
|
||||
});
|
||||
|
||||
test('check default on amd64', async () => {
|
||||
vi.mocked(window.getOsArch).mockResolvedValue('x64');
|
||||
|
||||
const platforms = '';
|
||||
const rendered = render(BuildImageFromContainerfileCards, {
|
||||
render(BuildImageFromContainerfileCards, {
|
||||
platforms,
|
||||
});
|
||||
|
||||
// wait a little with setTimeout
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
|
||||
// check we have a platform
|
||||
expect(rendered.component.$$.ctx[5]).toEqual('linux/amd64');
|
||||
await tick();
|
||||
await tick();
|
||||
const button = screen.getByRole('button', { name: 'linux/amd64' });
|
||||
expect(button).toBeInTheDocument();
|
||||
// should contain the text Default platform of your computer
|
||||
expect(button.textContent).toContain('Default platform of your computer');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -160,8 +160,10 @@ test('Expect no dropdown when several contributions and dropdownMenu mode on', a
|
|||
const button = screen.getByTitle('dummy-contrib');
|
||||
expect(button).toBeDefined();
|
||||
expect(button.firstChild?.nodeName.toLowerCase()).toBe('svg');
|
||||
expect(button.lastChild?.nodeName.toLowerCase()).toBe('span');
|
||||
expect(button.lastChild?.textContent).toBe('dummy-contrib');
|
||||
|
||||
const button2 = screen.getByTitle('dummy-contrib-2');
|
||||
expect(button2).toBeDefined();
|
||||
expect(button2.firstChild?.nodeName.toLowerCase()).toBe('svg');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,12 @@
|
|||
|
||||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen, within } from '@testing-library/svelte';
|
||||
import { fireEvent, render, screen, within } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { router } from 'tinro';
|
||||
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -65,11 +68,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(ImagesList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ImagesList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect no container engines being displayed', async () => {
|
||||
|
|
@ -364,7 +364,7 @@ test('Expect importImage button redirects to image import page', async () => {
|
|||
expect(goToMock).toBeCalledWith('/images/import');
|
||||
});
|
||||
|
||||
test('expect redirect to saveImage page when atleast one image is selected and the multiple save button is clicked', async () => {
|
||||
test('expect redirect to saveImage page when at least one image is selected and the multiple save button is clicked', async () => {
|
||||
getProviderInfosMock.mockResolvedValue([
|
||||
{
|
||||
name: 'podman',
|
||||
|
|
@ -426,10 +426,10 @@ test('expect redirect to saveImage page when atleast one image is selected and t
|
|||
await waitRender({});
|
||||
|
||||
const toggleAll = screen.getByTitle('Toggle all');
|
||||
await userEvent.click(toggleAll);
|
||||
await fireEvent.click(toggleAll);
|
||||
|
||||
const saveImages = screen.getByRole('button', { name: 'Save images' });
|
||||
await userEvent.click(saveImages);
|
||||
await fireEvent.click(saveImages);
|
||||
|
||||
expect(goToMock).toBeCalledWith('/images/save');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**********************************************************************
|
||||
* Copyright (C) 2023 Red Hat, Inc.
|
||||
* Copyright (C) 2023-2024 Red Hat, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -212,7 +212,7 @@ describe('PullImage', () => {
|
|||
expect(errorMesssage).toHaveTextContent('Image does not exists');
|
||||
|
||||
// ok, now choose a valid image name
|
||||
renderResult.component.$$set({ imageToPull: 'some-valid-image' });
|
||||
renderResult.rerender({ imageToPull: 'some-valid-image' });
|
||||
|
||||
// pull image again
|
||||
const pullImagebutton2 = screen.getByRole('button', { name: 'Pull image' });
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { fireEvent } from '@testing-library/dom';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, expect, type Mock, test, vi } from 'vitest';
|
||||
|
||||
import type { ImageInspectInfo } from '/@api/image-inspect-info';
|
||||
|
|
@ -29,7 +30,9 @@ import PushImageModal from './PushImageModal.svelte';
|
|||
|
||||
vi.mock('xterm', () => {
|
||||
return {
|
||||
Terminal: vi.fn().mockReturnValue({ loadAddon: vi.fn(), open: vi.fn(), write: vi.fn(), clear: vi.fn() }),
|
||||
Terminal: vi
|
||||
.fn()
|
||||
.mockReturnValue({ loadAddon: vi.fn(), open: vi.fn(), write: vi.fn(), clear: vi.fn(), reset: vi.fn() }),
|
||||
};
|
||||
});
|
||||
|
||||
|
|
@ -136,11 +139,8 @@ const fakedImageInspect: ImageInspectInfo = {
|
|||
};
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(PushImageModal, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(PushImageModal, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect "Push Image" button to be disabled if window.hasAuthconfigForImage returns false', async () => {
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ async function initTerminal() {
|
|||
async function pushImage(imageTag: string) {
|
||||
gotErrorDuringPush = false;
|
||||
await tick();
|
||||
initTerminal();
|
||||
await initTerminal();
|
||||
await tick();
|
||||
logsPush?.reset();
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { tick } from 'svelte';
|
||||
import { router } from 'tinro';
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, type Mock, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -63,11 +64,8 @@ afterEach(() => {
|
|||
|
||||
async function waitRender() {
|
||||
const result = render(RunImage);
|
||||
|
||||
//wait until dataReady is true
|
||||
while (result.component.$$.ctx[30] !== true) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
await tick();
|
||||
await tick();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
import type { Uri } from '@podman-desktop/api';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { tick } from 'svelte';
|
||||
import { router } from 'tinro';
|
||||
import { beforeAll, beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -61,11 +62,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(): Promise<void> {
|
||||
const result = render(SaveImages);
|
||||
// wait that result.component.$$.ctx[0] is set
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(SaveImages);
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect Save button is disabled if output path is not selected', async () => {
|
||||
|
|
|
|||
|
|
@ -47,8 +47,7 @@ test('Expect no error and status deleting ingress', async () => {
|
|||
selected: false,
|
||||
};
|
||||
|
||||
const { component } = render(IngressRouteActions, { ingressRoute: ingressUI });
|
||||
component.$on('update', updateMock);
|
||||
render(IngressRouteActions, { ingressRoute: ingressUI, onUpdate: updateMock });
|
||||
|
||||
// click on delete button
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete Ingress' });
|
||||
|
|
@ -74,8 +73,7 @@ test('Expect no error and status deleting route', async () => {
|
|||
tlsEnabled: false,
|
||||
};
|
||||
|
||||
const { component } = render(IngressRouteActions, { ingressRoute: routeUI });
|
||||
component.$on('update', updateMock);
|
||||
render(IngressRouteActions, { ingressRoute: routeUI, onUpdate: updateMock });
|
||||
|
||||
// click on delete button
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete Route' });
|
||||
|
|
|
|||
|
|
@ -11,12 +11,14 @@ export let ingressRoute: IngressUI | RouteUI;
|
|||
export let detailed = false;
|
||||
|
||||
const dispatch = createEventDispatcher<{ update: IngressUI | RouteUI }>();
|
||||
|
||||
export let onUpdate: (update: IngressUI | RouteUI) => void = update => {
|
||||
dispatch('update', update);
|
||||
};
|
||||
const ingressRouteUtils = new IngressRouteUtils();
|
||||
|
||||
async function deleteIngressRoute(): Promise<void> {
|
||||
ingressRoute.status = 'DELETING';
|
||||
dispatch('update', ingressRoute);
|
||||
onUpdate(ingressRoute);
|
||||
|
||||
if (ingressRouteUtils.isIngress(ingressRoute)) {
|
||||
await window.kubernetesDeleteIngress(ingressRoute.name);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import type { KubernetesObject, V1Ingress } from '@kubernetes/client-node';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { readable, writable } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
import * as kubeContextStore from '/@/stores/kubernetes-contexts-state';
|
||||
|
|
@ -55,11 +58,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(IngressesRoutesList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(IngressesRoutesList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect ingress&routes empty screen', async () => {
|
||||
|
|
|
|||
|
|
@ -19,16 +19,14 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, describe, expect, test, vi } from 'vitest';
|
||||
|
||||
import Markdown from './Markdown.svelte';
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(Markdown, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[0] is set
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(Markdown, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
beforeAll(() => {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { tick } from 'svelte';
|
||||
import { expect, test, vi } from 'vitest';
|
||||
|
||||
import { context } from '/@/stores/context';
|
||||
|
|
@ -28,11 +29,9 @@ import { ContextUI } from '../context/context';
|
|||
import Onboarding from './Onboarding.svelte';
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(Onboarding, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[0] is set
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(Onboarding, { ...customProperties });
|
||||
await tick();
|
||||
await tick();
|
||||
}
|
||||
|
||||
global.ResizeObserver = vi.fn().mockImplementation(() => ({
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@
|
|||
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
#stepBody::-webkit-scrollbar-thumb {
|
||||
background-color: theme(colors.charcoal.100);
|
||||
background-color: [var(--pd-button-tab-hover-border)];
|
||||
}
|
||||
#stepBody::-webkit-scrollbar-thumb:hover {
|
||||
background-color: theme(colors.charcoal.50);
|
||||
background-color: [var(--pd-button-tab-hover-border)];
|
||||
}
|
||||
#stepBody::-webkit-scrollbar-thumb:active {
|
||||
background-color: theme(colors.gray.700);
|
||||
background-color: [var(--pd-button-tab-hover-border)];
|
||||
}
|
||||
#stepBody::-webkit-scrollbar-track-piece:start {
|
||||
background: transparent;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import { configurationProperties } from '/@/stores/configurationProperties';
|
||||
|
|
@ -60,11 +61,8 @@ const providerInfo: ProviderInfo = {
|
|||
};
|
||||
|
||||
async function waitRender(customProperties: any): Promise<void> {
|
||||
const result = render(OnboardingComponent, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(OnboardingComponent, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
beforeAll(() => {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { fireEvent, render, screen, waitFor } from '@testing-library/svelte';
|
||||
import * as jsYaml from 'js-yaml';
|
||||
import { tick } from 'svelte';
|
||||
import { router } from 'tinro';
|
||||
import { beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -157,11 +158,12 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: any): Promise<void> {
|
||||
const result = render(DeployPodToKube, { resourceId: 'foo', engineId: 'bar', type: 'unknown', ...customProperties });
|
||||
// wait that result.component.$$.ctx[0] is set
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(DeployPodToKube, { resourceId: 'foo', engineId: 'bar', type: 'unknown', ...customProperties });
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect to create routes with OpenShift and open Link', async () => {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,10 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, waitFor } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import KubernetesTerminal from '/@/lib/pod/KubernetesTerminal.svelte';
|
||||
|
|
@ -57,6 +60,7 @@ test('Test should render the terminal and being able to reconnect', async () =>
|
|||
);
|
||||
|
||||
const renderObject = render(KubernetesTerminal, { podName: 'podName', containerName: 'containerName' });
|
||||
await tick();
|
||||
await waitFor(() => expect(kubernetesExecMock).toHaveBeenCalled());
|
||||
|
||||
onStdOutCallback(Buffer.from('hello\nworld'));
|
||||
|
|
@ -68,7 +72,7 @@ test('Test should render the terminal and being able to reconnect', async () =>
|
|||
const terminals = get(terminalStates);
|
||||
expect(terminals.size).toBe(0);
|
||||
|
||||
renderObject.component.$destroy();
|
||||
renderObject.unmount();
|
||||
const terminalsAfterDestroy = get(terminalStates);
|
||||
expect(terminalsAfterDestroy.size).toBe(1);
|
||||
|
||||
|
|
|
|||
|
|
@ -86,8 +86,7 @@ beforeEach(() => {
|
|||
test('Expect no error and status starting pod', async () => {
|
||||
listContainersMock.mockResolvedValue([]);
|
||||
|
||||
const { component } = render(PodActions, { pod: podmanPod });
|
||||
component.$on('update', updateMock);
|
||||
render(PodActions, { pod: podmanPod, onUpdate: updateMock });
|
||||
|
||||
// click on start button
|
||||
const startButton = screen.getByRole('button', { name: 'Start Pod' });
|
||||
|
|
@ -101,8 +100,7 @@ test('Expect no error and status starting pod', async () => {
|
|||
test('Expect no error and status stopping pod', async () => {
|
||||
listContainersMock.mockResolvedValue([]);
|
||||
|
||||
const { component } = render(PodActions, { pod: podmanPod });
|
||||
component.$on('update', updateMock);
|
||||
render(PodActions, { pod: podmanPod, onUpdate: updateMock });
|
||||
|
||||
// click on stop button
|
||||
const stopButton = screen.getByRole('button', { name: 'Stop Pod' });
|
||||
|
|
@ -116,8 +114,7 @@ test('Expect no error and status stopping pod', async () => {
|
|||
test('Expect no error and status restarting pod', async () => {
|
||||
listContainersMock.mockResolvedValue([]);
|
||||
|
||||
const { component } = render(PodActions, { pod: podmanPod });
|
||||
component.$on('update', updateMock);
|
||||
render(PodActions, { pod: podmanPod, onUpdate: updateMock });
|
||||
|
||||
// click on restart button
|
||||
const restartButton = screen.getByRole('button', { name: 'Restart Pod' });
|
||||
|
|
@ -133,9 +130,7 @@ test('Expect no error and status deleting pod', async () => {
|
|||
showMessageBoxMock.mockResolvedValue({ response: 0 });
|
||||
listContainersMock.mockResolvedValue([]);
|
||||
|
||||
const { component } = render(PodActions, { pod: podmanPod });
|
||||
component.$on('update', updateMock);
|
||||
|
||||
render(PodActions, { pod: podmanPod, onUpdate: updateMock });
|
||||
// click on delete button
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete Pod' });
|
||||
await fireEvent.click(deleteButton);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@ export let dropdownMenu = false;
|
|||
export let detailed = false;
|
||||
|
||||
const dispatch = createEventDispatcher<{ update: PodInfoUI }>();
|
||||
export let onUpdate: (update: PodInfoUI) => void = update => {
|
||||
dispatch('update', update);
|
||||
};
|
||||
|
||||
let contributions: Menu[] = [];
|
||||
onMount(async () => {
|
||||
|
|
@ -84,13 +87,13 @@ function inProgress(inProgress: boolean, state?: string): void {
|
|||
pod.status = state;
|
||||
}
|
||||
|
||||
dispatch('update', pod);
|
||||
onUpdate(pod);
|
||||
}
|
||||
|
||||
function handleError(errorMessage: string): void {
|
||||
pod.actionError = errorMessage;
|
||||
pod.status = 'ERROR';
|
||||
dispatch('update', pod);
|
||||
onUpdate(pod);
|
||||
}
|
||||
|
||||
async function startPod() {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**********************************************************************
|
||||
* Copyright (C) 2023 Red Hat, Inc.
|
||||
* Copyright (C) 2023-2024 Red Hat, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -143,7 +143,7 @@ test('Render with a kubernetes object', async () => {
|
|||
kubernetesGetCurrentNamespaceMock.mockResolvedValue('default');
|
||||
kubernetesReadNamespacedPodMock.mockResolvedValue(fakePod);
|
||||
|
||||
render(PodDetailsSummary, { pod: fakePodInfoUI });
|
||||
render(PodDetailsSummary, { pod: JSON.parse(JSON.stringify(fakePodInfoUI)) });
|
||||
|
||||
// Wait for the mock to be called as it sometimes takes a few ms
|
||||
await waitFor(() => expect(kubernetesReadNamespacedPodMock).toHaveBeenCalled());
|
||||
|
|
@ -159,7 +159,7 @@ test('Render the pod information when pod object is kind == podman', async () =>
|
|||
|
||||
const fakePodInfo = fakePodInfoUI;
|
||||
fakePodInfo.kind = 'podman';
|
||||
render(PodDetailsSummary, { pod: fakePodInfo });
|
||||
render(PodDetailsSummary, { pod: JSON.parse(JSON.stringify(fakePodInfoUI)) });
|
||||
|
||||
// Expect the pod name, id, container.Names and container.Id to show
|
||||
expect(screen.getByText('fakepod')).toBeInTheDocument();
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { router } from 'tinro';
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -284,9 +287,8 @@ beforeAll(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(PodsList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
await vi.waitUntil(() => result.component.$$.ctx[2] !== undefined, { timeout: 5000 });
|
||||
render(PodsList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect no pods being displayed', async () => {
|
||||
|
|
|
|||
|
|
@ -196,8 +196,8 @@ describe.each([
|
|||
const cancelButton = screen.getByRole('button', { name: `Cancel ${action}` });
|
||||
expect(cancelButton).toBeInTheDocument();
|
||||
|
||||
expect(currentConnectionInfo.propertyScope).toBe(propertyScope);
|
||||
expect(currentConnectionInfo.providerInfo).toBe(providerInfo);
|
||||
expect(currentConnectionInfo.propertyScope).toStrictEqual(propertyScope);
|
||||
expect(currentConnectionInfo.providerInfo).toStrictEqual(providerInfo);
|
||||
|
||||
expect(callback).toHaveBeenCalled();
|
||||
expect(callback).toBeCalledWith(
|
||||
|
|
@ -266,8 +266,8 @@ describe.each([
|
|||
const cancelButton = screen.getByRole('button', { name: `Cancel ${action}` });
|
||||
expect(cancelButton).toBeInTheDocument();
|
||||
|
||||
expect(currentConnectionInfo.propertyScope).toBe(propertyScope);
|
||||
expect(currentConnectionInfo.providerInfo).toBe(providerInfo);
|
||||
expect(currentConnectionInfo.propertyScope).toStrictEqual(propertyScope);
|
||||
expect(currentConnectionInfo.providerInfo).toStrictEqual(providerInfo);
|
||||
|
||||
expect(callback).toHaveBeenCalled();
|
||||
expect(providedKeyLogger).toBeDefined();
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import { context } from '/@/stores/context';
|
||||
|
|
@ -33,11 +34,8 @@ import { ContextUI } from '../context/context';
|
|||
import PreferencesRendering from './PreferencesRendering.svelte';
|
||||
|
||||
async function waitRender(customProperties: any): Promise<void> {
|
||||
const result = render(PreferencesRendering, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[0] is set
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(PreferencesRendering, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
beforeAll(() => {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import { getInitialValue } from '/@/lib/preferences/Util';
|
||||
|
|
@ -41,9 +42,7 @@ async function awaitRender(record: IConfigurationPropertyRecordedSchema, customP
|
|||
initialValue: getInitialValue(record),
|
||||
...customProperties,
|
||||
});
|
||||
while (result.component.$$.ctx[4] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect to see checkbox enabled', async () => {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
|
||||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render } from '@testing-library/svelte';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
||||
|
||||
import PreferencesResourcesRenderingCopyButton from './PreferencesResourcesRenderingCopyButton.svelte';
|
||||
|
|
@ -35,8 +36,9 @@ describe('Windows', () => {
|
|||
|
||||
const socketPath = '/socket';
|
||||
|
||||
const result = await waitRender(socketPath);
|
||||
expect(result.component.$$.ctx[0]).toBe('npipe:///socket');
|
||||
await waitRender(socketPath);
|
||||
const div = screen.getByText('npipe:///socket');
|
||||
expect(div).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -46,8 +48,9 @@ describe('macOS', () => {
|
|||
|
||||
const socketPath = '/socket';
|
||||
|
||||
const result = await waitRender(socketPath);
|
||||
expect(result.component.$$.ctx[0]).toBe('unix:///socket');
|
||||
await waitRender(socketPath);
|
||||
const div = screen.getByText('unix:///socket');
|
||||
expect(div).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -57,17 +60,16 @@ describe('Linux', () => {
|
|||
|
||||
const socketPath = '/socket';
|
||||
|
||||
const result = await waitRender(socketPath);
|
||||
expect(result.component.$$.ctx[0]).toBe('unix:///socket');
|
||||
await waitRender(socketPath);
|
||||
const div = screen.getByText('unix:///socket');
|
||||
expect(div).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
async function waitRender(socketPath: string) {
|
||||
const result = render(PreferencesResourcesRenderingCopyButton, { path: socketPath });
|
||||
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
await tick();
|
||||
await tick();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,8 +55,7 @@ afterEach(() => {
|
|||
|
||||
test('Expect no error and status deleting PVC', async () => {
|
||||
showMessageBoxMock.mockResolvedValue({ response: 0 });
|
||||
const { component } = render(PVCActions, { pvc: fakePVC });
|
||||
component.$on('update', updateMock);
|
||||
render(PVCActions, { pvc: fakePVC, onUpdate: updateMock });
|
||||
|
||||
// click on delete buttons
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete PersistentVolumeClaim' });
|
||||
|
|
|
|||
|
|
@ -11,10 +11,12 @@ export let pvc: PVCUI;
|
|||
export let detailed = false;
|
||||
|
||||
const dispatch = createEventDispatcher<{ update: PVCUI }>();
|
||||
|
||||
export let onUpdate: (update: PVCUI) => void = update => {
|
||||
dispatch('update', update);
|
||||
};
|
||||
async function deletePVC(): Promise<void> {
|
||||
pvc.status = 'DELETING';
|
||||
dispatch('update', pvc);
|
||||
onUpdate(pvc);
|
||||
|
||||
await window.kubernetesDeletePersistentVolumeClaim(pvc.name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,8 +51,7 @@ afterEach(() => {
|
|||
test('Expect no error and status deleting service', async () => {
|
||||
// Mock the showMessageBox to return 0 (yes)
|
||||
showMessageBoxMock.mockResolvedValue({ response: 0 });
|
||||
const { component } = render(ServiceActions, { service });
|
||||
component.$on('update', updateMock);
|
||||
render(ServiceActions, { service, onUpdate: updateMock });
|
||||
|
||||
// click on delete button
|
||||
const deleteButton = screen.getByRole('button', { name: 'Delete Service' });
|
||||
|
|
|
|||
|
|
@ -12,9 +12,13 @@ export let detailed = false;
|
|||
|
||||
const dispatch = createEventDispatcher<{ update: ServiceUI }>();
|
||||
|
||||
export let onUpdate: (service: ServiceUI) => void = service => {
|
||||
dispatch('update', service);
|
||||
};
|
||||
|
||||
async function deleteService(): Promise<void> {
|
||||
service.status = 'DELETING';
|
||||
dispatch('update', service);
|
||||
onUpdate(service);
|
||||
|
||||
await window.kubernetesDeleteService(service.name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**********************************************************************
|
||||
* Copyright (C) 2023 Red Hat, Inc.
|
||||
* Copyright (C) 2023-2024 Red Hat, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -37,7 +37,7 @@ const service: ServiceUI = {
|
|||
};
|
||||
|
||||
test('Expect simple column styling', async () => {
|
||||
render(ServiceColumnName, { object: service });
|
||||
render(ServiceColumnName, { object: JSON.parse(JSON.stringify(service)) });
|
||||
|
||||
const text = screen.getByText(service.name);
|
||||
expect(text).toBeInTheDocument();
|
||||
|
|
@ -46,7 +46,7 @@ test('Expect simple column styling', async () => {
|
|||
});
|
||||
|
||||
test('Expect clicking works', async () => {
|
||||
render(ServiceColumnName, { object: service });
|
||||
render(ServiceColumnName, { object: JSON.parse(JSON.stringify(service)) });
|
||||
|
||||
const text = screen.getByText(service.name);
|
||||
expect(text).toBeInTheDocument();
|
||||
|
|
@ -61,7 +61,7 @@ test('Expect clicking works', async () => {
|
|||
|
||||
test('If loadBalancerIPs is set, expect it to be displayed', async () => {
|
||||
service.loadBalancerIPs = '10.0.0.1';
|
||||
render(ServiceColumnName, { object: service });
|
||||
render(ServiceColumnName, { object: JSON.parse(JSON.stringify(service)) });
|
||||
|
||||
const text = screen.getByText(service.name);
|
||||
expect(text).toBeInTheDocument();
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ const service: ServiceUI = {
|
|||
};
|
||||
|
||||
test('Expect basic column styling', async () => {
|
||||
render(ServiceColumnType, { object: service });
|
||||
const result = render(ServiceColumnType, { object: JSON.parse(JSON.stringify(service)) });
|
||||
|
||||
const text = screen.getByText(service.type);
|
||||
expect(text).toBeInTheDocument();
|
||||
|
|
@ -43,11 +43,12 @@ test('Expect basic column styling', async () => {
|
|||
const dot = text.parentElement?.children[0];
|
||||
expect(dot).toBeInTheDocument();
|
||||
expect(dot).toHaveClass('text-gray-600');
|
||||
result.unmount();
|
||||
});
|
||||
|
||||
test('Expect column styling ClusterIP', async () => {
|
||||
service.type = 'ClusterIP';
|
||||
render(ServiceColumnType, { object: service });
|
||||
render(ServiceColumnType, { object: JSON.parse(JSON.stringify(service)) });
|
||||
|
||||
const text = screen.getByText(service.type);
|
||||
expect(text).toBeInTheDocument();
|
||||
|
|
@ -59,7 +60,7 @@ test('Expect column styling ClusterIP', async () => {
|
|||
|
||||
test('Expect column styling LoadBalancer', async () => {
|
||||
service.type = 'LoadBalancer';
|
||||
render(ServiceColumnType, { object: service });
|
||||
render(ServiceColumnType, { object: JSON.parse(JSON.stringify(service)) });
|
||||
|
||||
const text = screen.getByText(service.type);
|
||||
expect(text).toBeInTheDocument();
|
||||
|
|
@ -71,7 +72,7 @@ test('Expect column styling LoadBalancer', async () => {
|
|||
|
||||
test('Expect column styling NodePort', async () => {
|
||||
service.type = 'NodePort';
|
||||
render(ServiceColumnType, { object: service });
|
||||
render(ServiceColumnType, { object: JSON.parse(JSON.stringify(service)) });
|
||||
|
||||
const text = screen.getByText(service.type);
|
||||
expect(text).toBeInTheDocument();
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import type { V1Service } from '@kubernetes/client-node';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
import { kubernetesCurrentContextServices } from '/@/stores/kubernetes-contexts-state';
|
||||
|
|
@ -44,11 +47,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(ServicesList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(ServicesList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect service empty screen', async () => {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import TroubleshootingDevToolsConsoleLogs from './TroubleshootingDevToolsConsoleLogs.svelte';
|
||||
|
|
@ -35,10 +36,8 @@ beforeAll(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(TroubleshootingDevToolsConsoleLogs, { ...customProperties });
|
||||
while (result.component.$$.ctx[0].length === 0) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(TroubleshootingDevToolsConsoleLogs, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Check logs are displayed with clipboard button', async () => {
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ test('Should update data when audit result is updated', async () => {
|
|||
expect(errMessage).toHaveTextContent('Dummy error message');
|
||||
|
||||
// now we update the audit result field
|
||||
renderComponent.component.$set({
|
||||
renderComponent.rerender({
|
||||
auditResult: {
|
||||
records: [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<script lang="ts">
|
||||
import { onDestroy, onMount } from 'svelte';
|
||||
import type { Unsubscriber } from 'svelte/motion';
|
||||
import type { Unsubscriber } from 'svelte/store';
|
||||
import { router } from 'tinro';
|
||||
|
||||
export let pagePath: string;
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ describe('test ProviderResultPage', async () => {
|
|||
},
|
||||
];
|
||||
|
||||
test('all providers are displayed as running', () => {
|
||||
test('all providers are displayed as running', async () => {
|
||||
const checkProviderRunning = (text: string) => {
|
||||
const providerEntry = screen.getByRole('row', { name: text });
|
||||
expect(providerEntry).toBeInTheDocument();
|
||||
|
|
@ -122,7 +122,7 @@ describe('test ProviderResultPage', async () => {
|
|||
providers[0].state = 'running';
|
||||
providers[1].state = 'running';
|
||||
render(ProviderResultPage, {
|
||||
providers: providers,
|
||||
providers: JSON.parse(JSON.stringify(providers)),
|
||||
});
|
||||
|
||||
checkProviderRunning('Provider 1');
|
||||
|
|
@ -142,7 +142,7 @@ describe('test ProviderResultPage', async () => {
|
|||
providers[0].state = 'success';
|
||||
providers[1].state = 'success';
|
||||
render(ProviderResultPage, {
|
||||
providers: providers,
|
||||
providers: JSON.parse(JSON.stringify(providers)),
|
||||
});
|
||||
|
||||
checkProviderSuccess('Provider 1');
|
||||
|
|
@ -153,8 +153,8 @@ describe('test ProviderResultPage', async () => {
|
|||
providers[0].state = 'success';
|
||||
providers[1].state = 'success';
|
||||
render(ProviderResultPage, {
|
||||
providers: providers,
|
||||
results: results,
|
||||
providers: JSON.parse(JSON.stringify(providers)),
|
||||
results: JSON.parse(JSON.stringify(results)),
|
||||
});
|
||||
results.forEach(result => checkResultDisplayed(result));
|
||||
});
|
||||
|
|
@ -163,8 +163,8 @@ describe('test ProviderResultPage', async () => {
|
|||
providers[0].state = 'success';
|
||||
providers[1].state = 'success';
|
||||
render(ProviderResultPage, {
|
||||
providers: providers,
|
||||
results: results,
|
||||
providers: JSON.parse(JSON.stringify(providers)),
|
||||
results: JSON.parse(JSON.stringify(results)),
|
||||
});
|
||||
|
||||
const providerEntry = screen.getByRole('row', { name: 'Provider 1' });
|
||||
|
|
@ -178,8 +178,8 @@ describe('test ProviderResultPage', async () => {
|
|||
providers[0].state = 'success';
|
||||
providers[1].state = 'success';
|
||||
render(ProviderResultPage, {
|
||||
providers: providers,
|
||||
results: results,
|
||||
providers: JSON.parse(JSON.stringify(providers)),
|
||||
results: JSON.parse(JSON.stringify(results)),
|
||||
});
|
||||
|
||||
const providerEntry = screen.getByRole('row', { name: 'Provider 2' });
|
||||
|
|
@ -193,8 +193,8 @@ describe('test ProviderResultPage', async () => {
|
|||
providers[0].state = 'success';
|
||||
providers[1].state = 'success';
|
||||
render(ProviderResultPage, {
|
||||
providers: providers,
|
||||
results: results,
|
||||
providers: JSON.parse(JSON.stringify(providers)),
|
||||
results: JSON.parse(JSON.stringify(results)),
|
||||
});
|
||||
|
||||
const criticalButton = screen.getByRole('button', { name: 'Critical (2)' });
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeAll, beforeEach, describe, expect, test, vi } from 'vitest';
|
||||
|
||||
import TitleBar from './TitleBar.svelte';
|
||||
|
|
@ -36,11 +37,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(TitleBar, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[0] is set
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(TitleBar, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
describe('macOS', () => {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,10 @@ import '@testing-library/jest-dom/vitest';
|
|||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, beforeEach, describe, expect, test, vi } from 'vitest';
|
||||
|
||||
import { providerInfos } from '/@/stores/providers';
|
||||
|
|
@ -62,11 +65,8 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(VolumesList, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[2] is set
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(VolumesList, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect No Container Engine being displayed', async () => {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { tick } from 'svelte';
|
||||
import { beforeEach, expect, test, vi } from 'vitest';
|
||||
|
||||
import { webviews } from '/@/stores/webviews';
|
||||
|
|
@ -82,17 +83,10 @@ beforeEach(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(Webview, { ...customProperties });
|
||||
// wait for path, port and webviewInfo object to defined
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
while (result.component.$$.ctx[1] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
while (result.component.$$.ctx[2] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(Webview, { ...customProperties });
|
||||
await tick();
|
||||
await tick();
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('check we have webview being displayed', async () => {
|
||||
|
|
|
|||
|
|
@ -21,7 +21,10 @@
|
|||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
/* eslint-disable import/no-duplicates */
|
||||
import { tick } from 'svelte';
|
||||
import { get } from 'svelte/store';
|
||||
/* eslint-enable import/no-duplicates */
|
||||
import { beforeAll, expect, test, vi } from 'vitest';
|
||||
|
||||
import { onboardingList } from '/@/stores/onboarding';
|
||||
|
|
@ -47,11 +50,8 @@ beforeAll(() => {
|
|||
});
|
||||
|
||||
async function waitRender(customProperties: object): Promise<void> {
|
||||
const result = render(WelcomePage, { ...customProperties });
|
||||
// wait that result.component.$$.ctx[0] is set
|
||||
while (result.component.$$.ctx[0] === undefined) {
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
render(WelcomePage, { ...customProperties });
|
||||
await tick();
|
||||
}
|
||||
|
||||
test('Expect the close button is on the page', async () => {
|
||||
|
|
@ -70,6 +70,7 @@ test('Expect that the close button closes the window', async () => {
|
|||
});
|
||||
|
||||
test('Expect that telemetry UI is hidden when telemetry has already been prompted', async () => {
|
||||
vi.mocked(window.getConfigurationValue).mockResolvedValue('true');
|
||||
await waitRender({ showWelcome: true, showTelemetry: false });
|
||||
let checkbox;
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -16,21 +16,13 @@
|
|||
* SPDX-License-Identifier: Apache-2.0
|
||||
***********************************************************************/
|
||||
|
||||
import * as svelte from 'svelte';
|
||||
import { mount } from 'svelte';
|
||||
|
||||
import Loader from './Loader.svelte';
|
||||
|
||||
const target = document.getElementById('app');
|
||||
let app;
|
||||
if (target) {
|
||||
// handle svelte v5
|
||||
if ((svelte as any).createRoot) {
|
||||
app = (svelte as any).createRoot(Loader, { target });
|
||||
} else {
|
||||
// v4 usage
|
||||
app = new Loader({
|
||||
target,
|
||||
});
|
||||
}
|
||||
app = mount(Loader, { target });
|
||||
}
|
||||
export default app;
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ test('Test should check saved terminal state after destroying terminal window',
|
|||
const terminals = get(terminalStates);
|
||||
expect(terminals.size).toBe(0);
|
||||
|
||||
renderObject.component.$destroy();
|
||||
renderObject.unmount();
|
||||
const terminalsAfterDestroy = get(terminalStates);
|
||||
expect(terminalsAfterDestroy.size).toBe(1);
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
import { join } from 'path';
|
||||
import * as path from 'path';
|
||||
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
||||
import { svelteTesting } from '@testing-library/svelte/vite';
|
||||
import { defineConfig } from 'vite';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { coverageConfig } from '../../vitest-shared-extensions.config';
|
||||
|
|
@ -38,7 +39,7 @@ export default defineConfig({
|
|||
'/@api/': join(PACKAGE_ROOT, '../api/src') + '/',
|
||||
},
|
||||
},
|
||||
plugins: [svelte({ hot: !process.env.VITEST })],
|
||||
plugins: [svelte({ hot: !process.env.VITEST }), svelteTesting()],
|
||||
optimizeDeps: {
|
||||
exclude: ['tinro'],
|
||||
},
|
||||
|
|
@ -46,10 +47,7 @@ export default defineConfig({
|
|||
include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
||||
globals: true,
|
||||
environment: 'jsdom',
|
||||
alias: [
|
||||
// https://github.com/vitest-dev/vitest/issues/2834
|
||||
{ find: /^svelte$/, replacement: 'svelte/internal' },
|
||||
],
|
||||
alias: [{ find: '@testing-library/svelte', replacement: '@testing-library/svelte/svelte5' }],
|
||||
deps: {
|
||||
inline: ['moment'],
|
||||
},
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@
|
|||
}
|
||||
},
|
||||
"peerDependencies": {
|
||||
"svelte": "^4.0.0",
|
||||
"svelte": "^4.0.0 || ^5.0.0",
|
||||
"svelte-fa": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
@ -128,10 +128,10 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/package": "^2.3.2",
|
||||
"@sveltejs/vite-plugin-svelte": "3.1.1",
|
||||
"@sveltejs/vite-plugin-svelte": "4.0.0-next.3",
|
||||
"@testing-library/dom": "^10.2.0",
|
||||
"@testing-library/jest-dom": "^6.4.6",
|
||||
"@testing-library/svelte": "^5.1.0",
|
||||
"@testing-library/svelte": "^5.2.0",
|
||||
"@testing-library/user-event": "^14.5.2",
|
||||
"@tsconfig/svelte": "^5.0.4",
|
||||
"@typescript-eslint/eslint-plugin": "7.15.0",
|
||||
|
|
@ -140,7 +140,7 @@
|
|||
"jsdom": "^24.1.0",
|
||||
"postcss": "^8.4.39",
|
||||
"postcss-load-config": "^6.0.1",
|
||||
"svelte": "4.2.18",
|
||||
"svelte": "5.0.0-next.164",
|
||||
"svelte-check": "^3.8.4",
|
||||
"svelte-eslint-parser": "^0.39.1",
|
||||
"svelte-preprocess": "^6.0.1",
|
||||
|
|
|
|||
|
|
@ -43,10 +43,9 @@ test('Check button styling', async () => {
|
|||
});
|
||||
|
||||
test('Check on:click action', async () => {
|
||||
const comp = render(CloseButton);
|
||||
|
||||
const clickMock = vi.fn();
|
||||
comp.component.$on('click', clickMock);
|
||||
const comp = render(CloseButton);
|
||||
comp.container.onclick = clickMock;
|
||||
|
||||
// check on:click
|
||||
const button = screen.getByRole('button');
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**********************************************************************
|
||||
* Copyright (C) 2023-2024, 2024 Red Hat, Inc.
|
||||
* Copyright (C) 2023-2024 Red Hat, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -54,11 +54,11 @@ test('Expect name is defined', async () => {
|
|||
test('Expect backlink is defined', async () => {
|
||||
const backName = 'Last page';
|
||||
const breadcrumbClickMock = vi.fn();
|
||||
const comp = render(DetailsPage, {
|
||||
render(DetailsPage, {
|
||||
title: 'No Title',
|
||||
breadcrumbLeftPart: backName,
|
||||
onbreadcrumbClick: breadcrumbClickMock,
|
||||
});
|
||||
comp.component.$on('breadcrumbClick', breadcrumbClickMock);
|
||||
|
||||
const backElement = screen.getByLabelText('back');
|
||||
expect(backElement).toBeInTheDocument();
|
||||
|
|
@ -71,10 +71,10 @@ test('Expect backlink is defined', async () => {
|
|||
|
||||
test('Expect close link is defined', async () => {
|
||||
const closeClickMock = vi.fn();
|
||||
const comp = render(DetailsPage, {
|
||||
render(DetailsPage, {
|
||||
title: 'No Title',
|
||||
onclose: closeClickMock,
|
||||
});
|
||||
comp.component.$on('close', closeClickMock);
|
||||
|
||||
const closeElement = screen.getByTitle('Close');
|
||||
expect(closeElement).toBeInTheDocument();
|
||||
|
|
@ -85,10 +85,10 @@ test('Expect close link is defined', async () => {
|
|||
|
||||
test('Expect Escape key closes', async () => {
|
||||
const closeClickMock = vi.fn();
|
||||
const comp = render(DetailsPage, {
|
||||
render(DetailsPage, {
|
||||
title: 'No Title',
|
||||
onclose: closeClickMock,
|
||||
});
|
||||
comp.component.$on('close', closeClickMock);
|
||||
|
||||
await userEvent.keyboard('{Escape}');
|
||||
|
||||
|
|
|
|||
|
|
@ -13,19 +13,18 @@ export let breadcrumbTitle: string | undefined = '';
|
|||
|
||||
const dispatchClose = createEventDispatcher<{ close: undefined }>();
|
||||
|
||||
export function close(): void {
|
||||
export let onclose: () => void = () => {
|
||||
dispatchClose('close');
|
||||
}
|
||||
};
|
||||
|
||||
const dispatchBreadCrumb = createEventDispatcher<{ breadcrumbClick: undefined }>();
|
||||
|
||||
function breadcrumbClick(): void {
|
||||
export let onbreadcrumbClick: () => void = () => {
|
||||
dispatchBreadCrumb('breadcrumbClick');
|
||||
}
|
||||
};
|
||||
|
||||
function handleKeydown(e: KeyboardEvent): void {
|
||||
if (e.key === 'Escape') {
|
||||
close();
|
||||
onclose();
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
|
|
@ -38,14 +37,14 @@ function handleKeydown(e: KeyboardEvent): void {
|
|||
<div class="flex flex-col w-full h-fit">
|
||||
<div class="flex flew-row items-center text-sm text-[var(--pd-content-breadcrumb)]">
|
||||
{#if breadcrumbLeftPart}
|
||||
<Link class="text-sm" aria-label="back" on:click="{breadcrumbClick}" title="{breadcrumbTitle}"
|
||||
<Link class="text-sm" aria-label="back" on:click="{onbreadcrumbClick}" title="{breadcrumbTitle}"
|
||||
>{breadcrumbLeftPart}</Link>
|
||||
{/if}
|
||||
{#if breadcrumbRightPart}
|
||||
<div class="mx-2">></div>
|
||||
<div class="grow font-extralight" aria-label="name">{breadcrumbRightPart}</div>
|
||||
{/if}
|
||||
<CloseButton class="justify-self-end" on:click="{close}" />
|
||||
<CloseButton class="justify-self-end" on:click="{onclose}" />
|
||||
</div>
|
||||
<div class="flex flex-row items-start pt-1">
|
||||
<div class="pr-3">
|
||||
|
|
|
|||
|
|
@ -68,14 +68,13 @@ test('Expect backlink is defined', async () => {
|
|||
const backName = 'Last page';
|
||||
const breadcrumbClickMock = vi.fn();
|
||||
|
||||
const comp = render(FormPage, {
|
||||
render(FormPage, {
|
||||
breadcrumbLeftPart: 'Last page',
|
||||
breadcrumbRightPart: 'hello',
|
||||
title: 'No Title',
|
||||
onbreadcrumbClick: breadcrumbClickMock,
|
||||
});
|
||||
|
||||
comp.component.$on('breadcrumbClick', breadcrumbClickMock);
|
||||
|
||||
const backElement = screen.getByLabelText('back');
|
||||
expect(backElement).toBeInTheDocument();
|
||||
expect(backElement).toHaveTextContent(backName);
|
||||
|
|
@ -88,13 +87,13 @@ test('Expect backlink is defined', async () => {
|
|||
test('Expect close link is defined', async () => {
|
||||
const closeClickMock = vi.fn();
|
||||
|
||||
const comp = render(FormPage, {
|
||||
render(FormPage, {
|
||||
title: 'No Title',
|
||||
breadcrumbLeftPart: 'back',
|
||||
breadcrumbRightPart: 'hello',
|
||||
onclose: closeClickMock,
|
||||
});
|
||||
|
||||
comp.component.$on('close', closeClickMock);
|
||||
const closeElement = getByRole(document.body, 'button', { name: 'Close' });
|
||||
expect(closeElement).toBeInTheDocument();
|
||||
await fireEvent.click(closeElement);
|
||||
|
|
@ -105,11 +104,11 @@ test('Expect close link is defined', async () => {
|
|||
test('Expect Escape key works', async () => {
|
||||
const closeClickMock = vi.fn();
|
||||
|
||||
const comp = render(FormPage, {
|
||||
render(FormPage, {
|
||||
title: 'No Title',
|
||||
breadcrumbLeftPart: 'back',
|
||||
onclose: closeClickMock,
|
||||
});
|
||||
comp.component.$on('close', closeClickMock);
|
||||
await userEvent.keyboard('{Escape}');
|
||||
|
||||
expect(closeClickMock).toHaveBeenCalled();
|
||||
|
|
|
|||
|
|
@ -14,19 +14,19 @@ export let breadcrumbTitle: string | undefined = '';
|
|||
|
||||
const dispatchClose = createEventDispatcher<{ close: undefined }>();
|
||||
|
||||
function close(): void {
|
||||
export let onclose: () => void = () => {
|
||||
dispatchClose('close');
|
||||
}
|
||||
};
|
||||
|
||||
const dispatchBreadCrumb = createEventDispatcher<{ breadcrumbClick: undefined }>();
|
||||
|
||||
function breadcrumbClick(): void {
|
||||
export let onbreadcrumbClick: () => void = () => {
|
||||
dispatchBreadCrumb('breadcrumbClick');
|
||||
}
|
||||
};
|
||||
|
||||
function handleKeydown(e: KeyboardEvent): void {
|
||||
if (e.key === 'Escape') {
|
||||
close();
|
||||
onclose();
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
|
|
@ -40,13 +40,13 @@ function handleKeydown(e: KeyboardEvent): void {
|
|||
{#if showBreadcrumb}
|
||||
<div class="flex flew-row items-center text-sm text-[var(--pd-content-breadcrumb)]">
|
||||
{#if breadcrumbLeftPart}
|
||||
<Link aria-label="back" on:click="{breadcrumbClick}" title="{breadcrumbTitle}">{breadcrumbLeftPart}</Link>
|
||||
<Link aria-label="back" on:click="{onbreadcrumbClick}" title="{breadcrumbTitle}">{breadcrumbLeftPart}</Link>
|
||||
{/if}
|
||||
{#if breadcrumbRightPart}
|
||||
<div class="mx-2">></div>
|
||||
<div class="grow font-extralight" aria-label="name">{breadcrumbRightPart}</div>
|
||||
{/if}
|
||||
<CloseButton class="justify-self-end" on:click="{close}" />
|
||||
<CloseButton class="justify-self-end" on:click="{onclose}" />
|
||||
</div>
|
||||
{/if}
|
||||
<div class="flex flex-row items-center pt-1">
|
||||
|
|
@ -65,7 +65,7 @@ function handleKeydown(e: KeyboardEvent): void {
|
|||
</div>
|
||||
{/if}
|
||||
{#if !showBreadcrumb}
|
||||
<CloseButton class="justify-self-end" on:click="{close}" />
|
||||
<CloseButton class="justify-self-end" on:click="{onclose}" />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -49,10 +49,8 @@ test('Check icon styling', async () => {
|
|||
});
|
||||
|
||||
test('Check on:click action', async () => {
|
||||
const comp = render(Link);
|
||||
|
||||
const clickMock = vi.fn();
|
||||
comp.component.$on('click', clickMock);
|
||||
render(Link, { onclick: clickMock });
|
||||
|
||||
// check on:click
|
||||
const link = screen.getByRole('link');
|
||||
|
|
|
|||
|
|
@ -10,6 +10,9 @@ export let icon: any = undefined;
|
|||
let iconType: string | undefined = undefined;
|
||||
|
||||
const dispatch = createEventDispatcher<{ click: undefined }>();
|
||||
export let onclick: () => void = () => {
|
||||
dispatch('click');
|
||||
};
|
||||
|
||||
onMount(() => {
|
||||
if (isFontAwesomeIcon(icon)) {
|
||||
|
|
@ -18,20 +21,15 @@ onMount(() => {
|
|||
iconType = 'unknown';
|
||||
}
|
||||
});
|
||||
|
||||
function click(): void {
|
||||
dispatch('click');
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||
<!-- svelte-ignore a11y-missing-attribute -->
|
||||
<!-- svelte-ignore a11y-no-redundant-roles -->
|
||||
<!-- svelte-ignore a11y-interactive-supports-focus -->
|
||||
<a
|
||||
class="text-[var(--pd-link)] hover:bg-[var(--pd-link-hover-bg)] transition-all rounded-[4px] p-0.5 no-underline cursor-pointer {$$props.class ||
|
||||
''}"
|
||||
on:click="{click}"
|
||||
on:click="{onclick}"
|
||||
role="link"
|
||||
aria-label="{$$props['aria-label']}">
|
||||
{#if icon}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
import '@testing-library/jest-dom/vitest';
|
||||
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import { fireEvent, render, screen } from '@testing-library/svelte';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { describe, expect, test, vi } from 'vitest';
|
||||
|
||||
|
|
@ -35,19 +35,17 @@ test('modal should be visible', async () => {
|
|||
|
||||
test('bg click should trigger close event', async () => {
|
||||
const closeMock = vi.fn();
|
||||
const { component } = render(Modal);
|
||||
component.$on('close', closeMock);
|
||||
render(Modal, { onclose: closeMock });
|
||||
|
||||
const bg = screen.getByLabelText('close');
|
||||
await userEvent.click(bg);
|
||||
await fireEvent.click(bg);
|
||||
|
||||
expect(closeMock).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('Escape key should trigger close', async () => {
|
||||
const closeMock = vi.fn();
|
||||
const { component } = render(Modal);
|
||||
component.$on('close', closeMock);
|
||||
render(Modal, { onclose: closeMock });
|
||||
|
||||
await userEvent.keyboard('{Escape}');
|
||||
expect(closeMock).toHaveBeenCalled();
|
||||
|
|
|
|||
|
|
@ -4,15 +4,17 @@ import { createEventDispatcher, onDestroy } from 'svelte';
|
|||
import { tabWithinParent } from '../utils/dialog-utils';
|
||||
|
||||
const dispatch = createEventDispatcher();
|
||||
const close = (): boolean => dispatch('close');
|
||||
|
||||
let modal: HTMLDivElement;
|
||||
export let name = '';
|
||||
export let top: boolean = false;
|
||||
export let onclose: () => void = () => {
|
||||
dispatch('close');
|
||||
};
|
||||
|
||||
const handle_keydown = (e: KeyboardEvent): void => {
|
||||
if (e.key === 'Escape') {
|
||||
close();
|
||||
onclose();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +38,7 @@ if (previously_focused) {
|
|||
<button
|
||||
aria-label="close"
|
||||
class="fixed top-0 left-0 w-full h-full bg-[var(--pd-modal-fade)] bg-blend-multiply opacity-60 z-40 cursor-default"
|
||||
on:click="{close}"></button>
|
||||
on:click="{onclose}"></button>
|
||||
|
||||
<div
|
||||
class:translate-y-[-20%]="{!top}"
|
||||
|
|
|
|||
|
|
@ -27,12 +27,11 @@ import EmptyScreen from './EmptyScreen.svelte';
|
|||
/* eslint-disable @typescript-eslint/no-empty-function */
|
||||
|
||||
test('Expect copy in clipboard', async () => {
|
||||
const mock = vi.fn().mockImplementation(() => {});
|
||||
const comp = render(EmptyScreen, { icon: '', commandline: 'podman run hello:world' });
|
||||
comp.component.$on('click', mock);
|
||||
const mock = vi.fn();
|
||||
render(EmptyScreen, { icon: '', commandline: 'podman run hello:world', onClick: mock });
|
||||
const button = screen.getByRole('button');
|
||||
expect(button).toBeInTheDocument();
|
||||
expect(button).toBeEnabled();
|
||||
await fireEvent.click(button);
|
||||
expect(mock).toBeCalledWith(expect.objectContaining({ detail: 'podman run hello:world' }));
|
||||
expect(mock).toBeCalledWith('podman run hello:world');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ let fontAwesomeIcon = false;
|
|||
let processed = false;
|
||||
|
||||
const dispatch = createEventDispatcher<{ click: string }>();
|
||||
export let onClick: (text: string) => void = text => {
|
||||
dispatch('click', text);
|
||||
};
|
||||
|
||||
onMount(() => {
|
||||
if (isFontAwesomeIcon(icon)) {
|
||||
|
|
@ -29,7 +32,7 @@ onMount(() => {
|
|||
function handleClick(): void {
|
||||
const text = copyTextDivElement?.textContent;
|
||||
if (text) {
|
||||
dispatch('click', text);
|
||||
onClick(text);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,11 +43,10 @@ test('Expect long search term to not display', async () => {
|
|||
});
|
||||
|
||||
test('Expect button to fire event and clear search term', async () => {
|
||||
const config = { icon: '', kind: 'object', searchTerm: 'test' };
|
||||
const result = render(FilteredEmptyScreen, config);
|
||||
|
||||
const resetMock = vi.fn();
|
||||
result.component.$on('resetFilter', resetMock);
|
||||
const config = { icon: '', kind: 'object', searchTerm: 'test', onResetFilter: resetMock };
|
||||
|
||||
render(FilteredEmptyScreen, config);
|
||||
|
||||
const button = screen.getByRole('button', { name: 'Clear filter' });
|
||||
expect(button).toBeInTheDocument();
|
||||
|
|
@ -60,26 +59,3 @@ test('Expect button to fire event and clear search term', async () => {
|
|||
const title = screen.getByText("No object matching '' found");
|
||||
expect(title).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('Expect button to fire event and respect event listener', async () => {
|
||||
const config = { icon: '', kind: 'object', searchTerm: 'test' };
|
||||
const result = render(FilteredEmptyScreen, config);
|
||||
|
||||
// setup mock event listener that just prevents default action
|
||||
const resetMock = vi.fn();
|
||||
resetMock.mockImplementation(e => {
|
||||
e.preventDefault();
|
||||
});
|
||||
result.component.$on('resetFilter', resetMock);
|
||||
|
||||
const button = screen.getByRole('button', { name: 'Clear filter' });
|
||||
expect(button).toBeInTheDocument();
|
||||
|
||||
await fireEvent.click(button);
|
||||
|
||||
// confirm search term has not changed
|
||||
expect(resetMock).toHaveBeenCalledOnce();
|
||||
// eslint-disable-next-line quotes
|
||||
const title = screen.getByText("No object matching 'test' found");
|
||||
expect(title).toBeInTheDocument();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -10,10 +10,20 @@ export let kind: string;
|
|||
export let searchTerm: string;
|
||||
|
||||
const dispatch = createEventDispatcher();
|
||||
function onResetFilter(): void {
|
||||
|
||||
const defaultOnResetFilter = (): void => {
|
||||
if (dispatch('resetFilter', searchTerm, { cancelable: true })) {
|
||||
searchTerm = '';
|
||||
}
|
||||
};
|
||||
export let onResetFilter: () => void = defaultOnResetFilter;
|
||||
|
||||
function doResetFilter(): void {
|
||||
// reset only if onResetFilter is provided
|
||||
if (onResetFilter !== defaultOnResetFilter) {
|
||||
searchTerm = '';
|
||||
}
|
||||
onResetFilter();
|
||||
}
|
||||
|
||||
$: filter = searchTerm && searchTerm.length > 20 ? 'filter' : `'${searchTerm}'`;
|
||||
|
|
@ -24,5 +34,5 @@ $: filter = searchTerm && searchTerm.length > 20 ? 'filter' : `'${searchTerm}'`;
|
|||
title="No {kind} matching {filter} found"
|
||||
message="Not what you expected? Double-check your spelling."
|
||||
detail="Just want to view all of your {kind}?">
|
||||
<Button on:click="{onResetFilter}">Clear filter</Button>
|
||||
<Button on:click="{doResetFilter}">Clear filter</Button>
|
||||
</EmptyScreen>
|
||||
|
|
|
|||
|
|
@ -263,8 +263,7 @@ test('Expect overflow-hidden', async () => {
|
|||
|
||||
test('Expect update callback', async () => {
|
||||
const callback = vi.fn();
|
||||
const result = render(TestTable);
|
||||
result.component.$on('update', callback);
|
||||
render(TestTable, { onUpdate: callback });
|
||||
|
||||
const ageCol = await screen.findByRole('columnheader', { name: 'Age' });
|
||||
expect(ageCol).toBeDefined();
|
||||
|
|
@ -296,7 +295,7 @@ test('Expect table to be sorted by Id on load', async () => {
|
|||
});
|
||||
|
||||
test('Expect table to be sorted by Name on load, if something has changed in the store afterwards, it should not affect the order', async () => {
|
||||
const result = render(TestTable, {});
|
||||
const component = render(TestTable);
|
||||
|
||||
const nameCol = screen.getByText('Name');
|
||||
expect(nameCol).toBeInTheDocument();
|
||||
|
|
@ -324,12 +323,12 @@ test('Expect table to be sorted by Name on load, if something has changed in the
|
|||
//
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const people: any[] = [
|
||||
const people = [
|
||||
{ id: 1, name: 'John', age: 57, hobby: 'Walking' },
|
||||
{ id: 2, name: 'Henry', age: 27, hobby: 'Swimming' },
|
||||
{ id: 3, name: 'Charlie', age: 43, hobby: 'Karting' },
|
||||
];
|
||||
result.component.$set({ people });
|
||||
await component.rerender({ people });
|
||||
|
||||
// Wait for the table to update
|
||||
await tick();
|
||||
|
|
|
|||
|
|
@ -11,6 +11,9 @@ let table: Table;
|
|||
let selectedItemsNumber: number;
|
||||
|
||||
const dispatch = createEventDispatcher<{ update: string }>();
|
||||
export let onUpdate: (text: string) => void = text => {
|
||||
dispatch('update', text);
|
||||
};
|
||||
|
||||
type Person = {
|
||||
id: number;
|
||||
|
|
@ -45,7 +48,7 @@ const ageCol: Column<Person, string> = new Column('Age', {
|
|||
renderMapping: obj => obj.age.toString(),
|
||||
renderer: SimpleColumn,
|
||||
comparator: (a, b): number => {
|
||||
dispatch('update', 'sorting');
|
||||
onUpdate('sorting');
|
||||
return a.age - b.age;
|
||||
},
|
||||
initialOrder: 'descending',
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
import { join } from 'path';
|
||||
import * as path from 'path';
|
||||
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
||||
import { svelteTesting } from '@testing-library/svelte/vite';
|
||||
import { defineConfig } from 'vite';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { coverageConfig } from '../../vitest-shared-extensions.config';
|
||||
|
|
@ -37,15 +38,12 @@ export default defineConfig({
|
|||
'/@/': join(PACKAGE_ROOT, 'src') + '/',
|
||||
},
|
||||
},
|
||||
plugins: [svelte({ hot: !process.env.VITEST })],
|
||||
plugins: [svelte({ hot: !process.env.VITEST }), svelteTesting()],
|
||||
test: {
|
||||
include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
||||
globals: true,
|
||||
environment: 'jsdom',
|
||||
alias: [
|
||||
// https://github.com/vitest-dev/vitest/issues/2834
|
||||
{ find: /^svelte$/, replacement: 'svelte/internal' },
|
||||
],
|
||||
alias: [{ find: '@testing-library/svelte', replacement: '@testing-library/svelte/svelte5' }],
|
||||
deps: {
|
||||
inline: ['moment'],
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
"build": "storybook build"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"svelte": "^4.0.0",
|
||||
"svelte": "^5.0.0",
|
||||
"svelte-fa": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
@ -24,13 +24,13 @@
|
|||
"@storybook/addon-essentials": "^8.1.11",
|
||||
"@storybook/addon-interactions": "^8.1.11",
|
||||
"@storybook/addon-links": "^8.1.11",
|
||||
"@storybook/addon-svelte-csf": "^4.1.1",
|
||||
"@storybook/addon-svelte-csf": "5.0.0--canary.181.9fd4bb6.0",
|
||||
"@storybook/blocks": "^8.1.11",
|
||||
"@storybook/svelte": "^8.1.11",
|
||||
"@storybook/svelte-vite": "^8.1.11",
|
||||
"@storybook/test": "^8.1.4",
|
||||
"@sveltejs/package": "^2.3.2",
|
||||
"@sveltejs/vite-plugin-svelte": "3.1.1",
|
||||
"@sveltejs/vite-plugin-svelte": "4.0.0-next.3",
|
||||
"@tsconfig/svelte": "^5.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "7.15.0",
|
||||
"autoprefixer": "^10.4.18",
|
||||
|
|
@ -39,9 +39,9 @@
|
|||
"postcss-load-config": "^6.0.1",
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.3.1",
|
||||
"storybook": "^8.0.9",
|
||||
"storybook": "^8.1.11",
|
||||
"storybook-dark-mode": "^4.0.2",
|
||||
"svelte": "4.2.18",
|
||||
"svelte": "5.0.0-next.166",
|
||||
"svelte-check": "^3.8.4",
|
||||
"svelte-preprocess": "^6.0.1",
|
||||
"tailwindcss": "^3.4.4",
|
||||
|
|
|
|||
|
|
@ -1,18 +1,32 @@
|
|||
<script context="module" lang="ts">
|
||||
import { faBell } from '@fortawesome/free-regular-svg-icons';
|
||||
import { Button } from '@podman-desktop/ui-svelte';
|
||||
import { Story, Template } from '@storybook/addon-svelte-csf';
|
||||
import Button from '@podman-desktop/ui-svelte/Button';
|
||||
import { type Args, defineMeta, setTemplate, type StoryContext } from '@storybook/addon-svelte-csf';
|
||||
import { fn } from '@storybook/test';
|
||||
|
||||
export const meta = {
|
||||
title: 'Example/Button',
|
||||
const onclickFn = fn().mockName('onclick');
|
||||
|
||||
/**
|
||||
* These are the stories for the `Button` component.
|
||||
* It's the default button we use throughout our application.
|
||||
*/
|
||||
const { Story } = defineMeta({
|
||||
component: Button,
|
||||
title: 'Example/Button',
|
||||
tags: ['autodocs'],
|
||||
};
|
||||
args: {
|
||||
onclick: onclickFn,
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<Template let:args>
|
||||
<script lang="ts">
|
||||
setTemplate(template);
|
||||
</script>
|
||||
|
||||
{#snippet template({ _children, ...args }: Args<typeof Story>, _context: StoryContext<typeof Story>)}
|
||||
<Button {...args}>{args.content}</Button>
|
||||
</Template>
|
||||
{/snippet}
|
||||
|
||||
<Story
|
||||
name="Primary"
|
||||
|
|
@ -28,13 +42,6 @@ export const meta = {
|
|||
content: 'secondary',
|
||||
}}" />
|
||||
|
||||
<Story
|
||||
name="Primary"
|
||||
args="{{
|
||||
type: 'primary',
|
||||
content: 'primary',
|
||||
}}" />
|
||||
|
||||
<Story
|
||||
name="Danger"
|
||||
args="{{
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
import { join } from 'path';
|
||||
import * as path from 'path';
|
||||
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
||||
import { svelteTesting } from '@testing-library/svelte/vite';
|
||||
|
||||
import { defineConfig } from 'vite';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { coverageConfig } from '../vitest-shared-extensions.config';
|
||||
|
|
@ -37,15 +39,12 @@ export default defineConfig({
|
|||
'/@/': join(PACKAGE_ROOT, 'src') + '/',
|
||||
},
|
||||
},
|
||||
plugins: [svelte({ hot: !process.env.VITEST })],
|
||||
plugins: [svelte(), svelteTesting()],
|
||||
test: {
|
||||
include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
||||
globals: true,
|
||||
environment: 'jsdom',
|
||||
alias: [
|
||||
// https://github.com/vitest-dev/vitest/issues/2834
|
||||
{ find: /^svelte$/, replacement: 'svelte/internal' },
|
||||
],
|
||||
alias: [{ find: '@testing-library/svelte', replacement: '@testing-library/svelte/svelte5' }],
|
||||
deps: {
|
||||
inline: ['moment'],
|
||||
},
|
||||
|
|
|
|||
567
yarn.lock
567
yarn.lock
|
|
@ -5240,14 +5240,15 @@
|
|||
"@storybook/global" "^5.0.0"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/addon-svelte-csf@^4.1.1":
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-svelte-csf/-/addon-svelte-csf-4.1.3.tgz#f1bd2f1f6c96a804b67c028698dbfe8e88e5f1c7"
|
||||
integrity sha512-mtd6sK/5nbMF/7Z9nIoVbu7pNd+O1AEedKtR2oS1L9y2i5PLVYA7Dfzj1V9OwZtGK0YnX0bp7p/GMHpBWHgr2A==
|
||||
"@storybook/addon-svelte-csf@5.0.0--canary.181.9fd4bb6.0":
|
||||
version "5.0.0--canary.181.9fd4bb6.0"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-svelte-csf/-/addon-svelte-csf-5.0.0--canary.181.9fd4bb6.0.tgz#3f94d2833c03b743d68d0afc1af96b0389d63242"
|
||||
integrity sha512-pyiFrl4GL1PRg/DB1Kh7p7mIQNTBQxOISCLNNH0gQiJVV2/AVx8pwHohJtqwIvkmeLOFgpH6GQC+gu2jdtVnXw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.22.6"
|
||||
dedent "^1.2.0"
|
||||
magic-string "^0.30.1"
|
||||
dedent "^1.5.3"
|
||||
esrap "^1.2.2"
|
||||
magic-string "^0.30.10"
|
||||
zimmerframe "^1.1.2"
|
||||
|
||||
"@storybook/addon-toolbars@8.1.11":
|
||||
version "8.1.11"
|
||||
|
|
@ -5291,15 +5292,15 @@
|
|||
ts-dedent "^2.0.0"
|
||||
util-deprecate "^1.0.2"
|
||||
|
||||
"@storybook/builder-manager@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-8.1.5.tgz#fa72bed0bf92ebe11a2e433f810c8d1dbb0fab1a"
|
||||
integrity sha512-wDiHLV+UPaUN+765WwXkocVRB2QnJ61CjLHbpWaLiJvryFJt+JQ6nAvgSalCRnZxI046ztbS9T6okhpFI011IA==
|
||||
"@storybook/builder-manager@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-8.1.11.tgz#1feaad5f11ac79cc2d466a8b4cf254c595950014"
|
||||
integrity sha512-U7bmed4Ayg+OlJ8HPmLeGxLTHzDY7rxmxM4aAs4YL01fufYfBcjkIP9kFhJm+GJOvGm+YJEUAPe5mbM1P/bn0Q==
|
||||
dependencies:
|
||||
"@fal-works/esbuild-plugin-global-externals" "^2.1.2"
|
||||
"@storybook/core-common" "8.1.5"
|
||||
"@storybook/manager" "8.1.5"
|
||||
"@storybook/node-logger" "8.1.5"
|
||||
"@storybook/core-common" "8.1.11"
|
||||
"@storybook/manager" "8.1.11"
|
||||
"@storybook/node-logger" "8.1.11"
|
||||
"@types/ejs" "^3.1.1"
|
||||
"@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10"
|
||||
browser-assert "^1.2.1"
|
||||
|
|
@ -5345,33 +5346,22 @@
|
|||
telejson "^7.2.0"
|
||||
tiny-invariant "^1.3.1"
|
||||
|
||||
"@storybook/channels@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-8.1.5.tgz#d00d033d318cf202ece1de728e55e85f82242e74"
|
||||
integrity sha512-R+puP4tWYzQUbpIp8sX6U5oI+ZUevVOaFxXGaAN3PRXjIRC38oKTVWzj/G6GdziVFzN6rDn+JsYPmiRMYo1sYg==
|
||||
dependencies:
|
||||
"@storybook/client-logger" "8.1.5"
|
||||
"@storybook/core-events" "8.1.5"
|
||||
"@storybook/global" "^5.0.0"
|
||||
telejson "^7.2.0"
|
||||
tiny-invariant "^1.3.1"
|
||||
|
||||
"@storybook/cli@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-8.1.5.tgz#17bc7014100b1bb227433ecec71137115c5937ff"
|
||||
integrity sha512-VEYluZEMleNEnD5wTD90KTh03pwjvQwEEmzHAJQJdLbWTAcgBxZ3Gb45nbUPauSqBL+HdJx0QXF8Ielk+iBttw==
|
||||
"@storybook/cli@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-8.1.11.tgz#0eb593e23a7c6016b458bfb6e5a365f0657de025"
|
||||
integrity sha512-4U48w9C7mVEKrykcPcfHwJkRyCqJ28XipbElACbjIIkQEqaHaOVtP3GeKIrgkoOXe/HK3O4zKWRP2SqlVS0r4A==
|
||||
dependencies:
|
||||
"@babel/core" "^7.24.4"
|
||||
"@babel/types" "^7.24.0"
|
||||
"@ndelangen/get-tarball" "^3.0.7"
|
||||
"@storybook/codemod" "8.1.5"
|
||||
"@storybook/core-common" "8.1.5"
|
||||
"@storybook/core-events" "8.1.5"
|
||||
"@storybook/core-server" "8.1.5"
|
||||
"@storybook/csf-tools" "8.1.5"
|
||||
"@storybook/node-logger" "8.1.5"
|
||||
"@storybook/telemetry" "8.1.5"
|
||||
"@storybook/types" "8.1.5"
|
||||
"@storybook/codemod" "8.1.11"
|
||||
"@storybook/core-common" "8.1.11"
|
||||
"@storybook/core-events" "8.1.11"
|
||||
"@storybook/core-server" "8.1.11"
|
||||
"@storybook/csf-tools" "8.1.11"
|
||||
"@storybook/node-logger" "8.1.11"
|
||||
"@storybook/telemetry" "8.1.11"
|
||||
"@storybook/types" "8.1.11"
|
||||
"@types/semver" "^7.3.4"
|
||||
"@yarnpkg/fslib" "2.10.3"
|
||||
"@yarnpkg/libzip" "2.3.0"
|
||||
|
|
@ -5405,25 +5395,18 @@
|
|||
dependencies:
|
||||
"@storybook/global" "^5.0.0"
|
||||
|
||||
"@storybook/client-logger@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-8.1.5.tgz#aa4a6ce4ca46fdfe12539e571f9059a479c8ae43"
|
||||
integrity sha512-zd+aENXnOHsxBATppELmhw/UywLzCxQjz/8i/xkUjeTRB4Ggp0hJlOUdJUEdIJz631ydyytfvM70ktBj9gMl1w==
|
||||
dependencies:
|
||||
"@storybook/global" "^5.0.0"
|
||||
|
||||
"@storybook/codemod@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.1.5.tgz#ee8e69834ec9cf3f543f5ba0ed5afdd9c26b57dc"
|
||||
integrity sha512-eGoYozT2XPfsIFrzm4cJo9tRTX0yuK1y4uTYmKvnomezHu5kiY8qo2fUzQa5DHxiAzRDTpGlQTzb0PsxHOxYoA==
|
||||
"@storybook/codemod@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.1.11.tgz#3a757511ac48fde6c5dbbdc248a6915c72157eba"
|
||||
integrity sha512-/LCozjH1IQ1TOs9UQV59BE0X6UZ9q+C0NEUz7qmJZPrwAii3FkW4l7D/fwxblpMExaoxv0oE8NQfUz49U/5Ymg==
|
||||
dependencies:
|
||||
"@babel/core" "^7.24.4"
|
||||
"@babel/preset-env" "^7.24.4"
|
||||
"@babel/types" "^7.24.0"
|
||||
"@storybook/csf" "^0.1.7"
|
||||
"@storybook/csf-tools" "8.1.5"
|
||||
"@storybook/node-logger" "8.1.5"
|
||||
"@storybook/types" "8.1.5"
|
||||
"@storybook/csf-tools" "8.1.11"
|
||||
"@storybook/node-logger" "8.1.11"
|
||||
"@storybook/types" "8.1.11"
|
||||
"@types/cross-spawn" "^6.0.2"
|
||||
cross-spawn "^7.0.3"
|
||||
globby "^14.0.1"
|
||||
|
|
@ -5484,41 +5467,6 @@
|
|||
ts-dedent "^2.0.0"
|
||||
util "^0.12.4"
|
||||
|
||||
"@storybook/core-common@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-8.1.5.tgz#273ad15cb35705e46f1806d0cc733a1a62d79cd5"
|
||||
integrity sha512-1QDOT6KPZ9KV7Gs1yyqzvSwGBmNSUB33gckUldSBF4aqP+tZ7W5JIQ6/YTtp3V02sEokZGdL9Ud4LczQxTgy3A==
|
||||
dependencies:
|
||||
"@storybook/core-events" "8.1.5"
|
||||
"@storybook/csf-tools" "8.1.5"
|
||||
"@storybook/node-logger" "8.1.5"
|
||||
"@storybook/types" "8.1.5"
|
||||
"@yarnpkg/fslib" "2.10.3"
|
||||
"@yarnpkg/libzip" "2.3.0"
|
||||
chalk "^4.1.0"
|
||||
cross-spawn "^7.0.3"
|
||||
esbuild "^0.18.0 || ^0.19.0 || ^0.20.0"
|
||||
esbuild-register "^3.5.0"
|
||||
execa "^5.0.0"
|
||||
file-system-cache "2.3.0"
|
||||
find-cache-dir "^3.0.0"
|
||||
find-up "^5.0.0"
|
||||
fs-extra "^11.1.0"
|
||||
glob "^10.0.0"
|
||||
handlebars "^4.7.7"
|
||||
lazy-universal-dotenv "^4.0.0"
|
||||
node-fetch "^2.0.0"
|
||||
picomatch "^2.3.0"
|
||||
pkg-dir "^5.0.0"
|
||||
prettier-fallback "npm:prettier@^3"
|
||||
pretty-hrtime "^1.0.3"
|
||||
resolve-from "^5.0.0"
|
||||
semver "^7.3.7"
|
||||
tempy "^3.1.0"
|
||||
tiny-invariant "^1.3.1"
|
||||
ts-dedent "^2.0.0"
|
||||
util "^0.12.4"
|
||||
|
||||
"@storybook/core-events@8.1.11", "@storybook/core-events@^8.0.0":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-8.1.11.tgz#e72f9563aef3286c106021d9926723bc24614f4a"
|
||||
|
|
@ -5527,37 +5475,29 @@
|
|||
"@storybook/csf" "^0.1.7"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/core-events@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-8.1.5.tgz#d921984e12b27aaaa623499a7ac0c3eea5e96264"
|
||||
integrity sha512-fgwbrHoLtSX6kfmamTGJqD+KfuEgun8cc4mWKZK094ByaqbSjhnOyeYO1sfVk8qst7QTFlOfhLAUe4cz1z149A==
|
||||
dependencies:
|
||||
"@storybook/csf" "^0.1.7"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/core-server@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-8.1.5.tgz#24a6054149f450c795d68c23790613c13f041881"
|
||||
integrity sha512-y16W2sg5KIHG6qgbd+a0nBUYHAgiUpPDFF7cdcIpbeOIoqFn+6ECp93MVefukumiSj3sQiJFU/tSm2A8apGltw==
|
||||
"@storybook/core-server@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-8.1.11.tgz#329f4d765f6e96d6e0128684179b04788cec2897"
|
||||
integrity sha512-L6dzQTmR0np/kagNONvvlm6lSvF1FNc9js3vxsEEPnEypLbhx8bDZaHmuhmBpYUzKyUMpRVQTE/WgjHLuBBuxA==
|
||||
dependencies:
|
||||
"@aw-web-design/x-default-browser" "1.4.126"
|
||||
"@babel/core" "^7.24.4"
|
||||
"@babel/parser" "^7.24.4"
|
||||
"@discoveryjs/json-ext" "^0.5.3"
|
||||
"@storybook/builder-manager" "8.1.5"
|
||||
"@storybook/channels" "8.1.5"
|
||||
"@storybook/core-common" "8.1.5"
|
||||
"@storybook/core-events" "8.1.5"
|
||||
"@storybook/builder-manager" "8.1.11"
|
||||
"@storybook/channels" "8.1.11"
|
||||
"@storybook/core-common" "8.1.11"
|
||||
"@storybook/core-events" "8.1.11"
|
||||
"@storybook/csf" "^0.1.7"
|
||||
"@storybook/csf-tools" "8.1.5"
|
||||
"@storybook/csf-tools" "8.1.11"
|
||||
"@storybook/docs-mdx" "3.1.0-next.0"
|
||||
"@storybook/global" "^5.0.0"
|
||||
"@storybook/manager" "8.1.5"
|
||||
"@storybook/manager-api" "8.1.5"
|
||||
"@storybook/node-logger" "8.1.5"
|
||||
"@storybook/preview-api" "8.1.5"
|
||||
"@storybook/telemetry" "8.1.5"
|
||||
"@storybook/types" "8.1.5"
|
||||
"@storybook/manager" "8.1.11"
|
||||
"@storybook/manager-api" "8.1.11"
|
||||
"@storybook/node-logger" "8.1.11"
|
||||
"@storybook/preview-api" "8.1.11"
|
||||
"@storybook/telemetry" "8.1.11"
|
||||
"@storybook/types" "8.1.11"
|
||||
"@types/detect-port" "^1.3.0"
|
||||
"@types/diff" "^5.0.9"
|
||||
"@types/node" "^18.0.0"
|
||||
|
|
@ -5572,7 +5512,6 @@
|
|||
express "^4.17.3"
|
||||
fs-extra "^11.1.0"
|
||||
globby "^14.0.1"
|
||||
ip "^2.0.1"
|
||||
lodash "^4.17.21"
|
||||
open "^8.4.0"
|
||||
pretty-hrtime "^1.0.3"
|
||||
|
|
@ -5610,21 +5549,6 @@
|
|||
recast "^0.23.5"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/csf-tools@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-8.1.5.tgz#779a8158cf3ab40da1a68e3d1d3499cc86494ccc"
|
||||
integrity sha512-jOfUo0arlaG4LlsdWaRfZCS0I1FhUnkf06ThzRBrrp8mFAPtOpf9iW16J3fYMS5vAdE/v+Z1RxuTRich4/JGdQ==
|
||||
dependencies:
|
||||
"@babel/generator" "^7.24.4"
|
||||
"@babel/parser" "^7.24.4"
|
||||
"@babel/traverse" "^7.24.1"
|
||||
"@babel/types" "^7.24.0"
|
||||
"@storybook/csf" "^0.1.7"
|
||||
"@storybook/types" "8.1.5"
|
||||
fs-extra "^11.1.0"
|
||||
recast "^0.23.5"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/csf@^0.1.7":
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.7.tgz#dcc6c16a353bc09c8c619ba1a23ba93b2aab0b9d"
|
||||
|
|
@ -5695,42 +5619,16 @@
|
|||
telejson "^7.2.0"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/manager-api@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.1.5.tgz#1f1a8875cbc19fad5435f670943207158dc76551"
|
||||
integrity sha512-iVP7FOKDf9L7zWCb8C2XeZjWSILS3hHeNwILvd9YSX9dg9du41kJYahsAHxDCR/jp/gv0ZM/V0vuHzi+naVPkQ==
|
||||
dependencies:
|
||||
"@storybook/channels" "8.1.5"
|
||||
"@storybook/client-logger" "8.1.5"
|
||||
"@storybook/core-events" "8.1.5"
|
||||
"@storybook/csf" "^0.1.7"
|
||||
"@storybook/global" "^5.0.0"
|
||||
"@storybook/icons" "^1.2.5"
|
||||
"@storybook/router" "8.1.5"
|
||||
"@storybook/theming" "8.1.5"
|
||||
"@storybook/types" "8.1.5"
|
||||
dequal "^2.0.2"
|
||||
lodash "^4.17.21"
|
||||
memoizerific "^1.11.3"
|
||||
store2 "^2.14.2"
|
||||
telejson "^7.2.0"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/manager@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-8.1.5.tgz#56cf0b93485c2d12ca71d4e3c90ca9bf519d3126"
|
||||
integrity sha512-qMYwD1cXW0hJ3pMmdMlbsqktVBlsjsqwMH5PBzAN4FoWiCQ/yHeAnDXRUgFFaLcORS72h9H/cQuJ+p//RdeURg==
|
||||
"@storybook/manager@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-8.1.11.tgz#a5bd296a3ae3f8a486b79ae12a7265e3063f0009"
|
||||
integrity sha512-e02y9dmxowo7cTKYm9am7UO6NOHoHy6Xi7xZf/UA932qLwFZUtk5pnwIEFaZWI3OQsRUCGhP+FL5zizU7uVZeg==
|
||||
|
||||
"@storybook/node-logger@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-8.1.11.tgz#451750347869cf128a02acfee8232d9952f99953"
|
||||
integrity sha512-wdzFo7B2naGhS52L3n1qBkt5BfvQjs8uax6B741yKRpiGgeAN8nz8+qelkD25MbSukxvbPgDot7WJvsMU/iCzg==
|
||||
|
||||
"@storybook/node-logger@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-8.1.5.tgz#c0c064b3ebdc0b3c97b7f449ed96ab59c484cab6"
|
||||
integrity sha512-9qwPX/uGhdHaVjeVUSwJUSbKX7g9goyhGYdKVuCEyl7vHR9Kp7Zkag2sEHmVdd9ixTea3jk2GZQEbnBDNQNGnw==
|
||||
|
||||
"@storybook/preview-api@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.1.11.tgz#37734167dac68a7397b3a0245bf636535057af7b"
|
||||
|
|
@ -5751,26 +5649,6 @@
|
|||
ts-dedent "^2.0.0"
|
||||
util-deprecate "^1.0.2"
|
||||
|
||||
"@storybook/preview-api@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.1.5.tgz#2577f95022922dd3e9a75445756d21591e58de5f"
|
||||
integrity sha512-pv0aT5WbnSYR7KWQgy3jLfuBM0ocYG6GTcmZLREW5554oiBPHhzNFv+ZrBI47RzbrbFxq1h5dj4v8lkEcKIrbA==
|
||||
dependencies:
|
||||
"@storybook/channels" "8.1.5"
|
||||
"@storybook/client-logger" "8.1.5"
|
||||
"@storybook/core-events" "8.1.5"
|
||||
"@storybook/csf" "^0.1.7"
|
||||
"@storybook/global" "^5.0.0"
|
||||
"@storybook/types" "8.1.5"
|
||||
"@types/qs" "^6.9.5"
|
||||
dequal "^2.0.2"
|
||||
lodash "^4.17.21"
|
||||
memoizerific "^1.11.3"
|
||||
qs "^6.10.0"
|
||||
tiny-invariant "^1.3.1"
|
||||
ts-dedent "^2.0.0"
|
||||
util-deprecate "^1.0.2"
|
||||
|
||||
"@storybook/preview@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-8.1.11.tgz#da251aa4789332154b1837abae0a3186a5442421"
|
||||
|
|
@ -5790,15 +5668,6 @@
|
|||
memoizerific "^1.11.3"
|
||||
qs "^6.10.0"
|
||||
|
||||
"@storybook/router@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/router/-/router-8.1.5.tgz#e1dd831136e874df833286fd76554958af6132fa"
|
||||
integrity sha512-DCwvAswlbLhQu6REPV04XNRhtPvsrRqHjMHKzjlfs+qYJWY7Egkofy05qlegqjkMDve33czfnRGBm0C16IydkA==
|
||||
dependencies:
|
||||
"@storybook/client-logger" "8.1.5"
|
||||
memoizerific "^1.11.3"
|
||||
qs "^6.10.0"
|
||||
|
||||
"@storybook/svelte-vite@^8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/svelte-vite/-/svelte-vite-8.1.11.tgz#95e4bc58dfb5028836aa4a34cffce436483a9d80"
|
||||
|
|
@ -5828,14 +5697,14 @@
|
|||
ts-dedent "^2.0.0"
|
||||
type-fest "~2.19"
|
||||
|
||||
"@storybook/telemetry@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-8.1.5.tgz#5fa3dae7f85a5749733928acc1e7deab5e3ca1cf"
|
||||
integrity sha512-QbB1Ox7oBaCvIF2TacFjPLi1XYeHxSPeZUuFXeE+tSMdvvWZzYLnXfj/oISmV6Q+X5VZfyJVMrZ2LfeW9CuFNg==
|
||||
"@storybook/telemetry@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-8.1.11.tgz#13b2fbf2a2eb4310c08f4743d0bdeaeba691663a"
|
||||
integrity sha512-Jqvm7HcZismKzPuebhyLECO6KjGiSk4ycbca1WUM/TUvifxCXqgoUPlHHQEEfaRdHS63/MSqtMNjLsQRLC/vNQ==
|
||||
dependencies:
|
||||
"@storybook/client-logger" "8.1.5"
|
||||
"@storybook/core-common" "8.1.5"
|
||||
"@storybook/csf-tools" "8.1.5"
|
||||
"@storybook/client-logger" "8.1.11"
|
||||
"@storybook/core-common" "8.1.11"
|
||||
"@storybook/csf-tools" "8.1.11"
|
||||
chalk "^4.1.0"
|
||||
detect-package-manager "^2.0.1"
|
||||
fetch-retry "^5.0.2"
|
||||
|
|
@ -5868,16 +5737,6 @@
|
|||
"@storybook/global" "^5.0.0"
|
||||
memoizerific "^1.11.3"
|
||||
|
||||
"@storybook/theming@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.1.5.tgz#8eb0718907ec443cfca1b73491f5e99df65930af"
|
||||
integrity sha512-E4z1t49fMbVvd/t2MSL0Ecp5zbqsU/QfWBX/eorJ+m+Xc9skkwwG5qf/FnP9x4RZ9KaX8U8+862t0eafVvf4Tw==
|
||||
dependencies:
|
||||
"@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
|
||||
"@storybook/client-logger" "8.1.5"
|
||||
"@storybook/global" "^5.0.0"
|
||||
memoizerific "^1.11.3"
|
||||
|
||||
"@storybook/types@8.1.11":
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/types/-/types-8.1.11.tgz#c6e89fb6d543ebd4d3445a465af6aa27fbbe6aaa"
|
||||
|
|
@ -5887,15 +5746,6 @@
|
|||
"@types/express" "^4.7.0"
|
||||
file-system-cache "2.3.0"
|
||||
|
||||
"@storybook/types@8.1.5":
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/types/-/types-8.1.5.tgz#627cac55e8034deed4b763327ff938c84c541a05"
|
||||
integrity sha512-/PfAZh1xtXN2MvAZZKpiL/nPkC3bZj8BQ7P7z5a/aQarP+y7qdXuoitYQ6oOH3rkaiYywmkWzA/y4iW70KXLKg==
|
||||
dependencies:
|
||||
"@storybook/channels" "8.1.5"
|
||||
"@types/express" "^4.7.0"
|
||||
file-system-cache "2.3.0"
|
||||
|
||||
"@sveltejs/package@^2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@sveltejs/package/-/package-2.3.2.tgz#117c394339ee3a391a190bb9298b9dbcfa1bee38"
|
||||
|
|
@ -5907,24 +5757,23 @@
|
|||
semver "^7.5.4"
|
||||
svelte2tsx "~0.7.0"
|
||||
|
||||
"@sveltejs/vite-plugin-svelte-inspector@^2.1.0":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz#116ba2b73be43c1d7d93de749f37becc7e45bb8c"
|
||||
integrity sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==
|
||||
"@sveltejs/vite-plugin-svelte-inspector@^3.0.0-next.0||^3.0.0":
|
||||
version "3.0.0-next.2"
|
||||
resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.0-next.2.tgz#46d4bff34865a68ecacc42c9528fc7002a03d30b"
|
||||
integrity sha512-Yl9BWvEj+1j+8mICIAA04/Sx0wEHNL0n9pSIZFM8n4NWgLFmR3v41qX2k54J/r4LWE2YHTeNNH2WJqEUb3geEA==
|
||||
dependencies:
|
||||
debug "^4.3.4"
|
||||
|
||||
"@sveltejs/vite-plugin-svelte@3.1.1":
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz#e71bb0631ca40a3a1d272315beaff9bdd5482841"
|
||||
integrity sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==
|
||||
"@sveltejs/vite-plugin-svelte@4.0.0-next.3":
|
||||
version "4.0.0-next.3"
|
||||
resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.0-next.3.tgz#6d31de34906b39418cd62f569a7878ef776e2d1d"
|
||||
integrity sha512-9FD3VveALD9Qwci0++VvCMHKUzmDkcUzxtjUd/EQrQMSbUYa9nMrZMtXUp+MxEpZxJkWZz65RWw0IhH2HHBc1g==
|
||||
dependencies:
|
||||
"@sveltejs/vite-plugin-svelte-inspector" "^2.1.0"
|
||||
"@sveltejs/vite-plugin-svelte-inspector" "^3.0.0-next.0||^3.0.0"
|
||||
debug "^4.3.4"
|
||||
deepmerge "^4.3.1"
|
||||
kleur "^4.1.5"
|
||||
magic-string "^0.30.10"
|
||||
svelte-hmr "^0.16.0"
|
||||
vitefu "^0.2.5"
|
||||
|
||||
"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
|
||||
|
|
@ -6061,7 +5910,7 @@
|
|||
lz-string "^1.5.0"
|
||||
pretty-format "^27.0.2"
|
||||
|
||||
"@testing-library/dom@^10.2.0":
|
||||
"@testing-library/dom@^10.0.0", "@testing-library/dom@^10.2.0":
|
||||
version "10.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.2.0.tgz#d3b22515bc0603a06f119c6ae6670669c3f2085f"
|
||||
integrity sha512-CytIvb6tVOADRngTHGWNxH8LPgO/3hi/BdCEHOf7Qd2GvZVClhVP0Wo/QHzWhpki49Bk0b4VT6xpt3fx8HTSIw==
|
||||
|
|
@ -6075,20 +5924,6 @@
|
|||
lz-string "^1.5.0"
|
||||
pretty-format "^27.0.2"
|
||||
|
||||
"@testing-library/dom@^9.3.1":
|
||||
version "9.3.4"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce"
|
||||
integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.10.4"
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@types/aria-query" "^5.0.1"
|
||||
aria-query "5.1.3"
|
||||
chalk "^4.1.0"
|
||||
dom-accessibility-api "^0.5.9"
|
||||
lz-string "^1.5.0"
|
||||
pretty-format "^27.0.2"
|
||||
|
||||
"@testing-library/jest-dom@6.4.5":
|
||||
version "6.4.5"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz#badb40296477149136dabef32b572ddd3b56adf1"
|
||||
|
|
@ -6117,12 +5952,12 @@
|
|||
lodash "^4.17.21"
|
||||
redent "^3.0.0"
|
||||
|
||||
"@testing-library/svelte@^5.1.0":
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/svelte/-/svelte-5.1.0.tgz#18b4652d414f100c03b893abc593fb08dd775ee9"
|
||||
integrity sha512-8GW+rBR72U7Qql0Glxl4CtVTr6GPotYf/MB7MamIH6ZpV45i7IJIOm3oHWH4Wr6ZULdUs37F9recegQygLbC0g==
|
||||
"@testing-library/svelte@^5.2.0":
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/svelte/-/svelte-5.2.0.tgz#237ba908fdc8b35d53c3ab06bf19a6da229c471a"
|
||||
integrity sha512-oMIFfxMcaPOXp+BQTRVgkeKzfAx7ee9fMrWaiKbMN36tN61kLl4Uj5ZZ/y1w9aL3a0BuBEoErV5iorYwCHqVUA==
|
||||
dependencies:
|
||||
"@testing-library/dom" "^9.3.1"
|
||||
"@testing-library/dom" "^10.0.0"
|
||||
|
||||
"@testing-library/user-event@14.5.2", "@testing-library/user-event@^14.5.2":
|
||||
version "14.5.2"
|
||||
|
|
@ -6326,7 +6161,7 @@
|
|||
dependencies:
|
||||
"@types/estree" "*"
|
||||
|
||||
"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0", "@types/estree@^1.0.1":
|
||||
"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0", "@types/estree@^1.0.1", "@types/estree@^1.0.5":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
|
||||
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
|
||||
|
|
@ -7318,6 +7153,11 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.3.1, acorn-jsx@^5.3.2:
|
|||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
||||
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
||||
|
||||
acorn-typescript@^1.4.13:
|
||||
version "1.4.13"
|
||||
resolved "https://registry.yarnpkg.com/acorn-typescript/-/acorn-typescript-1.4.13.tgz#5f851c8bdda0aa716ffdd5f6ac084df8acc6f5ea"
|
||||
integrity sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==
|
||||
|
||||
acorn-walk@^8.0.0, acorn-walk@^8.3.2:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
|
||||
|
|
@ -7601,13 +7441,6 @@ aria-hidden@^1.1.1:
|
|||
dependencies:
|
||||
tslib "^2.0.0"
|
||||
|
||||
aria-query@5.1.3:
|
||||
version "5.1.3"
|
||||
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
|
||||
integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
|
||||
dependencies:
|
||||
deep-equal "^2.0.5"
|
||||
|
||||
aria-query@5.3.0, aria-query@^5.0.0, aria-query@^5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
|
||||
|
|
@ -8698,17 +8531,6 @@ code-block-writer@^11.0.0:
|
|||
dependencies:
|
||||
tslib "2.3.1"
|
||||
|
||||
code-red@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.3.tgz#bbd3b0a27dc53c9af13f6756120a9dbcdd68a5f2"
|
||||
integrity sha512-kVwJELqiILQyG5aeuyKFbdsI1fmQy1Cmf7dQ8eGmVuJoaRVdwey7WaMknr2ZFeVSYSKT0rExsa8EGw0aoI/1QQ==
|
||||
dependencies:
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
"@types/estree" "^1.0.0"
|
||||
acorn "^8.8.2"
|
||||
estree-walker "^3.0.3"
|
||||
periscopic "^3.1.0"
|
||||
|
||||
collapse-white-space@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca"
|
||||
|
|
@ -9686,7 +9508,7 @@ dedent-js@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/dedent-js/-/dedent-js-1.0.1.tgz#bee5fb7c9e727d85dffa24590d10ec1ab1255305"
|
||||
integrity sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==
|
||||
|
||||
dedent@^1.2.0:
|
||||
dedent@^1.5.3:
|
||||
version "1.5.3"
|
||||
resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a"
|
||||
integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==
|
||||
|
|
@ -9698,30 +9520,6 @@ deep-eql@^4.1.3:
|
|||
dependencies:
|
||||
type-detect "^4.0.0"
|
||||
|
||||
deep-equal@^2.0.5:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739"
|
||||
integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==
|
||||
dependencies:
|
||||
array-buffer-byte-length "^1.0.0"
|
||||
call-bind "^1.0.2"
|
||||
es-get-iterator "^1.1.3"
|
||||
get-intrinsic "^1.2.0"
|
||||
is-arguments "^1.1.1"
|
||||
is-array-buffer "^3.0.2"
|
||||
is-date-object "^1.0.5"
|
||||
is-regex "^1.1.4"
|
||||
is-shared-array-buffer "^1.0.2"
|
||||
isarray "^2.0.5"
|
||||
object-is "^1.1.5"
|
||||
object-keys "^1.1.1"
|
||||
object.assign "^4.1.4"
|
||||
regexp.prototype.flags "^1.5.0"
|
||||
side-channel "^1.0.4"
|
||||
which-boxed-primitive "^1.0.2"
|
||||
which-collection "^1.0.1"
|
||||
which-typed-array "^1.1.9"
|
||||
|
||||
deep-extend@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
|
||||
|
|
@ -9815,6 +9613,15 @@ define-properties@^1.2.0:
|
|||
has-property-descriptors "^1.0.0"
|
||||
object-keys "^1.1.1"
|
||||
|
||||
define-properties@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
|
||||
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
|
||||
dependencies:
|
||||
define-data-property "^1.0.1"
|
||||
has-property-descriptors "^1.0.0"
|
||||
object-keys "^1.1.1"
|
||||
|
||||
defu@^6.1.4:
|
||||
version "6.1.4"
|
||||
resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479"
|
||||
|
|
@ -10528,21 +10335,6 @@ es-errors@^1.3.0:
|
|||
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
||||
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
|
||||
|
||||
es-get-iterator@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
|
||||
integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
get-intrinsic "^1.1.3"
|
||||
has-symbols "^1.0.3"
|
||||
is-arguments "^1.1.1"
|
||||
is-map "^2.0.2"
|
||||
is-set "^2.0.2"
|
||||
is-string "^1.0.7"
|
||||
isarray "^2.0.5"
|
||||
stop-iteration-iterator "^1.0.0"
|
||||
|
||||
es-module-lexer@^1.2.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5"
|
||||
|
|
@ -11016,6 +10808,11 @@ eslint@^9.3.0:
|
|||
strip-ansi "^6.0.1"
|
||||
text-table "^0.2.0"
|
||||
|
||||
esm-env@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/esm-env/-/esm-env-1.0.0.tgz#b124b40b180711690a4cb9b00d16573391950413"
|
||||
integrity sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==
|
||||
|
||||
espree@9.2.0:
|
||||
version "9.2.0"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc"
|
||||
|
|
@ -11055,6 +10852,14 @@ esquery@^1.4.0, esquery@^1.4.2, esquery@^1.5.0:
|
|||
dependencies:
|
||||
estraverse "^5.1.0"
|
||||
|
||||
esrap@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/esrap/-/esrap-1.2.2.tgz#b9e3afee3f12238563a763b7fa86220de2c53203"
|
||||
integrity sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==
|
||||
dependencies:
|
||||
"@jridgewell/sourcemap-codec" "^1.4.15"
|
||||
"@types/estree" "^1.0.1"
|
||||
|
||||
esrecurse@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
|
||||
|
|
@ -12865,7 +12670,7 @@ inline-style-parser@0.1.1:
|
|||
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
|
||||
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
|
||||
|
||||
internal-slot@^1.0.4, internal-slot@^1.0.5:
|
||||
internal-slot@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
|
||||
integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
|
||||
|
|
@ -12901,11 +12706,6 @@ invert-kv@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-3.0.1.tgz#a93c7a3d4386a1dc8325b97da9bb1620c0282523"
|
||||
integrity sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==
|
||||
|
||||
ip@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||
|
|
@ -12934,7 +12734,7 @@ is-alphanumerical@^2.0.0:
|
|||
is-alphabetical "^2.0.0"
|
||||
is-decimal "^2.0.0"
|
||||
|
||||
is-arguments@^1.0.4, is-arguments@^1.1.1:
|
||||
is-arguments@^1.0.4:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
|
||||
integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
|
||||
|
|
@ -13018,7 +12818,7 @@ is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
|
|||
dependencies:
|
||||
hasown "^2.0.0"
|
||||
|
||||
is-date-object@^1.0.1, is-date-object@^1.0.5:
|
||||
is-date-object@^1.0.1:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
|
||||
integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
|
||||
|
|
@ -13119,11 +12919,6 @@ is-interactive@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90"
|
||||
integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
|
||||
|
||||
is-map@^2.0.1, is-map@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
|
||||
integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
|
||||
|
||||
is-module@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
|
||||
|
|
@ -13218,13 +13013,20 @@ is-reference@1.2.1:
|
|||
dependencies:
|
||||
"@types/estree" "*"
|
||||
|
||||
is-reference@^3.0.0, is-reference@^3.0.1:
|
||||
is-reference@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.1.tgz#d400f4260f7e55733955e60d361d827eb4d3b831"
|
||||
integrity sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
|
||||
is-reference@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c"
|
||||
integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
|
||||
is-regex@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
|
||||
|
|
@ -13243,11 +13045,6 @@ is-root@^2.1.0:
|
|||
resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
|
||||
integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==
|
||||
|
||||
is-set@^2.0.1, is-set@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
|
||||
integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
|
||||
|
||||
is-shared-array-buffer@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
|
||||
|
|
@ -13331,11 +13128,6 @@ is-unicode-supported@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz#fdf32df9ae98ff6ab2cedc155a5a6e895701c451"
|
||||
integrity sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==
|
||||
|
||||
is-weakmap@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
|
||||
integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
|
||||
|
||||
is-weakref@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
|
||||
|
|
@ -13343,14 +13135,6 @@ is-weakref@^1.0.2:
|
|||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
|
||||
is-weakset@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
|
||||
integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
get-intrinsic "^1.1.1"
|
||||
|
||||
is-wsl@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
|
||||
|
|
@ -14128,7 +13912,7 @@ lz-string@^1.5.0:
|
|||
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
|
||||
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
|
||||
|
||||
magic-string@^0.30.0, magic-string@^0.30.1, magic-string@^0.30.10, magic-string@^0.30.3, magic-string@^0.30.4, magic-string@^0.30.5:
|
||||
magic-string@^0.30.0, magic-string@^0.30.10, magic-string@^0.30.3, magic-string@^0.30.5:
|
||||
version "0.30.10"
|
||||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e"
|
||||
integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==
|
||||
|
|
@ -15301,11 +15085,6 @@ minimatch@^9.0.4:
|
|||
dependencies:
|
||||
brace-expansion "^2.0.1"
|
||||
|
||||
"minimist @^1.2.8":
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
||||
|
||||
minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||
|
|
@ -15664,12 +15443,12 @@ object-inspect@^1.9.0:
|
|||
integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
|
||||
|
||||
object-is@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
|
||||
integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07"
|
||||
integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
call-bind "^1.0.7"
|
||||
define-properties "^1.2.1"
|
||||
|
||||
object-keys@^1.0.12, object-keys@^1.1.1:
|
||||
version "1.1.1"
|
||||
|
|
@ -16179,7 +15958,7 @@ performance-now@^2.1.0:
|
|||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
|
||||
|
||||
periscopic@^3.0.0, periscopic@^3.1.0:
|
||||
periscopic@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a"
|
||||
integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==
|
||||
|
|
@ -17324,15 +17103,6 @@ regexp-tree@^0.1.27:
|
|||
resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd"
|
||||
integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==
|
||||
|
||||
regexp.prototype.flags@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
|
||||
integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.2.0"
|
||||
functions-have-names "^1.2.3"
|
||||
|
||||
regexp.prototype.flags@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e"
|
||||
|
|
@ -18519,13 +18289,6 @@ stdin-discarder@^0.2.1:
|
|||
resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be"
|
||||
integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==
|
||||
|
||||
stop-iteration-iterator@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
|
||||
integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==
|
||||
dependencies:
|
||||
internal-slot "^1.0.4"
|
||||
|
||||
store2@^2.14.2:
|
||||
version "2.14.3"
|
||||
resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.3.tgz#24077d7ba110711864e4f691d2af941ec533deb5"
|
||||
|
|
@ -18545,12 +18308,12 @@ storybook-dark-mode@^4.0.2:
|
|||
fast-deep-equal "^3.1.3"
|
||||
memoizerific "^1.11.3"
|
||||
|
||||
storybook@^8.0.9:
|
||||
version "8.1.5"
|
||||
resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.1.5.tgz#079248bdb099b4edb8cde94246b62bec448a1e21"
|
||||
integrity sha512-v4o8AfTvxWpdGa9Pa9x8EAmqbN5yJc+2fW8b6ZaCsDOTh2t5Y3EUHbIzdtvX+1Gb6ALsOs5e2Q9GlCAzjz+WNQ==
|
||||
storybook@^8.1.11:
|
||||
version "8.1.11"
|
||||
resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.1.11.tgz#c41b25fee0146a55afccba8978b6349c454313a6"
|
||||
integrity sha512-3KjIhF8lczXhKKHyHbOqV30dvuRYJSxc0d1as/C8kybuwE7cLaydhWGma7VBv5bTSPv0rDzucx7KcO+achArPg==
|
||||
dependencies:
|
||||
"@storybook/cli" "8.1.5"
|
||||
"@storybook/cli" "8.1.11"
|
||||
|
||||
stream-buffers@^3.0.2:
|
||||
version "3.0.2"
|
||||
|
|
@ -18860,11 +18623,6 @@ svelte-fa@^4.0.2:
|
|||
resolved "https://registry.yarnpkg.com/svelte-fa/-/svelte-fa-4.0.2.tgz#f73aab661bf1758d726f06db321f0ffb8e2f40d6"
|
||||
integrity sha512-lza8Jfii6jcpMQB73mBStONxaLfZsUS+rKJ/hH6WxsHUd+g68+oHIL9yQTk4a0uY9HQk78T/CPvQnED0msqJfg==
|
||||
|
||||
svelte-hmr@^0.16.0:
|
||||
version "0.16.0"
|
||||
resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.16.0.tgz#9f345b7d1c1662f1613747ed7e82507e376c1716"
|
||||
integrity sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==
|
||||
|
||||
svelte-preprocess@^5.1.1, svelte-preprocess@^5.1.3:
|
||||
version "5.1.4"
|
||||
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz#14ada075c94bbd2b71c5ec70ff72f8ebe1c95b91"
|
||||
|
|
@ -18897,25 +18655,43 @@ svelte2tsx@~0.7.0:
|
|||
dedent-js "^1.0.1"
|
||||
pascal-case "^3.1.1"
|
||||
|
||||
svelte@4.2.18:
|
||||
version "4.2.18"
|
||||
resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.18.tgz#33dbce74e83eb6dcc54dbea25f9758b1d8e8bb78"
|
||||
integrity sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==
|
||||
svelte@5.0.0-next.164:
|
||||
version "5.0.0-next.164"
|
||||
resolved "https://registry.yarnpkg.com/svelte/-/svelte-5.0.0-next.164.tgz#7d397f146a69e56d5876b94219c817f41ac39f35"
|
||||
integrity sha512-e+V1dSZLCCu0Ln7RKwSl/zP9ZZFbDGW7ABfGQYU/+6sWponizQocmyHyKHzctor0ruGgJKOF7QQB+M6lE2+UrA==
|
||||
dependencies:
|
||||
"@ampproject/remapping" "^2.2.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.15"
|
||||
"@jridgewell/trace-mapping" "^0.3.18"
|
||||
"@types/estree" "^1.0.1"
|
||||
acorn "^8.9.0"
|
||||
"@types/estree" "^1.0.5"
|
||||
acorn "^8.11.3"
|
||||
acorn-typescript "^1.4.13"
|
||||
aria-query "^5.3.0"
|
||||
axobject-query "^4.0.0"
|
||||
code-red "^1.0.3"
|
||||
css-tree "^2.3.1"
|
||||
estree-walker "^3.0.3"
|
||||
is-reference "^3.0.1"
|
||||
esm-env "^1.0.0"
|
||||
esrap "^1.2.2"
|
||||
is-reference "^3.0.2"
|
||||
locate-character "^3.0.0"
|
||||
magic-string "^0.30.4"
|
||||
periscopic "^3.1.0"
|
||||
magic-string "^0.30.5"
|
||||
zimmerframe "^1.1.2"
|
||||
|
||||
svelte@5.0.0-next.166:
|
||||
version "5.0.0-next.166"
|
||||
resolved "https://registry.yarnpkg.com/svelte/-/svelte-5.0.0-next.166.tgz#8b3b19666ba28b9c021e34d5eca7738bba8c6d2f"
|
||||
integrity sha512-s1anY8eTprp42QyHGdbfIT7pO+gYgwnS6hkMmvd8ayW5krV9HLYjbQcVUb8/GyQSIlWtewvmZVZ58rpKjRmdTg==
|
||||
dependencies:
|
||||
"@ampproject/remapping" "^2.2.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.15"
|
||||
"@types/estree" "^1.0.5"
|
||||
acorn "^8.11.3"
|
||||
acorn-typescript "^1.4.13"
|
||||
aria-query "^5.3.0"
|
||||
axobject-query "^4.0.0"
|
||||
esm-env "^1.0.0"
|
||||
esrap "^1.2.2"
|
||||
is-reference "^3.0.2"
|
||||
locate-character "^3.0.0"
|
||||
magic-string "^0.30.5"
|
||||
zimmerframe "^1.1.2"
|
||||
|
||||
sveltedoc-parser@^4.2.1:
|
||||
version "4.2.1"
|
||||
|
|
@ -20275,16 +20051,6 @@ which-boxed-primitive@^1.0.2:
|
|||
is-string "^1.0.5"
|
||||
is-symbol "^1.0.3"
|
||||
|
||||
which-collection@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
|
||||
integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
|
||||
dependencies:
|
||||
is-map "^2.0.1"
|
||||
is-set "^2.0.1"
|
||||
is-weakmap "^2.0.1"
|
||||
is-weakset "^2.0.1"
|
||||
|
||||
which-typed-array@^1.1.11, which-typed-array@^1.1.13:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
|
||||
|
|
@ -20307,18 +20073,6 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.2:
|
|||
gopd "^1.0.1"
|
||||
has-tostringtag "^1.0.2"
|
||||
|
||||
which-typed-array@^1.1.9:
|
||||
version "1.1.9"
|
||||
resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
|
||||
integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
|
||||
dependencies:
|
||||
available-typed-arrays "^1.0.5"
|
||||
call-bind "^1.0.2"
|
||||
for-each "^0.3.3"
|
||||
gopd "^1.0.1"
|
||||
has-tostringtag "^1.0.0"
|
||||
is-typed-array "^1.1.10"
|
||||
|
||||
which@^1.2.4, which@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
|
|
@ -20591,6 +20345,11 @@ yocto-queue@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
|
||||
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
|
||||
|
||||
zimmerframe@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/zimmerframe/-/zimmerframe-1.1.2.tgz#5b75f1fa83b07ae2a428d51e50f58e2ae6855e5e"
|
||||
integrity sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==
|
||||
|
||||
zwitch@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
|
||||
|
|
|
|||
Loading…
Reference in a new issue