diff --git a/configs/jsactions/rollup.config.mjs b/configs/jsactions/rollup.config.mjs index 29e99997c..94cc39bc7 100644 --- a/configs/jsactions/rollup.config.mjs +++ b/configs/jsactions/rollup.config.mjs @@ -138,6 +138,7 @@ export default async args => { const nativeExternal = [ /^mendix\//, + /^mendix-native(\/|$)/, /^react-native(\/|$)/, /^react-native-windows(\/|$)/, /^react-native-web(\/|$)/, diff --git a/packages/jsActions/mobile-resources-native/package.json b/packages/jsActions/mobile-resources-native/package.json index 0e6ec7bbb..2f6de732b 100644 --- a/packages/jsActions/mobile-resources-native/package.json +++ b/packages/jsActions/mobile-resources-native/package.json @@ -34,6 +34,7 @@ "@sbaiahmed1/react-native-biometrics": "0.15.0", "@swan-io/react-native-browser": "1.0.1", "fbjs": "3.0.4", + "mendix-native": "https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz", "mime": "3.0.0", "react-native-blob-util": "0.24.7", "react-native-device-info": "15.0.2", @@ -51,4 +52,4 @@ "mendix": "11.8.0", "rimraf": "^6.1.2" } -} \ No newline at end of file +} diff --git a/packages/jsActions/mobile-resources-native/src/camera/TakePicture.ts b/packages/jsActions/mobile-resources-native/src/camera/TakePicture.ts index f80254be5..a8f7d52e6 100644 --- a/packages/jsActions/mobile-resources-native/src/camera/TakePicture.ts +++ b/packages/jsActions/mobile-resources-native/src/camera/TakePicture.ts @@ -6,7 +6,8 @@ // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. import { Big } from "big.js"; -import { Alert, Linking, NativeModules, Platform } from "react-native"; +import { NativeFileSystem } from "mendix-native"; +import { Alert, Linking, Platform } from "react-native"; import { CameraOptions, ErrorCode, @@ -16,7 +17,8 @@ import { launchImageLibrary } from "react-native-image-picker"; import { getLocales } from "react-native-localize"; -import { ImagePickerV2Options, ImagePickerV2Response, PictureQuality, PictureSource } from "../../typings/Camera"; +import RNPermissions from "react-native-permissions"; +import { PictureQuality, PictureSource } from "../../typings/Camera"; // BEGIN EXTRA CODE // END EXTRA CODE @@ -56,8 +58,7 @@ export async function TakePicture( } // V3 dropped the feature of providing an action sheet so users can decide on which action to take, camera or library. - const nativeVersionMajor = NativeModules?.ImagePickerManager?.showImagePicker ? 2 : 4; - const RNPermissions = nativeVersionMajor === 4 ? (await import("react-native-permissions")).default : null; + // react-native-image-picker v7.2.3 is always v4+ (no legacy action sheet API) try { const uri = await takePicture(); @@ -77,32 +78,14 @@ export async function TakePicture( function takePicture(): Promise { return new Promise((resolve, reject) => { - const options = nativeVersionMajor === 2 ? getOptionsV2() : getOptions(); + const options = getOptions(); getPictureMethod() .then(method => - method(options, (response: ImagePickerV2Response | ImagePickerResponse) => { + method(options, (response: ImagePickerResponse) => { if (response.didCancel) { return resolve(undefined); } - if (nativeVersionMajor === 2) { - const responseV2 = response as ImagePickerV2Response; - - if (responseV2.error) { - const unhandledError = handleImagePickerV2Error(responseV2.error); - - if (!unhandledError) { - return resolve(undefined); - } - - return reject(new Error(responseV2.error)); - } - - return resolve(responseV2.uri); - } - - response = response as ImagePickerResponse; - if (response.errorCode) { handleImagePickerV4Error(response.errorCode, response.errorMessage); @@ -118,7 +101,7 @@ export async function TakePicture( async function safeRemove(filePath: string): Promise { try { - await NativeModules.MxFileSystem.remove(filePath); + await NativeFileSystem.remove(filePath); } catch (error) { console.warn(`Failed to remove file at ${filePath}. Error: ${error}`); // ignore error @@ -127,7 +110,7 @@ export async function TakePicture( function storeFile(imageObject: mendix.lib.MxObject, uri: string): Promise { return new Promise((resolve, reject) => { - NativeModules.MxFileSystem.read(uri.replace("file://", "")) + NativeFileSystem.read(uri.replace("file://", "")) .then((nativeBlob: unknown) => { const blob = new Blob(); Object.assign(blob, { data: nativeBlob }); @@ -169,13 +152,10 @@ export async function TakePicture( } async function getPictureMethod(): Promise< - ( - options: ImagePickerV2Options | CameraOptions | ImageLibraryOptions, - callback: (response: ImagePickerV2Response | ImagePickerResponse) => void - ) => void + (options: CameraOptions | ImageLibraryOptions, callback: (response: ImagePickerResponse) => void) => void > { async function handleCameraRequest(): Promise { - if (Platform.OS === "android" && nativeVersionMajor === 4) { + if (Platform.OS === "android") { await checkAndMaybeRequestAndroidPermission(); } @@ -225,38 +205,6 @@ export async function TakePicture( } } - function getOptionsV2(): ImagePickerV2Options { - const { maxWidth, maxHeight } = getPictureQuality(); - const [language] = getLocales().map(local => local.languageCode); - const isDutch = language === "nl"; - - return { - mediaType: "photo" as const, - maxWidth, - maxHeight, - noData: true, - title: isDutch ? "Foto toevoegen" : "Select a photo", - cancelButtonTitle: isDutch ? "Annuleren" : "Cancel", - takePhotoButtonTitle: isDutch ? "Foto maken" : "Take photo", - chooseFromLibraryButtonTitle: isDutch ? "Kies uit bibliotheek" : "Choose from library", - permissionDenied: { - title: isDutch - ? "Deze app heeft geen toegang tot uw camera of foto bibliotheek" - : "This app does not have access to your camera or photo library", - text: isDutch - ? "Ga naar Instellingen > Privacy om toegang tot uw camera en bestanden te verlenen." - : "To enable access, tap Settings > Privacy and turn on Camera and Photos/Storage.", - reTryTitle: isDutch ? "Instellingen" : "Settings", - okTitle: isDutch ? "Annuleren" : "Cancel" - }, - storageOptions: { - skipBackup: true, - cameraRoll: false, - privateDirectory: true - } - }; - } - function getOptions(): CameraOptions | ImageLibraryOptions { const { maxWidth, maxHeight } = getPictureQuality(); return { @@ -293,37 +241,6 @@ export async function TakePicture( } } - function handleImagePickerV2Error(error: string): string | undefined { - const ERRORS = { - AndroidPermissionDenied: "Permissions weren't granted", - iOSPhotoLibraryPermissionDenied: "Photo library permissions not granted", - iOSCameraPermissionDenied: "Camera permissions not granted" - }; - - switch (error) { - case ERRORS.iOSPhotoLibraryPermissionDenied: - showAlert( - "This app does not have access to your photo library", - "To enable access, tap Settings and turn on Photos." - ); - return; - - case ERRORS.iOSCameraPermissionDenied: - showAlert( - "This app does not have access to your camera", - "To enable access, tap Settings and turn on Camera." - ); - return; - - case ERRORS.AndroidPermissionDenied: - // Ignore this error because the image picker plugin already shows an alert in this case. - return; - - default: - return error; - } - } - function showAlert(title: string, message: string): void { Alert.alert( title, diff --git a/packages/jsActions/mobile-resources-native/src/camera/TakePictureAdvanced.ts b/packages/jsActions/mobile-resources-native/src/camera/TakePictureAdvanced.ts index d283dab5f..e4b77c894 100644 --- a/packages/jsActions/mobile-resources-native/src/camera/TakePictureAdvanced.ts +++ b/packages/jsActions/mobile-resources-native/src/camera/TakePictureAdvanced.ts @@ -6,7 +6,8 @@ // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. import { Big } from "big.js"; -import { Alert, Linking, NativeModules, Platform } from "react-native"; +import { NativeFileSystem } from "mendix-native"; +import { Alert, Linking, Platform } from "react-native"; import { CameraOptions, ErrorCode, @@ -15,8 +16,8 @@ import { launchCamera, launchImageLibrary } from "react-native-image-picker"; -import { getLocales } from "react-native-localize"; -import { ImagePickerV2Options, ImagePickerV2Response, PictureQuality, PictureSource } from "../../typings/Camera"; +import RNPermissions from "react-native-permissions"; +import { PictureQuality, PictureSource } from "../../typings/Camera"; // BEGIN EXTRA CODE // END EXTRA CODE @@ -46,7 +47,6 @@ export async function TakePictureAdvanced( maximumHeight?: Big ): Promise { // BEGIN USER CODE - if (!picture) { return Promise.reject(new Error("Input parameter 'Picture' is required")); } @@ -62,63 +62,35 @@ export async function TakePictureAdvanced( } // V3 dropped the feature of providing an action sheet so users can decide on which action to take, camera or library. - const nativeVersionMajor = NativeModules?.ImagePickerManager?.showImagePicker ? 2 : 4; - const RNPermissions = nativeVersionMajor === 4 ? (await import("react-native-permissions")).default : null; + // react-native-image-picker v7.2.3 is always v4+ (no legacy action sheet API) const resultObject = await createMxObject("NativeMobileResources.ImageMetaData"); try { const response = await takePicture(); - let pictureTaken: boolean; - - if (nativeVersionMajor === 2) { - const responseV2 = response as ImagePickerV2Response; - - if (!responseV2 || !responseV2.uri) { - return Promise.resolve(resultObject); - } - const responseV2Uri = responseV2.uri; - - pictureTaken = await storeFile(picture, responseV2Uri); - - resultObject.set("PictureTaken", pictureTaken); - resultObject.set("URI", responseV2Uri); - resultObject.set("IsVertical", responseV2.isVertical); - resultObject.set("Width", responseV2.width); - resultObject.set("Height", responseV2.height); - resultObject.set( - "FileName", - // eslint-disable-next-line no-useless-escape - responseV2.fileName ? responseV2.fileName : /[^\/]*$/.exec(responseV2Uri)![0] - ); - resultObject.set("FileSize", responseV2.fileSize); - resultObject.set("FileType", responseV2.type); - } else { - const responseV1 = response as ImagePickerResponse; - if (!responseV1 || !responseV1.assets || !responseV1.assets[0] || !responseV1.assets[0].uri) { - return Promise.resolve(resultObject); - } - const responseV1Assets = responseV1.assets[0]; - const responseV1Uri = responseV1.assets[0].uri; - - pictureTaken = await storeFile(picture, responseV1Uri); - - resultObject.set("PictureTaken", pictureTaken); - resultObject.set("URI", responseV1Uri); - // Note: V4 asset doesn't include isVertical - resultObject.set("Width", responseV1Assets.width); - resultObject.set("Height", responseV1Assets.height); - resultObject.set( - "FileName", - responseV1Assets.fileName - ? responseV1Assets.fileName - : // eslint-disable-next-line no-useless-escape - /[^\/]*$/.exec(responseV1Uri)![0] - ); - resultObject.set("FileSize", responseV1Assets.fileSize); - resultObject.set("FileType", responseV1Assets.type); + if (!response || !response.assets || !response.assets[0] || !response.assets[0].uri) { + return Promise.resolve(resultObject); } + const asset = response.assets[0]; + const uri = response.assets[0].uri; + const pictureTaken = await storeFile(picture, uri); + + resultObject.set("PictureTaken", pictureTaken); + resultObject.set("URI", uri); + // Note: V4 asset doesn't include isVertical + resultObject.set("Width", asset.width); + resultObject.set("Height", asset.height); + resultObject.set( + "FileName", + asset.fileName + ? asset.fileName + : // eslint-disable-next-line no-useless-escape + /[^\/]*$/.exec(uri)![0] + ); + resultObject.set("FileSize", asset.fileSize); + resultObject.set("FileType", asset.type); + return Promise.resolve(resultObject); } catch (error) { if (error === "canceled") { @@ -128,34 +100,16 @@ export async function TakePictureAdvanced( } } - function takePicture(): Promise { + function takePicture(): Promise { return new Promise((resolve, reject) => { - const options = nativeVersionMajor === 2 ? getOptionsV2() : getOptions(); + const options = getOptions(); getPictureMethod() .then(method => - method(options, (response: ImagePickerV2Response | ImagePickerResponse) => { + method(options, (response: ImagePickerResponse) => { if (response.didCancel) { return resolve(undefined); } - if (nativeVersionMajor === 2) { - const responseV2 = response as ImagePickerV2Response; - - if (responseV2.error) { - const unhandledError = handleImagePickerV2Error(responseV2.error); - - if (!unhandledError) { - return resolve(undefined); - } - - return reject(new Error(responseV2.error)); - } - - return resolve(responseV2); - } - - response = response as ImagePickerResponse; - if (response.errorCode) { handleImagePickerV4Error(response.errorCode, response.errorMessage); @@ -171,7 +125,7 @@ export async function TakePictureAdvanced( async function safeRemove(filePath: string): Promise { try { - await NativeModules.MxFileSystem.remove(filePath); + await NativeFileSystem.remove(filePath); } catch (error) { console.warn(`Failed to remove file at ${filePath}. Error: ${error}`); // ignore error @@ -180,7 +134,7 @@ export async function TakePictureAdvanced( function storeFile(imageObject: mendix.lib.MxObject, uri: string): Promise { return new Promise((resolve, reject) => { - NativeModules.MxFileSystem.read(uri.replace("file://", "")) + NativeFileSystem.read(uri.replace("file://", "")) .then((nativeBlob: unknown) => { const blob = new Blob(); Object.assign(blob, { data: nativeBlob }); @@ -222,13 +176,10 @@ export async function TakePictureAdvanced( } async function getPictureMethod(): Promise< - ( - options: ImagePickerV2Options | CameraOptions | ImageLibraryOptions, - callback: (response: ImagePickerV2Response | ImagePickerResponse) => void - ) => void + (options: CameraOptions | ImageLibraryOptions, callback: (response: ImagePickerResponse) => void) => void > { async function handleCameraRequest(): Promise { - if (Platform.OS === "android" && nativeVersionMajor === 4) { + if (Platform.OS === "android") { await checkAndMaybeRequestAndroidPermission(); } @@ -278,38 +229,6 @@ export async function TakePictureAdvanced( } } - function getOptionsV2(): ImagePickerV2Options { - const { maxWidth, maxHeight } = getPictureQuality(); - const [language] = getLocales().map(local => local.languageCode); - const isDutch = language === "nl"; - - return { - mediaType: "photo" as const, - maxWidth, - maxHeight, - noData: true, - title: isDutch ? "Foto toevoegen" : "Select a photo", - cancelButtonTitle: isDutch ? "Annuleren" : "Cancel", - takePhotoButtonTitle: isDutch ? "Foto maken" : "Take photo", - chooseFromLibraryButtonTitle: isDutch ? "Kies uit bibliotheek" : "Choose from library", - permissionDenied: { - title: isDutch - ? "Deze app heeft geen toegang tot uw camera of foto bibliotheek" - : "This app does not have access to your camera or photo library", - text: isDutch - ? "Ga naar Instellingen > Privacy om toegang tot uw camera en bestanden te verlenen." - : "To enable access, tap Settings > Privacy and turn on Camera and Photos/Storage.", - reTryTitle: isDutch ? "Instellingen" : "Settings", - okTitle: isDutch ? "Annuleren" : "Cancel" - }, - storageOptions: { - skipBackup: true, - cameraRoll: false, - privateDirectory: true - } - }; - } - function getOptions(): CameraOptions | ImageLibraryOptions { const { maxWidth, maxHeight } = getPictureQuality(); return { @@ -346,37 +265,6 @@ export async function TakePictureAdvanced( } } - function handleImagePickerV2Error(error: string): string | undefined { - const ERRORS = { - AndroidPermissionDenied: "Permissions weren't granted", - iOSPhotoLibraryPermissionDenied: "Photo library permissions not granted", - iOSCameraPermissionDenied: "Camera permissions not granted" - }; - - switch (error) { - case ERRORS.iOSPhotoLibraryPermissionDenied: - showAlert( - "This app does not have access to your photo library", - "To enable access, tap Settings and turn on Photos." - ); - return; - - case ERRORS.iOSCameraPermissionDenied: - showAlert( - "This app does not have access to your camera", - "To enable access, tap Settings and turn on Camera." - ); - return; - - case ERRORS.AndroidPermissionDenied: - // Ignore this error because the image picker plugin already shows an alert in this case. - return; - - default: - return error; - } - } - function showAlert(title: string, message: string): void { Alert.alert( title, diff --git a/packages/jsActions/mobile-resources-native/src/notifications/CancelAllScheduledNotifications.ts b/packages/jsActions/mobile-resources-native/src/notifications/CancelAllScheduledNotifications.ts index 5c73fddfb..b1efbc3e6 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/CancelAllScheduledNotifications.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/CancelAllScheduledNotifications.ts @@ -5,7 +5,6 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { NativeModules } from "react-native"; import notifee from "react-native-notify-kit"; // BEGIN EXTRA CODE @@ -18,9 +17,6 @@ import notifee from "react-native-notify-kit"; export async function CancelAllScheduledNotifications(): Promise { // BEGIN USER CODE // Documentation https://github.com/invertase/notifee - if (NativeModules && !NativeModules.NotifeeApiModule) { - return Promise.reject(new Error("Notifee native module is not available in your app")); - } notifee.cancelAllNotifications(); return Promise.resolve(); diff --git a/packages/jsActions/mobile-resources-native/src/notifications/CancelScheduledNotification.ts b/packages/jsActions/mobile-resources-native/src/notifications/CancelScheduledNotification.ts index 976a41741..63da389c6 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/CancelScheduledNotification.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/CancelScheduledNotification.ts @@ -5,7 +5,6 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { NativeModules } from "react-native"; import notifee from "react-native-notify-kit"; // BEGIN EXTRA CODE @@ -18,9 +17,6 @@ import notifee from "react-native-notify-kit"; export async function CancelScheduledNotification(notificationId?: string): Promise { // BEGIN USER CODE // Documentation Documentation https://github.com/invertase/notifee - if (NativeModules && !NativeModules.NotifeeApiModule) { - return Promise.reject(new Error("Notifee native module is not available in your app")); - } if (!notificationId) { return Promise.reject(new Error("Input parameter 'Notification id' is required")); diff --git a/packages/jsActions/mobile-resources-native/src/notifications/ClearAllDeliveredNotifications.ts b/packages/jsActions/mobile-resources-native/src/notifications/ClearAllDeliveredNotifications.ts index 5a940939b..c26554327 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/ClearAllDeliveredNotifications.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/ClearAllDeliveredNotifications.ts @@ -5,7 +5,6 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { NativeModules } from "react-native"; import notifee from "react-native-notify-kit"; // BEGIN EXTRA CODE @@ -18,9 +17,6 @@ import notifee from "react-native-notify-kit"; export async function ClearAllDeliveredNotifications(): Promise { // BEGIN USER CODE // Documentation Documentation https://github.com/invertase/notifee - if (NativeModules && !NativeModules.NotifeeApiModule) { - return Promise.reject(new Error("Notifee native module is not available in your app")); - } notifee.cancelAllNotifications(); diff --git a/packages/jsActions/mobile-resources-native/src/notifications/DisplayNotification.ts b/packages/jsActions/mobile-resources-native/src/notifications/DisplayNotification.ts index 39c40ed69..e0eb4556d 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/DisplayNotification.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/DisplayNotification.ts @@ -5,7 +5,7 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { NativeModules, Platform } from "react-native"; +import { Platform } from "react-native"; import notifee, { AndroidChannel, AndroidImportance, Notification } from "react-native-notify-kit"; // BEGIN EXTRA CODE @@ -37,9 +37,6 @@ export async function DisplayNotification( } // Documentation Documentation https://github.com/invertase/notifee - if (NativeModules && !NativeModules.NotifeeApiModule) { - return Promise.reject(new Error("Notifee native module is not available in your app")); - } const channelId = playSound ? "mendix-local-notifications-withsound" : "mendix-local-notifications"; await createNotificationChannelIfNeeded(channelId); diff --git a/packages/jsActions/mobile-resources-native/src/notifications/GetPushNotificationToken.ts b/packages/jsActions/mobile-resources-native/src/notifications/GetPushNotificationToken.ts index a395b5e3b..4cb908407 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/GetPushNotificationToken.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/GetPushNotificationToken.ts @@ -5,7 +5,6 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { NativeModules } from "react-native"; import messaging from "@react-native-firebase/messaging"; // BEGIN EXTRA CODE @@ -19,10 +18,6 @@ export async function getPushNotificationToken(): Promise { // BEGIN USER CODE // Documentation https://rnfirebase.io/docs/v5.x.x/messaging/reference/Messaging#getToken - if (NativeModules && !NativeModules.RNFBMessagingModule) { - return Promise.reject(new Error("Firebase module is not available in your app")); - } - return messaging().getToken(); // END USER CODE diff --git a/packages/jsActions/mobile-resources-native/src/notifications/HasNotificationPermission.ts b/packages/jsActions/mobile-resources-native/src/notifications/HasNotificationPermission.ts index d1598b170..9b25af11a 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/HasNotificationPermission.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/HasNotificationPermission.ts @@ -5,7 +5,7 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { NativeModules } from "react-native"; +import messaging from "@react-native-firebase/messaging"; // BEGIN EXTRA CODE // END EXTRA CODE @@ -18,7 +18,6 @@ import { NativeModules } from "react-native"; export async function HasNotificationPermission(): Promise { // BEGIN USER CODE // Documentation https://rnfirebase.io/docs/v5.x.x/notifications/receiving-notifications - const enum permissionStatus { NotDetermined = -1, Denied = 0, @@ -28,17 +27,15 @@ export async function HasNotificationPermission(): Promise { const allowedAuthorizationStatuses = [permissionStatus.Authorized, permissionStatus.Provisional]; - if (NativeModules && !NativeModules.RNFBMessagingModule) { - return Promise.reject(new Error("Firebase module is not available in your app")); - } - - return NativeModules.RNFBMessagingModule.hasPermission().then((authStatus: number) => { - if (allowedAuthorizationStatuses.includes(authStatus)) { - return Promise.resolve(true); - } else { - return Promise.resolve(false); - } - }); + return messaging() + .hasPermission() + .then((authStatus: number) => { + if (allowedAuthorizationStatuses.includes(authStatus)) { + return Promise.resolve(true); + } else { + return Promise.resolve(false); + } + }); // END USER CODE } diff --git a/packages/jsActions/mobile-resources-native/src/notifications/RequestNotificationPermission.ts b/packages/jsActions/mobile-resources-native/src/notifications/RequestNotificationPermission.ts index 36fddaa9c..04b28c4d0 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/RequestNotificationPermission.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/RequestNotificationPermission.ts @@ -5,7 +5,7 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { NativeModules, PermissionsAndroid, Platform } from "react-native"; +import { PermissionsAndroid, Platform } from "react-native"; import messaging from "@react-native-firebase/messaging"; // BEGIN EXTRA CODE @@ -20,10 +20,6 @@ export async function RequestNotificationPermission(): Promise { // BEGIN USER CODE // Documentation https://rnfirebase.io/messaging/usage - if (NativeModules && !NativeModules.RNFBMessagingModule) { - return Promise.reject(new Error("Firebase module is not available in your app")); - } - if (Platform.OS === "android") { try { const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS); diff --git a/packages/jsActions/mobile-resources-native/src/notifications/SetBadgeNumber.ts b/packages/jsActions/mobile-resources-native/src/notifications/SetBadgeNumber.ts index 93c3d533e..50fafae35 100644 --- a/packages/jsActions/mobile-resources-native/src/notifications/SetBadgeNumber.ts +++ b/packages/jsActions/mobile-resources-native/src/notifications/SetBadgeNumber.ts @@ -6,7 +6,6 @@ // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. import { Big } from "big.js"; -import { NativeModules } from "react-native"; import notifee from "react-native-notify-kit"; // BEGIN EXTRA CODE @@ -20,10 +19,6 @@ export async function SetBadgeNumber(badgeNumber?: Big): Promise { // BEGIN USER CODE // Documentation Documentation https://github.com/invertase/notifee - if (NativeModules && !NativeModules.NotifeeApiModule) { - return Promise.reject(new Error("Notifee native module is not available in your app")); - } - if (!badgeNumber) { return Promise.reject(new Error("Input parameter 'Badge number' is required")); } diff --git a/packages/jsActions/mobile-resources-native/src/permissions/CheckGenericPermission.ts b/packages/jsActions/mobile-resources-native/src/permissions/CheckGenericPermission.ts index 2fca380aa..68e38fcbd 100644 --- a/packages/jsActions/mobile-resources-native/src/permissions/CheckGenericPermission.ts +++ b/packages/jsActions/mobile-resources-native/src/permissions/CheckGenericPermission.ts @@ -5,8 +5,8 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { Platform, NativeModules } from "react-native"; -import { check, Permission, PERMISSIONS as RNPermissions } from "react-native-permissions"; +import { Platform } from "react-native"; +import { check, Permission, PERMISSIONS as RNPermissions, canScheduleExactAlarms } from "react-native-permissions"; import { ANDROIDPermissionName, IOSPermissionName } from "../../typings/RequestGenericPermission"; // BEGIN EXTRA CODE @@ -32,23 +32,12 @@ function mapPermissionName(permissionName: string): Permission | "android.permis } async function checkScheduleAlarm(): Promise<"granted" | "blocked"> { - if (NativeModules && !NativeModules.ScheduleEA) { - return Promise.reject(new Error("ScheduleEA module is not available in your app")); - } - if (Platform.OS !== "android") { return Promise.resolve("granted"); } - const checkPermissionPromise = new Promise(resolve => { - NativeModules.ScheduleEA.checkPermission((isEnabled: boolean) => { - resolve(isEnabled); - }); - }); - - return checkPermissionPromise.then(result => { - return Promise.resolve(result ? "granted" : "blocked"); - }); + const canSchedule = await canScheduleExactAlarms(); + return canSchedule ? "granted" : "blocked"; } // END EXTRA CODE diff --git a/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts b/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts index e6fb1f165..748875160 100644 --- a/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts +++ b/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts @@ -5,7 +5,7 @@ // - the code between BEGIN USER CODE and END USER CODE // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. -import { Alert, Platform, NativeModules } from "react-native"; +import { Alert, Platform } from "react-native"; import { check, request, @@ -66,23 +66,12 @@ function mapPermissionName(permissionName: string): Permission | "android.permis } async function checkScheduleAlarm(): Promise<"granted" | "blocked"> { - if (NativeModules && !NativeModules.ScheduleEA) { - return Promise.reject(new Error("ScheduleEA module is not available in your app")); - } - if (Platform.OS !== "android") { return Promise.resolve("granted"); } - const checkPermissionPromise = new Promise(resolve => { - NativeModules.ScheduleEA.checkPermission((isEnabled: boolean) => { - resolve(isEnabled); - }); - }); - - return checkPermissionPromise.then(result => { - return Promise.resolve(result ? "granted" : "blocked"); - }); + const canSchedule = await canScheduleExactAlarms(); + return canSchedule ? "granted" : "blocked"; } // END EXTRA CODE diff --git a/packages/jsActions/nanoflow-actions-native/package.json b/packages/jsActions/nanoflow-actions-native/package.json index aab00c76f..b3d43b1b9 100644 --- a/packages/jsActions/nanoflow-actions-native/package.json +++ b/packages/jsActions/nanoflow-actions-native/package.json @@ -30,6 +30,7 @@ "js-base64": "~3.7.2", "react-native-nitro-geolocation": "1.4.3", "react-native-nitro-modules": "0.36.1", + "mendix-native": "https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz", "react-native-permissions": "5.5.1", "react-native-geocoder": "0.5.0" }, diff --git a/packages/jsActions/nanoflow-actions-native/src/other/Base64DecodeToImage.ts b/packages/jsActions/nanoflow-actions-native/src/other/Base64DecodeToImage.ts index 8a8f5c4cf..ea6a789b7 100644 --- a/packages/jsActions/nanoflow-actions-native/src/other/Base64DecodeToImage.ts +++ b/packages/jsActions/nanoflow-actions-native/src/other/Base64DecodeToImage.ts @@ -6,8 +6,6 @@ // - the code between BEGIN EXTRA CODE and END EXTRA CODE // Other code you write will be lost the next time you deploy the project. import { Base64 } from "js-base64"; -import RNBlobUtil from "react-native-blob-util"; -import { NativeModules } from "react-native"; // BEGIN EXTRA CODE // END EXTRA CODE @@ -31,6 +29,9 @@ export async function Base64DecodeToImage(base64: string, image: mendix.lib.MxOb // Native platform if (navigator && navigator.product === "ReactNative") { try { + const { NativeFileSystem } = await import("mendix-native"); + const RNBlobUtil = (await import("react-native-blob-util")).default; + // Remove data URI prefix if present (e.g., "data:image/png;base64,") let cleanBase64 = base64; if (base64.includes(",")) { @@ -56,7 +57,7 @@ export async function Base64DecodeToImage(base64: string, image: mendix.lib.MxOb // NativeFileBackend.storeFile calls NativeFileSystem.save(blob.data, path) // and blob.close() — a plain object has no .data getter or .close(), which // crashes iOS via [NSInvocation invokeWithTarget:]. - const nativeBlob = await NativeModules.MxFileSystem.read(tempPath.replace("file://", "")); + const nativeBlob = await NativeFileSystem.read(tempPath.replace("file://", "")); // Normalize: MxFileSystem.read may return 'length' instead of 'size'. const blobData = { ...(nativeBlob as any) }; if (blobData.size === undefined && blobData.length !== undefined) { @@ -79,11 +80,15 @@ export async function Base64DecodeToImage(base64: string, image: mendix.lib.MxOb {}, fileBlob, () => { - RNBlobUtil.fs.unlink(tempPath).catch(e => console.info("Temp file cleanup failed:", e)); + RNBlobUtil.fs + .unlink(tempPath) + .catch((e: unknown) => console.info("Temp file cleanup failed:", e)); resolve(true); }, error => { - RNBlobUtil.fs.unlink(tempPath).catch(e => console.info("Temp file cleanup failed:", e)); + RNBlobUtil.fs + .unlink(tempPath) + .catch((e: unknown) => console.info("Temp file cleanup failed:", e)); reject(error); } ); diff --git a/packages/pluggableWidgets/video-player-native/package.json b/packages/pluggableWidgets/video-player-native/package.json index 7366a18df..b2669d957 100644 --- a/packages/pluggableWidgets/video-player-native/package.json +++ b/packages/pluggableWidgets/video-player-native/package.json @@ -21,6 +21,7 @@ "dependencies": { "@react-native-vector-icons/material-icons": "12.4.1", "@mendix/piw-native-utils-internal": "*", + "mendix-native": "https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz", "react-native-video": "6.19.2" }, "devDependencies": { diff --git a/packages/pluggableWidgets/video-player-native/src/VideoPlayer.tsx b/packages/pluggableWidgets/video-player-native/src/VideoPlayer.tsx index b28358669..f94ec2021 100644 --- a/packages/pluggableWidgets/video-player-native/src/VideoPlayer.tsx +++ b/packages/pluggableWidgets/video-player-native/src/VideoPlayer.tsx @@ -1,4 +1,5 @@ import { flattenStyles } from "@mendix/piw-native-utils-internal"; +import { AndroidNavigationBar } from "mendix-native"; import { ReactElement, useEffect, useRef, useState, Fragment, useCallback, useMemo } from "react"; import { ActivityIndicator, @@ -9,7 +10,6 @@ import { View, Appearance, Modal, - NativeModules, Pressable } from "react-native"; import Video, { OnProgressData, ReactVideoProps, VideoRef } from "react-native-video"; @@ -87,8 +87,7 @@ export function VideoPlayer(props: VideoPlayerProps): ReactElement { async function fullScreenHandler(isFullScreen: boolean): Promise { setFullScreen(isFullScreen); - const { NavigationBar } = NativeModules; - if (NavigationBar) { + if (AndroidNavigationBar.isActive) { if (isFullScreen) { StatusBar.setHidden(true); } else { diff --git a/packages/pluggableWidgets/video-player-native/src/__tests__/VideoPlayer.spec.tsx b/packages/pluggableWidgets/video-player-native/src/__tests__/VideoPlayer.spec.tsx index 42177b85e..77c52c9e8 100644 --- a/packages/pluggableWidgets/video-player-native/src/__tests__/VideoPlayer.spec.tsx +++ b/packages/pluggableWidgets/video-player-native/src/__tests__/VideoPlayer.spec.tsx @@ -9,6 +9,10 @@ import { VideoStyle } from "../ui/Styles"; jest.useFakeTimers(); jest.mock("react-native-video", () => "Video"); +// The real module resolves the MxNavigation TurboModule at import time, which is unavailable under Jest. +jest.mock("mendix-native", () => ({ + AndroidNavigationBar: { isActive: true, height: 24 } +})); describe("VideoPlayer", () => { let defaultProps: VideoPlayerProps; diff --git a/patches/@mendix__pluggable-widgets-tools@11.12.0.patch b/patches/@mendix__pluggable-widgets-tools@11.12.0.patch index 6f88831f7..bb5caa96b 100644 --- a/patches/@mendix__pluggable-widgets-tools@11.12.0.patch +++ b/patches/@mendix__pluggable-widgets-tools@11.12.0.patch @@ -62,7 +62,7 @@ diff --git a/configs/rollup.config.native.mjs b/configs/rollup.config.native.mjs index 62c5c82ddbd628e5d22709660f26e82855ddfceb..927c8e729238f8cb2971b752c2ccace3d9464606 100644 --- a/configs/rollup.config.native.mjs +++ b/configs/rollup.config.native.mjs -@@ -52,9 +52,9 @@ const nativeExternal = [ +@@ -52,9 +52,10 @@ const nativeExternal = [ /^react($|\/)/, /^react-native-gesture-handler($|\/)/, /^react-native-reanimated($|\/)/, @@ -71,6 +71,7 @@ index 62c5c82ddbd628e5d22709660f26e82855ddfceb..927c8e729238f8cb2971b752c2ccace3 /^react-native-svg($|\/)/, - /^react-native-vector-icons($|\/)/, + /^@react-native-vector-icons\/common($|\/)/, ++ /^mendix-native($|\/)/, /^@?react-navigation($|\/)/, /^react-native-safe-area-context($|\/)/, /^@d11\/react-native-fast-image($|\/)/ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8ea79e01..af5407f67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,7 @@ overrides: patchedDependencies: '@mendix/pluggable-widgets-tools@11.12.0': - hash: cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf + hash: 904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930 path: patches/@mendix__pluggable-widgets-tools@11.12.0.patch react-native-gesture-handler@2.31.2: hash: 5be6c2cce8be6bd8afdbbf6c289d8b210686eafce0b41bf8cae2c29388aaa3b8 @@ -143,6 +143,9 @@ importers: fbjs: specifier: 3.0.4 version: 3.0.4(encoding@0.1.13) + mendix-native: + specifier: https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz + version: https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz(@op-engineering/op-sqlite@18.2.1(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(@react-native-async-storage/async-storage@2.2.0(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)))(react-native-gesture-handler@2.31.2(patch_hash=5be6c2cce8be6bd8afdbbf6c289d8b210686eafce0b41bf8cae2c29388aaa3b8)(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) mime: specifier: 3.0.0 version: 3.0.0 @@ -176,7 +179,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/querystringify': specifier: ^2.0.0 version: 2.0.2 @@ -198,6 +201,9 @@ importers: js-base64: specifier: ~3.7.2 version: 3.7.8 + mendix-native: + specifier: https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz + version: https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz(@op-engineering/op-sqlite@18.2.1(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(@react-native-async-storage/async-storage@2.2.0(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)))(react-native-gesture-handler@2.31.2(patch_hash=5be6c2cce8be6bd8afdbbf6c289d8b210686eafce0b41bf8cae2c29388aaa3b8)(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) react-native-geocoder: specifier: 0.5.0 version: 0.5.0 @@ -213,7 +219,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) mendix: specifier: 11.8.0 version: 11.8.0 @@ -222,7 +228,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) concurrently: specifier: ^6.0.0 version: 6.5.1 @@ -244,7 +250,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/activity-indicator-native: dependencies: @@ -257,7 +263,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/animation-native: dependencies: @@ -273,7 +279,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/app-events-native: dependencies: @@ -289,7 +295,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/background-gradient-native: dependencies: @@ -302,7 +308,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/background-image-native: dependencies: @@ -315,7 +321,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/badge-native: dependencies: @@ -328,7 +334,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/bar-chart-native: dependencies: @@ -341,7 +347,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/barcode-scanner-native: dependencies: @@ -360,7 +366,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/bottom-sheet-native: dependencies: @@ -391,7 +397,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/react-native-actionsheet': specifier: ^2.4.1 version: 2.4.7 @@ -416,7 +422,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/react-native-snap-carousel': specifier: ^3.7.4 version: 3.8.12(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)) @@ -444,7 +450,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/tinycolor2': specifier: ^1.4.1 version: 1.4.6 @@ -460,7 +466,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/feedback-native: dependencies: @@ -482,7 +488,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/querystringify': specifier: ^2.0.2 version: 2.0.2 @@ -501,7 +507,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/gallery-native: dependencies: @@ -517,7 +523,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/gallery-text-filter-native: dependencies: @@ -533,7 +539,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/image-native: dependencies: @@ -558,7 +564,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/intro-screen-native: dependencies: @@ -580,7 +586,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/line-chart-native: dependencies: @@ -593,7 +599,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/listview-swipe-native: dependencies: @@ -609,7 +615,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/maps-native: dependencies: @@ -631,7 +637,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/notifications-native: dependencies: @@ -650,7 +656,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/pie-doughnut-chart-native: dependencies: @@ -663,7 +669,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/popup-menu-native: dependencies: @@ -679,7 +685,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/react-native-material-menu': specifier: ^1.0.6 version: 1.0.10(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(react@19.2.3) @@ -698,7 +704,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/progress-circle-native: dependencies: @@ -714,7 +720,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/qr-code-native: dependencies: @@ -733,7 +739,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/radio-buttons-native: dependencies: @@ -746,7 +752,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/range-slider-native: dependencies: @@ -762,7 +768,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/rating-native: dependencies: @@ -781,7 +787,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/react-native-star-rating': specifier: ^1.1.6 version: 1.1.6(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(react@19.2.3) @@ -797,7 +803,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/safe-area-view-native: dependencies: @@ -816,7 +822,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/signature-native: dependencies: @@ -835,7 +841,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/slider-native: dependencies: @@ -851,7 +857,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/switch-native: dependencies: @@ -864,7 +870,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/toggle-buttons-native: dependencies: @@ -883,7 +889,7 @@ importers: version: 7.29.7(@babel/core@7.29.7) '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/pluggableWidgets/video-player-native: dependencies: @@ -893,6 +899,9 @@ importers: '@react-native-vector-icons/material-icons': specifier: 12.4.1 version: 12.4.1(@react-native-vector-icons/get-image@12.3.0(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) + mendix-native: + specifier: https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz + version: https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz(@op-engineering/op-sqlite@18.2.1(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(@react-native-async-storage/async-storage@2.2.0(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)))(react-native-gesture-handler@2.31.2(patch_hash=5be6c2cce8be6bd8afdbbf6c289d8b210686eafce0b41bf8cae2c29388aaa3b8)(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) react-native-video: specifier: 6.19.2 version: 6.19.2(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) @@ -902,7 +911,7 @@ importers: version: link:../../tools/piw-utils-internal '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) '@types/react-native-video': specifier: ^5.0.4 version: 5.0.21(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)) @@ -921,13 +930,13 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) packages/tools/piw-native-utils-internal: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) rimraf: specifier: ^6.1.2 version: 6.1.3 @@ -936,7 +945,7 @@ importers: devDependencies: '@mendix/pluggable-widgets-tools': specifier: 11.12.0 - version: 11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) + version: 11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1) rimraf: specifier: ^6.1.2 version: 6.1.3 @@ -2062,6 +2071,16 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@op-engineering/op-sqlite@18.2.1': + resolution: {integrity: sha512-atVOtXyFzO0e454eVS27AMwRs515URCKrkvLLG+mGKcyiF5UPfC53oukpNp2UmVzlLebyTEXNkTYs6n0dVGd0g==} + peerDependencies: + '@sqlite.org/sqlite-wasm': '*' + react: 19.2.3 + react-native: 0.84.1 + peerDependenciesMeta: + '@sqlite.org/sqlite-wasm': + optional: true + '@parcel/watcher-android-arm64@2.6.0': resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} engines: {node: '>= 10.0.0'} @@ -5445,6 +5464,16 @@ packages: mendix-client@7.15.8: resolution: {integrity: sha512-RazCdCHoLVNKUUeKDkSkIL6Lxx6fUaa4iiy+Ltp9ra8mLQhwyNqD33TIN7YZJ3HDjHc3eWh9cjiZWwh6Jg/cQg==} + mendix-native@https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz: + resolution: {tarball: https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz} + version: 0.5.2 + peerDependencies: + '@op-engineering/op-sqlite': '*' + '@react-native-async-storage/async-storage': '*' + react: 19.2.3 + react-native: 0.84.1 + react-native-gesture-handler: '*' + mendix@11.8.0: resolution: {integrity: sha512-txq9wAuVcXpGCCbBzwtmb7afFpQzv4j6qccDoS1eMYe1JH9Pu/jpe4EsyfSSimoSgtSi55iG9wa+Iuy2M2RDgw==} @@ -9313,7 +9342,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@mendix/pluggable-widgets-tools@11.12.0(patch_hash=cac90aed34fd19a0a6f1475c31d66a807c1e123ddf7116b44bf4b1f29ebe11bf)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1)': + '@mendix/pluggable-widgets-tools@11.12.0(patch_hash=904ae66b3260903146147eebb4e7f360c42fb82a07f24669a71dc5331aade930)(@jest/transform@30.3.0)(@jest/types@30.4.1)(@types/babel__core@7.20.5)(@types/node@20.19.43)(jest-util@30.4.1)(jiti@2.6.1)(picomatch@4.0.5)(react-dom@19.2.3(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)(tslib@2.8.1)': dependencies: '@babel/core': 7.29.7 '@babel/eslint-parser': 7.29.7(@babel/core@7.29.7)(eslint@9.39.4(jiti@2.6.1)) @@ -9445,6 +9474,11 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@op-engineering/op-sqlite@18.2.1(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)': + dependencies: + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) + '@parcel/watcher-android-arm64@2.6.0': optional: true @@ -13418,6 +13452,14 @@ snapshots: '@types/big.js': 0.0.31 '@types/dojo': 1.9.49 + mendix-native@https://github.com/mendix/mendix-native/releases/download/v0.5.2/mendix-native-v0.5.2.tgz(@op-engineering/op-sqlite@18.2.1(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(@react-native-async-storage/async-storage@2.2.0(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)))(react-native-gesture-handler@2.31.2(patch_hash=5be6c2cce8be6bd8afdbbf6c289d8b210686eafce0b41bf8cae2c29388aaa3b8)(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3): + dependencies: + '@op-engineering/op-sqlite': 18.2.1(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) + '@react-native-async-storage/async-storage': 2.2.0(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3)) + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) + react-native-gesture-handler: 2.31.2(patch_hash=5be6c2cce8be6bd8afdbbf6c289d8b210686eafce0b41bf8cae2c29388aaa3b8)(react-native@0.84.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.1(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) + mendix@11.8.0: dependencies: '@types/big.js': 6.2.2