From 2d3f837635d3d4429dc59bc4cbf06fdd38fca965 Mon Sep 17 00:00:00 2001 From: Tal Koren Date: Sun, 28 Jun 2026 12:34:39 +0300 Subject: [PATCH 1/5] chore: upgrade dev dependencies to React 18.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upgrade devDependencies across all packages to React 18.2 while keeping peerDependencies at >=16.9.0 for consumer compatibility. No source code changes — library remains compatible with React 16/17/18. - Bump react/react-dom devDeps from ^16.x to ^18.2.0 (16 packages) - Upgrade @testing-library/react from ^12 to ^14 - Remove deprecated @testing-library/react-hooks (merged into @testing-library/react) - Remove @hot-loader/react-dom (unused with Vite tooling) - Bump react-is to ^18.2.0 - Fix act() wrapping in tests for React 18 automatic batching - Update snapshots for React 18 output --- packages/base/package.json | 8 +- packages/components/button/package.json | 8 +- packages/components/clickable/package.json | 8 +- packages/components/dialog/package.json | 9 +- .../src/Dialog/__tests__/Dialog.test.tsx | 277 +++++++++++------- .../Dialog/__tests__/useDisableScroll.test.ts | 2 +- .../Refable/__tests__/Refable.test.tsx | 3 +- .../hooks/__tests__/useDisableScroll.test.ts | 2 +- packages/components/icon-button/package.json | 8 +- .../IconButton/__tests__/IconButton.test.tsx | 18 +- packages/components/icon/package.json | 4 +- packages/components/layer/package.json | 8 +- packages/components/layout/package.json | 8 +- packages/components/loader/package.json | 8 +- packages/components/tooltip/package.json | 8 +- packages/components/typography/package.json | 8 +- packages/core/package.json | 14 +- .../Avatar/__tests__/Avatar.test.tsx | 3 +- .../BreadcrumbItem.snapshot.test.tsx.snap | 20 +- .../__tests__/BreadcrumbMenu.test.tsx | 10 +- .../Chips.snapshot.test.tsx.snap | 40 +-- .../__tests__/ColorPicker.test.tsx | 6 +- .../Combobox/__tests__/Combobox.test.tsx | 30 +- .../Combobox.snapshot.test.tsx.snap | 16 - .../__snapshots__/DatePicker.test.tsx.snap | 16 +- .../GridKeyboardNavigationContext.test.tsx | 2 +- .../Label.snapshot.test.tsx.snap | 8 +- .../__snapshots__/Link.snapshot.test.tsx.snap | 28 +- .../Menu/Menu/__tests__/Menu.test.tsx | 3 +- .../useAdjacentSelectableMenuIndex.test.tsx | 2 +- .../hooks/__tests__/useFocusOnMount.test.tsx | 2 +- .../useLastNavigationDirection.test.tsx | 2 +- .../useFocusGridItemByActiveStatus.test.ts | 2 +- .../useMenuGridItemNavContext.test.ts | 2 +- .../MenuItem.snapshot.test.tsx.snap | 8 +- .../__tests__/useFocusEscapeTargets.test.ts | 2 +- .../__tests__/MultiStepIndicator.test.tsx | 3 +- .../__tests__/useNumberFieldState.test.ts | 2 +- .../__tests__/useSpinButtonHandlers.test.ts | 2 +- .../RadioButton.snapshot.test.tsx.snap | 9 - .../__tests__/Slider-non-ranged.test.tsx | 142 ++++----- .../Slider/__tests__/Slider-ranged.test.tsx | 170 +++++------ .../__snapshots__/Slider-ranged.test.tsx.snap | 68 ++--- .../Slider/__tests__/sliderTestUtils.tsx | 18 +- .../__tests__/SplitButton.test.tsx | 33 ++- .../components/Steps/__tests__/Steps.test.tsx | 3 +- .../Tabs/Tab/__tests__/Tab.test.tsx | 7 +- .../__tests__/TextField-tests.test.tsx | 29 +- .../TextWithHighlight.test.tsx.snap | 4 +- .../Tipseen/__tests__/Tipseen.test.tsx | 9 +- .../components/Toast/__tests__/Toast.test.tsx | 3 +- .../hooks/__tests__/useDebounceEvent.test.ts | 4 +- .../hooks/__tests__/useEventListener.test.ts | 3 +- .../src/hooks/__tests__/useKeyEvent.test.ts | 3 +- .../useActiveDescendantListFocus.test.ts | 2 +- .../__tests__/useAfterFirstRender.test.tsx | 2 +- .../useGridKeyboardNavigation.test.ts | 3 +- .../useSetFocus/__tests__/useSetFocus.test.ts | 2 +- .../useSwitch/__tests__/useSwitch.test.ts | 6 +- .../useWizard/__tests__/useWizard.test.ts | 2 +- packages/docs/package.json | 12 +- packages/hooks/package.json | 9 +- .../__tests__/useClickOutside.test.ts | 3 +- packages/shared/package.json | 4 +- packages/storybook-blocks/package.json | 8 +- yarn.lock | 157 +++++----- 66 files changed, 611 insertions(+), 714 deletions(-) diff --git a/packages/base/package.json b/packages/base/package.json index 64b96a9880..ba2f57d007 100644 --- a/packages/base/package.json +++ b/packages/base/package.json @@ -43,12 +43,12 @@ "classnames": "^2.5.1" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^13.5.0", "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/button/package.json b/packages/components/button/package.json index 14bca2e0c3..12ac23dc7b 100644 --- a/packages/components/button/package.json +++ b/packages/components/button/package.json @@ -46,12 +46,12 @@ "es-toolkit": "^1.39.10" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@vibe/config": "4.0.2", "@vibe/icons": "4.1.0", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/clickable/package.json b/packages/components/clickable/package.json index e40f154e2c..dc3b58ee51 100644 --- a/packages/components/clickable/package.json +++ b/packages/components/clickable/package.json @@ -44,12 +44,12 @@ "es-toolkit": "^1.39.10" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^13.5.0", "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/dialog/package.json b/packages/components/dialog/package.json index fce8297af7..45c1abd258 100644 --- a/packages/components/dialog/package.json +++ b/packages/components/dialog/package.json @@ -48,14 +48,13 @@ "react-transition-group": "^4.4.5" }, "devDependencies": { - "@testing-library/react": "^12.1.2", - "@testing-library/react-hooks": "^7.0.2", + "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^13.5.0", "@types/react-transition-group": "^4.4.5", "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/dialog/src/Dialog/__tests__/Dialog.test.tsx b/packages/components/dialog/src/Dialog/__tests__/Dialog.test.tsx index 37e682c104..28563365be 100644 --- a/packages/components/dialog/src/Dialog/__tests__/Dialog.test.tsx +++ b/packages/components/dialog/src/Dialog/__tests__/Dialog.test.tsx @@ -1,7 +1,7 @@ import { vi, describe, it, expect, beforeEach, afterEach } from "vitest"; import React from "react"; import userEvent from "@testing-library/user-event"; -import { render, screen, waitFor, within } from "@testing-library/react"; +import { render, screen, within, act } from "@testing-library/react"; import Dialog, { type DialogProps } from "../Dialog"; function renderVisibleDialogOnMount(dialogProps: DialogProps) { @@ -30,26 +30,31 @@ describe("Dialog tests", () => { expect(onClickOutsideMock).toBeCalled(); }); - it("should not call onClickOutside callback when clicking inside the dialog", async () => { + it("should not call onClickOutside callback when clicking inside the dialog", () => { const onClickOutsideMock = vi.fn(); renderVisibleDialogOnMount({ onClickOutside: onClickOutsideMock, content:
Dialog
}); - const dialog = await screen.findByText("Dialog"); + act(() => { + vi.runAllTimers(); + }); + const dialog = screen.getByText("Dialog"); userEvent.click(dialog); expect(onClickOutsideMock).not.toBeCalled(); }); - it("should call onDialogDidShow callback when dialog is shown", async () => { + it("should call onDialogDidShow callback when dialog is shown", () => { const onDialogDidShowMock = vi.fn(); renderVisibleDialogOnMount({ onDialogDidShow: onDialogDidShowMock, content:
Dialog
, shouldCallbackOnMount: true }); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); expect(onDialogDidShowMock).toBeCalled(); }); - it("should call onDialogDidHide callback when dialog is hidden", async () => { + it("should call onDialogDidHide callback when dialog is hidden", () => { const onDialogDidHideMock = vi.fn(); const { container } = render( { ); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); const button = within(container).getByText("Toggle"); - await userEvent.click(button); - vi.runAllTimers(); - await waitFor(() => expect(onDialogDidHideMock).toBeCalled()); + userEvent.click(button); + act(() => { + vi.runAllTimers(); + }); + expect(onDialogDidHideMock).toBeCalled(); }); - it("should call onContentClick callback when clicking inside dialog", async () => { + it("should call onContentClick callback when clicking inside dialog", () => { const onContentClickMock = vi.fn(); renderVisibleDialogOnMount({ onContentClick: onContentClickMock, content:
Dialog Content
}); - const dialog = await screen.findByText("Dialog Content"); - await userEvent.click(dialog); + act(() => { + vi.runAllTimers(); + }); + const dialog = screen.getByText("Dialog Content"); + userEvent.click(dialog); expect(onContentClickMock).toBeCalled(); }); }); describe("Show/Hide Triggers", () => { - it("should show dialog on click when showTrigger is click", async () => { + it("should show dialog on click when showTrigger is click", () => { const { container } = render( Dialog Content}> @@ -90,13 +102,15 @@ describe("Dialog tests", () => { expect(screen.queryByText("Dialog Content")).not.toBeInTheDocument(); const button = within(container).getByText("Click Me"); - await userEvent.click(button); - vi.runAllTimers(); + userEvent.click(button); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Dialog Content")).toBeInTheDocument()); + expect(screen.getByText("Dialog Content")).toBeInTheDocument(); }); - it("should show dialog on mouseenter when showTrigger is mouseenter", async () => { + it("should show dialog on mouseenter when showTrigger is mouseenter", () => { const { container } = render( Hover Content}>
Hover Me
@@ -106,13 +120,15 @@ describe("Dialog tests", () => { expect(screen.queryByText("Hover Content")).not.toBeInTheDocument(); const trigger = within(container).getByText("Hover Me"); - await userEvent.hover(trigger); - vi.runAllTimers(); + userEvent.hover(trigger); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Hover Content")).toBeInTheDocument()); + expect(screen.getByText("Hover Content")).toBeInTheDocument(); }); - it("should show dialog on focus when showTrigger is focus", async () => { + it("should show dialog on focus when showTrigger is focus", () => { const { container } = render( Focus Content}> @@ -122,13 +138,15 @@ describe("Dialog tests", () => { expect(screen.queryByText("Focus Content")).not.toBeInTheDocument(); const input = within(container).getByPlaceholderText("Focus Me"); - input.focus(); - vi.runAllTimers(); + act(() => { + input.focus(); + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Focus Content")).toBeInTheDocument()); + expect(screen.getByText("Focus Content")).toBeInTheDocument(); }); - it("should hide dialog on mouseleave when hideTrigger is mouseleave", async () => { + it("should hide dialog on mouseleave when hideTrigger is mouseleave", () => { const { container } = render( {
Hover Me
); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Hover Content")).toBeInTheDocument()); + expect(screen.getByText("Hover Content")).toBeInTheDocument(); const trigger = within(container).getByText("Hover Me"); - await userEvent.unhover(trigger); - vi.runAllTimers(); + userEvent.unhover(trigger); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.queryByText("Hover Content")).not.toBeInTheDocument()); + expect(screen.queryByText("Hover Content")).not.toBeInTheDocument(); }); - it("should hide dialog on blur when hideTrigger is blur", async () => { + it("should hide dialog on blur when hideTrigger is blur", () => { const onDialogDidHideMock = vi.fn(); const { container } = render( { ); - await waitFor(() => expect(screen.getByText("Focus Content")).toBeInTheDocument()); + act(() => { + vi.runAllTimers(); + }); + expect(screen.getByText("Focus Content")).toBeInTheDocument(); const input = within(container).getByPlaceholderText("Focus Me"); - input.focus(); - - // Trigger blur by focusing something else - await userEvent.tab(); + act(() => { + input.focus(); + input.blur(); + vi.runAllTimers(); + }); - await waitFor(() => expect(onDialogDidHideMock).toBeCalled()); + expect(onDialogDidHideMock).toBeCalled(); }); }); describe("Keyboard Interactions", () => { - it("should hide dialog on Escape key when hideTrigger includes esckey", async () => { + it("should hide dialog on Escape key when hideTrigger includes esckey", () => { render( Press Escape}> ); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Press Escape")).toBeInTheDocument()); + expect(screen.getByText("Press Escape")).toBeInTheDocument(); - await userEvent.keyboard("{Escape}"); - vi.runAllTimers(); + userEvent.keyboard("{Escape}"); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.queryByText("Press Escape")).not.toBeInTheDocument()); + expect(screen.queryByText("Press Escape")).not.toBeInTheDocument(); }); - it("should trigger enter event on Enter key", async () => { + it("should trigger enter event on Enter key", () => { const onDialogDidHideMock = vi.fn(); const { container } = render( { ); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Press Enter")).toBeInTheDocument()); + expect(screen.getByText("Press Enter")).toBeInTheDocument(); const button = within(container).getByText("Toggle"); - button.focus(); - await userEvent.keyboard("{Enter}"); - vi.runAllTimers(); + act(() => { + button.focus(); + }); + userEvent.keyboard("{Enter}"); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(onDialogDidHideMock).toBeCalled()); + expect(onDialogDidHideMock).toBeCalled(); }); }); describe("Delay Behavior", () => { - it("should respect showDelay when showing dialog", async () => { + it("should respect showDelay when showing dialog", () => { const onDialogDidShowMock = vi.fn(); const { container } = render( { ); const button = within(container).getByText("Click"); - await userEvent.click(button); + userEvent.click(button); - // Should not show immediately expect(onDialogDidShowMock).not.toBeCalled(); - // Advance timers by 500ms - vi.advanceTimersByTime(500); + act(() => { + vi.advanceTimersByTime(500); + }); - await waitFor(() => expect(onDialogDidShowMock).toBeCalled()); + expect(onDialogDidShowMock).toBeCalled(); }); - it("should respect hideDelay when hiding dialog", async () => { + it("should respect hideDelay when hiding dialog", () => { const onDialogDidHideMock = vi.fn(); const { container } = render( { ); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); const button = within(container).getByText("Click"); - await userEvent.click(button); + userEvent.click(button); - // Should not hide immediately expect(onDialogDidHideMock).not.toBeCalled(); - // Advance timers by 300ms - vi.advanceTimersByTime(300); + act(() => { + vi.advanceTimersByTime(300); + }); - await waitFor(() => expect(onDialogDidHideMock).toBeCalled()); + expect(onDialogDidHideMock).toBeCalled(); }); - it("should cancel show timeout when hiding is triggered", async () => { + it("should cancel show timeout when hiding is triggered", () => { const onDialogDidShowMock = vi.fn(); const { container } = render( { const trigger = within(container).getByText("Hover Me"); - // Start hovering - await userEvent.hover(trigger); - vi.advanceTimersByTime(200); + userEvent.hover(trigger); + act(() => { + vi.advanceTimersByTime(200); + }); - // Stop hovering before showDelay completes - await userEvent.unhover(trigger); - vi.runAllTimers(); + userEvent.unhover(trigger); + act(() => { + vi.runAllTimers(); + }); - // Should not have shown expect(onDialogDidShowMock).not.toBeCalled(); }); }); describe("Controlled Mode", () => { - it("should show dialog when open prop is true", async () => { + it("should show dialog when open prop is true", () => { render( Controlled Open}> ); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Controlled Open")).toBeInTheDocument()); + expect(screen.getByText("Controlled Open")).toBeInTheDocument(); }); - it("should hide dialog when open prop is false", async () => { + it("should hide dialog when open prop is false", () => { const { rerender } = render( Controlled}> ); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Controlled")).toBeInTheDocument()); + expect(screen.getByText("Controlled")).toBeInTheDocument(); rerender( Controlled}> ); + act(() => { + vi.runAllTimers(); + }); expect(screen.queryByText("Controlled")).not.toBeInTheDocument(); }); }); describe("Positioning", () => { - it("should render dialog with top position", async () => { + it("should render dialog with top position", () => { renderVisibleDialogOnMount({ position: "top", content:
Top Dialog
}); + act(() => { + vi.runAllTimers(); + }); - const dialogContent = await screen.findByTestId("dialog-content"); - expect(dialogContent).toBeInTheDocument(); + expect(screen.getByTestId("dialog-content")).toBeInTheDocument(); }); - it("should render dialog with bottom position", async () => { + it("should render dialog with bottom position", () => { renderVisibleDialogOnMount({ position: "bottom", content:
Bottom Dialog
}); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Bottom Dialog")).toBeInTheDocument()); + expect(screen.getByText("Bottom Dialog")).toBeInTheDocument(); }); - it("should render dialog with left position", async () => { + it("should render dialog with left position", () => { renderVisibleDialogOnMount({ position: "left", content:
Left Dialog
}); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Left Dialog")).toBeInTheDocument()); + expect(screen.getByText("Left Dialog")).toBeInTheDocument(); }); - it("should render dialog with right position", async () => { + it("should render dialog with right position", () => { renderVisibleDialogOnMount({ position: "right", content:
Right Dialog
}); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Right Dialog")).toBeInTheDocument()); + expect(screen.getByText("Right Dialog")).toBeInTheDocument(); }); }); describe("Disable Prop", () => { - it("should not show dialog when disable is true", async () => { + it("should not show dialog when disable is true", () => { const { container } = render( Disabled Dialog}> @@ -372,38 +431,46 @@ describe("Dialog tests", () => { ); const button = within(container).getByText("Click"); - await userEvent.click(button); - vi.runAllTimers(); + userEvent.click(button); + act(() => { + vi.runAllTimers(); + }); expect(screen.queryByText("Disabled Dialog")).not.toBeInTheDocument(); }); }); describe("Animation", () => { - it("should apply expand animation by default", async () => { + it("should apply expand animation by default", () => { renderVisibleDialogOnMount({ content:
Animated
}); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Animated")).toBeInTheDocument()); + expect(screen.getByText("Animated")).toBeInTheDocument(); }); - it("should apply opacity-and-slide animation when specified", async () => { + it("should apply opacity-and-slide animation when specified", () => { renderVisibleDialogOnMount({ animationType: "opacity-and-slide", content:
Slide Animated
}); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("Slide Animated")).toBeInTheDocument()); + expect(screen.getByText("Slide Animated")).toBeInTheDocument(); }); - it("should prevent animation on mount when preventAnimationOnMount is true", async () => { + it("should prevent animation on mount when preventAnimationOnMount is true", () => { renderVisibleDialogOnMount({ preventAnimationOnMount: true, content:
No Animation
}); - vi.runAllTimers(); + act(() => { + vi.runAllTimers(); + }); - await waitFor(() => expect(screen.getByText("No Animation")).toBeInTheDocument()); + expect(screen.getByText("No Animation")).toBeInTheDocument(); }); }); describe("Event Handler Chaining", () => { - it("should chain onClick handlers", async () => { + it("should chain onClick handlers", () => { const dialogOnClickMock = vi.fn(); const childOnClickMock = vi.fn(); @@ -416,13 +483,13 @@ describe("Dialog tests", () => { ); const button = within(container).getByText("Click Both"); - await userEvent.click(button); + userEvent.click(button); expect(dialogOnClickMock).toBeCalled(); expect(childOnClickMock).toBeCalled(); }); - it("should chain onMouseEnter handlers", async () => { + it("should chain onMouseEnter handlers", () => { const dialogOnMouseEnterMock = vi.fn(); const childOnMouseEnterMock = vi.fn(); @@ -433,7 +500,7 @@ describe("Dialog tests", () => { ); const trigger = within(container).getByText("Hover"); - await userEvent.hover(trigger); + userEvent.hover(trigger); expect(dialogOnMouseEnterMock).toBeCalled(); expect(childOnMouseEnterMock).toBeCalled(); @@ -441,7 +508,7 @@ describe("Dialog tests", () => { }); describe("Instant Show and Hide", () => { - it("should show and hide instantly when instantShowAndHide is true", async () => { + it("should show and hide instantly when instantShowAndHide is true", () => { const onDialogDidShowMock = vi.fn(); const onDialogDidHideMock = vi.fn(); @@ -460,12 +527,10 @@ describe("Dialog tests", () => { const button = within(container).getByText("Toggle"); - // Show - await userEvent.click(button); + userEvent.click(button); expect(onDialogDidShowMock).toBeCalled(); - // Hide - await userEvent.click(button); + userEvent.click(button); expect(onDialogDidHideMock).toBeCalled(); }); }); diff --git a/packages/components/dialog/src/Dialog/__tests__/useDisableScroll.test.ts b/packages/components/dialog/src/Dialog/__tests__/useDisableScroll.test.ts index 68af306698..bfa91c3423 100644 --- a/packages/components/dialog/src/Dialog/__tests__/useDisableScroll.test.ts +++ b/packages/components/dialog/src/Dialog/__tests__/useDisableScroll.test.ts @@ -1,5 +1,5 @@ import { vi, beforeEach, afterEach, describe, expect, type MockInstance } from "vitest"; -import { renderHook } from "@testing-library/react-hooks"; +import { renderHook } from "@testing-library/react"; import useDisableScroll from "../hooks/useDisableScroll"; describe("useDisableScroll", () => { diff --git a/packages/components/dialog/src/Dialog/components/Refable/__tests__/Refable.test.tsx b/packages/components/dialog/src/Dialog/components/Refable/__tests__/Refable.test.tsx index 7ec9e53fe1..68ec87d10e 100644 --- a/packages/components/dialog/src/Dialog/components/Refable/__tests__/Refable.test.tsx +++ b/packages/components/dialog/src/Dialog/components/Refable/__tests__/Refable.test.tsx @@ -1,7 +1,6 @@ import { vi, afterEach, describe, it, expect } from "vitest"; import React from "react"; -import { cleanup } from "@testing-library/react-hooks"; -import { fireEvent, render } from "@testing-library/react"; +import { fireEvent, render, cleanup } from "@testing-library/react"; import { Refable } from "../Refable"; describe("Refable", () => { diff --git a/packages/components/dialog/src/Dialog/hooks/__tests__/useDisableScroll.test.ts b/packages/components/dialog/src/Dialog/hooks/__tests__/useDisableScroll.test.ts index d79c643547..712049d879 100644 --- a/packages/components/dialog/src/Dialog/hooks/__tests__/useDisableScroll.test.ts +++ b/packages/components/dialog/src/Dialog/hooks/__tests__/useDisableScroll.test.ts @@ -1,5 +1,5 @@ import { vi, beforeEach, afterEach, describe, expect, type MockInstance } from "vitest"; -import { renderHook } from "@testing-library/react-hooks"; +import { renderHook } from "@testing-library/react"; import useDisableScroll from "../useDisableScroll"; describe("useDisableScroll", () => { diff --git a/packages/components/icon-button/package.json b/packages/components/icon-button/package.json index 45353d6ac0..39a2d3892c 100644 --- a/packages/components/icon-button/package.json +++ b/packages/components/icon-button/package.json @@ -47,11 +47,11 @@ "es-toolkit": "^1.39.10" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/icon-button/src/IconButton/__tests__/IconButton.test.tsx b/packages/components/icon-button/src/IconButton/__tests__/IconButton.test.tsx index d2bafd5839..2f5aaf30fe 100644 --- a/packages/components/icon-button/src/IconButton/__tests__/IconButton.test.tsx +++ b/packages/components/icon-button/src/IconButton/__tests__/IconButton.test.tsx @@ -35,21 +35,21 @@ describe("IconButton tests", () => { }); describe("Tooltips", () => { - it("should display the tooltip content", async () => { + it("should display the tooltip content", () => { const tooltipContent = "My Text"; renderComponent({ tooltipContent }); const component = screen.getByLabelText(ariaLabel); act(() => { fireEvent.mouseEnter(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); const content = screen.getByText(tooltipContent); expect(content).toBeTruthy(); act(() => { fireEvent.mouseLeave(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); }); it("should display the tooltip with aria label", () => { @@ -57,14 +57,14 @@ describe("IconButton tests", () => { const component = screen.getByLabelText(ariaLabel); act(() => { fireEvent.mouseEnter(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); const content = screen.getByText(ariaLabel); expect(content).toBeTruthy(); act(() => { fireEvent.mouseLeave(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); }); it("should display not disabledReason if disabled is false", () => { @@ -74,14 +74,14 @@ describe("IconButton tests", () => { const component = screen.getByLabelText(ariaLabel); act(() => { fireEvent.mouseEnter(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); const content = screen.queryByText(disabledReason); expect(content).toBeFalsy(); act(() => { fireEvent.mouseLeave(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); }); it("should display disabledReason if disabled is true", () => { @@ -91,14 +91,14 @@ describe("IconButton tests", () => { const component = screen.getByLabelText(ariaLabel); act(() => { fireEvent.mouseEnter(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); const content = screen.queryByText(disabledReason); expect(content).toBeTruthy(); act(() => { fireEvent.mouseLeave(component); + vi.advanceTimersByTime(1000); }); - vi.advanceTimersByTime(1000); }); }); diff --git a/packages/components/icon/package.json b/packages/components/icon/package.json index e145354104..e336596cd2 100644 --- a/packages/components/icon/package.json +++ b/packages/components/icon/package.json @@ -45,8 +45,8 @@ }, "devDependencies": { "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/layer/package.json b/packages/components/layer/package.json index 909968556e..9a05afabbb 100644 --- a/packages/components/layer/package.json +++ b/packages/components/layer/package.json @@ -45,12 +45,12 @@ "es-toolkit": "^1.39.10" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@vibe/config": "4.0.2", "@vibe/icons": "4.1.0", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/layout/package.json b/packages/components/layout/package.json index a5541cf9c7..85f34dfd20 100644 --- a/packages/components/layout/package.json +++ b/packages/components/layout/package.json @@ -45,11 +45,11 @@ "es-toolkit": "^1.39.10" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/loader/package.json b/packages/components/loader/package.json index 22d614141f..a5f8c3f52c 100644 --- a/packages/components/loader/package.json +++ b/packages/components/loader/package.json @@ -42,11 +42,11 @@ "classnames": "^2.5.1" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/tooltip/package.json b/packages/components/tooltip/package.json index bd4186ee71..62e3364b20 100644 --- a/packages/components/tooltip/package.json +++ b/packages/components/tooltip/package.json @@ -47,12 +47,12 @@ "es-toolkit": "^1.39.10" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@vibe/config": "4.0.2", "@vibe/icons": "4.1.0", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/components/typography/package.json b/packages/components/typography/package.json index 06756b7bd7..c850884c99 100644 --- a/packages/components/typography/package.json +++ b/packages/components/typography/package.json @@ -45,11 +45,11 @@ "es-toolkit": "^1.39.10" }, "devDependencies": { - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^14.0.0", "@vibe/config": "4.0.2", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "16", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "typescript": "^5.9.3", "vitest": "^1.6.0" }, diff --git a/packages/core/package.json b/packages/core/package.json index b92f663bb3..863021d9e4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -113,7 +113,7 @@ "react-day-picker": "^8.10.2", "react-focus-lock": "^2.13.2", "react-inlinesvg": "^4.1.3", - "react-is": "^16.9.0", + "react-is": "^18.2.0", "react-remove-scroll": "^2.6.0", "react-transition-group": "^4.4.5", "react-virtualized-auto-sizer": "^1.0.7", @@ -137,7 +137,6 @@ "@babel/standalone": "^7.24.4", "@babel/traverse": "^7.24.4", "@babel/types": "^7.24.0", - "@hot-loader/react-dom": "^16.13.0", "@jest/transform": "^29.7.0", "@rollup/plugin-babel": "^6.0.2", "@rollup/plugin-commonjs": "^23.0.2", @@ -167,8 +166,7 @@ "@storybook/testing-library": "^0.2.2", "@storybook/theming": "^8.6.15", "@testing-library/jest-dom": "^6.4.6", - "@testing-library/react": "^12.1.2", - "@testing-library/react-hooks": "^7.0.2", + "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^13.5.0", "@types/babel__standalone": "^7.1.7", "@types/jest-axe": "^3.5.9", @@ -176,7 +174,7 @@ "@types/react-is": "^16.7.5", "@types/react-resizable": "^3.0.7", "@types/react-syntax-highlighter": "^11.0.5", - "@types/react-test-renderer": "^16.9.0", + "@types/react-test-renderer": "^18.0.0", "@types/react-transition-group": "^4.4.5", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", @@ -229,13 +227,13 @@ "postcss-scss": "^4.0.2", "preact": "^10.8.0", "prettier": "^2.5.1", - "react": "^16.14.0", + "react": "^18.2.0", "react-docgen-typescript": "^2.2.2", - "react-dom": "^16.14.0", + "react-dom": "^18.2.0", "react-live": "^4.1.5", "react-resizable": "^3.0.4", "react-syntax-highlighter": "^15.5.0", - "react-test-renderer": "^16.14.0", + "react-test-renderer": "^18.2.0", "remark-gfm": "^4.0.0", "resolve-url-loader": "^5.0.0", "rollup": "^2.79.1", diff --git a/packages/core/src/components/Avatar/__tests__/Avatar.test.tsx b/packages/core/src/components/Avatar/__tests__/Avatar.test.tsx index 7edf6bf68d..6e3047ecc5 100644 --- a/packages/core/src/components/Avatar/__tests__/Avatar.test.tsx +++ b/packages/core/src/components/Avatar/__tests__/Avatar.test.tsx @@ -1,7 +1,6 @@ import { vi, afterEach, describe, it, expect } from "vitest"; import React from "react"; -import { cleanup } from "@testing-library/react-hooks"; -import { fireEvent, render } from "@testing-library/react"; +import { fireEvent, render, cleanup } from "@testing-library/react"; import Avatar, { type AvatarProps } from "../Avatar"; import { ComponentDefaultTestId } from "../../../tests/constants"; diff --git a/packages/core/src/components/BreadcrumbsBar/BreadcrumbItem/__tests__/__snapshots__/BreadcrumbItem.snapshot.test.tsx.snap b/packages/core/src/components/BreadcrumbsBar/BreadcrumbItem/__tests__/__snapshots__/BreadcrumbItem.snapshot.test.tsx.snap index d977871ed4..3806883c13 100644 --- a/packages/core/src/components/BreadcrumbsBar/BreadcrumbItem/__tests__/__snapshots__/BreadcrumbItem.snapshot.test.tsx.snap +++ b/packages/core/src/components/BreadcrumbsBar/BreadcrumbItem/__tests__/__snapshots__/BreadcrumbItem.snapshot.test.tsx.snap @@ -19,9 +19,7 @@ exports[`BreadcrumbsItem renders correctly > when disabled item 1`] = ` > - - + /> @@ -47,9 +45,7 @@ exports[`BreadcrumbsItem renders correctly > with className 1`] = ` > - - + /> @@ -76,9 +72,7 @@ exports[`BreadcrumbsItem renders correctly > with current item 1`] = ` > - - + /> @@ -104,9 +98,7 @@ exports[`BreadcrumbsItem renders correctly > with empty props 1`] = ` > - - + /> @@ -147,9 +139,7 @@ exports[`BreadcrumbsItem renders correctly > with icon 1`] = ` - - + /> diff --git a/packages/core/src/components/BreadcrumbsBar/BreadcrumbMenu/__tests__/BreadcrumbMenu.test.tsx b/packages/core/src/components/BreadcrumbsBar/BreadcrumbMenu/__tests__/BreadcrumbMenu.test.tsx index 4ed2855059..4b845c1356 100644 --- a/packages/core/src/components/BreadcrumbsBar/BreadcrumbMenu/__tests__/BreadcrumbMenu.test.tsx +++ b/packages/core/src/components/BreadcrumbsBar/BreadcrumbMenu/__tests__/BreadcrumbMenu.test.tsx @@ -1,6 +1,6 @@ import { vi, beforeEach, afterEach, describe, it, expect } from "vitest"; import React from "react"; -import { fireEvent, render, screen, waitFor } from "@testing-library/react"; +import { fireEvent, render, screen } from "@testing-library/react"; import { act } from "react-dom/test-utils"; import BreadcrumbsBar from "../../BreadcrumbsBar"; import BreadcrumbMenu from "../BreadcrumbMenu"; @@ -31,7 +31,7 @@ describe("BreadcrumbMenu tests", () => { vi.clearAllMocks(); }); - it("should open menu when clicked", async () => { + it("should open menu when clicked", () => { const { getByRole, queryByText } = render( @@ -50,10 +50,8 @@ describe("BreadcrumbMenu tests", () => { vi.runAllTimers(); }); - await waitFor(() => { - expect(screen.getByText("Option 1")).toBeInTheDocument(); - expect(screen.getByText("Option 2")).toBeInTheDocument(); - }); + expect(screen.getByText("Option 1")).toBeInTheDocument(); + expect(screen.getByText("Option 2")).toBeInTheDocument(); }); it("should pass onClick handlers to MenuItem", () => { diff --git a/packages/core/src/components/Chips/__tests__/__snapshots__/Chips.snapshot.test.tsx.snap b/packages/core/src/components/Chips/__tests__/__snapshots__/Chips.snapshot.test.tsx.snap index 015e3186ec..8579919fd9 100644 --- a/packages/core/src/components/Chips/__tests__/__snapshots__/Chips.snapshot.test.tsx.snap +++ b/packages/core/src/components/Chips/__tests__/__snapshots__/Chips.snapshot.test.tsx.snap @@ -18,9 +18,7 @@ exports[`Chips renders correctly > renders correctly disabled chip 1`] = `
- -
+ /> `; @@ -69,9 +67,7 @@ exports[`Chips renders correctly > renders correctly with color 1`] = `
- -
+ />