From 9cec3eca06b5cc1e65dacdcf514b7b99e4c6908d Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 21 Aug 2025 14:27:44 +0200 Subject: [PATCH 01/14] refactor: update Switch component tests to use React Testing Library --- .../src/__tests__/Switch.spec.tsx | 122 +++++++----------- 1 file changed, 47 insertions(+), 75 deletions(-) diff --git a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx index 4c38f64ec..47c5a738c 100644 --- a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx +++ b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx @@ -2,14 +2,11 @@ * @jest-environment jsdom */ import { actionValue, EditableValueBuilder, dynamicValue } from "@mendix/piw-utils-internal"; -import { mount, ReactWrapper } from "enzyme"; +import { render, fireEvent } from "@testing-library/react-native"; import { createElement } from "react"; - import { Switch, Props } from "../Switch"; import { defaultSwitchStyle } from "../ui/Styles"; -declare type RWrapper = ReactWrapper, React.Component<{}, {}, any>>; - const name = "Switch1"; const createProps = (props?: Partial): Props => { const style = props?.style ?? {}; @@ -27,29 +24,20 @@ const createProps = (props?: Partial): Props => { }; describe("Switch", () => { - const switchIndex = 0; let Platform: any; - let switchWrapper: RWrapper; - - function getSwitchComponent() { - return switchWrapper.find({ testID: "Switch1" }).at(switchIndex); - } beforeEach(() => { Platform = require("react-native").Platform; }); - afterEach(() => { - switchWrapper.unmount(); - }); - it("with editable value renders enabled", () => { const props = createProps({ booleanAttribute: new EditableValueBuilder().withValue(false).build() }); - switchWrapper = mount(); - expect(getSwitchComponent().prop("disabled")).toBe(false); + const { getByTestId } = render(); + const switchElement = getByTestId("Switch1"); + expect(switchElement.props.enabled).toBe(true); }); it("with value in readOnly state renders disabled", () => { @@ -57,8 +45,9 @@ describe("Switch", () => { booleanAttribute: new EditableValueBuilder().withValue(false).isReadOnly().build() }); - switchWrapper = mount(); - expect(getSwitchComponent().prop("disabled")).toBe(true); + const { getByTestId } = render(); + const switchElement = getByTestId("Switch1"); + expect(switchElement.props.enabled).toBe(false); }); it("with showLabel true renders label", () => { @@ -66,8 +55,8 @@ describe("Switch", () => { showLabel: true }); - switchWrapper = mount(); - expect(switchWrapper.exists({ testID: `${name}$label` })).toEqual(true); + const { getByTestId } = render(); + expect(getByTestId(`${name}$label`)).toBeTruthy(); }); it("with showLabel true renders label horizontally", () => { @@ -75,13 +64,9 @@ describe("Switch", () => { showLabel: true }); - switchWrapper = mount(); - expect( - switchWrapper - .find({ testID: `${name}$wrapper` }) - .at(1) - .prop("style") - ).toEqual(expect.arrayContaining([{ flexDirection: "row", alignItems: "center" }])); + const { getByTestId } = render(); + const wrapper = getByTestId(`${name}$wrapper`); + expect(wrapper.props.style).toEqual(expect.arrayContaining([{ flexDirection: "row", alignItems: "center" }])); }); it("with showLabel true and labelOrientation vertical, renders vertical", () => { @@ -90,14 +75,11 @@ describe("Switch", () => { labelOrientation: "vertical" }); - switchWrapper = mount(); - - expect( - switchWrapper - .find({ testID: `${name}$wrapper` }) - .at(1) - .prop("style") - ).toEqual(expect.not.arrayContaining([{ flexDirection: "row", alignItems: "center" }])); + const { getByTestId } = render(); + const wrapper = getByTestId(`${name}$wrapper`); + expect(wrapper.props.style).toEqual( + expect.not.arrayContaining([{ flexDirection: "row", alignItems: "center" }]) + ); }); it("with error renders validation message", () => { @@ -105,32 +87,18 @@ describe("Switch", () => { booleanAttribute: new EditableValueBuilder().withValidation("error").withValue(false).build() }); - switchWrapper = mount(); - expect(switchWrapper.prop("booleanAttribute").validation).toEqual("error"); - - expect(switchWrapper.exists({ testID: `${name}$alert` })).toEqual(true); - expect( - switchWrapper - .find({ testID: `${name}$alert` }) - .at(1) - .text() - ).toEqual("error"); - }); - - it("with iOS device renders correct property", () => { - Platform.OS = "ios"; - const props = createProps(); - - switchWrapper = mount(); - expect(getSwitchComponent().props()).toEqual(expect.objectContaining({ ios_backgroundColor: undefined })); + const { getByTestId } = render(); + expect(props.booleanAttribute.validation).toEqual("error"); + expect(getByTestId(`${name}$alert`)).toBeTruthy(); + expect(getByTestId(`${name}$alert`).props.children).toEqual("error"); }); it("with android device renders property", () => { Platform.OS = "android"; const props = createProps(); - switchWrapper = mount(); - expect(getSwitchComponent().prop("ios_backgroundColor")).toBeUndefined(); + const { getByTestId } = render(); + expect(getByTestId("Switch1").props.ios_backgroundColor).toBeUndefined(); }); it("renders correct thumbColor when value is true", () => { @@ -139,8 +107,8 @@ describe("Switch", () => { style: [{ ...defaultSwitchStyle, input: { thumbColorOn: "red" } }] }); - switchWrapper = mount(); - expect(getSwitchComponent().prop("thumbColor")).toEqual("red"); + const { getByTestId } = render(); + expect(getByTestId("Switch1").props.thumbTintColor).toEqual("red"); }); it("renders correct thumbColor when value is false", () => { @@ -149,41 +117,45 @@ describe("Switch", () => { style: [{ ...defaultSwitchStyle, input: { thumbColorOff: "blue" } }] }); - switchWrapper = mount(); - expect(getSwitchComponent().prop("thumbColor")).toEqual("blue"); + const { getByTestId } = render(); + expect(getByTestId("Switch1").props.thumbTintColor).toEqual("blue"); }); describe("interactions", () => { it("invokes onValueChange handler", () => { + const onChange = actionValue(); + const booleanAttribute = new EditableValueBuilder().withValue(false).build(); const props = createProps({ - booleanAttribute: new EditableValueBuilder().withValue(false).build(), - onChange: actionValue() + booleanAttribute, + onChange }); - switchWrapper = mount(); + const { getByTestId } = render(); - expect(switchWrapper.prop("booleanAttribute").value).toBe(false); - expect(switchWrapper.prop("onChange").execute).not.toHaveBeenCalled(); + expect(booleanAttribute.value).toBe(false); + expect(onChange.execute).not.toHaveBeenCalled(); - getSwitchComponent().simulate("change"); + fireEvent(getByTestId("Switch1"), "valueChange", true); - expect(switchWrapper.prop("booleanAttribute").value).toBe(true); - expect(switchWrapper.prop("onChange").execute).toHaveBeenCalled(); + expect(booleanAttribute.value).toBe(true); + expect(onChange.execute).toHaveBeenCalled(); }); it("when disabled, do not invoke onValueChange handler", () => { + const onChange = actionValue(); + const booleanAttribute = new EditableValueBuilder().withValue(false).isReadOnly().build(); const props = createProps({ - booleanAttribute: new EditableValueBuilder().withValue(false).isReadOnly().build(), - onChange: actionValue() + booleanAttribute, + onChange }); - switchWrapper = mount(); + const { getByTestId } = render(); - expect(switchWrapper.prop("booleanAttribute").value).toBe(false); - expect(switchWrapper.prop("onChange").execute).not.toHaveBeenCalled(); + expect(booleanAttribute.value).toBe(false); + expect(onChange.execute).not.toHaveBeenCalled(); - getSwitchComponent().simulate("change"); + fireEvent(getByTestId("Switch1"), "valueChange", true); - expect(switchWrapper.prop("booleanAttribute").value).toBe(false); - expect(switchWrapper.prop("onChange").execute).not.toHaveBeenCalled(); + expect(booleanAttribute.value).toBe(false); + expect(onChange.execute).not.toHaveBeenCalled(); }); }); }); From c2c4abfc76d10a47c7e381841ce42a79cadc1dad Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 21 Aug 2025 15:06:08 +0200 Subject: [PATCH 02/14] test: wrap fireEvent calls in act for Switch component interactions --- .../switch-native/src/__tests__/Switch.spec.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx index 47c5a738c..5f14ca8e3 100644 --- a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx +++ b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx @@ -2,7 +2,7 @@ * @jest-environment jsdom */ import { actionValue, EditableValueBuilder, dynamicValue } from "@mendix/piw-utils-internal"; -import { render, fireEvent } from "@testing-library/react-native"; +import { render, fireEvent, act } from "@testing-library/react-native"; import { createElement } from "react"; import { Switch, Props } from "../Switch"; import { defaultSwitchStyle } from "../ui/Styles"; @@ -134,7 +134,9 @@ describe("Switch", () => { expect(booleanAttribute.value).toBe(false); expect(onChange.execute).not.toHaveBeenCalled(); - fireEvent(getByTestId("Switch1"), "valueChange", true); + act(() => { + fireEvent(getByTestId("Switch1"), "valueChange", true); + }); expect(booleanAttribute.value).toBe(true); expect(onChange.execute).toHaveBeenCalled(); @@ -152,7 +154,9 @@ describe("Switch", () => { expect(booleanAttribute.value).toBe(false); expect(onChange.execute).not.toHaveBeenCalled(); - fireEvent(getByTestId("Switch1"), "valueChange", true); + act(() => { + fireEvent(getByTestId("Switch1"), "valueChange", true); + }); expect(booleanAttribute.value).toBe(false); expect(onChange.execute).not.toHaveBeenCalled(); From 3aeaa57b7ecdb2d20c2bad7a497dba2cddbebd55 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 21 Aug 2025 15:50:33 +0200 Subject: [PATCH 03/14] chore: migrate Maps component tests to use React Testing Library --- .../pluggableWidgets/maps-native/package.json | 2 +- .../maps-native/src/__tests__/Maps.spec.tsx | 57 +++++-- .../__snapshots__/Maps.spec.tsx.snap | 140 +++++++----------- pnpm-lock.yaml | 2 +- 4 files changed, 103 insertions(+), 98 deletions(-) diff --git a/packages/pluggableWidgets/maps-native/package.json b/packages/pluggableWidgets/maps-native/package.json index b4a776b26..20d9d1e72 100644 --- a/packages/pluggableWidgets/maps-native/package.json +++ b/packages/pluggableWidgets/maps-native/package.json @@ -21,7 +21,7 @@ "dependencies": { "@mendix/piw-native-utils-internal": "*", "@mendix/piw-utils-internal": "*", - "prop-types": "^15.7.2", + "prop-types": "^15.8.1", "react-native-geocoder": "0.5.0", "react-native-maps": "1.14.0" }, diff --git a/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx b/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx index bd30558e1..af95e437b 100644 --- a/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx +++ b/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx @@ -1,14 +1,49 @@ -/** - * @jest-environment jsdom - */ import { Maps, Props } from "../Maps"; -import { mount } from "enzyme"; +import { render } from "@testing-library/react-native"; import { dynamicValue } from "@mendix/piw-utils-internal"; import { Big } from "big.js"; import { createElement } from "react"; -import { waitFor } from "@testing-library/react-native"; -describe("", () => { +// Mock react-native-maps +// Without this, the Maps component renders only an empty AIRMap component without markers +jest.mock("react-native-maps", () => { + const React = require("react"); + const { View } = require("react-native"); + + const MapView = React.forwardRef((props: any, ref: any) => { + // Simulate onMapReady being called after component mounts + React.useEffect(() => { + if (props.onMapReady) { + setTimeout(() => props.onMapReady(), 0); + } + }, [props.onMapReady]); + + // Add ref methods that the Maps component expects + React.useImperativeHandle(ref, () => ({ + fitToCoordinates: jest.fn(), + animateCamera: jest.fn(), + setCamera: jest.fn(), + getCamera: jest.fn(() => + Promise.resolve({ + center: { latitude: 0, longitude: 0 }, + zoom: 10, + altitude: 1000 + }) + ) + })); + + return ; + }); + + return { + __esModule: true, + default: MapView, + Marker: (props: any) => , + Callout: (props: any) => + }; +}); + +describe("", () => { let defaultProps: Props; beforeEach(() => { @@ -46,11 +81,11 @@ describe("", () => { } ]; - const wrapper = mount(); + const component = render(); + + // Give the component time to complete async operations + await new Promise(resolve => setTimeout(resolve, 1000)); - await waitFor(() => { - wrapper.update(); - expect(wrapper).toMatchSnapshot(); - }); + expect(component.toJSON()).toMatchSnapshot(); }); }); diff --git a/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap b/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap index 60fac1efd..44e966ac8 100644 --- a/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap +++ b/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap @@ -1,105 +1,75 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`renders 1`] = ` - renders 1`] = ` + + + - - - - - - + } + onPress={[Function]} + opacity={1} + pinColor="red" + > + - + `; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71f529833..aac6f9374 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -609,7 +609,7 @@ importers: specifier: '*' version: link:../../tools/piw-utils-internal prop-types: - specifier: ^15.7.2 + specifier: ^15.8.1 version: 15.8.1 react-native-geocoder: specifier: 0.5.0 From bc92b123646f2a008959751aef1c6cb86b482ef5 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 21 Aug 2025 15:53:11 +0200 Subject: [PATCH 04/14] test: wrap async operations in act for Maps component rendering --- .../maps-native/src/__tests__/Maps.spec.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx b/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx index af95e437b..b9df54615 100644 --- a/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx +++ b/packages/pluggableWidgets/maps-native/src/__tests__/Maps.spec.tsx @@ -1,5 +1,5 @@ import { Maps, Props } from "../Maps"; -import { render } from "@testing-library/react-native"; +import { render, act } from "@testing-library/react-native"; import { dynamicValue } from "@mendix/piw-utils-internal"; import { Big } from "big.js"; import { createElement } from "react"; @@ -83,8 +83,10 @@ describe("", () => { const component = render(); - // Give the component time to complete async operations - await new Promise(resolve => setTimeout(resolve, 1000)); + // Wait for async operations to complete within + await act(async () => { + await new Promise(resolve => setTimeout(resolve, 0)); + }); expect(component.toJSON()).toMatchSnapshot(); }); From 628f0116970f5be5d2673b0126367e750048966e Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 21 Aug 2025 17:37:25 +0200 Subject: [PATCH 05/14] test: replace getByTestId with screen.getByTestId in Switch component tests --- .../src/__tests__/Switch.spec.tsx | 52 +++++++++---------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx index 5f14ca8e3..e123fc8ec 100644 --- a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx +++ b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx @@ -2,7 +2,7 @@ * @jest-environment jsdom */ import { actionValue, EditableValueBuilder, dynamicValue } from "@mendix/piw-utils-internal"; -import { render, fireEvent, act } from "@testing-library/react-native"; +import { render, fireEvent, screen } from "@testing-library/react-native"; import { createElement } from "react"; import { Switch, Props } from "../Switch"; import { defaultSwitchStyle } from "../ui/Styles"; @@ -35,8 +35,8 @@ describe("Switch", () => { booleanAttribute: new EditableValueBuilder().withValue(false).build() }); - const { getByTestId } = render(); - const switchElement = getByTestId("Switch1"); + render(); + const switchElement = screen.getByTestId("Switch1"); expect(switchElement.props.enabled).toBe(true); }); @@ -45,8 +45,8 @@ describe("Switch", () => { booleanAttribute: new EditableValueBuilder().withValue(false).isReadOnly().build() }); - const { getByTestId } = render(); - const switchElement = getByTestId("Switch1"); + render(); + const switchElement = screen.getByTestId("Switch1"); expect(switchElement.props.enabled).toBe(false); }); @@ -55,8 +55,8 @@ describe("Switch", () => { showLabel: true }); - const { getByTestId } = render(); - expect(getByTestId(`${name}$label`)).toBeTruthy(); + render(); + expect(screen.getByTestId(`${name}$label`)).toBeTruthy(); }); it("with showLabel true renders label horizontally", () => { @@ -64,8 +64,8 @@ describe("Switch", () => { showLabel: true }); - const { getByTestId } = render(); - const wrapper = getByTestId(`${name}$wrapper`); + render(); + const wrapper = screen.getByTestId(`${name}$wrapper`); expect(wrapper.props.style).toEqual(expect.arrayContaining([{ flexDirection: "row", alignItems: "center" }])); }); @@ -75,8 +75,8 @@ describe("Switch", () => { labelOrientation: "vertical" }); - const { getByTestId } = render(); - const wrapper = getByTestId(`${name}$wrapper`); + render(); + const wrapper = screen.getByTestId(`${name}$wrapper`); expect(wrapper.props.style).toEqual( expect.not.arrayContaining([{ flexDirection: "row", alignItems: "center" }]) ); @@ -87,18 +87,18 @@ describe("Switch", () => { booleanAttribute: new EditableValueBuilder().withValidation("error").withValue(false).build() }); - const { getByTestId } = render(); + render(); expect(props.booleanAttribute.validation).toEqual("error"); - expect(getByTestId(`${name}$alert`)).toBeTruthy(); - expect(getByTestId(`${name}$alert`).props.children).toEqual("error"); + expect(screen.getByTestId(`${name}$alert`)).toBeTruthy(); + expect(screen.getByTestId(`${name}$alert`).props.children).toEqual("error"); }); it("with android device renders property", () => { Platform.OS = "android"; const props = createProps(); - const { getByTestId } = render(); - expect(getByTestId("Switch1").props.ios_backgroundColor).toBeUndefined(); + render(); + expect(screen.getByTestId("Switch1").props.ios_backgroundColor).toBeUndefined(); }); it("renders correct thumbColor when value is true", () => { @@ -107,8 +107,8 @@ describe("Switch", () => { style: [{ ...defaultSwitchStyle, input: { thumbColorOn: "red" } }] }); - const { getByTestId } = render(); - expect(getByTestId("Switch1").props.thumbTintColor).toEqual("red"); + render(); + expect(screen.getByTestId("Switch1").props.thumbTintColor).toEqual("red"); }); it("renders correct thumbColor when value is false", () => { @@ -117,8 +117,8 @@ describe("Switch", () => { style: [{ ...defaultSwitchStyle, input: { thumbColorOff: "blue" } }] }); - const { getByTestId } = render(); - expect(getByTestId("Switch1").props.thumbTintColor).toEqual("blue"); + render(); + expect(screen.getByTestId("Switch1").props.thumbTintColor).toEqual("blue"); }); describe("interactions", () => { @@ -129,14 +129,12 @@ describe("Switch", () => { booleanAttribute, onChange }); - const { getByTestId } = render(); + render(); expect(booleanAttribute.value).toBe(false); expect(onChange.execute).not.toHaveBeenCalled(); - act(() => { - fireEvent(getByTestId("Switch1"), "valueChange", true); - }); + fireEvent(screen.getByTestId("Switch1"), "valueChange", true); expect(booleanAttribute.value).toBe(true); expect(onChange.execute).toHaveBeenCalled(); @@ -149,14 +147,12 @@ describe("Switch", () => { booleanAttribute, onChange }); - const { getByTestId } = render(); + render(); expect(booleanAttribute.value).toBe(false); expect(onChange.execute).not.toHaveBeenCalled(); - act(() => { - fireEvent(getByTestId("Switch1"), "valueChange", true); - }); + fireEvent(screen.getByTestId("Switch1"), "valueChange", true); expect(booleanAttribute.value).toBe(false); expect(onChange.execute).not.toHaveBeenCalled(); From afb8202b3b068c301aec76fc7d5ab199c47c4d03 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 21 Aug 2025 17:42:03 +0200 Subject: [PATCH 06/14] test: remove jsdom environment declaration from Switch component tests --- .../switch-native/src/__tests__/Switch.spec.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx index e123fc8ec..aa00af86c 100644 --- a/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx +++ b/packages/pluggableWidgets/switch-native/src/__tests__/Switch.spec.tsx @@ -1,6 +1,3 @@ -/** - * @jest-environment jsdom - */ import { actionValue, EditableValueBuilder, dynamicValue } from "@mendix/piw-utils-internal"; import { render, fireEvent, screen } from "@testing-library/react-native"; import { createElement } from "react"; From ab541444be8327a2a328085025255ef423dfe088 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Wed, 27 Aug 2025 12:01:19 +0200 Subject: [PATCH 07/14] test: replace waitFor with act in Image component tests to fix components rendering --- .../src/components/__tests__/Image.spec.tsx | 169 +++++++++++++----- 1 file changed, 127 insertions(+), 42 deletions(-) diff --git a/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx b/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx index 6c7894a18..2e6e06ada 100644 --- a/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx +++ b/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx @@ -1,6 +1,6 @@ import { createElement } from "react"; import { Text } from "react-native"; -import { fireEvent, render, waitFor } from "@testing-library/react-native"; +import { fireEvent, render, act } from "@testing-library/react-native"; import { NativeIcon, NativeImage } from "mendix"; import { Style } from "@mendix/piw-native-utils-internal"; import { Image } from "../../Image"; @@ -69,7 +69,9 @@ describe("Widget", () => { describe("Static Image", () => { it("renders the structure", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -77,7 +79,9 @@ describe("Widget", () => { it("renders the structure with custom height", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -85,7 +89,9 @@ describe("Widget", () => { it("renders the structure with custom width", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -93,7 +99,9 @@ describe("Widget", () => { it("renders the structure inside a modal", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); fireEvent(image.getByTestId(`${imageProps.name}$ImageEnlargedPressable`), "layout", onLayoutEventData); @@ -102,7 +110,9 @@ describe("Widget", () => { it("triggers the onclick action", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -114,7 +124,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -126,7 +138,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -138,7 +152,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -152,7 +168,9 @@ describe("Widget", () => { it("renders the structure", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -160,7 +178,9 @@ describe("Widget", () => { it("renders the structure with custom height", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -168,7 +188,9 @@ describe("Widget", () => { it("renders the structure with custom width", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -176,7 +198,9 @@ describe("Widget", () => { it("renders the structure inside a modal", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); fireEvent(image.getByTestId(`${imageProps.name}$ImageEnlargedPressable`), "layout", onLayoutEventData); @@ -185,7 +209,9 @@ describe("Widget", () => { it("triggers the onclick action", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -197,7 +223,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -209,7 +237,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -221,7 +251,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -238,7 +270,9 @@ describe("Widget", () => { it("renders the structure", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -246,7 +280,9 @@ describe("Widget", () => { it("renders the structure with custom height", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -254,7 +290,9 @@ describe("Widget", () => { it("renders the structure with custom width", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -262,7 +300,9 @@ describe("Widget", () => { it("renders the structure inside a modal", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); fireEvent(image.getByTestId(`${imageProps.name}$ImageEnlargedPressable`), "layout", onLayoutEventData); @@ -271,7 +311,9 @@ describe("Widget", () => { it("triggers the onclick action", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent.press(image.getByTestId(`${imageProps.name}$Image`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -283,7 +325,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -295,7 +339,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -307,7 +353,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -321,7 +369,9 @@ describe("Widget", () => { it("renders the structure", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -330,7 +380,9 @@ describe("Widget", () => { it("renders the structure with custom height", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -339,7 +391,9 @@ describe("Widget", () => { it("renders the structure with custom width", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -348,7 +402,9 @@ describe("Widget", () => { it("renders the structure inside a modal", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -360,7 +416,9 @@ describe("Widget", () => { it("triggers the onclick action", async () => { const ImageComponent = ; - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -374,7 +432,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -386,7 +446,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -398,7 +460,9 @@ describe("Widget", () => { Background Image ); - const image = await waitFor(() => render(ImageComponent)); + const image = render(ImageComponent); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -413,33 +477,44 @@ describe("Widget", () => { }); it("renders the structure with an icon and default color", async () => { - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); + expect(image.toJSON()).toMatchSnapshot(); }); it("uses color if set", async () => { const color = "red"; - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); expect(image.getByTestId(`${imageProps.name}$Icon`).findByType(GlyphIcon).props.color).toEqual(color); }); it("prefers size from styles", async () => { const size = 12; - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); expect(image.getByTestId(`${imageProps.name}$Icon`).findByType(GlyphIcon).props.size).toEqual(size); }); it("prefers size from iconSize prop", async () => { const iconSize = 18; - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); expect(image.getByTestId(`${imageProps.name}$Icon`).findByType(GlyphIcon).props.size).toEqual(iconSize); }); it("triggers the onclick action", async () => { - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -456,7 +531,10 @@ describe("Widget", () => { }); it("renders the structure", async () => { - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); + fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); }); @@ -485,13 +563,18 @@ describe("Widget", () => { } } ] as Style[]; - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); + fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); }); it("renders the structure inside a modal", async () => { - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); @@ -500,7 +583,9 @@ describe("Widget", () => { }); it("triggers the onclick action", async () => { - const image = await waitFor(() => render()); + const image = render(); + + await act(() => new Promise(resolve => setTimeout(resolve, 0))); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); From cae88ff931aca13976d2377652d35526b81f13e6 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Wed, 27 Aug 2025 12:02:22 +0200 Subject: [PATCH 08/14] test: update Image and AppEvents component tests to use React Testing Library --- package.json | 2 +- .../src/__tests__/AppEvents.spec.tsx | 43 +++++----- .../src/components/__tests__/Image.spec.tsx | 86 ++++++++++--------- pnpm-lock.yaml | 16 ++-- 4 files changed, 76 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index 84955f422..99092e488 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@commitlint/config-conventional": "^18.6.3", "@react-native/babel-preset": "0.77.3", "@testing-library/jest-native": "^5.4.3", - "@testing-library/react-native": "^12.9.0", + "@testing-library/react-native": "~13.0.1", "@types/big.js": "^6.2.2", "@types/concurrently": "^6.3.0", "@types/enzyme": "^3.10.18", diff --git a/packages/pluggableWidgets/app-events-native/src/__tests__/AppEvents.spec.tsx b/packages/pluggableWidgets/app-events-native/src/__tests__/AppEvents.spec.tsx index 1603e3e2f..60ce1ad79 100644 --- a/packages/pluggableWidgets/app-events-native/src/__tests__/AppEvents.spec.tsx +++ b/packages/pluggableWidgets/app-events-native/src/__tests__/AppEvents.spec.tsx @@ -1,8 +1,7 @@ import { actionValue } from "@mendix/piw-utils-internal"; import { createElement } from "react"; import { AppStateStatus } from "react-native"; - -import { mount } from "enzyme"; +import { render } from "@testing-library/react-native"; import { AppEvents, Props } from "../AppEvents"; @@ -54,14 +53,14 @@ describe("AppEvents", () => { }); it("does not render anything", () => { - const wrapper = mount(); - expect(wrapper).toMatchObject({}); + const { toJSON } = render(); + expect(toJSON()).toBeNull(); }); describe("with on load action", () => { it("executes the on load action", () => { const onLoadAction = actionValue(); - mount(); + render(); expect(onLoadAction.execute).toHaveBeenCalledTimes(1); }); }); @@ -69,16 +68,16 @@ describe("AppEvents", () => { describe("with on resume action", () => { it("registers and unregisters an event listener", () => { const onResumeAction = actionValue(); - const wrapper = mount(); + const { unmount } = render(); expect(appStateChangeHandler).toBeDefined(); - wrapper.unmount(); + unmount(); expect(appStateChangeHandler).toBeUndefined(); }); it("executes the on resume action", () => { const onResumeAction = actionValue(); - mount(); + render(); appStateChangeHandler!("background"); appStateChangeHandler!("active"); @@ -87,7 +86,7 @@ describe("AppEvents", () => { it("does not execute the on resume action when the app state hasn't changed", () => { const onResumeAction = actionValue(); - mount(); + render(); appStateChangeHandler!("active"); appStateChangeHandler!("active"); @@ -98,7 +97,7 @@ describe("AppEvents", () => { const dateNowSpy = jest.spyOn(Date, "now").mockReturnValue(0); const onResumeAction = actionValue(); - mount(); + render(); dateNowSpy.mockReturnValue(4000); appStateChangeHandler!("background"); @@ -117,17 +116,17 @@ describe("AppEvents", () => { describe("with on online action", () => { it("registers and unregisters an event listener", async () => { const onOnlineAction = actionValue(); - const wrapper = mount(); + const { unmount } = render(); await flushMicrotasksQueue(); expect(connectionChangeHandler).toBeDefined(); - wrapper.unmount(); + unmount(); expect(connectionChangeHandler).toBeUndefined(); }); it("executes the on online action", async () => { const onOnlineAction = actionValue(); - mount(); + render(); await flushMicrotasksQueue(); connectionChangeHandler!({ isConnected: false }); @@ -139,7 +138,7 @@ describe("AppEvents", () => { const dateNowSpy = jest.spyOn(Date, "now").mockReturnValue(0); const onOnlineAction = actionValue(); - mount(); + render(); await flushMicrotasksQueue(); dateNowSpy.mockReturnValue(4000); @@ -157,7 +156,7 @@ describe("AppEvents", () => { it("does not execute the on online action if the connection state didn't change", async () => { const onOnlineAction = actionValue(); - mount(); + render(); await flushMicrotasksQueue(); connectionChangeHandler!({ isConnected: true }); @@ -178,7 +177,7 @@ describe("AppEvents", () => { it("executes the on timeout action once after the timeout has passed", () => { const onTimeoutAction = actionValue(); - mount(); + render(); expect(onTimeoutAction.execute).toHaveBeenCalledTimes(0); jest.advanceTimersByTime(30000); @@ -189,16 +188,16 @@ describe("AppEvents", () => { it("does not execute the on timeout action after the component has been unmounted", () => { const onTimeoutAction = actionValue(); - const wrapper = mount(); + const { unmount } = render(); jest.advanceTimersByTime(15000); - wrapper.unmount(); + unmount(); jest.advanceTimersByTime(15000); expect(onTimeoutAction.execute).toHaveBeenCalledTimes(0); }); it("executes the interval on timeout action after every interval", () => { const onTimeoutAction = actionValue(); - mount(); + render(); expect(onTimeoutAction.execute).toHaveBeenCalledTimes(0); jest.advanceTimersByTime(30000); @@ -209,20 +208,20 @@ describe("AppEvents", () => { it("does not execute the interval on timeout action after the component has been unmounted", () => { const onTimeoutAction = actionValue(); - const wrapper = mount( + const { unmount } = render( ); jest.advanceTimersByTime(30000); expect(onTimeoutAction.execute).toHaveBeenCalledTimes(1); - wrapper.unmount(); + unmount(); jest.advanceTimersByTime(30000); expect(onTimeoutAction.execute).toHaveBeenCalledTimes(1); }); it("does not execute the interval on timeout action when it is already executing", () => { const onTimeoutAction = actionValue(true, true); - mount(); + render(); jest.advanceTimersByTime(30000); expect(onTimeoutAction.execute).not.toHaveBeenCalled(); diff --git a/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx b/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx index 2e6e06ada..16d7d42b5 100644 --- a/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx +++ b/packages/pluggableWidgets/image-native/src/components/__tests__/Image.spec.tsx @@ -10,6 +10,10 @@ import { parse, SvgAst } from "react-native-svg"; import svgXml from "./svgXml"; import { GlyphIcon } from "../fonts/font"; +function flushMicrotasksQueue(): Promise { + return act(() => new Promise(resolve => setTimeout(resolve, 0))); +} + jest.mock("react-native-svg/lib/commonjs/xml", () => { const original = jest.requireActual("react-native-svg/lib/commonjs/xml"); return { @@ -71,7 +75,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -81,7 +85,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -91,7 +95,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -101,7 +105,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); fireEvent(image.getByTestId(`${imageProps.name}$ImageEnlargedPressable`), "layout", onLayoutEventData); @@ -112,7 +116,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -126,7 +130,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -140,7 +144,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -154,7 +158,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -170,7 +174,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -180,7 +184,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -190,7 +194,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -200,7 +204,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); fireEvent(image.getByTestId(`${imageProps.name}$ImageEnlargedPressable`), "layout", onLayoutEventData); @@ -211,7 +215,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -225,7 +229,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -239,7 +243,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -253,7 +257,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -272,7 +276,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -282,7 +286,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -292,7 +296,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -302,7 +306,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); fireEvent(image.getByTestId(`${imageProps.name}$ImageEnlargedPressable`), "layout", onLayoutEventData); @@ -313,7 +317,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent.press(image.getByTestId(`${imageProps.name}$Image`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -327,7 +331,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -341,7 +345,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -355,7 +359,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -371,7 +375,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -382,7 +386,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -393,7 +397,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -404,7 +408,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -418,7 +422,7 @@ describe("Widget", () => { const ImageComponent = ; const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$SvgUriTemporary`), "layout", onLayoutEventData); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); @@ -434,7 +438,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -448,7 +452,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -462,7 +466,7 @@ describe("Widget", () => { ); const image = render(ImageComponent); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageBackgroundView`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -479,7 +483,7 @@ describe("Widget", () => { it("renders the structure with an icon and default color", async () => { const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); expect(image.toJSON()).toMatchSnapshot(); }); @@ -488,7 +492,7 @@ describe("Widget", () => { const color = "red"; const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); expect(image.getByTestId(`${imageProps.name}$Icon`).findByType(GlyphIcon).props.color).toEqual(color); }); @@ -497,7 +501,7 @@ describe("Widget", () => { const size = 12; const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); expect(image.getByTestId(`${imageProps.name}$Icon`).findByType(GlyphIcon).props.size).toEqual(size); }); @@ -506,7 +510,7 @@ describe("Widget", () => { const iconSize = 18; const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); expect(image.getByTestId(`${imageProps.name}$Icon`).findByType(GlyphIcon).props.size).toEqual(iconSize); }); @@ -514,7 +518,7 @@ describe("Widget", () => { it("triggers the onclick action", async () => { const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); expect(imageProps.onClick?.execute).toHaveBeenCalledTimes(1); @@ -533,7 +537,7 @@ describe("Widget", () => { it("renders the structure", async () => { const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -565,7 +569,7 @@ describe("Widget", () => { ] as Style[]; const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); expect(image.toJSON()).toMatchSnapshot(); @@ -574,7 +578,7 @@ describe("Widget", () => { it("renders the structure inside a modal", async () => { const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); @@ -585,7 +589,7 @@ describe("Widget", () => { it("triggers the onclick action", async () => { const image = render(); - await act(() => new Promise(resolve => setTimeout(resolve, 0))); + await flushMicrotasksQueue(); fireEvent(image.getByTestId(`${imageProps.name}$ImageSmallPressable`), "layout", onLayoutEventData); fireEvent.press(image.getByTestId(`${imageProps.name}$ImageSmallPressable`)); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aac6f9374..c30beb6b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,8 +37,8 @@ importers: specifier: ^5.4.3 version: 5.4.3(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0) '@testing-library/react-native': - specifier: ^12.9.0 - version: 12.9.0(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ~13.0.1 + version: 13.0.1(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0) '@types/big.js': specifier: ^6.2.2 version: 6.2.2 @@ -2457,13 +2457,14 @@ packages: react-native: 0.77.3 react-test-renderer: '>=16.0.0' - '@testing-library/react-native@12.9.0': - resolution: {integrity: sha512-wIn/lB1FjV2N4Q7i9PWVRck3Ehwq5pkhAef5X5/bmQ78J/NoOsGbVY2/DG5Y9Lxw+RfE+GvSEh/fe5Tz6sKSvw==} + '@testing-library/react-native@13.0.1': + resolution: {integrity: sha512-sKMRNNniSOZ68qe1OBQAWvK87WCEmbfLp/MXfn2JE3x3WrNU8OFCVL0z/YKqw0/JO/d44J8Wq6FmRSaod/+VAg==} + engines: {node: '>=18'} peerDependencies: - jest: '>=28.0.0' + jest: '>=29.0.0' react: 18.2.0 react-native: 0.77.3 - react-test-renderer: '>=16.8.0' + react-test-renderer: '>=18.2.0' peerDependenciesMeta: jest: optional: true @@ -10110,8 +10111,9 @@ snapshots: react-test-renderer: 18.2.0(react@18.2.0) redent: 3.0.0 - '@testing-library/react-native@12.9.0(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)': + '@testing-library/react-native@13.0.1(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: + chalk: 4.1.2 jest-matcher-utils: 29.7.0 pretty-format: 29.7.0 react: 18.2.0 From 48748cdb487a8d90408bb7a300f62df84d6d212b Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Wed, 27 Aug 2025 12:07:23 +0200 Subject: [PATCH 09/14] test: update Maps component snapshot --- .../__snapshots__/Maps.spec.tsx.snap | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap b/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap index 44e966ac8..9b3dc699a 100644 --- a/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap +++ b/packages/pluggableWidgets/maps-native/src/__tests__/__snapshots__/Maps.spec.tsx.snap @@ -22,7 +22,7 @@ exports[` renders 1`] = ` } mapType="standard" maxZoomLevel={15} - minZoomLevel={10} + minZoomLevel={3} onMapReady={[Function]} onRegionChangeComplete={[Function]} pitchEnabled={false} @@ -71,5 +71,24 @@ exports[` renders 1`] = ` /> + + + `; From 37d5b0869a6b5bffc19e3f3d036ac50a3f3e5ebc Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Wed, 27 Aug 2025 16:40:37 +0200 Subject: [PATCH 10/14] feat: remove the patch-package script as it is no longer needed for PNPM --- package.json | 13 +- ...gable-widgets-tools+10.21.1+001+core.patch | 22 -- ...s-tools+10.21.1+002+rollup-file-copy.patch | 66 ----- ...ndix+pluggable-widgets-tools+10.21.1.patch | 138 +++++++++++ ...roos+react-native-multi-slider+1.0.0.patch | 12 +- .../react-native-action-button+2.8.5.patch | 6 +- patches/react-native-camera+3.40.0.patch | 6 +- .../react-native-gesture-handler+2.24.0.patch | 6 +- patches/react-native-slider+0.11.0.patch | 12 +- .../react-native-snap-carousel+3.9.1.patch | 24 +- pnpm-lock.yaml | 234 +++++++----------- scripts/patch/patch-package.sh | 10 - 12 files changed, 269 insertions(+), 280 deletions(-) delete mode 100644 patches/@mendix+pluggable-widgets-tools+10.21.1+001+core.patch delete mode 100644 patches/@mendix+pluggable-widgets-tools+10.21.1+002+rollup-file-copy.patch create mode 100644 patches/@mendix+pluggable-widgets-tools+10.21.1.patch delete mode 100755 scripts/patch/patch-package.sh diff --git a/package.json b/package.json index 99092e488..e1e7f3fef 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "license": "Apache-2.0", "scripts": { "prepare": "npx husky install && pnpm -r run prepare", - "postinstall": "patch-package && pnpm -r run postinstall", + "postinstall": "pnpm -r run postinstall", "reinstall": "pnpm store prune && git clean -dfx && find . -type dir -name node_modules | xargs rm -rf && pnpm install && pnpm run postinstall", "prettier": "prettier --config \"./prettier.config.js\" --write \"**/*.{js,jsx,ts,tsx,scss,html,xml,yml,yaml}\"", "format": "pretty-quick --staged --config \"./prettier.config.js\" --pattern \"**/{src,script,typings,test,**}/**/*.{js,jsx,ts,tsx,scss,html,xml,md,json}\"", @@ -29,7 +29,6 @@ "version": "ts-node --project ./scripts/tsconfig.json ./scripts/release/BumpVersion.ts", "validate-staged-widget-versions": "node scripts/validation/validate-versions-staged-files.js", "setup-mobile": "pnpm setup-android && pnpm setup-ios", - "patch-package": "sh ./scripts/patch/patch-package.sh", "build:widgets": "node ./scripts/widget/buildWidgets.js", "test_widgets:maestro:ios": "bash maestro/run_maestro_widget_tests.sh ios", "test_widgets:maestro:android": "bash maestro/run_maestro_widget_tests.sh android", @@ -65,7 +64,6 @@ "image-js": "^0.35.6", "lint-staged": "^10.5.4", "mendix-client": "^7.15.8", - "patch-package": "^8.0.0", "pixelmatch": "^5.3.0", "pngjs": "^6.0.0", "pretty-quick": "^3.3.1", @@ -94,6 +92,15 @@ "@types/react-native": "0.73.0", "cheerio": "1.0.0-rc.12", "typescript": "~5.8.0" + }, + "patchedDependencies": { + "@mendix/pluggable-widgets-tools@10.21.1": "patches/@mendix+pluggable-widgets-tools+10.21.1.patch", + "@ptomasroos/react-native-multi-slider@1.0.0": "patches/@ptomasroos+react-native-multi-slider+1.0.0.patch", + "react-native-action-button@2.8.5": "patches/react-native-action-button+2.8.5.patch", + "react-native-camera@3.40.0": "patches/react-native-camera+3.40.0.patch", + "react-native-gesture-handler@2.24.0": "patches/react-native-gesture-handler+2.24.0.patch", + "react-native-slider@0.11.0": "patches/react-native-slider+0.11.0.patch", + "react-native-snap-carousel@3.9.1": "patches/react-native-snap-carousel+3.9.1.patch" } }, "packageManager": "pnpm@10.13.1" diff --git a/patches/@mendix+pluggable-widgets-tools+10.21.1+001+core.patch b/patches/@mendix+pluggable-widgets-tools+10.21.1+001+core.patch deleted file mode 100644 index c1eaf0e4c..000000000 --- a/patches/@mendix+pluggable-widgets-tools+10.21.1+001+core.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/node_modules/@mendix/pluggable-widgets-tools/bin/mx-scripts.js b/node_modules/@mendix/pluggable-widgets-tools/bin/mx-scripts.js -index 673e0b2..055f87d 100755 ---- a/node_modules/@mendix/pluggable-widgets-tools/bin/mx-scripts.js -+++ b/node_modules/@mendix/pluggable-widgets-tools/bin/mx-scripts.js -@@ -107,7 +107,7 @@ function getRealCommand(cmd, toolsRoot) { - } - - function findNodeModulesBin() { -- let parentDir = join(__dirname, ".."); -+ let parentDir = join(__dirname, "../.."); - const bins = []; - while (parse(parentDir).root !== parentDir) { - const candidate = join(parentDir, "node_modules/.bin"); -diff --git a/node_modules/@mendix/pluggable-widgets-tools/test-config/transform-native.js b/node_modules/@mendix/pluggable-widgets-tools/test-config/transform-native.js -index eed8109..4b422fa 100644 ---- a/node_modules/@mendix/pluggable-widgets-tools/test-config/transform-native.js -+++ b/node_modules/@mendix/pluggable-widgets-tools/test-config/transform-native.js -@@ -1,3 +1,3 @@ - module.exports = require("babel-jest").createTransformer({ -- presets: ["module:metro-react-native-babel-preset"] -+ presets: ["module:@react-native/babel-preset"] - }); \ No newline at end of file diff --git a/patches/@mendix+pluggable-widgets-tools+10.21.1+002+rollup-file-copy.patch b/patches/@mendix+pluggable-widgets-tools+10.21.1+002+rollup-file-copy.patch deleted file mode 100644 index f97b9028c..000000000 --- a/patches/@mendix+pluggable-widgets-tools+10.21.1+002+rollup-file-copy.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff --git a/node_modules/@mendix/pluggable-widgets-tools/configs/rollup-plugin-collect-dependencies.mjs b/node_modules/@mendix/pluggable-widgets-tools/configs/rollup-plugin-collect-dependencies.mjs -index 2d0b5bfac7f1a1482bc1a222cba3e52b0339cc79..a3f0e368d76d294a5f7cd85886fe5ce0e72b9619 100644 ---- a/node_modules/@mendix/pluggable-widgets-tools/configs/rollup-plugin-collect-dependencies.mjs -+++ b/node_modules/@mendix/pluggable-widgets-tools/configs/rollup-plugin-collect-dependencies.mjs -@@ -2,9 +2,8 @@ - - import fg from "fast-glob"; - import fsExtra from "fs-extra"; --import { existsSync, readFileSync, writeFileSync } from "fs"; -+import { existsSync, readFileSync, writeFileSync, cpSync, lstatSync, realpathSync } from "fs"; - import { dirname, join, parse } from "path"; --import copy from "recursive-copy"; - import { promisify } from "util"; - import resolve from "resolve"; - import _ from "lodash"; -@@ -171,15 +170,41 @@ async function copyJsModule(moduleSourcePath, to) { - if (existsSync(to)) { - return; - } -- return promisify(copy)(moduleSourcePath, to, { -- filter: [ -- "**/*.*", -- LICENSE_GLOB, -- "!**/{android,ios,windows,mac,jest,github,gradle,__*__,docs,jest,example*}/**/*", -- "!**/*.{config,setup}.*", -- "!**/*.{podspec,flow}" -- ] -- }); -+ -+ try { -+ // Check if the source is a symlink and resolve it to the actual path -+ let actualSourcePath = moduleSourcePath; -+ if (lstatSync(moduleSourcePath).isSymbolicLink()) { -+ actualSourcePath = realpathSync(moduleSourcePath); -+ } -+ -+ cpSync(actualSourcePath, to, { -+ recursive: true, -+ dereference: true, // Follow symlinks and copy the actual files -+ filter: (src, dest) => { -+ const relativePath = src.replace(actualSourcePath, '').replace(/^[\\/]/, ''); -+ -+ // Skip certain directories -+ if (relativePath.match(/[\\/](android|ios|windows|mac|jest|github|gradle|__.*__|docs|example.*)[\\/]/)) { -+ return false; -+ } -+ -+ // Skip certain file types -+ if (relativePath.match(/\.(config|setup)\.|\.podspec$|\.flow$/)) { -+ return false; -+ } -+ -+ // Include LICENSE files -+ if (relativePath.match(/license/i)) { -+ return true; -+ } -+ -+ return true; -+ } -+ }); -+ } catch (error) { -+ throw error; -+ } - } - - function getModuleName(modulePath) { \ No newline at end of file diff --git a/patches/@mendix+pluggable-widgets-tools+10.21.1.patch b/patches/@mendix+pluggable-widgets-tools+10.21.1.patch new file mode 100644 index 000000000..1dd894ae0 --- /dev/null +++ b/patches/@mendix+pluggable-widgets-tools+10.21.1.patch @@ -0,0 +1,138 @@ +diff --git a/bin/mx-scripts.js b/bin/mx-scripts.js +index 673e0b2ebc148755e575cc77c3fc493ba7b5cfde..055f87d9644b2e3d2e3bd74bf416a593234447b3 100755 +--- a/bin/mx-scripts.js ++++ b/bin/mx-scripts.js +@@ -107,7 +107,7 @@ function getRealCommand(cmd, toolsRoot) { + } + + function findNodeModulesBin() { +- let parentDir = join(__dirname, ".."); ++ let parentDir = join(__dirname, "../.."); + const bins = []; + while (parse(parentDir).root !== parentDir) { + const candidate = join(parentDir, "node_modules/.bin"); +diff --git a/configs/rollup-plugin-collect-dependencies.mjs b/configs/rollup-plugin-collect-dependencies.mjs +index 2d0b5bfac7f1a1482bc1a222cba3e52b0339cc79..a3f0e368d76d294a5f7cd85886fe5ce0e72b9619 100644 +--- a/configs/rollup-plugin-collect-dependencies.mjs ++++ b/configs/rollup-plugin-collect-dependencies.mjs +@@ -2,9 +2,8 @@ + + import fg from "fast-glob"; + import fsExtra from "fs-extra"; +-import { existsSync, readFileSync, writeFileSync } from "fs"; ++import { existsSync, readFileSync, writeFileSync, cpSync, lstatSync, realpathSync } from "fs"; + import { dirname, join, parse } from "path"; +-import copy from "recursive-copy"; + import { promisify } from "util"; + import resolve from "resolve"; + import _ from "lodash"; +@@ -171,15 +170,41 @@ async function copyJsModule(moduleSourcePath, to) { + if (existsSync(to)) { + return; + } +- return promisify(copy)(moduleSourcePath, to, { +- filter: [ +- "**/*.*", +- LICENSE_GLOB, +- "!**/{android,ios,windows,mac,jest,github,gradle,__*__,docs,jest,example*}/**/*", +- "!**/*.{config,setup}.*", +- "!**/*.{podspec,flow}" +- ] +- }); ++ ++ try { ++ // Check if the source is a symlink and resolve it to the actual path ++ let actualSourcePath = moduleSourcePath; ++ if (lstatSync(moduleSourcePath).isSymbolicLink()) { ++ actualSourcePath = realpathSync(moduleSourcePath); ++ } ++ ++ cpSync(actualSourcePath, to, { ++ recursive: true, ++ dereference: true, // Follow symlinks and copy the actual files ++ filter: (src, dest) => { ++ const relativePath = src.replace(actualSourcePath, '').replace(/^[\\/]/, ''); ++ ++ // Skip certain directories ++ if (relativePath.match(/[\\/](android|ios|windows|mac|jest|github|gradle|__.*__|docs|example.*)[\\/]/)) { ++ return false; ++ } ++ ++ // Skip certain file types ++ if (relativePath.match(/\.(config|setup)\.|\.podspec$|\.flow$/)) { ++ return false; ++ } ++ ++ // Include LICENSE files ++ if (relativePath.match(/license/i)) { ++ return true; ++ } ++ ++ return true; ++ } ++ }); ++ } catch (error) { ++ throw error; ++ } + } + + function getModuleName(modulePath) { +diff --git a/test-config/jest.native.config.js b/test-config/jest.native.config.js +index 72e3c51473b7566ca9d8b224b35334099ce615db..7e0949aa5d50d288d848117a804fd691422aefde 100644 +--- a/test-config/jest.native.config.js ++++ b/test-config/jest.native.config.js +@@ -3,7 +3,7 @@ const { join } = require("path"); + const projectDir = process.cwd(); + + module.exports = { +- preset: hasDependency("@testing-library/react-native") ? "@testing-library/react-native" : "react-native", ++ preset: "react-native", + testRunner: "jest-jasmine2", + clearMocks: true, + haste: { +@@ -14,9 +14,7 @@ module.exports = { + setupFilesAfterEnv: [ + join(__dirname, "test-index-native.js"), + ...(hasDependency("react-native-gesture-handler") ? ["react-native-gesture-handler/jestSetup.js"] : []), +- ...(hasDependency("@testing-library/jest-native") ? ["@testing-library/jest-native/extend-expect"] : []) + ], +- snapshotSerializers: ["enzyme-to-json/serializer"], + testMatch: ["/**/*.spec.{js,jsx,ts,tsx}"], + transformIgnorePatterns: ["node_modules/(?!(.*react-native.*|victory-)/)"], + transform: { +@@ -35,7 +33,6 @@ module.exports = { + "react-hot-loader/root": join(__dirname, "__mocks__/hot") + }, + moduleDirectories: ["node_modules", join(projectDir, "node_modules")], +- collectCoverage: !process.env.CI, + coverageDirectory: join(projectDir, "dist/coverage"), + testEnvironment: "jsdom" + }; +diff --git a/test-config/test-index-native.js b/test-config/test-index-native.js +index 8c4d3dd8475ec4ecceb3f36d74edbe9b7313599e..eec5172291384fc5606736b59c4aa7d4f75f9d34 100644 +--- a/test-config/test-index-native.js ++++ b/test-config/test-index-native.js +@@ -1,6 +1,4 @@ + const { TextEncoder, TextDecoder } = require("util"); +-const { configure: configureEnzyme } = require("enzyme"); +-const Adapter = require("@cfaester/enzyme-adapter-react-18").default; + const enableHooks = require("jest-react-hooks-shallow").default; + + Object.defineProperties(global, { +@@ -12,7 +10,6 @@ Object.defineProperties(global, { + } + }); + +-configureEnzyme({ adapter: new Adapter() }); + enableHooks(jest); + global.setImmediate = global.setTimeout; + +diff --git a/test-config/transform-native.js b/test-config/transform-native.js +index eed8109dada3788bb1195573b9713eb1f00dd8f9..4b422fac0e21d2b1f44a763d0b21b0280bf1cacb 100644 +--- a/test-config/transform-native.js ++++ b/test-config/transform-native.js +@@ -1,3 +1,3 @@ + module.exports = require("babel-jest").createTransformer({ +- presets: ["module:metro-react-native-babel-preset"] ++ presets: ["module:@react-native/babel-preset"] + }); diff --git a/patches/@ptomasroos+react-native-multi-slider+1.0.0.patch b/patches/@ptomasroos+react-native-multi-slider+1.0.0.patch index 5490c5c65..810938754 100644 --- a/patches/@ptomasroos+react-native-multi-slider+1.0.0.patch +++ b/patches/@ptomasroos+react-native-multi-slider+1.0.0.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/@ptomasroos/react-native-multi-slider/DefaultMarker.js b/node_modules/@ptomasroos/react-native-multi-slider/DefaultMarker.js +diff --git a/DefaultMarker.js b/DefaultMarker.js index 618d916..bb30f07 100644 ---- a/node_modules/@ptomasroos/react-native-multi-slider/DefaultMarker.js -+++ b/node_modules/@ptomasroos/react-native-multi-slider/DefaultMarker.js +--- a/DefaultMarker.js ++++ b/DefaultMarker.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { View, StyleSheet, Platform, TouchableHighlight } from 'react-native'; @@ -11,10 +11,10 @@ index 618d916..bb30f07 100644 export default class DefaultMarker extends React.Component { static propTypes = { -diff --git a/node_modules/@ptomasroos/react-native-multi-slider/MultiSlider.js b/node_modules/@ptomasroos/react-native-multi-slider/MultiSlider.js +diff --git a/MultiSlider.js b/MultiSlider.js index 3a5e417..e48b97b 100755 ---- a/node_modules/@ptomasroos/react-native-multi-slider/MultiSlider.js -+++ b/node_modules/@ptomasroos/react-native-multi-slider/MultiSlider.js +--- a/MultiSlider.js ++++ b/MultiSlider.js @@ -12,8 +12,7 @@ import { import DefaultMarker from './DefaultMarker'; diff --git a/patches/react-native-action-button+2.8.5.patch b/patches/react-native-action-button+2.8.5.patch index 5633a00ca..79247e6df 100644 --- a/patches/react-native-action-button+2.8.5.patch +++ b/patches/react-native-action-button+2.8.5.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/react-native-action-button/ActionButton.js b/node_modules/react-native-action-button/ActionButton.js +diff --git a/ActionButton.js b/ActionButton.js index b8306c2efb2460d4aa110e83d2e5410588f280de..890003d30fa5400f4778f5bb2dffa10e70fbe3ee 100644 ---- a/node_modules/react-native-action-button/ActionButton.js -+++ b/node_modules/react-native-action-button/ActionButton.js +--- a/ActionButton.js ++++ b/ActionButton.js @@ -16,6 +16,7 @@ import { touchableBackground, DEFAULT_ACTIVE_OPACITY diff --git a/patches/react-native-camera+3.40.0.patch b/patches/react-native-camera+3.40.0.patch index 02e01b3bb..10b8408c8 100644 --- a/patches/react-native-camera+3.40.0.patch +++ b/patches/react-native-camera+3.40.0.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/react-native-camera/src/RNCamera.js b/node_modules/react-native-camera/src/RNCamera.js +diff --git a/src/RNCamera.js b/src/RNCamera.js index 0d9b516..e0eeeec 100644 ---- a/node_modules/react-native-camera/src/RNCamera.js -+++ b/node_modules/react-native-camera/src/RNCamera.js +--- a/src/RNCamera.js ++++ b/src/RNCamera.js @@ -5,7 +5,6 @@ import { findNodeHandle, Platform, diff --git a/patches/react-native-gesture-handler+2.24.0.patch b/patches/react-native-gesture-handler+2.24.0.patch index f46202e16..8eb655fe1 100644 --- a/patches/react-native-gesture-handler+2.24.0.patch +++ b/patches/react-native-gesture-handler+2.24.0.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/react-native-gesture-handler/lib/typescript/components/Swipeable.d.ts b/node_modules/react-native-gesture-handler/lib/typescript/components/Swipeable.d.ts +diff --git a/lib/typescript/components/Swipeable.d.ts b/lib/typescript/components/Swipeable.d.ts index 0cbe84f..ed2a5a6 100644 ---- a/node_modules/react-native-gesture-handler/lib/typescript/components/Swipeable.d.ts -+++ b/node_modules/react-native-gesture-handler/lib/typescript/components/Swipeable.d.ts +--- a/lib/typescript/components/Swipeable.d.ts ++++ b/lib/typescript/components/Swipeable.d.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Component } from 'react'; diff --git a/patches/react-native-slider+0.11.0.patch b/patches/react-native-slider+0.11.0.patch index d62bbc373..43b7cb7b0 100644 --- a/patches/react-native-slider+0.11.0.patch +++ b/patches/react-native-slider+0.11.0.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/react-native-slider/lib/Slider.js b/node_modules/react-native-slider/lib/Slider.js +diff --git a/lib/Slider.js b/lib/Slider.js index c640410..5b56a09 100644 ---- a/node_modules/react-native-slider/lib/Slider.js -+++ b/node_modules/react-native-slider/lib/Slider.js +--- a/lib/Slider.js ++++ b/lib/Slider.js @@ -5,6 +5,7 @@ var _react=require("react");var _react2=_interopRequireDefault(_react); @@ -28,10 +28,10 @@ index c640410..5b56a09 100644 * Set this to true to visually see the thumb touch rect in green. */debugTouchArea:_propTypes2.default.bool, /** * Set to true to animate values with default 'timing' animation type -diff --git a/node_modules/react-native-slider/src/Slider.js b/node_modules/react-native-slider/src/Slider.js +diff --git a/src/Slider.js b/src/Slider.js index 37deee5..b8a21a3 100644 ---- a/node_modules/react-native-slider/src/Slider.js -+++ b/node_modules/react-native-slider/src/Slider.js +--- a/src/Slider.js ++++ b/src/Slider.js @@ -11,9 +11,10 @@ import { PanResponder, View, diff --git a/patches/react-native-snap-carousel+3.9.1.patch b/patches/react-native-snap-carousel+3.9.1.patch index 749846ceb..4e523aece 100644 --- a/patches/react-native-snap-carousel+3.9.1.patch +++ b/patches/react-native-snap-carousel+3.9.1.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/react-native-snap-carousel/src/carousel/Carousel.js b/node_modules/react-native-snap-carousel/src/carousel/Carousel.js +diff --git a/src/carousel/Carousel.js b/src/carousel/Carousel.js index dae71a3..4dd36a2 100644 ---- a/node_modules/react-native-snap-carousel/src/carousel/Carousel.js -+++ b/node_modules/react-native-snap-carousel/src/carousel/Carousel.js +--- a/src/carousel/Carousel.js ++++ b/src/carousel/Carousel.js @@ -1,5 +1,6 @@ import React, { Component } from 'react'; -import { Animated, Easing, FlatList, I18nManager, Platform, ScrollView, View, ViewPropTypes } from 'react-native'; @@ -10,10 +10,10 @@ index dae71a3..4dd36a2 100644 import PropTypes from 'prop-types'; import shallowCompare from 'react-addons-shallow-compare'; import { -diff --git a/node_modules/react-native-snap-carousel/src/pagination/Pagination.js b/node_modules/react-native-snap-carousel/src/pagination/Pagination.js +diff --git a/src/pagination/Pagination.js b/src/pagination/Pagination.js index 5c021cf..d300dce 100644 ---- a/node_modules/react-native-snap-carousel/src/pagination/Pagination.js -+++ b/node_modules/react-native-snap-carousel/src/pagination/Pagination.js +--- a/src/pagination/Pagination.js ++++ b/src/pagination/Pagination.js @@ -1,5 +1,6 @@ import React, { PureComponent } from 'react'; -import { I18nManager, Platform, View, ViewPropTypes } from 'react-native'; @@ -22,10 +22,10 @@ index 5c021cf..d300dce 100644 import PropTypes from 'prop-types'; import PaginationDot from './PaginationDot'; import styles from './Pagination.style'; -diff --git a/node_modules/react-native-snap-carousel/src/pagination/PaginationDot.js b/node_modules/react-native-snap-carousel/src/pagination/PaginationDot.js +diff --git a/src/pagination/PaginationDot.js b/src/pagination/PaginationDot.js index e59d196..d2c8dcc 100644 ---- a/node_modules/react-native-snap-carousel/src/pagination/PaginationDot.js -+++ b/node_modules/react-native-snap-carousel/src/pagination/PaginationDot.js +--- a/src/pagination/PaginationDot.js ++++ b/src/pagination/PaginationDot.js @@ -1,5 +1,6 @@ import React, { PureComponent } from 'react'; -import { View, Animated, Easing, TouchableOpacity, ViewPropTypes } from 'react-native'; @@ -34,10 +34,10 @@ index e59d196..d2c8dcc 100644 import PropTypes from 'prop-types'; import styles from './Pagination.style'; -diff --git a/node_modules/react-native-snap-carousel/src/parallaximage/ParallaxImage.js b/node_modules/react-native-snap-carousel/src/parallaximage/ParallaxImage.js +diff --git a/src/parallaximage/ParallaxImage.js b/src/parallaximage/ParallaxImage.js index 8bc774a..d6d9de3 100644 ---- a/node_modules/react-native-snap-carousel/src/parallaximage/ParallaxImage.js -+++ b/node_modules/react-native-snap-carousel/src/parallaximage/ParallaxImage.js +--- a/src/parallaximage/ParallaxImage.js ++++ b/src/parallaximage/ParallaxImage.js @@ -1,7 +1,8 @@ // Parallax effect inspired by https://github.com/oblador/react-native-parallax/ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a2ee6bbd..5b9912b8a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,29 @@ overrides: cheerio: 1.0.0-rc.12 typescript: ~5.8.0 +patchedDependencies: + '@mendix/pluggable-widgets-tools@10.21.1': + hash: 1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c + path: patches/@mendix+pluggable-widgets-tools+10.21.1.patch + '@ptomasroos/react-native-multi-slider@1.0.0': + hash: b5e11465e4305f5284e90a78fc4575401f791921f34dbbafb9831f19ecae94da + path: patches/@ptomasroos+react-native-multi-slider+1.0.0.patch + react-native-action-button@2.8.5: + hash: 593bb64b27425a7f3805ad9567928d1369fd4cf939ab5d3eb43411a759565c48 + path: patches/react-native-action-button+2.8.5.patch + react-native-camera@3.40.0: + hash: a1c648b476aee6b170796fa8d0614d3ebb16035bee5d516649c513c1fd584f59 + path: patches/react-native-camera+3.40.0.patch + react-native-gesture-handler@2.24.0: + hash: 10e538f7cf8a69122ef742c51cb8285f723512c9d8596d9bc6db6ebae0651573 + path: patches/react-native-gesture-handler+2.24.0.patch + react-native-slider@0.11.0: + hash: 899d0bc0de45e25eb7731c4e61ae23a5223c2e1654b7d020dfae1c70e61b32c6 + path: patches/react-native-slider+0.11.0.patch + react-native-snap-carousel@3.9.1: + hash: 3a4c1b0f17629becc5d99ef1958df5a2f55c46e45f45670862aaeda12ab2f4e1 + path: patches/react-native-snap-carousel+3.9.1.patch + importers: .: @@ -96,9 +119,6 @@ importers: mendix-client: specifier: ^7.15.8 version: 7.15.8 - patch-package: - specifier: ^8.0.0 - version: 8.0.0 pixelmatch: specifier: ^5.3.0 version: 5.3.0 @@ -168,7 +188,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/querystringify': specifier: ^2.0.0 version: 2.0.2 @@ -202,7 +222,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) mendix: specifier: 10.15.46408 version: 10.15.46408(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react@18.2.0) @@ -211,7 +231,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) concurrently: specifier: ^6.0.0 version: 6.5.1 @@ -233,7 +253,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/activity-indicator-native: dependencies: @@ -246,7 +266,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/animation-native: dependencies: @@ -262,7 +282,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/app-events-native: dependencies: @@ -278,7 +298,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/background-gradient-native: dependencies: @@ -291,7 +311,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/background-image-native: dependencies: @@ -304,7 +324,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/badge-native: dependencies: @@ -317,7 +337,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/bar-chart-native: dependencies: @@ -330,7 +350,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/barcode-scanner-native: dependencies: @@ -348,17 +368,17 @@ importers: version: 1.2.4 react-native-camera: specifier: 3.40.0 - version: 3.40.0 + version: 3.40.0(patch_hash=a1c648b476aee6b170796fa8d0614d3ebb16035bee5d516649c513c1fd584f59) devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/bottom-sheet-native: dependencies: '@gorhom/bottom-sheet': specifier: 5.1.1 - version: 5.1.1(@types/react-native@0.73.0(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(@types/react@18.3.23)(react-native-gesture-handler@2.24.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.16.1(@babel/core@7.28.0)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) + version: 5.1.1(@types/react-native@0.73.0(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(@types/react@18.3.23)(react-native-gesture-handler@2.24.0(patch_hash=10e538f7cf8a69122ef742c51cb8285f723512c9d8596d9bc6db6ebae0651573)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.16.1(@babel/core@7.28.0)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) '@mendix/piw-native-utils-internal': specifier: '*' version: link:../../tools/piw-native-utils-internal @@ -373,14 +393,14 @@ importers: version: 14.0.4(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)) react-native-gesture-handler: specifier: 2.24.0 - version: 2.24.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) + version: 2.24.0(patch_hash=10e538f7cf8a69122ef742c51cb8285f723512c9d8596d9bc6db6ebae0651573)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) react-native-reanimated: specifier: 3.16.1 version: 3.16.1(@babel/core@7.28.0)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/react-native-actionsheet': specifier: ^2.4.1 version: 2.4.7 @@ -401,11 +421,11 @@ importers: version: 4.2.3 react-native-snap-carousel: specifier: ^3.9.1 - version: 3.9.1(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) + version: 3.9.1(patch_hash=3a4c1b0f17629becc5d99ef1958df5a2f55c46e45f45670862aaeda12ab2f4e1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/react-native-snap-carousel': specifier: ^3.7.4 version: 3.8.11(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react@18.2.0) @@ -426,14 +446,14 @@ importers: version: 0.0.10(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) react-native-slider: specifier: ^0.11.0 - version: 0.11.0 + version: 0.11.0(patch_hash=899d0bc0de45e25eb7731c4e61ae23a5223c2e1654b7d020dfae1c70e61b32c6) tinycolor2: specifier: ^1.4.1 version: 1.6.0 devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/tinycolor2': specifier: ^1.4.1 version: 1.4.6 @@ -449,7 +469,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/feedback-native: dependencies: @@ -471,7 +491,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/querystringify': specifier: ^2.0.0 version: 2.0.2 @@ -492,11 +512,11 @@ importers: version: 4.2.3 react-native-action-button: specifier: ^2.8.5 - version: 2.8.5(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)) + version: 2.8.5(patch_hash=593bb64b27425a7f3805ad9567928d1369fd4cf939ab5d3eb43411a759565c48)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)) devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/gallery-native: dependencies: @@ -509,7 +529,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/gallery-text-filter-native: dependencies: @@ -525,7 +545,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/image-native: dependencies: @@ -547,7 +567,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/intro-screen-native: dependencies: @@ -566,7 +586,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/line-chart-native: dependencies: @@ -579,7 +599,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/listview-swipe-native: dependencies: @@ -591,11 +611,11 @@ importers: version: link:../../tools/piw-utils-internal react-native-gesture-handler: specifier: 2.24.0 - version: 2.24.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) + version: 2.24.0(patch_hash=10e538f7cf8a69122ef742c51cb8285f723512c9d8596d9bc6db6ebae0651573)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/maps-native: dependencies: @@ -617,7 +637,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/notifications-native: dependencies: @@ -636,7 +656,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/pie-doughnut-chart-native: dependencies: @@ -649,7 +669,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/popup-menu-native: dependencies: @@ -665,7 +685,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/react-native-material-menu': specifier: ^1.0.6 version: 1.0.10(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react@18.2.0) @@ -684,7 +704,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/progress-circle-native: dependencies: @@ -700,7 +720,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/qr-code-native: dependencies: @@ -719,7 +739,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/radio-buttons-native: dependencies: @@ -732,7 +752,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/range-slider-native: dependencies: @@ -744,14 +764,14 @@ importers: version: link:../../tools/piw-utils-internal '@ptomasroos/react-native-multi-slider': specifier: ^1.0.0 - version: 1.0.0(prop-types@15.8.1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) + version: 1.0.0(patch_hash=b5e11465e4305f5284e90a78fc4575401f791921f34dbbafb9831f19ecae94da)(prop-types@15.8.1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) prop-types: specifier: ^15.7.2 version: 15.8.1 devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/ptomasroos__react-native-multi-slider': specifier: ^0.0.1 version: 0.0.1(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react@18.2.0) @@ -773,7 +793,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/react-native-star-rating': specifier: ^1.1.6 version: 1.1.6(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react@18.2.0) @@ -789,7 +809,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/safe-area-view-native: dependencies: @@ -808,7 +828,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/signature-native: dependencies: @@ -827,7 +847,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/slider-native: dependencies: @@ -839,14 +859,14 @@ importers: version: link:../../tools/piw-utils-internal '@ptomasroos/react-native-multi-slider': specifier: ^1.0.0 - version: 1.0.0(prop-types@15.8.1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) + version: 1.0.0(patch_hash=b5e11465e4305f5284e90a78fc4575401f791921f34dbbafb9831f19ecae94da)(prop-types@15.8.1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) prop-types: specifier: ^15.7.2 version: 15.8.1 devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/ptomasroos__react-native-multi-slider': specifier: ^0.0.1 version: 0.0.1(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react@18.2.0) @@ -862,7 +882,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/toggle-buttons-native: dependencies: @@ -881,7 +901,7 @@ importers: version: 7.27.1(@babel/core@7.28.0) '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/pluggableWidgets/video-player-native: dependencies: @@ -906,7 +926,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/react-native-video': specifier: ^5.0.4 version: 5.0.20(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react@18.2.0) @@ -925,13 +945,13 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) packages/tools/piw-native-utils-internal: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) rimraf: specifier: ^5.0.10 version: 5.0.10 @@ -940,7 +960,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 10.21.1 - version: 10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) + version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) rimraf: specifier: ^5.0.10 version: 5.0.10 @@ -2804,9 +2824,6 @@ packages: resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} - '@yarnpkg/lockfile@1.1.0': - resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -4197,9 +4214,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-yarn-workspace-root@2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5119,10 +5133,6 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stable-stringify@1.3.0: - resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} - engines: {node: '>= 0.4'} - json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -5141,9 +5151,6 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -5167,9 +5174,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - klaw-sync@6.0.0: - resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} - kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -5839,10 +5843,6 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -5919,11 +5919,6 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - patch-package@8.0.0: - resolution: {integrity: sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==} - engines: {node: '>=14', npm: '>5'} - hasBin: true - path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -7030,10 +7025,6 @@ packages: resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} engines: {node: '>=0.10.0'} - slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -7311,10 +7302,6 @@ packages: tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - tmp@0.2.5: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} @@ -9103,13 +9090,13 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@gorhom/bottom-sheet@5.1.1(@types/react-native@0.73.0(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(@types/react@18.3.23)(react-native-gesture-handler@2.24.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.16.1(@babel/core@7.28.0)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0)': + '@gorhom/bottom-sheet@5.1.1(@types/react-native@0.73.0(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(@types/react@18.3.23)(react-native-gesture-handler@2.24.0(patch_hash=10e538f7cf8a69122ef742c51cb8285f723512c9d8596d9bc6db6ebae0651573)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.16.1(@babel/core@7.28.0)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0)': dependencies: '@gorhom/portal': 1.0.14(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) invariant: 2.2.4 react: 18.2.0 react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) - react-native-gesture-handler: 2.24.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) + react-native-gesture-handler: 2.24.0(patch_hash=10e538f7cf8a69122ef742c51cb8285f723512c9d8596d9bc6db6ebae0651573)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) react-native-reanimated: 3.16.1(@babel/core@7.28.0)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) optionalDependencies: '@types/react': 18.3.23 @@ -9396,7 +9383,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 - '@mendix/pluggable-widgets-tools@10.21.1(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1)': + '@mendix/pluggable-widgets-tools@10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.0) @@ -9588,7 +9575,7 @@ snapshots: '@xml-tools/parser': 1.0.11 prettier: 2.8.8 - '@ptomasroos/react-native-multi-slider@1.0.0(prop-types@15.8.1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0)': + '@ptomasroos/react-native-multi-slider@1.0.0(patch_hash=b5e11465e4305f5284e90a78fc4575401f791921f34dbbafb9831f19ecae94da)(prop-types@15.8.1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0)': dependencies: prop-types: 15.8.1 react: 18.2.0 @@ -10570,8 +10557,6 @@ snapshots: '@xmldom/xmldom@0.8.10': {} - '@yarnpkg/lockfile@1.1.0': {} - JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -12251,10 +12236,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-yarn-workspace-root@2.0.0: - dependencies: - micromatch: 4.0.8 - flat-cache@3.2.0: dependencies: flatted: 3.3.3 @@ -13453,14 +13434,6 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stable-stringify@1.3.0: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - isarray: 2.0.5 - jsonify: 0.0.1 - object-keys: 1.1.1 - json-stringify-safe@5.0.1: {} json5@1.0.2: @@ -13480,8 +13453,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonify@0.0.1: {} - jsonparse@1.3.1: {} jsx-ast-utils@3.3.5: @@ -13501,10 +13472,6 @@ snapshots: kind-of@6.0.3: {} - klaw-sync@6.0.0: - dependencies: - graceful-fs: 4.2.11 - kleur@3.0.3: {} lazystream@1.0.1: @@ -14367,8 +14334,6 @@ snapshots: wcwidth: 1.0.1 optional: true - os-tmpdir@1.0.2: {} - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -14445,24 +14410,6 @@ snapshots: parseurl@1.3.3: {} - patch-package@8.0.0: - dependencies: - '@yarnpkg/lockfile': 1.1.0 - chalk: 4.1.2 - ci-info: 3.9.0 - cross-spawn: 7.0.6 - find-yarn-workspace-root: 2.0.0 - fs-extra: 9.1.0 - json-stable-stringify: 1.3.0 - klaw-sync: 6.0.0 - minimist: 1.2.8 - open: 7.4.2 - rimraf: 2.7.1 - semver: 7.7.2 - slash: 2.0.0 - tmp: 0.0.33 - yaml: 2.8.0 - path-exists@3.0.0: {} path-exists@4.0.0: {} @@ -14915,7 +14862,7 @@ snapshots: react-is@18.3.1: {} - react-native-action-button@2.8.5(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)): + react-native-action-button@2.8.5(patch_hash=593bb64b27425a7f3805ad9567928d1369fd4cf939ab5d3eb43411a759565c48)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)): dependencies: prop-types: 15.8.1 react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) @@ -14939,7 +14886,7 @@ snapshots: react: 18.2.0 react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) - react-native-camera@3.40.0: + react-native-camera@3.40.0(patch_hash=a1c648b476aee6b170796fa8d0614d3ebb16035bee5d516649c513c1fd584f59): dependencies: prop-types: 15.8.1 @@ -14948,7 +14895,7 @@ snapshots: prop-types: 15.8.1 react: 18.2.0 react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) - react-native-slider: 0.11.0 + react-native-slider: 0.11.0(patch_hash=899d0bc0de45e25eb7731c4e61ae23a5223c2e1654b7d020dfae1c70e61b32c6) tinycolor2: 1.6.0 react-native-device-info@14.0.4(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)): @@ -14971,7 +14918,7 @@ snapshots: react-native-geocoder@0.5.0: {} - react-native-gesture-handler@2.24.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0): + react-native-gesture-handler@2.24.0(patch_hash=10e538f7cf8a69122ef742c51cb8285f723512c9d8596d9bc6db6ebae0651573)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0): dependencies: '@egjs/hammerjs': 2.0.17 hoist-non-react-statics: 3.3.2 @@ -15073,11 +15020,11 @@ snapshots: dependencies: react-native-webview: 13.13.2(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) - react-native-slider@0.11.0: + react-native-slider@0.11.0(patch_hash=899d0bc0de45e25eb7731c4e61ae23a5223c2e1654b7d020dfae1c70e61b32c6): dependencies: prop-types: 15.8.1 - react-native-snap-carousel@3.9.1(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0): + react-native-snap-carousel@3.9.1(patch_hash=3a4c1b0f17629becc5d99ef1958df5a2f55c46e45f45670862aaeda12ab2f4e1)(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0): dependencies: prop-types: 15.8.1 react: 18.2.0 @@ -15677,8 +15624,6 @@ snapshots: slash@1.0.0: {} - slash@2.0.0: {} - slash@3.0.0: {} slice-ansi@2.1.0: @@ -15987,10 +15932,6 @@ snapshots: tinycolor2@1.6.0: {} - tmp@0.0.33: - dependencies: - os-tmpdir: 1.0.2 - tmp@0.2.5: {} tmpl@1.0.5: {} @@ -16663,7 +16604,8 @@ snapshots: yaml@1.10.2: {} - yaml@2.8.0: {} + yaml@2.8.0: + optional: true yargs-parser@18.1.3: dependencies: diff --git a/scripts/patch/patch-package.sh b/scripts/patch/patch-package.sh deleted file mode 100755 index 0f55330fc..000000000 --- a/scripts/patch/patch-package.sh +++ /dev/null @@ -1,10 +0,0 @@ -mkdir tmp -cd tmp -npm init -y -npm install --save "$1"@"$2" -rsync -av --exclude "node_modules" --delete "../node_modules/$1/" "./node_modules/$1/" -npx patch-package "$1" -mkdir -p ../patches -mv ./patches/* ../patches/ -cd .. -rm -rf tmp From 0052ff71df7b913c22e7acf8b2a8a23a72ee1672 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Wed, 27 Aug 2025 17:13:35 +0200 Subject: [PATCH 11/14] chore: use recommended userEvent instead of fireEvent; update dependencies --- .../feedback-native/package.json | 8 ++++---- .../feedback-native/src/Feedback.tsx | 4 ++-- .../src/__tests__/Feedback.spec.tsx | 15 +++++++++------ pnpm-lock.yaml | 16 ++++++++-------- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/pluggableWidgets/feedback-native/package.json b/packages/pluggableWidgets/feedback-native/package.json index de43d2dad..160608e14 100644 --- a/packages/pluggableWidgets/feedback-native/package.json +++ b/packages/pluggableWidgets/feedback-native/package.json @@ -20,14 +20,14 @@ }, "dependencies": { "@mendix/piw-native-utils-internal": "*", - "querystringify": "^2.1.1", - "react-native-dialog": "9.2.2", + "querystringify": "^2.2.0", + "react-native-dialog": "9.3.0", "react-native-view-shot": "4.0.3" }, "devDependencies": { "@mendix/piw-utils-internal": "1.0.0", "@mendix/pluggable-widgets-tools": "*", - "@types/querystringify": "^2.0.0", - "@types/react-native-dialog": "^5.5.0" + "@types/querystringify": "^2.0.2", + "@types/react-native-dialog": "^5.6.3" } } diff --git a/packages/pluggableWidgets/feedback-native/src/Feedback.tsx b/packages/pluggableWidgets/feedback-native/src/Feedback.tsx index 61203474f..77ee279ed 100644 --- a/packages/pluggableWidgets/feedback-native/src/Feedback.tsx +++ b/packages/pluggableWidgets/feedback-native/src/Feedback.tsx @@ -63,10 +63,10 @@ export class Feedback extends Component, State> { supportedOrientations: ["portrait", "landscape"] }; - componentDidMount() { + UNSAFE_componentDidMount() { Dimensions.addEventListener("change", this.updateDeviceHeight); } - componentDidUpdate(_: Readonly>, prevState: Readonly) { + UNSAFE_componentDidUpdate(_: Readonly>, prevState: Readonly) { if ( ["todo", "inprogress"].includes(prevState.status) && this.state.status === "closingDialog" && diff --git a/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx b/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx index 737fb7cdf..7821da3fd 100644 --- a/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx +++ b/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx @@ -1,5 +1,5 @@ import { FeedbackStyle } from "../ui/styles"; -import { fireEvent, render, waitFor, cleanup } from "@testing-library/react-native"; +import { render, cleanup, userEvent } from "@testing-library/react-native"; import { createElement } from "react"; import { FeedbackProps } from "../../typings/FeedbackProps"; import { Feedback } from "../Feedback"; @@ -52,12 +52,15 @@ describe("Feedback", () => { it("should call the api when sending", async () => { const feedbackMsg = "unittest"; + const user = userEvent.setup(); const component = render(); - fireEvent.press(component.getByTestId("feedback-test$button")); - await waitFor(() => { - fireEvent.changeText(component.getByTestId("feedback-test$input"), feedbackMsg); - }); - fireEvent.press(component.getByTestId("feedback-test$send")); + + await user.press(component.getByTestId("feedback-test$button")); + + await user.type(component.getByTestId("feedback-test$input"), feedbackMsg); + + await user.press(component.getByTestId("feedback-test$send")); + expect(fetch).toHaveBeenCalledWith( "https://feedback-api.mendix.com/rest/v3/feedbackapi/projects/sprintr-app-id/issues", { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b9912b8a..57287d2cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -477,11 +477,11 @@ importers: specifier: '*' version: link:../../tools/piw-native-utils-internal querystringify: - specifier: ^2.1.1 + specifier: ^2.2.0 version: 2.2.0 react-native-dialog: - specifier: 9.2.2 - version: 9.2.2(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)) + specifier: 9.3.0 + version: 9.3.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)) react-native-view-shot: specifier: 4.0.3 version: 4.0.3(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) @@ -493,10 +493,10 @@ importers: specifier: 10.21.1 version: 10.21.1(patch_hash=1e48df1c64ba081cf8f9067dd961b190124953e01649c78345c134bb31fe247c)(@jest/transform@29.7.0)(@jest/types@30.0.1)(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/babel__core@7.20.5)(@types/node@20.19.9)(encoding@0.1.13)(jest-util@30.0.2)(picomatch@4.0.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.8.1) '@types/querystringify': - specifier: ^2.0.0 + specifier: ^2.0.2 version: 2.0.2 '@types/react-native-dialog': - specifier: ^5.5.0 + specifier: ^5.6.3 version: 5.6.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react@18.2.0) packages/pluggableWidgets/floating-action-button-native: @@ -6426,8 +6426,8 @@ packages: peerDependencies: react-native: 0.77.3 - react-native-dialog@9.2.2: - resolution: {integrity: sha512-d2w3fyqB6G8Os0DYJKnfVl6PgqQwplW8dHSvzkQpczXzmX5V4BXOJTTXqoiKwI+nsS6QEHYb6Bk8VG7vV9WuXQ==} + react-native-dialog@9.3.0: + resolution: {integrity: sha512-JEOJY/0AzTM9grIl0BL8o/IJPIJru7k5MPj9POTE9RRezUEtgn0YSvCpTlBtG0obWgOdzg2otMz1OQvMXS0wMQ==} peerDependencies: react-native: 0.77.3 @@ -14902,7 +14902,7 @@ snapshots: dependencies: react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) - react-native-dialog@9.2.2(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)): + react-native-dialog@9.3.0(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0)): dependencies: react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) From cbbb730bdbb5cca9814b79a232c40bfedb972e48 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Wed, 27 Aug 2025 17:27:53 +0200 Subject: [PATCH 12/14] test: increase timeout for Feedback tests due to slow execution on GitHub --- .../feedback-native/src/__tests__/Feedback.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx b/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx index 7821da3fd..22c4a3a09 100644 --- a/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx +++ b/packages/pluggableWidgets/feedback-native/src/__tests__/Feedback.spec.tsx @@ -71,5 +71,5 @@ describe("Feedback", () => { referrer: "no-referrer" } ); - }); + }, 8000); // increased timeout due to slow test execution on Github }); From 390f695342b659baa1079a936a7243b3320c75eb Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 28 Aug 2025 10:28:00 +0200 Subject: [PATCH 13/14] refactor: rename unnecessary UNSAFE lifecycle methods --- packages/pluggableWidgets/feedback-native/src/Feedback.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/pluggableWidgets/feedback-native/src/Feedback.tsx b/packages/pluggableWidgets/feedback-native/src/Feedback.tsx index 77ee279ed..21b31cf08 100644 --- a/packages/pluggableWidgets/feedback-native/src/Feedback.tsx +++ b/packages/pluggableWidgets/feedback-native/src/Feedback.tsx @@ -63,10 +63,11 @@ export class Feedback extends Component, State> { supportedOrientations: ["portrait", "landscape"] }; - UNSAFE_componentDidMount() { + componentDidMount() { Dimensions.addEventListener("change", this.updateDeviceHeight); } - UNSAFE_componentDidUpdate(_: Readonly>, prevState: Readonly) { + + componentDidUpdate(_: Readonly>, prevState: Readonly) { if ( ["todo", "inprogress"].includes(prevState.status) && this.state.status === "closingDialog" && From 49fe8bda1c865b2b050e92e59771f9d502025319 Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Thu, 28 Aug 2025 15:37:53 +0200 Subject: [PATCH 14/14] chore: update @testing-library/react-native to version 13.3.3 --- package.json | 3 +-- pnpm-lock.yaml | 69 ++++++++++++++++++++++++++------------------------ 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index e1e7f3fef..ca20ced8a 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,7 @@ "@commitlint/cli": "^18.6.1", "@commitlint/config-conventional": "^18.6.3", "@react-native/babel-preset": "0.77.3", - "@testing-library/jest-native": "^5.4.3", - "@testing-library/react-native": "~13.0.1", + "@testing-library/react-native": "^13.3.3", "@types/big.js": "^6.2.2", "@types/concurrently": "^6.3.0", "@types/enzyme": "^3.10.18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57287d2cb..d1328205d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,12 +56,9 @@ importers: '@react-native/babel-preset': specifier: 0.77.3 version: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0)) - '@testing-library/jest-native': - specifier: ^5.4.3 - version: 5.4.3(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0) '@testing-library/react-native': - specifier: ~13.0.1 - version: 13.0.1(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^13.3.3 + version: 13.3.3(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0) '@types/big.js': specifier: ^6.2.2 version: 6.2.2 @@ -1955,6 +1952,10 @@ packages: resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/get-type@30.1.0': + resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/globals@29.7.0': resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2469,19 +2470,8 @@ packages: resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - '@testing-library/jest-native@5.4.3': - resolution: {integrity: sha512-/sSDGaOuE+PJ1Z9Kp4u7PQScSVVXGud59I/qsBFFJvIbcn4P6yYw6cBnBmbPF+X9aRIsTJRDl6gzw5ZkJNm66w==} - deprecated: |- - DEPRECATED: This package is no longer maintained. - Please use the built-in Jest matchers available in @testing-library/react-native v12.4+. - See migration guide: https://callstack.github.io/react-native-testing-library/docs/migration/jest-matchers - peerDependencies: - react: 18.2.0 - react-native: 0.77.3 - react-test-renderer: '>=16.0.0' - - '@testing-library/react-native@13.0.1': - resolution: {integrity: sha512-sKMRNNniSOZ68qe1OBQAWvK87WCEmbfLp/MXfn2JE3x3WrNU8OFCVL0z/YKqw0/JO/d44J8Wq6FmRSaod/+VAg==} + '@testing-library/react-native@13.3.3': + resolution: {integrity: sha512-k6Mjsd9dbZgvY4Bl7P1NIpePQNi+dfYtlJ5voi9KQlynxSyQkfOgJmYGCYmw/aSgH/rUcFvG8u5gd4npzgRDyg==} engines: {node: '>=18'} peerDependencies: jest: '>=29.0.0' @@ -4915,6 +4905,10 @@ packages: resolution: {integrity: sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-diff@30.1.1: + resolution: {integrity: sha512-LUU2Gx8EhYxpdzTR6BmjL1ifgOAQJQELTHOiPv9KITaKjZvJ9Jmgigx01tuZ49id37LorpGc9dPBPlXTboXScw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-docblock@29.7.0: resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4964,6 +4958,10 @@ packages: resolution: {integrity: sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-matcher-utils@30.1.1: + resolution: {integrity: sha512-SuH2QVemK48BNTqReti6FtjsMPFsSOD/ZzRxU1TttR7RiRsRSe78d03bb4Cx6D4bQC/80Q8U4VnaaAH9FlbZ9w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -9236,6 +9234,8 @@ snapshots: '@jest/get-type@30.0.1': {} + '@jest/get-type@30.1.0': {} + '@jest/globals@29.7.0': dependencies: '@jest/environment': 29.7.0 @@ -10085,22 +10085,11 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/jest-native@5.4.3(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)': + '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-matcher-utils: 29.7.0 - pretty-format: 29.7.0 - react: 18.2.0 - react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) - react-test-renderer: 18.2.0(react@18.2.0) - redent: 3.0.0 - - '@testing-library/react-native@13.0.1(jest@29.7.0(@types/node@20.19.9)(ts-node@10.9.2(@types/node@20.19.9)(typescript@5.8.3)))(react-native@0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - chalk: 4.1.2 - jest-matcher-utils: 29.7.0 - pretty-format: 29.7.0 + jest-matcher-utils: 30.1.1 + picocolors: 1.1.1 + pretty-format: 30.0.5 react: 18.2.0 react-native: 0.77.3(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@react-native-community/cli@14.1.0(typescript@5.8.3))(@types/react@18.3.23)(react@18.2.0) react-test-renderer: 18.2.0(react@18.2.0) @@ -13022,6 +13011,13 @@ snapshots: chalk: 4.1.2 pretty-format: 30.0.2 + jest-diff@30.1.1: + dependencies: + '@jest/diff-sequences': 30.0.1 + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + pretty-format: 30.0.5 + jest-docblock@29.7.0: dependencies: detect-newline: 3.1.0 @@ -13124,6 +13120,13 @@ snapshots: jest-diff: 30.0.4 pretty-format: 30.0.2 + jest-matcher-utils@30.1.1: + dependencies: + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + jest-diff: 30.1.1 + pretty-format: 30.0.5 + jest-message-util@29.7.0: dependencies: '@babel/code-frame': 7.27.1