Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion web_ui/.nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22.12.0
22.17.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: why this change?

11,596 changes: 5,948 additions & 5,648 deletions web_ui/package-lock.json

Large diffs are not rendered by default.

86 changes: 44 additions & 42 deletions web_ui/package.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{
"name": "geti-ui",
"engines": {
"node": "22.12.0",
"npm": "10.9.0"
"node": "22.17.0",
"npm": "10.9.2"
},
"type": "module",
"private": true,
"dependencies": {
"@doodle3d/clipper-js": "^1.0.11",
"@geti/core": "*",
"@geti/ui": "*",
"@geti/smart-tools": "*",
"@geti/ui": "*",
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/core": "^1.26.0",
"@opentelemetry/exporter-metrics-otlp-http": "^0.53.0",
Expand All @@ -23,42 +23,42 @@
"@opentelemetry/sdk-trace-web": "^1.26.0",
"@opentelemetry/semantic-conventions": "^1.27.0",
"@react-hook/resize-observer": "^2.0.2",
"@scalar/api-reference-react": "^0.3.166",
"@tanstack/react-query": "^5.74.11",
"@tanstack/react-query-devtools": "^5.74.11",
"@scalar/api-reference-react": "^0.7.31",
"@tanstack/react-query": "^5.83.0",
"@tanstack/react-query-devtools": "^5.83.0",
"@wessberg/pointer-events": "^1.0.9",
"allotment": "^1.20.3",
"axios": "^1.9.0",
"allotment": "^1.20.4",
"axios": "^1.10.0",
"clsx": "^2.1.1",
"comlink": "^4.4.2",
"dayjs": "^1.11.13",
"dotenv": "^16.5.0",
"dotenv": "^16.6.1",
"filesize": "^10.1.6",
"framer-motion": "^12.9.4",
"framer-motion": "^12.23.5",
"identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0",
"jspdf": "^3.0.1",
"jwt-decode": "^4.0.0",
"localforage": "^1.10.0",
"lodash-es": "^4.17.21",
"oidc-client-ts": "^2.4.0",
"oidc-client-ts": "^2.4.1",
"polylabel": "^1.1.0",
"react": "^18.3.1",
"react-app-polyfill": "^3.0.0",
"react-aria": "^3.39.0",
"react-aria": "^3.41.1",
"react-colorful": "^5.6.1",
"react-cool-virtual": "^0.7.0",
"react-countup": "^6.5.3",
"react-dom": "^18.3.1",
"react-error-boundary": "^3.1.4",
"react-hotkeys-hook": "^4.6.1",
"react-hotkeys-hook": "^4.6.2",
"react-notifications-component": "^4.0.1",
"react-oidc-context": "^2.3.1",
"react-router-dom": "^6.30.0",
"react-stately": "^3.37.0",
"react-oidc-context": "^2.4.0",
"react-router-dom": "^6.30.1",
"react-stately": "^3.39.0",
"react-webcam": "^7.2.0",
"react-zoom-pan-pinch": "^3.7.0",
"recharts": "^2.15.1",
"recharts": "^2.15.4",
"spin-delay": "^2.0.1",
"static-path": "^0.0.4",
"svg2pdf.js": "^2.5.0",
Expand Down Expand Up @@ -112,53 +112,55 @@
},
"devDependencies": {
"@apidevtools/swagger-cli": "^4.0.4",
"@eslint/compat": "^1.2.8",
"@eslint/compat": "^1.3.1",
"@geti/config": "*",
"@ianvs/prettier-plugin-sort-imports": "^4.4.1",
"@mjackson/headers": "^0.10.0",
"@playwright/test": "^1.51.1",
"@rsbuild/core": "^1.3.14",
"@rsbuild/plugin-react": "^1.3.0",
"@rsbuild/plugin-sass": "^1.3.1",
"@rsbuild/plugin-svgr": "^1.2.0",
"@rsdoctor/rspack-plugin": "^1.0.2",
"@ianvs/prettier-plugin-sort-imports": "^4.5.1",
"@mjackson/headers": "^0.11.1",
"@playwright/test": "^1.54.1",
"@react-aria/test-utils": "^1.0.0-alpha.8",
"@rsbuild/core": "^1.4.6",
"@rsbuild/plugin-react": "^1.3.4",
"@rsbuild/plugin-sass": "^1.3.3",
"@rsbuild/plugin-svgr": "^1.2.1",
"@rsdoctor/rspack-plugin": "^1.1.8",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^15.0.7",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/adm-zip": "^0.5.7",
"@types/jest": "^29.5.14",
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.15.3",
"@types/node": "^22.16.3",
"@types/polylabel": "^1.1.3",
"@types/react": "^18.3.20",
"@types/react": "^18.3.23",
"@types/react-beautiful-dnd": "^13.1.8",
"@types/react-dom": "^18.3.5",
"@types/react-dom": "^18.3.7",
"@types/utif": "^3.0.5",
"@types/uuid": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^8.31.1",
"@typescript-eslint/eslint-plugin": "^8.36.0",
"adm-zip": "^0.5.16",
"babel-preset-react-app": "^10.1.0",
"eslint": "^9.25.1",
"eslint-import-resolver-typescript": "^4.3.4",
"eslint": "^9.31.0",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.11.0",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jest": "^28.14.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-playwright": "^2.2.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"http-proxy-middleware": "^3.0.3",
"http-proxy-middleware": "^3.0.5",
"https-proxy-agent": "^7.0.6",
"jest-canvas-mock": "^2.5.2",
"jest-environment-jsdom": "^29.7.0",
"jose": "^6.0.10",
"jose": "^6.0.11",
"json-merger": "^3.0.0",
"msw": "^1.3.5",
"openapi-backend": "^5.12.0",
"openapi-typescript": "^7.6.1",
"openapi-typescript-fetch": "^2.1.0",
"prettier": "^3.5.3",
"typescript": "^5.7.2"
"openapi-backend": "^5.13.0",
"openapi-typescript": "^7.8.0",
"openapi-typescript-fetch": "^2.2.1",
"prettier": "^3.6.2",
"typescript": "^5.8.3"
},
"overrides": {
"msw": {
Expand Down
15 changes: 8 additions & 7 deletions web_ui/packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,24 @@
"version": "1.0.0",
"main": "index.ts",
"dependencies": {
"axios": "^1.9.0"
"axios": "^1.10.0"
},
"devDependencies": {
"@geti/config": "*",
"@testing-library/react": "^15.0.7",
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^29.5.14",
"@types/node": "^22.15.3",
"eslint": "^9.25.1",
"@types/node": "^22.16.3",
"eslint": "^9.31.0",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.11.0",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jest": "^28.14.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"jest": "^29.7.0",
"typescript": "^5.7.2"
"typescript": "^5.8.3"
},
"type": "module",
"scripts": {
Expand Down
8 changes: 4 additions & 4 deletions web_ui/packages/smart-tools/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@
},
"devDependencies": {
"@geti/config": "*",
"@types/node": "^22.15.3",
"@types/node": "^22.16.3",
"@types/ndarray": "^1.0.14",
"@types/ndarray-ops": "^1.2.7",
"eslint": "^9.25.1",
"eslint": "^9.31.0",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"typescript": "^5.7.2"
"typescript": "^5.8.3"
},
"exports": {
".": "./index.ts",
Expand Down
21 changes: 11 additions & 10 deletions web_ui/packages/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,28 @@
"main": "index.ts",
"type": "module",
"dependencies": {
"@adobe/react-spectrum": "^3.41.0",
"react-aria-components": "^1.8.0",
"@spectrum-icons/illustrations": "^3.6.17",
"@spectrum-icons/workflow": "^4.2.16"
"@adobe/react-spectrum": "^3.42.2",
"react-aria-components": "^1.10.1",
"@spectrum-icons/illustrations": "^3.6.23",
"@spectrum-icons/workflow": "^4.2.22"
},
"devDependencies": {
"@geti/config": "*",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^15.0.7",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^29.5.14",
"eslint": "^9.25.1",
"eslint": "^9.31.0",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.11.0",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jest": "^28.14.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-playwright": "^2.2.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"jest": "^29.7.0",
"typescript": "^5.7.2"
"typescript": "^5.8.3"
},
"scripts": {
"test:unit": "jest --config jest.config.js --watchAll=false",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
// Copyright (C) 2022-2025 Intel Corporation
// LIMITED EDGE SOFTWARE DISTRIBUTION LICENSE

import { fireEvent, screen } from '@testing-library/react';
import { userEvent } from '@testing-library/user-event';
import { screen } from '@testing-library/react';
import { User } from '@react-aria/test-utils';
import { useNavigate } from 'react-router-dom';

import { DOMAIN } from '../../../../../../core/projects/core.interface';
import { createInMemoryProjectService } from '../../../../../../core/projects/services/in-memory-project-service';
import { getMockedDatasetIdentifier } from '../../../../../../test-utils/mocked-items-factory/mocked-identifiers';
import { getMockedProject } from '../../../../../../test-utils/mocked-items-factory/mocked-project';
import { getMockedTask } from '../../../../../../test-utils/mocked-items-factory/mocked-tasks';
import { simulateDesktop } from '../../../../../../test-utils/utils';
import { useDataset } from '../../../../providers/dataset-provider/dataset-provider.component';
import { annotatorRender } from '../../../../test-utils/annotator-render';
import { DatasetPicker } from './dataset-picker.component';
Expand All @@ -29,6 +30,16 @@ jest.mock('react-router-dom', () => ({
}));

describe('DatasetPicker', () => {
const testUtilUser = new User();

beforeAll(() => {
simulateDesktop();
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function sets the view's height and width. It is required due to the picker's virtualization.

});

afterAll(() => {
jest.restoreAllMocks();
});

const mockUseDataset = (isInActiveMode = true) => {
// @ts-expect-error We're only interested in mocking properties used by DatasetPicker
jest.mocked(useDataset).mockImplementation(() => ({
Expand All @@ -49,12 +60,11 @@ describe('DatasetPicker', () => {

expect(screen.queryByRole('option', { hidden: true, name: 'Active set', selected: true })).toBeInTheDocument();

fireEvent.click(screen.getByRole('button', { name: /Choose annotation dataset/ }));
const picker = screen.getByRole('button', { name: /Choose annotation dataset/ });
const selectTester = testUtilUser.createTester('Select', { root: picker });
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to the documentation, this is the recommended way to interact with the picker https://react-spectrum.adobe.com/react-spectrum/Picker.html#testing


await userEvent.selectOptions(
screen.getByRole('listbox'),
screen.getByRole('option', { name: 'In memory dataset' })
);
await selectTester.open();
await selectTester.selectOption({ option: 'In memory dataset' });

expect(mockPush).toHaveBeenCalledWith(
'/organizations/organization-id/workspaces/workspace-id/projects/project-id/datasets/in-memory-dataset/annotator'
Expand All @@ -68,9 +78,11 @@ describe('DatasetPicker', () => {

await annotatorRender(<DatasetPicker />, { datasetIdentifier });

fireEvent.click(screen.getByRole('button', { name: /Choose annotation dataset/ }));
const picker = screen.getByRole('button', { name: /Choose annotation dataset/ });
const selectTester = testUtilUser.createTester('Select', { root: picker });

await userEvent.selectOptions(screen.getByRole('listbox'), screen.getByRole('option', { name: 'Active set' }));
await selectTester.open();
await selectTester.selectOption({ option: 'Active set' });

expect(mockPush).toHaveBeenCalledWith(
'/organizations/organization-id/workspaces/workspace-id/projects/project-id/datasets/in-memory-dataset/annotator?active=true'
Expand All @@ -89,9 +101,11 @@ describe('DatasetPicker', () => {
],
});

fireEvent.click(screen.getByRole('button', { name: /Choose annotation dataset/ }));
const picker = screen.getByRole('button', { name: /Choose annotation dataset/ });
const selectTester = testUtilUser.createTester('Select', { root: picker });

await userEvent.selectOptions(screen.getByRole('listbox'), screen.getByRole('option', { name: 'Active set' }));
await selectTester.open();
await selectTester.selectOption({ option: 'Active set' });

expect(mockPush).toHaveBeenCalledWith(
'/organizations/organization-id/workspaces/workspace-id/projects/project-id/datasets/in-memory-dataset/annotator?task_id=task&active=true'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { getMockedAnnotation } from '../../../../test-utils/mocked-items-factory
import { getMockedLabel } from '../../../../test-utils/mocked-items-factory/mocked-labels';
import { getMockedTask, mockedTaskContextProps } from '../../../../test-utils/mocked-items-factory/mocked-tasks';
import { projectRender as render } from '../../../../test-utils/project-provider-render';
import { checkTooltip } from '../../../../test-utils/utils';
import { checkTooltip, simulateDesktop } from '../../../../test-utils/utils';
import {
useStreamingVideoPlayer,
VideoPlayerPlayerContextProps,
Expand Down Expand Up @@ -153,6 +153,10 @@ const noObjectPrediction = getMockedAnnotation(
);

describe('ExplanationSecondaryToolbar', () => {
beforeAll(() => {
simulateDesktop();
});

beforeEach(() => {
jest.useRealTimers();

Expand Down
Loading
Loading