diff --git a/.changeset/frank-experts-battle.md b/.changeset/frank-experts-battle.md new file mode 100644 index 00000000000..7394f61c463 --- /dev/null +++ b/.changeset/frank-experts-battle.md @@ -0,0 +1,80 @@ +--- +'@uifabricshared/foundation-composable': patch +'@fluentui-react-native/experimental-appearance-additions': patch +'@uifabricshared/theming-react-native': patch +'@uifabricshared/foundation-settings': patch +'@fluentui-react-native/experimental-activity-indicator': patch +'@fluentui-react-native/experimental-native-font-metrics': patch +'@uifabricshared/foundation-compose': patch +'@fluentui-react-native/experimental-native-date-picker': patch +'@uifabricshared/foundation-tokens': patch +'@fluentui-react-native/themed-stylesheet': patch +'@uifabricshared/themed-settings': patch +'@fluentui-react-native/contextual-menu': patch +'@uifabricshared/theme-registry': patch +'@fluentui-react-native/vibrancy-view': patch +'@fluentui-react-native/immutable-merge': patch +'@fluentui-react-native/focus-trap-zone': patch +'@fluentui-react-native/notification': patch +'@uifabricshared/theming-ramp': patch +'@fluentui-react-native/experimental-menu-button': patch +'@fluentui-react-native/persona-coin': patch +'@fluentui-react-native/menu-button': patch +'@fluentui-react-native/radio-group': patch +'@fluentui-react-native/experimental-checkbox': patch +'@fluentui-react-native/dropdown': patch +'@fluentui-react-native/experimental-expander': patch +'@fluentui-react-native/overflow': patch +'@fluentui-react-native/composition': patch +'@fluentui-react-native/merge-props': patch +'@fluentui-react-native/use-styling': patch +'@fluentui-react-native/android-theme': patch +'@fluentui-react-native/default-theme': patch +'@fluentui-react-native/theming-utils': patch +'@fluentui-react-native/focus-zone': patch +'@fluentui-react-native/pressable': patch +'@fluentui-react-native/separator': patch +'@fluentui-react-native/popover': patch +'@fluentui-react-native/experimental-shimmer': patch +'@fluentui-react-native/spinner': patch +'@fluentui-react-native/tooltip': patch +'@fluentui-react-native/memo-cache': patch +'@fluentui-react-native/use-tokens': patch +'@fluentui-react-native/theme-tokens': patch +'@fluentui-react-native/checkbox': patch +'@fluentui-react-native/experimental-avatar': patch +'@fluentui-react-native/drawer': patch +'@fluentui-react-native/experimental-shadow': patch +'@fluentui-react-native/framework': patch +'@fluentui-react-native/use-slots': patch +'@fluentui-react-native/apple-theme': patch +'@fluentui-react-native/theme-types': patch +'@fluentui-react-native/win32-theme': patch +'@fluentui-react-native/callout': patch +'@fluentui-react-native/divider': patch +'@fluentui-react-native/persona': patch +'@fluentui-react-native/tablist': patch +'@fluentui-react-native/kit-config': patch +'@fluentui-react-native/experimental-stack': patch +'@fluentui-react-native/use-slot': patch +'@fluentui-react-native/avatar': patch +'@fluentui-react-native/button': patch +'@fluentui-react-native/switch': patch +'@fluentui-react-native/badge': patch +'@fluentui-react-native/input': patch +'@fluentui-react-native/stack': patch +'@fluentui-react-native/chip': patch +'@fluentui-react-native/icon': patch +'@fluentui-react-native/link': patch +'@fluentui-react-native/menu': patch +'@fluentui-react-native/text': patch +'@fluentui-react-native/theme': patch +'@fluentui-react-native/framework-base': patch +'@fluentui/react-native': patch +'@fluentui-react-native/adapters': patch +'@fluentui-react-native/styling-utils': patch +'@fluentui-react-native/tokens': patch +'@fluentui-react-native/scripts': patch +--- + +We were pinning @types/react and react-native-macos via resolutions. This fixes that which uncovered a bunch of type inconsistencies that needed to be addressed. diff --git a/.changeset/swift-zebras-know.md b/.changeset/swift-zebras-know.md new file mode 100644 index 00000000000..5c20461082f --- /dev/null +++ b/.changeset/swift-zebras-know.md @@ -0,0 +1,5 @@ +--- +'@fluentui-react-native/interactive-hooks': minor +--- + +Get rid of old internal pressable implementation in favor of using implementation from react-native. diff --git a/apps/E2E/package.json b/apps/E2E/package.json index 44aea0d00df..9a877d03327 100644 --- a/apps/E2E/package.json +++ b/apps/E2E/package.json @@ -85,6 +85,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -94,6 +95,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/apps/fluent-tester/macos/Podfile.lock b/apps/fluent-tester/macos/Podfile.lock index 7c7dba5db47..04063b2b44d 100644 --- a/apps/fluent-tester/macos/Podfile.lock +++ b/apps/fluent-tester/macos/Podfile.lock @@ -1,7 +1,7 @@ PODS: - boost (1.83.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.74.30) + - FBLazyVector (0.74.37) - fmt (9.1.0) - FRNAvatar (0.21.19): - MicrosoftFluentUI (= 0.13.1) @@ -122,29 +122,29 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.74.30) + - RCTDeprecation (0.74.37) - RCTFocusZone (0.21.15): - React - - RCTRequired (0.74.30) - - RCTTypeSafety (0.74.30): - - FBLazyVector (= 0.74.30) - - RCTRequired (= 0.74.30) - - React-Core (= 0.74.30) - - React (0.74.30): - - React-Core (= 0.74.30) - - React-Core/DevSupport (= 0.74.30) - - React-Core/RCTWebSocket (= 0.74.30) - - React-RCTActionSheet (= 0.74.30) - - React-RCTAnimation (= 0.74.30) - - React-RCTBlob (= 0.74.30) - - React-RCTImage (= 0.74.30) - - React-RCTLinking (= 0.74.30) - - React-RCTNetwork (= 0.74.30) - - React-RCTSettings (= 0.74.30) - - React-RCTText (= 0.74.30) - - React-RCTVibration (= 0.74.30) - - React-callinvoker (0.74.30) - - React-Codegen (0.74.30): + - RCTRequired (0.74.37) + - RCTTypeSafety (0.74.37): + - FBLazyVector (= 0.74.37) + - RCTRequired (= 0.74.37) + - React-Core (= 0.74.37) + - React (0.74.37): + - React-Core (= 0.74.37) + - React-Core/DevSupport (= 0.74.37) + - React-Core/RCTWebSocket (= 0.74.37) + - React-RCTActionSheet (= 0.74.37) + - React-RCTAnimation (= 0.74.37) + - React-RCTBlob (= 0.74.37) + - React-RCTImage (= 0.74.37) + - React-RCTLinking (= 0.74.37) + - React-RCTNetwork (= 0.74.37) + - React-RCTSettings (= 0.74.37) + - React-RCTText (= 0.74.37) + - React-RCTVibration (= 0.74.37) + - React-callinvoker (0.74.37) + - React-Codegen (0.74.37): - DoubleConversion - glog - RCT-Folly @@ -164,11 +164,11 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.74.30): + - React-Core (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.30) + - React-Core/Default (= 0.74.37) - React-cxxreact - React-featureflags - React-jsc @@ -180,7 +180,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/CoreModulesHeaders (0.74.30): + - React-Core/CoreModulesHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -196,7 +196,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/Default (0.74.30): + - React-Core/Default (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -211,12 +211,12 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/DevSupport (0.74.30): + - React-Core/DevSupport (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.30) - - React-Core/RCTWebSocket (= 0.74.30) + - React-Core/Default (= 0.74.37) + - React-Core/RCTWebSocket (= 0.74.37) - React-cxxreact - React-featureflags - React-jsc @@ -228,7 +228,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.74.30): + - React-Core/RCTActionSheetHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -244,7 +244,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTAnimationHeaders (0.74.30): + - React-Core/RCTAnimationHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -260,7 +260,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTBlobHeaders (0.74.30): + - React-Core/RCTBlobHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -276,7 +276,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTImageHeaders (0.74.30): + - React-Core/RCTImageHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -292,7 +292,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTLinkingHeaders (0.74.30): + - React-Core/RCTLinkingHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -308,7 +308,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTNetworkHeaders (0.74.30): + - React-Core/RCTNetworkHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -324,7 +324,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTSettingsHeaders (0.74.30): + - React-Core/RCTSettingsHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -340,7 +340,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTTextHeaders (0.74.30): + - React-Core/RCTTextHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -356,7 +356,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTVibrationHeaders (0.74.30): + - React-Core/RCTVibrationHeaders (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -372,11 +372,11 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTWebSocket (0.74.30): + - React-Core/RCTWebSocket (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.30) + - React-Core/Default (= 0.74.37) - React-cxxreact - React-featureflags - React-jsc @@ -388,35 +388,35 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-CoreModules (0.74.30): + - React-CoreModules (0.74.37): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.74.30) + - RCTTypeSafety (= 0.74.37) - React-Codegen - - React-Core/CoreModulesHeaders (= 0.74.30) - - React-jsi (= 0.74.30) + - React-Core/CoreModulesHeaders (= 0.74.37) + - React-jsi (= 0.74.37) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.74.30) + - React-RCTImage (= 0.74.37) - ReactCommon - SocketRocket (= 0.7.0) - - React-cxxreact (0.74.30): + - React-cxxreact (0.74.37): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.30) - - React-debug (= 0.74.30) - - React-jsi (= 0.74.30) + - React-callinvoker (= 0.74.37) + - React-debug (= 0.74.37) + - React-jsi (= 0.74.37) - React-jsinspector - - React-logger (= 0.74.30) - - React-perflogger (= 0.74.30) - - React-runtimeexecutor (= 0.74.30) - - React-debug (0.74.30) - - React-Fabric (0.74.30): + - React-logger (= 0.74.37) + - React-perflogger (= 0.74.37) + - React-runtimeexecutor (= 0.74.37) + - React-debug (0.74.37) + - React-Fabric (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -426,20 +426,20 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.74.30) - - React-Fabric/attributedstring (= 0.74.30) - - React-Fabric/componentregistry (= 0.74.30) - - React-Fabric/componentregistrynative (= 0.74.30) - - React-Fabric/components (= 0.74.30) - - React-Fabric/core (= 0.74.30) - - React-Fabric/imagemanager (= 0.74.30) - - React-Fabric/leakchecker (= 0.74.30) - - React-Fabric/mounting (= 0.74.30) - - React-Fabric/scheduler (= 0.74.30) - - React-Fabric/telemetry (= 0.74.30) - - React-Fabric/templateprocessor (= 0.74.30) - - React-Fabric/textlayoutmanager (= 0.74.30) - - React-Fabric/uimanager (= 0.74.30) + - React-Fabric/animations (= 0.74.37) + - React-Fabric/attributedstring (= 0.74.37) + - React-Fabric/componentregistry (= 0.74.37) + - React-Fabric/componentregistrynative (= 0.74.37) + - React-Fabric/components (= 0.74.37) + - React-Fabric/core (= 0.74.37) + - React-Fabric/imagemanager (= 0.74.37) + - React-Fabric/leakchecker (= 0.74.37) + - React-Fabric/mounting (= 0.74.37) + - React-Fabric/scheduler (= 0.74.37) + - React-Fabric/telemetry (= 0.74.37) + - React-Fabric/templateprocessor (= 0.74.37) + - React-Fabric/textlayoutmanager (= 0.74.37) + - React-Fabric/uimanager (= 0.74.37) - React-graphics - React-jsc - React-jsi @@ -449,7 +449,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.74.30): + - React-Fabric/animations (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -468,7 +468,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.74.30): + - React-Fabric/attributedstring (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -487,7 +487,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.74.30): + - React-Fabric/componentregistry (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -506,7 +506,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.74.30): + - React-Fabric/componentregistrynative (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -525,7 +525,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.74.30): + - React-Fabric/components (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -535,17 +535,17 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/inputaccessory (= 0.74.30) - - React-Fabric/components/legacyviewmanagerinterop (= 0.74.30) - - React-Fabric/components/modal (= 0.74.30) - - React-Fabric/components/rncore (= 0.74.30) - - React-Fabric/components/root (= 0.74.30) - - React-Fabric/components/safeareaview (= 0.74.30) - - React-Fabric/components/scrollview (= 0.74.30) - - React-Fabric/components/text (= 0.74.30) - - React-Fabric/components/textinput (= 0.74.30) - - React-Fabric/components/unimplementedview (= 0.74.30) - - React-Fabric/components/view (= 0.74.30) + - React-Fabric/components/inputaccessory (= 0.74.37) + - React-Fabric/components/legacyviewmanagerinterop (= 0.74.37) + - React-Fabric/components/modal (= 0.74.37) + - React-Fabric/components/rncore (= 0.74.37) + - React-Fabric/components/root (= 0.74.37) + - React-Fabric/components/safeareaview (= 0.74.37) + - React-Fabric/components/scrollview (= 0.74.37) + - React-Fabric/components/text (= 0.74.37) + - React-Fabric/components/textinput (= 0.74.37) + - React-Fabric/components/unimplementedview (= 0.74.37) + - React-Fabric/components/view (= 0.74.37) - React-graphics - React-jsc - React-jsi @@ -555,7 +555,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/inputaccessory (0.74.30): + - React-Fabric/components/inputaccessory (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -574,7 +574,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.74.30): + - React-Fabric/components/legacyviewmanagerinterop (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -593,7 +593,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/modal (0.74.30): + - React-Fabric/components/modal (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -612,7 +612,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/rncore (0.74.30): + - React-Fabric/components/rncore (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -631,7 +631,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.74.30): + - React-Fabric/components/root (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -650,7 +650,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/safeareaview (0.74.30): + - React-Fabric/components/safeareaview (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -669,7 +669,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.74.30): + - React-Fabric/components/scrollview (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -688,7 +688,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/text (0.74.30): + - React-Fabric/components/text (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -707,7 +707,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/textinput (0.74.30): + - React-Fabric/components/textinput (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -726,7 +726,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/unimplementedview (0.74.30): + - React-Fabric/components/unimplementedview (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -745,7 +745,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.74.30): + - React-Fabric/components/view (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -765,7 +765,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.74.30): + - React-Fabric/core (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -784,7 +784,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.74.30): + - React-Fabric/imagemanager (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -803,7 +803,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.74.30): + - React-Fabric/leakchecker (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -822,7 +822,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.74.30): + - React-Fabric/mounting (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -841,7 +841,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.74.30): + - React-Fabric/scheduler (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -860,7 +860,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.74.30): + - React-Fabric/telemetry (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -879,7 +879,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.74.30): + - React-Fabric/templateprocessor (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -898,7 +898,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/textlayoutmanager (0.74.30): + - React-Fabric/textlayoutmanager (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -918,7 +918,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.74.30): + - React-Fabric/uimanager (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog @@ -937,33 +937,33 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricImage (0.74.30): + - React-FabricImage (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.74.30) - - RCTTypeSafety (= 0.74.30) + - RCTRequired (= 0.74.37) + - RCTTypeSafety (= 0.74.37) - React-Fabric - React-graphics - React-ImageManager - React-jsc - React-jsi - - React-jsiexecutor (= 0.74.30) + - React-jsiexecutor (= 0.74.37) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.74.30) - - React-graphics (0.74.30): + - React-featureflags (0.74.37) + - React-graphics (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly/Fabric (= 2024.01.01.00) - - React-Core/Default (= 0.74.30) + - React-Core/Default (= 0.74.37) - React-utils - - React-ImageManager (0.74.30): + - React-ImageManager (0.74.37): - glog - RCT-Folly/Fabric - React-Core/Default @@ -972,47 +972,47 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jsc (0.74.30): - - React-jsc/Fabric (= 0.74.30) - - React-jsi (= 0.74.30) - - React-jsc/Fabric (0.74.30): - - React-jsi (= 0.74.30) - - React-jserrorhandler (0.74.30): + - React-jsc (0.74.37): + - React-jsc/Fabric (= 0.74.37) + - React-jsi (= 0.74.37) + - React-jsc/Fabric (0.74.37): + - React-jsi (= 0.74.37) + - React-jserrorhandler (0.74.37): - RCT-Folly/Fabric (= 2024.01.01.00) - React-debug - React-jsi - React-Mapbuffer - - React-jsi (0.74.30): + - React-jsi (0.74.37): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.74.30): + - React-jsiexecutor (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.74.30) - - React-jsi (= 0.74.30) + - React-cxxreact (= 0.74.37) + - React-jsi (= 0.74.37) - React-jsinspector - - React-perflogger (= 0.74.30) - - React-jsinspector (0.74.30): + - React-perflogger (= 0.74.37) + - React-jsinspector (0.74.37): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-runtimeexecutor (= 0.74.30) - - React-jsitracing (0.74.30): + - React-runtimeexecutor (= 0.74.37) + - React-jsitracing (0.74.37): - React-jsi - - React-logger (0.74.30): + - React-logger (0.74.37): - glog - - React-Mapbuffer (0.74.30): + - React-Mapbuffer (0.74.37): - glog - React-debug - - React-nativeconfig (0.74.30) - - React-NativeModulesApple (0.74.30): + - React-nativeconfig (0.74.37) + - React-NativeModulesApple (0.74.37): - glog - React-callinvoker - React-Core @@ -1023,10 +1023,10 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.74.30) - - React-RCTActionSheet (0.74.30): - - React-Core/RCTActionSheetHeaders (= 0.74.30) - - React-RCTAnimation (0.74.30): + - React-perflogger (0.74.37) + - React-RCTActionSheet (0.74.37): + - React-Core/RCTActionSheetHeaders (= 0.74.37) + - React-RCTAnimation (0.74.37): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1034,7 +1034,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTAppDelegate (0.74.30): + - React-RCTAppDelegate (0.74.37): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -1057,7 +1057,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (0.74.30): + - React-RCTBlob (0.74.37): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) @@ -1069,7 +1069,7 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.74.30): + - React-RCTFabric (0.74.37): - glog - RCT-Folly/Fabric (= 2024.01.01.00) - React-Core @@ -1089,7 +1089,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.74.30): + - React-RCTImage (0.74.37): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1098,14 +1098,14 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.74.30): + - React-RCTLinking (0.74.37): - React-Codegen - - React-Core/RCTLinkingHeaders (= 0.74.30) - - React-jsi (= 0.74.30) + - React-Core/RCTLinkingHeaders (= 0.74.37) + - React-jsi (= 0.74.37) - React-NativeModulesApple - ReactCommon - - ReactCommon/turbomodule/core (= 0.74.30) - - React-RCTNetwork (0.74.30): + - ReactCommon/turbomodule/core (= 0.74.37) + - React-RCTNetwork (0.74.37): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1113,7 +1113,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTSettings (0.74.30): + - React-RCTSettings (0.74.37): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1121,23 +1121,23 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTText (0.74.30): - - React-Core/RCTTextHeaders (= 0.74.30) + - React-RCTText (0.74.37): + - React-Core/RCTTextHeaders (= 0.74.37) - Yoga - - React-RCTVibration (0.74.30): + - React-RCTVibration (0.74.37): - RCT-Folly (= 2024.01.01.00) - React-Codegen - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-rendererdebug (0.74.30): + - React-rendererdebug (0.74.37): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.74.30) - - React-RuntimeApple (0.74.30): + - React-rncore (0.74.37) + - React-RuntimeApple (0.74.37): - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker - React-Core/Default @@ -1154,7 +1154,7 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-utils - - React-RuntimeCore (0.74.30): + - React-RuntimeCore (0.74.37): - glog - RCT-Folly/Fabric (= 2024.01.01.00) - React-cxxreact @@ -1167,9 +1167,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.74.30): - - React-jsi (= 0.74.30) - - React-runtimescheduler (0.74.30): + - React-runtimeexecutor (0.74.37): + - React-jsi (= 0.74.37) + - React-runtimescheduler (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - React-callinvoker @@ -1181,48 +1181,48 @@ PODS: - React-rendererdebug - React-runtimeexecutor - React-utils - - React-utils (0.74.30): + - React-utils (0.74.37): - glog - RCT-Folly (= 2024.01.01.00) - React-debug - React-jsc - - React-jsi (= 0.74.30) - - ReactCommon (0.74.30): - - ReactCommon/turbomodule (= 0.74.30) - - ReactCommon/turbomodule (0.74.30): + - React-jsi (= 0.74.37) + - ReactCommon (0.74.37): + - ReactCommon/turbomodule (= 0.74.37) + - ReactCommon/turbomodule (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.30) - - React-cxxreact (= 0.74.30) - - React-jsi (= 0.74.30) - - React-logger (= 0.74.30) - - React-perflogger (= 0.74.30) - - ReactCommon/turbomodule/bridging (= 0.74.30) - - ReactCommon/turbomodule/core (= 0.74.30) - - ReactCommon/turbomodule/bridging (0.74.30): + - React-callinvoker (= 0.74.37) + - React-cxxreact (= 0.74.37) + - React-jsi (= 0.74.37) + - React-logger (= 0.74.37) + - React-perflogger (= 0.74.37) + - ReactCommon/turbomodule/bridging (= 0.74.37) + - ReactCommon/turbomodule/core (= 0.74.37) + - ReactCommon/turbomodule/bridging (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.30) - - React-cxxreact (= 0.74.30) - - React-jsi (= 0.74.30) - - React-logger (= 0.74.30) - - React-perflogger (= 0.74.30) - - ReactCommon/turbomodule/core (0.74.30): + - React-callinvoker (= 0.74.37) + - React-cxxreact (= 0.74.37) + - React-jsi (= 0.74.37) + - React-logger (= 0.74.37) + - React-perflogger (= 0.74.37) + - ReactCommon/turbomodule/core (0.74.37): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.30) - - React-cxxreact (= 0.74.30) - - React-debug (= 0.74.30) - - React-jsi (= 0.74.30) - - React-logger (= 0.74.30) - - React-perflogger (= 0.74.30) - - React-utils (= 0.74.30) + - React-callinvoker (= 0.74.37) + - React-cxxreact (= 0.74.37) + - React-debug (= 0.74.37) + - React-jsi (= 0.74.37) + - React-logger (= 0.74.37) + - React-perflogger (= 0.74.37) + - React-utils (= 0.74.37) - ReactNativeHost (0.5.16): - DoubleConversion - glog @@ -1459,7 +1459,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 0686b6af8cbd638c784fea5afb789be66699823c DoubleConversion: 5b92c4507c560bb62e7aa1acdf2785ea3ff08b3b - FBLazyVector: 0aa0591844f7fe4736f3aba70d30232edbd21eb5 + FBLazyVector: 5f17e32a39da9146ff32e90cff4e9ebd8b5c3b54 fmt: 03574da4b7ba40de39da59677ca66610ce8c4a02 FRNAvatar: 52551ea22dbc7be5ecd21abf2baa8b2e3035fc34 FRNCallout: cc743e926cdb77dfbfb6af71dd955badb32fcd1a @@ -1470,58 +1470,58 @@ SPEC CHECKSUMS: glog: ba31c1afa7dcf1915a109861bccdb4421be6175b MicrosoftFluentUI: dde98d8ed3fc306d9ddd0a6f0bc0c1f24fe5275e RCT-Folly: f47da9a444aae485a0528b3bccf0336156009d60 - RCTDeprecation: 6c1d8fdaf3e34933c33a56531bd984bc2d22ef9e + RCTDeprecation: 88f29fc8fbe38e5bff2e65223eac24450ade59ab RCTFocusZone: 07730c51b3fc190dba495b849c9b4d9b1919268c - RCTRequired: 5266165e3b6c7ca1554c5a75fb4c1ebe1bc60b53 - RCTTypeSafety: ced894df76a17b8f7331d24e2efa862a7a616e89 - React: 620dbf1e10232c8517a8b89d0def5b29e04ad24e - React-callinvoker: 2acdef913c1f95efd31abb7943c9ba95264497a3 - React-Codegen: b9bf96d15be30413bfbab145bdf9b19781babe97 - React-Core: 769a8aac4e3842027b1bf1913441ab81498583b0 - React-CoreModules: fef7b8696d658c6f45241de38d836a20e4fe26d5 - React-cxxreact: e44b194dceaf0b8176b322560a17f5530a53e91f - React-debug: cd8417cf1363057a261984741e86b8f07b4e9be9 - React-Fabric: ca53a54d9c7138a80fd7417b36f53c0a6388ae7a - React-FabricImage: 4042b57a0a0e6e9fdf036e89613c75edbf7c1116 - React-featureflags: 4de8b7256d2bdb74fc6ea58051c92478018e476f - React-graphics: 8096ba154141cd468e2681b767094691fed9e294 - React-ImageManager: 850b16a9e95638fe95e519d7bb9b46f9f3f5fc25 - React-jsc: ea5bcb8a0fbd873d2788bb96b3933a09a76f5669 - React-jserrorhandler: 684315bd8f5c19050fc09a14813ce041a8fdf06d - React-jsi: 1eee71aadfb4cf3d3b9a130a271b1e89674e4e56 - React-jsiexecutor: f33d6f9fff135f52b13fe2f969661586ba057942 - React-jsinspector: 31388fd89cca136399aff0512d41ad20c0d607a4 - React-jsitracing: 590634360e531aaf4d58b6337b6997a74f37282f - React-logger: 1e26b5757eacd2f51328b43a8acc798e27db8070 - React-Mapbuffer: 4fca6e11ce13e34271765095390a669b6599c80a - React-nativeconfig: e5fb68ec1fa7c403d5bcdefa55f86ee7e0f7cf60 - React-NativeModulesApple: b76921054c2d4dcd55350aac725c67042e7ffc81 - React-perflogger: 42e83e40801bfe5811a9a71ba5120ddd93c66260 - React-RCTActionSheet: 9096e3f3ea68c7f5496e5532b653883c0cd9748e - React-RCTAnimation: 7384358e889dc47f8c63a7ba9b7f8fc07fbdef04 - React-RCTAppDelegate: c30206b0dabe9a236fd92db382bc7ac97fb795ee - React-RCTBlob: 69d98edaff10e9e59b072b48abe922d7eeb901e1 - React-RCTFabric: 7d1e184cf5658cbc909745af859bc84d0d7f5dca - React-RCTImage: 46d1f3e42be092107713634ef970e80bca94ae33 - React-RCTLinking: 4d9d67c8df21909a74e5e50b9c066d6b1af16317 - React-RCTNetwork: 52ca6953ada0553f67ee898f81b2440d54facb92 - React-RCTSettings: 33e3d84bbbcbc153eb830914fb491aaa79a6e7b2 - React-RCTText: 9c149e4eda53eef41654302898b05b43d65b657f - React-RCTVibration: 86c08aeb5c674fb42745388640294a9f178e7aa1 - React-rendererdebug: 06c40e7a73dbab9ae4ab3e013f3efe526152cc8a - React-rncore: ae38e87dda8ec897624c9b82a0e0cfda88381a17 - React-RuntimeApple: 0e1d2a039346f612ae49a82fbea48c8561ca106a - React-RuntimeCore: 184a3f3dad9c9f5552e5c1e7e0d277b92a2b8714 - React-runtimeexecutor: c9ec6bcf34f47eaec8c098e66302f195970772cf - React-runtimescheduler: abda2da3b75a17017ba04f034deb9cf0eef16734 - React-utils: ac5abf4d2d95d579be3b63fa44b46af2ca38544b - ReactCommon: 1eab570cb54edc279d28066475dbcf7e5b44c29e + RCTRequired: 2736889bc024f33cd9157e06e092ee59848e7f45 + RCTTypeSafety: c6f4b53a571b819ef18b3d8c5fa7f57d588102c6 + React: 9ddfaba3bb7d30eb3c23b043443543b3b9db8b04 + React-callinvoker: 033098992550e4c966b6c1174bd83d01d83fb44c + React-Codegen: 02cfe7693bcaa659be62f39c67a74742c08e6a83 + React-Core: 9f74d6d9c5052c7a53c0d8e2d7962fb36c47b72c + React-CoreModules: 5f84f230ab0fe7a9f6b757c5c27eacfad0e93575 + React-cxxreact: baf769a36b97845c991ad464c448a586084f6792 + React-debug: 063bfefe155929aaceab119d8dc55aba74b75924 + React-Fabric: 6d53995152fae83d6ea9aa708bfe3770ddbbb6c2 + React-FabricImage: 7ada63796445c7850d1bac79580e37bc4dd5a425 + React-featureflags: 716bbce04b2ba9e7f8b2a759862007103a5843a8 + React-graphics: a1f0cbbb82e0d27965d4babbdbba338c1f4fd755 + React-ImageManager: c3bb87afa26795c488e74934db168c69f9897e17 + React-jsc: b88058f2b21b96679fb7a4c68bd902bcc084f89a + React-jserrorhandler: 63b39b6d7315cb02286fee144df8dbb8162a1310 + React-jsi: 9e30d042a0d32a5cd4015155fbbbd886f91f9a3e + React-jsiexecutor: 02c49a213211874377fd777138721ee242db0cfe + React-jsinspector: 5e4d4f1c9e2decfa6b1c76f495c6ba2ff4020255 + React-jsitracing: b93cbcccb9ab85e4c778f56b77b1429073a73c5b + React-logger: 314351acd130046e7f72e3edf3141b035005bdc3 + React-Mapbuffer: 46a90302a34fd2f1ed31028388aee7b5d69faf66 + React-nativeconfig: c292c7c3b8c83c46c23bdfda8949750479b43f77 + React-NativeModulesApple: 5fb1fbfc403c12362cff0addb31e9e0f899be0cc + React-perflogger: cef2a86147e47618221ca9ad91c198f675235fc1 + React-RCTActionSheet: 13f69488b22244acbdab4e8548b8a4e61f1aabbe + React-RCTAnimation: 96868c0a419ebf7b8e886b3bf8efd394baed6490 + React-RCTAppDelegate: b8238819e2630a61141604dbe773a16575262a04 + React-RCTBlob: 514e3899c53a76e3a12b66559172f6a6f8ccb0bf + React-RCTFabric: 6f3ce25f14016ba7f75afc197dfc102e6dc4473d + React-RCTImage: 782aae7a46ccbad58f552cc92fb9379bf5a4a9f6 + React-RCTLinking: 8468aad3a18280b15c8577e99c09779652935be3 + React-RCTNetwork: 71c5168cfba4ee643890a7ee65db39c8184efd62 + React-RCTSettings: 40a5a3f90ffe2e92d8acbe1dd1710a9ff29ecc84 + React-RCTText: bbd86f4e3156185e971c5cb801d5f0d05c384c3c + React-RCTVibration: 81cb9b14e72907a78452f2b485f552599796ceab + React-rendererdebug: 1052f9df062f076d3dae1a5e13c6a9610dfb364f + React-rncore: 844cb4ef1bc9b46d802fab69de8f5d3b9385080f + React-RuntimeApple: 3b5d7e3c4995317cb00c183793f37085cb0ca5df + React-RuntimeCore: fd550c904695f6e79fb812a25f14df81306499a9 + React-runtimeexecutor: 3d42e199f052bd16a724798ccc303be6f85755ca + React-runtimescheduler: 259cc660010f02d35aa4675e448c194667cdafd2 + React-utils: c1a7c0646cbd13a6578fdbbbfb8caca3f3d5cafe + ReactCommon: cf91cce7c7039e8a2275be58b63d5cb594c903e2 ReactNativeHost: 4296c5d13fdcafb9cb53f2f3b6ab5e427ab9a6dd ReactTestApp-DevSupport: 52ac76197e5accf579592aa3b9aa07fd0766f211 ReactTestApp-Resources: 3c8739a3e3ed26f67f8ab68f13102fb9591301c8 RNSVG: d39a9be65c439dfb061955f7615f1f71a51ecede SocketRocket: f6c6249082c011e6de2de60ed641ef8bbe0cfac9 - Yoga: bd03cda842f416ba4c2d4b79fcd0fd27e917b91e + Yoga: 739f555df208b5fcd997a3b63e74791e27a12f34 PODFILE CHECKSUM: 0452977cf4cb4258cb5f51d6eee0f88e459b9529 diff --git a/apps/fluent-tester/package.json b/apps/fluent-tester/package.json index 458b2218348..14c9992b5a0 100644 --- a/apps/fluent-tester/package.json +++ b/apps/fluent-tester/package.json @@ -87,7 +87,6 @@ "@svgr/plugin-jsx": "^8.1.0", "@svgr/plugin-svgo": "^8.1.0", "@types/jasmine": "catalog:", - "@types/react": "~18.2.0", "@types/react-test-renderer": "^18.2.0", "@wdio/cli": "catalog:", "@wdio/globals": "catalog:", @@ -104,11 +103,6 @@ "react-test-renderer": "18.2.0", "webdriverio": "catalog:" }, - "peerDependenciesMeta": { - "@office-iss/react-native-win32": { - "optional": true - } - }, "furn": { "depcheck": { "ignoreMatches": [ diff --git a/apps/tester-core/package.json b/apps/tester-core/package.json index d2e3dbabba4..42b4ada358a 100644 --- a/apps/tester-core/package.json +++ b/apps/tester-core/package.json @@ -147,6 +147,7 @@ "@fluentui-react-native/tooltip": "workspace:*", "@fluentui-react-native/vibrancy-view": "workspace:*", "@office-iss/react-native-win32": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -192,6 +193,9 @@ }, "@office-iss/react-native-win32": { "optional": true + }, + "@types/react": { + "optional": true } }, "furn": { diff --git a/apps/tester-core/src/FluentTester.tsx b/apps/tester-core/src/FluentTester.tsx index b0f36473750..960e0f9d28d 100644 --- a/apps/tester-core/src/FluentTester.tsx +++ b/apps/tester-core/src/FluentTester.tsx @@ -103,7 +103,7 @@ const Header: React.FunctionComponent = React.memo((props) => { const filteredTestComponents = tests.filter((test) => test.platforms.includes(Platform.OS as string)); const sortedTestComponents = filteredTestComponents.sort((a, b) => a.name.localeCompare(b.name)); -export const FluentTester: React.FunctionComponent = (props: FluentTesterProps) => { +export const FluentTester = (props: FluentTesterProps) => { const { enableSinglePaneView } = props; const [selectedTestIndex, setSelectedTestIndex] = React.useState(-1); @@ -128,11 +128,11 @@ export const FluentTester: React.FunctionComponent = (props: const TestComponent = selectedTestIndex == -1 ? EmptyComponent : sortedTestComponents[selectedTestIndex].component; // This is used to initially bring focus to the app on win32 - const focusOnMountRef = React.useRef(); + const focusOnMountRef = React.useRef(null); React.useEffect(() => { if (Platform.OS === ('win32' as any)) { - focusOnMountRef.current.focus(); + focusOnMountRef.current?.focus(); } }, []); @@ -144,7 +144,7 @@ export const FluentTester: React.FunctionComponent = (props: const isTestListVisible = !enableSinglePaneView || (enableSinglePaneView && onTestListView); const isTestSectionVisible = !enableSinglePaneView || (enableSinglePaneView && !onTestListView); - const TestList: React.FunctionComponent = React.memo(() => { + const TestList = React.memo(() => { return ( = (props: ); }); - const MobileTestList: React.FunctionComponent = React.memo(() => { + const MobileTestList = React.memo(() => { return ( = (props: ); }); - const TestComponentView: React.FunctionComponent = () => { + const TestComponentView = () => { return ( = (props) => { +export const FluentTesterApp = (props: FluentTesterProps) => { const sizeClass = useHorizontalSizeClass(); const isMobile = Platform.OS === 'android' || (Platform.OS === 'ios' && Platform.isPad === false); diff --git a/apps/win32-81/package.json b/apps/win32-81/package.json index db87cd42326..d5f97ba36fd 100644 --- a/apps/win32-81/package.json +++ b/apps/win32-81/package.json @@ -40,6 +40,7 @@ "dependencies": { "@fluentui-react-native/tester-core": "workspace:*", "@office-iss/react-native-win32": "^0.81.0", + "@types/react": "~19.1.0", "react": "19.1.0", "react-native": "^0.81.0", "react-native-svg": "^15.12.1" @@ -65,7 +66,6 @@ "@rnx-kit/metro-serializer": "^2.0.3", "@rnx-kit/metro-serializer-esbuild": "^0.3.0", "@rnx-kit/tools-react-native": "^2.3.2", - "@types/react": "~19.1.0", "@types/react-test-renderer": "^19.1.0", "metro": "^0.83.1", "metro-config": "0.83.1", diff --git a/apps/win32/package.json b/apps/win32/package.json index 7e2d69c3924..3ef851f3d91 100644 --- a/apps/win32/package.json +++ b/apps/win32/package.json @@ -40,6 +40,7 @@ "dependencies": { "@fluentui-react-native/tester-core": "workspace:*", "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0", "react": "18.2.0", "react-native": "^0.74.0", "react-native-svg": ">=15.4.0 <15.13.0" @@ -63,7 +64,6 @@ "@rnx-kit/metro-config": "catalog:", "@rnx-kit/metro-resolver-symlinks": "catalog:", "@rnx-kit/metro-serializer-esbuild": "^0.3.0", - "@types/react": "~18.2.0", "@types/react-test-renderer": "^18.2.0", "metro-config": "^0.80.3", "oxc-resolver": "catalog:", diff --git a/package.json b/package.json index 14fe5b1a2b0..751ed486d4e 100644 --- a/package.json +++ b/package.json @@ -9,18 +9,6 @@ "url": "https://github.com/microsoft/fluentui-react-native.git" }, "resolutions": { - "@appium/support/glob": "^10.5.0", - "@types/react": "^18.2.0", - "@warren-ms/react-native-icons/react-native-svg": "^15.4.0", - "axios": "^1.12.0", - "form-data": "^4.0.4", - "on-headers": "^1.1.0", - "react-native-macos": "patch:react-native-macos@npm%3A0.74.30#~/.yarn/patches/react-native-macos-npm-0.74.30-e4edf98920.patch", - "react-native-svg-transformer": "1.5.0", - "semver": "^7", - "tar-fs": "^3.1.1", - "ws": "^8.17.1", - "yaml": "^2.2.2", "expect-webdriverio": "patch:expect-webdriverio@npm%3A5.6.1#~/.yarn/patches/expect-webdriverio-npm-5.6.1-69666d39e9.patch" }, "scripts": { diff --git a/packages/components/Avatar/package.json b/packages/components/Avatar/package.json index 70a6cc4eb0e..6930af71a99 100644 --- a/packages/components/Avatar/package.json +++ b/packages/components/Avatar/package.json @@ -68,6 +68,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -78,6 +79,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Badge/package.json b/packages/components/Badge/package.json index 83870ea0153..33b086c97c0 100644 --- a/packages/components/Badge/package.json +++ b/packages/components/Badge/package.json @@ -32,6 +32,7 @@ "@fluentui-react-native/adapters": "workspace:*", "@fluentui-react-native/experimental-shadow": "workspace:*", "@fluentui-react-native/framework": "workspace:*", + "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/icon": "workspace:*", "@fluentui-react-native/text": "workspace:*", "@fluentui-react-native/theme-tokens": "workspace:*", @@ -66,6 +67,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -76,6 +78,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Badge/src/PresenceBadge/PresenceBadge.tsx b/packages/components/Badge/src/PresenceBadge/PresenceBadge.tsx index 00d83c153e7..8b6a732f14d 100644 --- a/packages/components/Badge/src/PresenceBadge/PresenceBadge.tsx +++ b/packages/components/Badge/src/PresenceBadge/PresenceBadge.tsx @@ -2,7 +2,8 @@ import { View, Platform } from 'react-native'; import type { UseSlots } from '@fluentui-react-native/framework'; -import { compose, mergeProps } from '@fluentui-react-native/framework'; +import { compose } from '@fluentui-react-native/framework'; +import { extractStyle, mergeProps } from '@fluentui-react-native/framework-base'; import { Svg, Path } from 'react-native-svg'; import { stylingSettings } from './PresenceBadge.styling'; @@ -44,8 +45,8 @@ export const PresenceBadge = compose({ diff --git a/packages/components/Button/package.json b/packages/components/Button/package.json index 6b5a03b7268..c53313e982b 100644 --- a/packages/components/Button/package.json +++ b/packages/components/Button/package.json @@ -77,6 +77,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -87,6 +88,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Callout/package.json b/packages/components/Callout/package.json index 7a2984c404b..ac9ca59755f 100644 --- a/packages/components/Callout/package.json +++ b/packages/components/Callout/package.json @@ -62,6 +62,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -71,6 +72,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Checkbox/package.json b/packages/components/Checkbox/package.json index 58d14836a28..bca802886c5 100644 --- a/packages/components/Checkbox/package.json +++ b/packages/components/Checkbox/package.json @@ -73,6 +73,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -83,6 +84,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Chip/package.json b/packages/components/Chip/package.json index f5d5a087ac8..894b1b91d66 100644 --- a/packages/components/Chip/package.json +++ b/packages/components/Chip/package.json @@ -63,6 +63,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -73,6 +74,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/ContextualMenu/package.json b/packages/components/ContextualMenu/package.json index fca6c690939..c5750f13bec 100644 --- a/packages/components/ContextualMenu/package.json +++ b/packages/components/ContextualMenu/package.json @@ -73,6 +73,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -83,6 +84,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Divider/package.json b/packages/components/Divider/package.json index f319d59673e..fb1b35932bb 100644 --- a/packages/components/Divider/package.json +++ b/packages/components/Divider/package.json @@ -64,6 +64,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -74,6 +75,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/FocusTrapZone/package.json b/packages/components/FocusTrapZone/package.json index 868344415ca..d474a86f85b 100644 --- a/packages/components/FocusTrapZone/package.json +++ b/packages/components/FocusTrapZone/package.json @@ -60,6 +60,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -69,6 +70,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/FocusZone/package.json b/packages/components/FocusZone/package.json index 773740f6c97..234432422aa 100644 --- a/packages/components/FocusZone/package.json +++ b/packages/components/FocusZone/package.json @@ -61,6 +61,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -70,6 +71,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Icon/package.json b/packages/components/Icon/package.json index bfac0262806..fc1fcd94d88 100644 --- a/packages/components/Icon/package.json +++ b/packages/components/Icon/package.json @@ -62,6 +62,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -72,6 +73,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Input/package.json b/packages/components/Input/package.json index e46f271da20..8db60d34e06 100644 --- a/packages/components/Input/package.json +++ b/packages/components/Input/package.json @@ -66,6 +66,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -76,6 +77,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Link/package.json b/packages/components/Link/package.json index 9a187c45604..2c66cbee282 100644 --- a/packages/components/Link/package.json +++ b/packages/components/Link/package.json @@ -66,6 +66,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -75,6 +76,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Menu/package.json b/packages/components/Menu/package.json index 4878bd4c657..c36372f03f4 100644 --- a/packages/components/Menu/package.json +++ b/packages/components/Menu/package.json @@ -37,6 +37,7 @@ "@fluentui-react-native/callout": "workspace:*", "@fluentui-react-native/focus-zone": "workspace:*", "@fluentui-react-native/framework": "workspace:*", + "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/icon": "workspace:*", "@fluentui-react-native/interactive-hooks": "workspace:*", "@fluentui-react-native/text": "workspace:*", @@ -73,6 +74,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -83,6 +85,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Menu/src/MenuGroup/MenuGroup.tsx b/packages/components/Menu/src/MenuGroup/MenuGroup.tsx index 8fb3e4fb6af..bd3c4789cd6 100644 --- a/packages/components/Menu/src/MenuGroup/MenuGroup.tsx +++ b/packages/components/Menu/src/MenuGroup/MenuGroup.tsx @@ -1,9 +1,11 @@ /** @jsxImportSource @fluentui-react-native/framework-base */ import React from 'react'; import { Platform, View } from 'react-native'; +import type { IViewProps } from '@fluentui-react-native/adapters'; import { FocusZone } from '@fluentui-react-native/focus-zone'; import { compose, mergeProps } from '@fluentui-react-native/framework'; +import { extractChildren, extractProps } from '@fluentui-react-native/framework-base'; import type { UseSlots } from '@fluentui-react-native/framework'; import type { MenuGroupProps, MenuGroupType } from './MenuGroup.types'; @@ -39,8 +41,8 @@ export const MenuGroup = compose({ return React.cloneElement( child as React.ReactElement>, { - accessibilityPosInSet: child.props.accessibilityPosInSet ?? itemPosition, // win32 - accessibilitySetSize: child.props.accessibilitySetSize ?? itemCount, //win32 + accessibilityPosInSet: extractProps(child)?.accessibilityPosInSet ?? itemPosition, // win32 + accessibilitySetSize: extractProps(child)?.accessibilitySetSize ?? itemCount, //win32 } as any, ); } @@ -57,8 +59,9 @@ export const MenuGroup = compose({ // we use a string with a space as the default accessibilityLabel for MenuGroup. // If an empty string was used, the group context would not be read. let menuGroupA11yLabel = ' '; - if (menuGroupHeader && typeof (menuGroupHeader as React.ReactElement).props.children === 'string') { - menuGroupA11yLabel = (menuGroupHeader as React.ReactElement).props.children; + const menuGroupHeaderChild = extractChildren(menuGroupHeader as React.ReactElement); + if (menuGroupHeader && typeof menuGroupHeaderChild === 'string') { + menuGroupA11yLabel = menuGroupHeaderChild; } return ( diff --git a/packages/components/Menu/src/MenuList/MenuList.tsx b/packages/components/Menu/src/MenuList/MenuList.tsx index e3387cfa680..88feb746a6a 100644 --- a/packages/components/Menu/src/MenuList/MenuList.tsx +++ b/packages/components/Menu/src/MenuList/MenuList.tsx @@ -2,9 +2,11 @@ import React from 'react'; import { Platform, ScrollView, View } from 'react-native'; +import type { IViewProps } from '@fluentui-react-native/adapters'; import { FocusZone } from '@fluentui-react-native/focus-zone'; import type { UseSlots } from '@fluentui-react-native/framework'; import { compose } from '@fluentui-react-native/framework'; +import { extractProps } from '@fluentui-react-native/framework-base'; import { stylingSettings } from './MenuList.styling'; import type { MenuListProps, MenuListState, MenuListType } from './MenuList.types'; @@ -46,12 +48,13 @@ export const MenuList = compose({ itemPosition++; } + const childProps = extractProps(child); return React.cloneElement( child as React.ReactElement>, { - accessibilityPosInSet: child.props.accessibilityPosInSet ?? itemPosition, // win32 - accessibilitySetSize: child.props.accessibilitySetSize ?? itemCount, //win32 - ...(child.props.tooltip && { alwaysShowToolTip: true }), + accessibilityPosInSet: childProps?.accessibilityPosInSet ?? itemPosition, // win32 + accessibilitySetSize: childProps?.accessibilitySetSize ?? itemCount, //win32 + ...(childProps?.tooltip && { alwaysShowToolTip: true }), } as any, ); } diff --git a/packages/components/Menu/src/MenuTrigger/MenuTrigger.tsx b/packages/components/Menu/src/MenuTrigger/MenuTrigger.tsx index 2d6636b8514..671cfc3d599 100644 --- a/packages/components/Menu/src/MenuTrigger/MenuTrigger.tsx +++ b/packages/components/Menu/src/MenuTrigger/MenuTrigger.tsx @@ -4,6 +4,8 @@ import type { MenuTriggerProps } from './MenuTrigger.types'; import { menuTriggerName } from './MenuTrigger.types'; import { useMenuTrigger } from './useMenuTrigger'; import { MenuTriggerProvider } from '../context/menuTriggerContext'; +import type { IViewProps } from '@fluentui-react-native/adapters'; +import { extractProps } from '@fluentui-react-native/framework-base'; export const MenuTrigger: React.FunctionComponent = (props: MenuTriggerProps) => { if (__DEV__) { @@ -12,13 +14,14 @@ export const MenuTrigger: React.FunctionComponent = (props: Me } } - const menuTrigger = useMenuTrigger(props.children.props); + const childrenProps = extractProps(props.children); + const menuTrigger = useMenuTrigger(childrenProps); // In order to properly support accessibility without erasing props set on the // child component which may affect accessibility, we need to modify the // state in the inner render so we can access the child component and its props. const revised = React.cloneElement(props.children, { - ...(props.children.props.tooltip && { alwaysShowToolTip: true }), + ...(childrenProps?.tooltip && { alwaysShowToolTip: true }), ...menuTrigger.props, }); diff --git a/packages/components/Menu/src/MenuTrigger/MenuTrigger.types.ts b/packages/components/Menu/src/MenuTrigger/MenuTrigger.types.ts index 20be2146d3c..f9e4f300eea 100644 --- a/packages/components/Menu/src/MenuTrigger/MenuTrigger.types.ts +++ b/packages/components/Menu/src/MenuTrigger/MenuTrigger.types.ts @@ -1,6 +1,7 @@ import type * as React from 'react'; -import type { InteractionEvent, PressablePropsExtended } from '@fluentui-react-native/interactive-hooks'; +import type { MouseEvent } from 'react-native'; +import type { PressablePropsExtended } from '@fluentui-react-native/interactive-hooks'; export const menuTriggerName = 'MenuTrigger'; @@ -24,7 +25,7 @@ export interface MenuTriggerChildProps extends Omit void; + onClick?: (e: MouseEvent) => void; } export interface MenuTriggerState { diff --git a/packages/components/Menu/src/MenuTrigger/useMenuTrigger.ts b/packages/components/Menu/src/MenuTrigger/useMenuTrigger.ts index 19d25e1cd7e..86024c19180 100644 --- a/packages/components/Menu/src/MenuTrigger/useMenuTrigger.ts +++ b/packages/components/Menu/src/MenuTrigger/useMenuTrigger.ts @@ -1,9 +1,7 @@ import React from 'react'; -import type { AccessibilityActionEvent, AccessibilityActionName } from 'react-native'; +import type { AccessibilityActionEvent, AccessibilityActionName, MouseEvent } from 'react-native'; import { Platform } from 'react-native'; -import type { InteractionEvent } from '@fluentui-react-native/interactive-hooks'; - import type { MenuTriggerChildProps, MenuTriggerState } from './MenuTrigger.types'; import { useMergedRefs } from './useMergeRefs'; import { hoverDelayDefault } from '../consts'; @@ -76,7 +74,7 @@ export const useMenuTrigger = (childProps: MenuTriggerChildProps): MenuTriggerSt ); const onHoverIn = React.useCallback( - (e: InteractionEvent) => { + (e: MouseEvent) => { if (openOnHover) { clearTimeout(popoverHoverOutTimer); clearTimeout(triggerHoverOutTimer); @@ -92,7 +90,7 @@ export const useMenuTrigger = (childProps: MenuTriggerChildProps): MenuTriggerSt ); const onHoverOut = React.useCallback( - (e: InteractionEvent) => { + (e: MouseEvent) => { if (openOnHover) { e.persist(); const timer = setTimeout(() => { @@ -107,7 +105,7 @@ export const useMenuTrigger = (childProps: MenuTriggerChildProps): MenuTriggerSt ); const onClick = React.useCallback( - (e: InteractionEvent) => { + (e: MouseEvent) => { setOpen(e, !open); childOnClick && childOnClick(e); }, diff --git a/packages/components/MenuButton/package.json b/packages/components/MenuButton/package.json index 0e69e827b80..f1a95511d83 100644 --- a/packages/components/MenuButton/package.json +++ b/packages/components/MenuButton/package.json @@ -66,6 +66,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -76,6 +77,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Notification/package.json b/packages/components/Notification/package.json index cbb49745bd9..3edce990147 100644 --- a/packages/components/Notification/package.json +++ b/packages/components/Notification/package.json @@ -72,6 +72,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -82,6 +83,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Persona/package.json b/packages/components/Persona/package.json index 7634184e59e..d29a4ccc648 100644 --- a/packages/components/Persona/package.json +++ b/packages/components/Persona/package.json @@ -60,6 +60,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -69,6 +70,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/PersonaCoin/package.json b/packages/components/PersonaCoin/package.json index 9eff723d60e..0eec444fb1e 100644 --- a/packages/components/PersonaCoin/package.json +++ b/packages/components/PersonaCoin/package.json @@ -61,6 +61,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -70,6 +71,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Pressable/package.json b/packages/components/Pressable/package.json index ea8ab587ab3..666b6d486a9 100644 --- a/packages/components/Pressable/package.json +++ b/packages/components/Pressable/package.json @@ -55,6 +55,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -64,6 +65,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/RadioGroup/package.json b/packages/components/RadioGroup/package.json index d7ec03c377e..739d84ff895 100644 --- a/packages/components/RadioGroup/package.json +++ b/packages/components/RadioGroup/package.json @@ -72,6 +72,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -82,6 +83,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Separator/package.json b/packages/components/Separator/package.json index 9c3044958f9..79288a88c2b 100644 --- a/packages/components/Separator/package.json +++ b/packages/components/Separator/package.json @@ -60,6 +60,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -69,6 +70,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Stack/package.json b/packages/components/Stack/package.json index 294ae3b5ced..99ea6ccfc2e 100644 --- a/packages/components/Stack/package.json +++ b/packages/components/Stack/package.json @@ -64,6 +64,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -73,6 +74,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Switch/package.json b/packages/components/Switch/package.json index 7ded0944c47..5d69b139d54 100644 --- a/packages/components/Switch/package.json +++ b/packages/components/Switch/package.json @@ -33,6 +33,7 @@ }, "dependencies": { "@fluentui-react-native/framework": "workspace:*", + "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/interactive-hooks": "workspace:*", "@fluentui-react-native/text": "workspace:*", "@fluentui-react-native/theming-utils": "workspace:*", @@ -64,6 +65,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -73,6 +75,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/Switch/src/Switch.tsx b/packages/components/Switch/src/Switch.tsx index c71c0733d2e..d14ef9c64a6 100644 --- a/packages/components/Switch/src/Switch.tsx +++ b/packages/components/Switch/src/Switch.tsx @@ -4,6 +4,7 @@ import { View, AccessibilityInfo, Pressable, Animated, Platform } from 'react-na import type { UseSlots } from '@fluentui-react-native/framework'; import { compose, memoize, mergeProps } from '@fluentui-react-native/framework'; +import { extractStyle } from '@fluentui-react-native/framework-base'; import { Text } from '@fluentui-react-native/text'; import { stylingSettings } from './Switch.styling'; @@ -52,15 +53,17 @@ export const Switch = compose({ const switchOnSlot = useSlots(userProps, (layer) => switchLookup(layer, { toggled: true, disabled: userProps.disabled }, {})); const switchOffSlot = useSlots(userProps, (layer) => switchLookup(layer, { toggled: false, disabled: userProps.disabled }, {})); - // For Mobile platform we are passing extra data to useSwitch for Animated API + /** + * The following is hacky and completely breaks typings, but keeping it in to not break legacy behaviors. + */ const switchInfo = useSwitch( userProps, isMobile && { - toggleOnBgColor: switchOnSlot.track({}).props.style.backgroundColor, - toggleOffBgColor: switchOffSlot.track({}).props.style.backgroundColor, - trackWidth: switchOnSlot.track({}).props.style.width, - thumbWidth: switchOnSlot.thumb({}).props.style.width, - thumbMargin: switchOnSlot.thumb({}).props.style.margin, + toggleOnBgColor: extractStyle(switchOnSlot.track({})).backgroundColor as string, + toggleOffBgColor: extractStyle(switchOffSlot.track({})).backgroundColor as string, + trackWidth: extractStyle(switchOnSlot.track({})).width as number, + thumbWidth: extractStyle(switchOnSlot.thumb({})).width as number, + thumbMargin: extractStyle(switchOnSlot.thumb({})).margin as number, }, ); diff --git a/packages/components/TabList/package.json b/packages/components/TabList/package.json index 10020c5fe95..d53c7a8a8ce 100644 --- a/packages/components/TabList/package.json +++ b/packages/components/TabList/package.json @@ -68,6 +68,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -78,6 +79,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/components/TabList/src/TabList/useTabList.ts b/packages/components/TabList/src/TabList/useTabList.ts index f8c6d047e69..52a54a14d70 100644 --- a/packages/components/TabList/src/TabList/useTabList.ts +++ b/packages/components/TabList/src/TabList/useTabList.ts @@ -1,10 +1,9 @@ import * as React from 'react'; import { Platform } from 'react-native'; -import type { View, AccessibilityState, LayoutRectangle } from 'react-native'; +import type { View, AccessibilityState, LayoutRectangle, LayoutChangeEvent } from 'react-native'; import type { NativeKeyEvent } from '@fluentui-react-native/adapters'; import { memoize, mergeStyles } from '@fluentui-react-native/framework'; -import type { LayoutEvent } from '@fluentui-react-native/interactive-hooks'; import { useSelectedKey } from '@fluentui-react-native/interactive-hooks'; import type { TabListInfo, TabListProps } from './TabList.types'; @@ -130,7 +129,7 @@ export const useTabList = (props: TabListProps): TabListInfo => { // TabList layout callback used to style the animated indicator. const onTabListLayout = React.useCallback( - (e: LayoutEvent) => { + (e: LayoutChangeEvent) => { if (e.nativeEvent.layout) { setTabListLayout(e.nativeEvent.layout); } diff --git a/packages/components/Text/package.json b/packages/components/Text/package.json index 3554668889b..265ab5f3db9 100644 --- a/packages/components/Text/package.json +++ b/packages/components/Text/package.json @@ -63,6 +63,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -72,6 +73,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/configs/kit-config/furn-preset.ts b/packages/configs/kit-config/furn-preset.ts index f4514f2754d..04cf1f4772f 100644 --- a/packages/configs/kit-config/furn-preset.ts +++ b/packages/configs/kit-config/furn-preset.ts @@ -64,7 +64,6 @@ function formFurnPreset(rnPreset: VersionPreset, _version: number): VersionPrese 'react-types': { name: '@types/react', version: `~${presetReact.version}`, - devOnly: true, }, 'react-test-renderer-types': { name: '@types/react-test-renderer', diff --git a/packages/deprecated/foundation-composable/package.json b/packages/deprecated/foundation-composable/package.json index 3c5949b1e3d..83529bf7196 100644 --- a/packages/deprecated/foundation-composable/package.json +++ b/packages/deprecated/foundation-composable/package.json @@ -47,9 +47,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/deprecated/foundation-composable/src/Composable.ts b/packages/deprecated/foundation-composable/src/Composable.ts index d0d17bd901e..b931dd04708 100644 --- a/packages/deprecated/foundation-composable/src/Composable.ts +++ b/packages/deprecated/foundation-composable/src/Composable.ts @@ -17,14 +17,14 @@ import { ISlotWithFilter, } from './Composable.types'; import { useCompoundPrepare } from './Composable.slots'; -import { renderSlot } from '@fluentui-react-native/framework-base'; +import { renderSlot, type FurnJSX } from '@fluentui-react-native/framework-base'; import { ISlotProps, mergeSettings } from '@uifabricshared/foundation-settings'; export function atomicRender( Slots: ISlots>, _renderData: IRenderData, TState>, ...children: React.ReactNode[] -): React.JSX.Element | null { +): FurnJSX.Element | null { return renderSlot(Slots.root, undefined, ...children); } diff --git a/packages/deprecated/foundation-composable/src/Composable.types.ts b/packages/deprecated/foundation-composable/src/Composable.types.ts index 6c5b3e9d980..de9159d8127 100644 --- a/packages/deprecated/foundation-composable/src/Composable.types.ts +++ b/packages/deprecated/foundation-composable/src/Composable.types.ts @@ -2,6 +2,7 @@ import * as React from 'react'; import { ISlotProps } from '@uifabricshared/foundation-settings'; +import type { FurnJSX } from '@fluentui-react-native/framework-base'; export type AsObject = T extends object ? T : object; export type RequireObject = T extends object ? T : never; @@ -92,7 +93,7 @@ export interface IComposable { Slots: ISlots, renderData: IRenderData, ...children: React.ReactNode[] - ) => React.JSX.Element | null; + ) => FurnJSX.Element | null; /** * The slot definitions for this component. If this only has one sub-component this will only have a root entry. Using diff --git a/packages/deprecated/foundation-compose/package.json b/packages/deprecated/foundation-compose/package.json index 97e07a50ced..c1394a6a771 100644 --- a/packages/deprecated/foundation-compose/package.json +++ b/packages/deprecated/foundation-compose/package.json @@ -57,6 +57,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -66,6 +67,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/deprecated/foundation-settings/package.json b/packages/deprecated/foundation-settings/package.json index 38136992f16..3f13ffe5f0c 100644 --- a/packages/deprecated/foundation-settings/package.json +++ b/packages/deprecated/foundation-settings/package.json @@ -49,8 +49,14 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/deprecated/foundation-tokens/package.json b/packages/deprecated/foundation-tokens/package.json index f5959f3b54f..1cc0a4ebdf4 100644 --- a/packages/deprecated/foundation-tokens/package.json +++ b/packages/deprecated/foundation-tokens/package.json @@ -61,6 +61,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -70,6 +71,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/deprecated/theme-registry/package.json b/packages/deprecated/theme-registry/package.json index 3d09d7e8e69..ba4b2b355f3 100644 --- a/packages/deprecated/theme-registry/package.json +++ b/packages/deprecated/theme-registry/package.json @@ -49,8 +49,14 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/deprecated/themed-settings/package.json b/packages/deprecated/themed-settings/package.json index 02198afcfe2..03864728001 100644 --- a/packages/deprecated/themed-settings/package.json +++ b/packages/deprecated/themed-settings/package.json @@ -52,8 +52,14 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/deprecated/theming-ramp/package.json b/packages/deprecated/theming-ramp/package.json index 183a9a3e749..76ae82aa6ce 100644 --- a/packages/deprecated/theming-ramp/package.json +++ b/packages/deprecated/theming-ramp/package.json @@ -52,8 +52,14 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/deprecated/theming-react-native/package.json b/packages/deprecated/theming-react-native/package.json index d3f21ec2216..011f45ce579 100644 --- a/packages/deprecated/theming-react-native/package.json +++ b/packages/deprecated/theming-react-native/package.json @@ -44,6 +44,7 @@ "@babel/core": "catalog:", "@fluentui-react-native/babel-config": "workspace:*", "@fluentui-react-native/eslint-config-rules": "workspace:*", + "@fluentui-react-native/framework-base": "workspace:*", "@fluentui-react-native/kit-config": "workspace:*", "@fluentui-react-native/scripts": "workspace:*", "@react-native-community/cli": "^20.0.0", @@ -58,6 +59,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -67,6 +69,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/deprecated/theming-react-native/src/ThemeLayer.tsx b/packages/deprecated/theming-react-native/src/ThemeLayer.tsx index a238d5e027e..ba4ff4e3eab 100644 --- a/packages/deprecated/theming-react-native/src/ThemeLayer.tsx +++ b/packages/deprecated/theming-react-native/src/ThemeLayer.tsx @@ -5,6 +5,7 @@ import { ThemeContext } from '@uifabricshared/theming-ramp'; import { removeThemeRegistryListener, getTheme, addThemeRegistryListener } from './Global'; import type { ITheme } from './Theme.types'; +import type { FurnJSX } from '@fluentui-react-native/framework-base'; /** * props for the ThemeLayer @@ -22,7 +23,7 @@ export interface IThemeLayerProps { * children function that allows passing of the theme to children. This is a standard pattern for * consumers. */ - children: (theme: ITheme) => React.JSX.Element | null; + children: (theme: ITheme) => FurnJSX.Element | null; } /** @@ -74,7 +75,7 @@ export class ThemeLayer extends React.Component { } } - public render(): React.JSX.Element { + public render(): FurnJSX.Element { let themeName = this.props.themeName; return ( diff --git a/packages/experimental/ActivityIndicator/package.json b/packages/experimental/ActivityIndicator/package.json index ac8fc42326a..39ceebb9eac 100644 --- a/packages/experimental/ActivityIndicator/package.json +++ b/packages/experimental/ActivityIndicator/package.json @@ -55,6 +55,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -65,6 +66,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/AppearanceAdditions/package.json b/packages/experimental/AppearanceAdditions/package.json index f2ab887e36e..f74d3e85d6a 100644 --- a/packages/experimental/AppearanceAdditions/package.json +++ b/packages/experimental/AppearanceAdditions/package.json @@ -56,6 +56,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -65,6 +66,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Avatar/package.json b/packages/experimental/Avatar/package.json index 00551d8c49e..a433c6a3167 100644 --- a/packages/experimental/Avatar/package.json +++ b/packages/experimental/Avatar/package.json @@ -56,6 +56,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -65,6 +66,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Checkbox/package.json b/packages/experimental/Checkbox/package.json index fe7e877a894..5c4bc6a3df8 100644 --- a/packages/experimental/Checkbox/package.json +++ b/packages/experimental/Checkbox/package.json @@ -57,6 +57,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -67,6 +68,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Drawer/package.json b/packages/experimental/Drawer/package.json index 18724954b3e..e0ae987df4c 100644 --- a/packages/experimental/Drawer/package.json +++ b/packages/experimental/Drawer/package.json @@ -60,6 +60,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -69,6 +70,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Dropdown/package.json b/packages/experimental/Dropdown/package.json index 6f91d4eb309..06d13c90fae 100644 --- a/packages/experimental/Dropdown/package.json +++ b/packages/experimental/Dropdown/package.json @@ -62,6 +62,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -72,6 +73,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Expander/package.json b/packages/experimental/Expander/package.json index 34b9cd72229..a5c4869c5dc 100644 --- a/packages/experimental/Expander/package.json +++ b/packages/experimental/Expander/package.json @@ -56,6 +56,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -65,6 +66,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/MenuButton/package.json b/packages/experimental/MenuButton/package.json index 24d43da0fdc..e8d6c106562 100644 --- a/packages/experimental/MenuButton/package.json +++ b/packages/experimental/MenuButton/package.json @@ -62,6 +62,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -72,6 +73,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/MenuButton/src/renderContextualMenu.tsx b/packages/experimental/MenuButton/src/renderContextualMenu.tsx index b77449e1e1f..7374cb01551 100644 --- a/packages/experimental/MenuButton/src/renderContextualMenu.tsx +++ b/packages/experimental/MenuButton/src/renderContextualMenu.tsx @@ -5,7 +5,7 @@ import { ContextualMenu, ContextualMenuItem, SubmenuItem, Submenu } from '@fluen import type { MenuButtonItemProps } from './MenuButton.types'; -export const renderContextualMenu = (contextualMenu: ContextualMenuProps, menuItems: MenuButtonItemProps[]): React.JSX.Element => { +export const renderContextualMenu = (contextualMenu: ContextualMenuProps, menuItems: MenuButtonItemProps[]) => { return ( {menuItems?.map((menuItem) => { @@ -15,7 +15,7 @@ export const renderContextualMenu = (contextualMenu: ContextualMenuProps, menuIt ); }; -const SubMenuItem: React.FunctionComponent = (props: MenuButtonItemProps): React.JSX.Element => { +const SubMenuItem: React.FunctionComponent = (props: MenuButtonItemProps) => { const [showSubmenuState, setShowSubmenu] = React.useState(false); const toggleShowSubmenu = React.useCallback(() => { setShowSubmenu(!showSubmenuState); diff --git a/packages/experimental/NativeDatePicker/package.json b/packages/experimental/NativeDatePicker/package.json index b4322f2b8af..b20bb1ca270 100644 --- a/packages/experimental/NativeDatePicker/package.json +++ b/packages/experimental/NativeDatePicker/package.json @@ -47,9 +47,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/experimental/NativeFontMetrics/package.json b/packages/experimental/NativeFontMetrics/package.json index 52faf37c5be..6059c2e98a0 100644 --- a/packages/experimental/NativeFontMetrics/package.json +++ b/packages/experimental/NativeFontMetrics/package.json @@ -51,9 +51,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/experimental/Overflow/package.json b/packages/experimental/Overflow/package.json index a9b3e134173..d343ce4d165 100644 --- a/packages/experimental/Overflow/package.json +++ b/packages/experimental/Overflow/package.json @@ -58,6 +58,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -68,6 +69,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Overflow/src/OverflowItem/OverflowItem.tsx b/packages/experimental/Overflow/src/OverflowItem/OverflowItem.tsx index e0fb41c2ee9..db430daa9dd 100644 --- a/packages/experimental/Overflow/src/OverflowItem/OverflowItem.tsx +++ b/packages/experimental/Overflow/src/OverflowItem/OverflowItem.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import type { StyleProp, ViewProps, ViewStyle } from 'react-native'; -import { mergeProps, directComponent, phasedComponent, memoize, mergeStyles } from '@fluentui-react-native/framework-base'; +import { mergeProps, directComponent, phasedComponent, memoize, mergeStyles, extractStyle } from '@fluentui-react-native/framework-base'; import type { OverflowItemProps } from './OverflowItem.types'; import { overflowItemName } from './OverflowItem.types'; @@ -36,7 +36,7 @@ export const OverflowItem = phasedComponent((userProps: Overf } // Assume that the child can accept ViewProps. - const viewStyles = mergeStyles(child.props.style, mergedProps.style); + const viewStyles = mergeStyles(extractStyle(child), mergedProps.style); const viewProps = getOverflowItemProps(mergedProps, viewStyles); const clone = React.cloneElement(child, viewProps); diff --git a/packages/experimental/Popover/package.json b/packages/experimental/Popover/package.json index 33deb02c2a0..bf9585399e6 100644 --- a/packages/experimental/Popover/package.json +++ b/packages/experimental/Popover/package.json @@ -54,6 +54,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -63,6 +64,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Shadow/package.json b/packages/experimental/Shadow/package.json index 1262a08abe4..f88ad20bd19 100644 --- a/packages/experimental/Shadow/package.json +++ b/packages/experimental/Shadow/package.json @@ -60,6 +60,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -69,6 +70,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Shadow/src/Shadow.tsx b/packages/experimental/Shadow/src/Shadow.tsx index b54f972aa27..e7b00412bac 100644 --- a/packages/experimental/Shadow/src/Shadow.tsx +++ b/packages/experimental/Shadow/src/Shadow.tsx @@ -16,7 +16,7 @@ export const Shadow = phasedComponent((props: ShadowProps) => { return <>{children}; } - const { style: childStyle, ...restOfChildProps } = children.props; + const { style: childStyle, ...restOfChildProps } = children.props as { style?: ViewStyle }; const shadowViewStyleProps = getStylePropsForShadowViews(childStyle, props.shadowToken); const innerShadowViewProps = mergeProps(restOfChildProps, shadowViewStyleProps.inner); diff --git a/packages/experimental/Shimmer/package.json b/packages/experimental/Shimmer/package.json index b81943bc0b1..01dabf0c454 100644 --- a/packages/experimental/Shimmer/package.json +++ b/packages/experimental/Shimmer/package.json @@ -62,6 +62,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -72,6 +73,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Shimmer/src/Shimmer.tsx b/packages/experimental/Shimmer/src/Shimmer.tsx index d2b1d6aec1b..2fb7441c098 100644 --- a/packages/experimental/Shimmer/src/Shimmer.tsx +++ b/packages/experimental/Shimmer/src/Shimmer.tsx @@ -21,7 +21,7 @@ export const Shimmer = compose({ }, useRender: (props: ShimmerProps, useSlots: UseSlots) => { const Slots = useSlots(props); - props = mergeProps(props, Slots.root({}).props); + props = mergeProps(props, Slots.root({}).props as ShimmerProps); const AnimatedLinearGradient = Animated.createAnimatedComponent(LinearGradient); const tokens = useStyling(props).root; const memoizedShimmerData = useMemo( diff --git a/packages/experimental/Spinner/package.json b/packages/experimental/Spinner/package.json index d40a9dd2766..0b76e161d69 100644 --- a/packages/experimental/Spinner/package.json +++ b/packages/experimental/Spinner/package.json @@ -58,6 +58,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -68,6 +69,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Stack/package.json b/packages/experimental/Stack/package.json index 2cc3a96558f..f633a1e543c 100644 --- a/packages/experimental/Stack/package.json +++ b/packages/experimental/Stack/package.json @@ -60,6 +60,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -69,6 +70,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/Tooltip/package.json b/packages/experimental/Tooltip/package.json index d32bb42f165..650e8306684 100644 --- a/packages/experimental/Tooltip/package.json +++ b/packages/experimental/Tooltip/package.json @@ -57,6 +57,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -67,6 +68,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/experimental/VibrancyView/package.json b/packages/experimental/VibrancyView/package.json index 2555e04c427..cf0fe7f7583 100644 --- a/packages/experimental/VibrancyView/package.json +++ b/packages/experimental/VibrancyView/package.json @@ -54,6 +54,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -63,6 +64,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/framework-base/package.json b/packages/framework-base/package.json index cead0402a0d..0880e8b66ab 100644 --- a/packages/framework-base/package.json +++ b/packages/framework-base/package.json @@ -48,16 +48,24 @@ "@types/jest": "^29.0.0", "@types/node": "catalog:", "@types/react": "~19.1.0", - "react": "19.1.0" + "react": "19.1.0", + "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "extends": "@fluentui-react-native/kit-config", "kitType": "library", "alignDeps": { "capabilities": [ + "core-dev-only", "react", "tools-core", "tools-eslint", diff --git a/packages/framework-base/src/component-patterns/extract.ts b/packages/framework-base/src/component-patterns/extract.ts new file mode 100644 index 00000000000..d3c2c38d392 --- /dev/null +++ b/packages/framework-base/src/component-patterns/extract.ts @@ -0,0 +1,32 @@ +import type { ViewStyle, TextStyle, ImageStyle } from 'react-native'; + +type StyleTypes = ViewStyle | TextStyle | ImageStyle; +type PropsWithStyle = { style?: ViewStyle | TextStyle | ImageStyle }; +type PropsWithChildren = { children?: React.ReactNode }; + +/** + * Extract the props from a React element. If the element is undefined, undefined will be returned. + * @param element The React element from which to extract the props. + * @returns The extracted props or undefined if the element is undefined. + */ +export function extractProps(element?: React.ReactElement): T | undefined { + return element ? (element.props as T) : undefined; +} + +/** + * Extract the children from a React element. If the element is undefined, undefined will be returned. + * @param element The React element from which to extract the children. + * @returns The extracted children or undefined if the element is undefined. + */ +export function extractChildren(element?: React.ReactElement): React.ReactNode | undefined { + return extractProps(element)?.children; +} + +/** + * Extract a style object from a React element. If the element is undefined or does not have a style prop, an empty object will be returned. + * @param element The React element from which to extract the style. + * @returns The extracted style object or an empty object if not available. + */ +export function extractStyle(element?: React.ReactElement): T { + return (extractProps(element)?.style as T) ?? ({} as T); +} diff --git a/packages/framework-base/src/component-patterns/render.types.ts b/packages/framework-base/src/component-patterns/render.types.ts index 33c4b830054..cfbd3941879 100644 --- a/packages/framework-base/src/component-patterns/render.types.ts +++ b/packages/framework-base/src/component-patterns/render.types.ts @@ -1,11 +1,14 @@ import type React from 'react'; -import type ReactJSX from 'react/jsx-runtime'; +//import type ReactJSX from 'react/jsx-runtime'; +import type { FurnJSX } from '../jsx-namespace'; /** * Base types for rendering components in a react application, extracted from react types */ -export type RenderResult = ReturnType; -export type RenderType = Parameters[0] | string; +export type RenderResult = FurnJSX.Element; +//export type RenderResult = ReturnType; +export type RenderType = FurnJSX.ElementType; +//export type RenderType = Parameters[0] | string; /** * The standard element type inputs for react and react-native. This might be View or Button, or it might be 'div' in web. Effectively @@ -52,13 +55,15 @@ export type DirectComponent = FunctionComponentCore & { _callDirect?: boolean; }; +type LegacyComponentFunction = (props: TProps, ...children: React.ReactNode[]) => RenderResult; + /** * Legacy slot function type, this allows the rendering handlers to bypass the normal JSX rendering and call the function * directly. This expects the function to have children as the last argument of the call which isn't consistent with standard * react usage, where children are passed as a prop. If writing new components use the DirectComponent type instead. * @deprecated use DirectComponent instead */ -export type LegacyDirectComponent = React.FunctionComponent & { +export type LegacyDirectComponent = LegacyComponentFunction & { _canCompose?: boolean; }; @@ -108,7 +113,7 @@ export type PhasedComponent = FunctionComponent & { * The final rendering of the props in a phased render. This is the function component signature that matches that of * React.createElement, children (if present) will be part of the variable args at the end. */ -export type FinalRender = (props: TProps, ...children: React.ReactNode[]) => React.JSX.Element | null; +export type FinalRender = (props: TProps, ...children: React.ReactNode[]) => FurnJSX.Element | null; /** * Legacy staged render function signature. diff --git a/packages/framework-base/src/index.ts b/packages/framework-base/src/index.ts index 913b298f250..a577b3d8299 100644 --- a/packages/framework-base/src/index.ts +++ b/packages/framework-base/src/index.ts @@ -19,6 +19,9 @@ export type { StyleProp } from './merge-props/mergeStyles.types'; export { mergeStyles } from './merge-props/mergeStyles'; export { mergeProps } from './merge-props/mergeProps'; +// component pattern exports - extracting from elements +export { extractChildren, extractProps, extractStyle } from './component-patterns/extract'; + // component pattern exports - rendering utilities export { renderForJsxRuntime, renderSlot, asDirectComponent } from './component-patterns/render'; @@ -50,6 +53,7 @@ export { withSlots } from './component-patterns/withSlots'; // jsx runtime exports export { jsx, jsxs } from './jsx-runtime'; +export type { FurnJSX } from './jsx-namespace'; // general utilities export { filterProps } from './utilities/filterProps'; diff --git a/packages/framework-base/src/jsx-namespace.ts b/packages/framework-base/src/jsx-namespace.ts new file mode 100644 index 00000000000..534abc94ea4 --- /dev/null +++ b/packages/framework-base/src/jsx-namespace.ts @@ -0,0 +1,83 @@ +import type React from 'react'; + +/** + * This file defines a custom JSX namespace that re-exports React's JSX types, but also allows us to add our own custom behavior to the JSX runtime. + * The main reason we need this is to support our "direct component" pattern, which allows certain components to bypass React's createElement and + * return their own React elements directly from the JSX runtime. + * + * Exporting this custom namespace is required to make intrinsic attributes like key and ref work correctly with our custom JSX functions. The normal + * fallback behavior if not defined is to not allow any attributes on intrinsic elements, which breaks a lot of React functionality. + * + * The custom behavior is implemented in the jsx and jsxs functions, which first check if the type being rendered is a direct component and if so, call it directly. + * + * Thanks to the emotion library's jsx-namespace for providing a reference implementation of how to do this while handling both React 18 and React 19's + * changes to the JSX types. + */ + +type IsPreReact19 = 2 extends Parameters>['length'] ? true : false; + +/** + * The following types are intrinsic types for React, but handled in a way that allows them to be correctly resolved in both + * React 18 and React 19. + * + * React 18: + * - JSX.Element, JSX.ElementClass, etc. + * - no React.JSX namespace + * + * React 19: + * - React.JSX.Element, React.JSX.ElementClass, etc. + * - no global JSX namespace + * + * In both cases, we want to be able to reference these types in our custom JSX namespace, so we conditionally define them based on whether we're in + * a pre-React 19 environment or not. The @ts-expect-error comments are used because both can't be valid at the same time so there will always be + * an error. + */ + +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXElement = true extends IsPreReact19 ? JSX.Element : React.JSX.Element; + +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXElementClass = true extends IsPreReact19 ? JSX.ElementClass : React.JSX.ElementClass; + +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXElementAttributesProperty = true extends IsPreReact19 ? JSX.ElementAttributesProperty : React.JSX.ElementAttributesProperty; + +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXElementChildrenAttribute = true extends IsPreReact19 ? JSX.ElementChildrenAttribute : React.JSX.ElementChildrenAttribute; + +// prettier-ignore +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXLibraryManagedAttributes = true extends IsPreReact19 ? JSX.LibraryManagedAttributes : React.JSX.LibraryManagedAttributes; + +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXIntrinsicAttributes = true extends IsPreReact19 ? JSX.IntrinsicAttributes : React.JSX.IntrinsicAttributes; + +// prettier-ignore +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXIntrinsicClassAttributes = true extends IsPreReact19 ? JSX.IntrinsicClassAttributes : React.JSX.IntrinsicClassAttributes; + +/** @ts-expect-error references types for both react 18 and react 19, only one can be valid at a time */ +type ReactJSXIntrinsicElements = true extends IsPreReact19 ? JSX.IntrinsicElements : React.JSX.IntrinsicElements; + +// based on the code from @types/react@18.2.8 +// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/3197efc097d522c4bf02b94e1a0766d007d6cdeb/types/react/index.d.ts#LL3204C13-L3204C13 +type ReactJSXElementType = true extends IsPreReact19 ? string | React.JSXElementConstructor : React.JSX.ElementType; + +// eslint-disable-next-line @typescript-eslint/no-namespace +export declare namespace FurnJSX { + export type ElementType = ReactJSXElementType; + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + export interface Element extends ReactJSXElement {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + export interface ElementClass extends ReactJSXElementClass {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + export interface ElementAttributesProperty extends ReactJSXElementAttributesProperty {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + export interface ElementChildrenAttribute extends ReactJSXElementChildrenAttribute {} + export type LibraryManagedAttributes = ReactJSXLibraryManagedAttributes; + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + export interface IntrinsicAttributes extends ReactJSXIntrinsicAttributes {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + export interface IntrinsicClassAttributes extends ReactJSXIntrinsicClassAttributes {} + export type IntrinsicElements = ReactJSXIntrinsicElements; +} diff --git a/packages/framework-base/src/jsx-runtime.ts b/packages/framework-base/src/jsx-runtime.ts index b00a4b673f3..edb638f5d14 100644 --- a/packages/framework-base/src/jsx-runtime.ts +++ b/packages/framework-base/src/jsx-runtime.ts @@ -1,14 +1,15 @@ import type React from 'react'; import * as ReactJSX from 'react/jsx-runtime'; import { renderForJsxRuntime } from './component-patterns/render'; +export type { FurnJSX as JSX } from './jsx-namespace'; -export function jsx(type: React.ElementType, props: React.PropsWithChildren, key?: React.Key): React.ReactElement { +export const jsx: typeof ReactJSX.jsx = (type, props, key?: React.Key) => { return renderForJsxRuntime(type, props, key, ReactJSX.jsx); -} +}; -export function jsxs(type: React.ElementType, props: React.PropsWithChildren, key?: React.Key): React.ReactElement { +export const jsxs: typeof ReactJSX.jsxs = (type, props, key?: React.Key) => { return renderForJsxRuntime(type, props, key, ReactJSX.jsxs); -} +}; // Re-export Fragment for <> syntax export { Fragment } from 'react/jsx-runtime'; diff --git a/packages/framework/composition/package.json b/packages/framework/composition/package.json index b21b088a297..b04d1c841ea 100644 --- a/packages/framework/composition/package.json +++ b/packages/framework/composition/package.json @@ -54,8 +54,14 @@ "react-test-renderer": "19.1.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/framework/framework/package.json b/packages/framework/framework/package.json index b5e5a1bd5f2..863b4402660 100644 --- a/packages/framework/framework/package.json +++ b/packages/framework/framework/package.json @@ -67,6 +67,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -76,6 +77,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/framework/immutable-merge/package.json b/packages/framework/immutable-merge/package.json index 8a34120f5d9..1f4f965d76f 100644 --- a/packages/framework/immutable-merge/package.json +++ b/packages/framework/immutable-merge/package.json @@ -42,9 +42,13 @@ "react": "19.1.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, "react": { "optional": true } diff --git a/packages/framework/memo-cache/package.json b/packages/framework/memo-cache/package.json index 852b291eafd..fad8043f335 100644 --- a/packages/framework/memo-cache/package.json +++ b/packages/framework/memo-cache/package.json @@ -43,9 +43,13 @@ "tslib": "^2.3.1" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, "react": { "optional": true } diff --git a/packages/framework/merge-props/package.json b/packages/framework/merge-props/package.json index beab82b548f..67995d407b9 100644 --- a/packages/framework/merge-props/package.json +++ b/packages/framework/merge-props/package.json @@ -41,9 +41,13 @@ "react": "19.1.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, "react": { "optional": true } diff --git a/packages/framework/theme/package.json b/packages/framework/theme/package.json index 8a28b55dc75..8fb3405b07a 100644 --- a/packages/framework/theme/package.json +++ b/packages/framework/theme/package.json @@ -56,9 +56,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/framework/themed-stylesheet/package.json b/packages/framework/themed-stylesheet/package.json index 6033cd041e8..437a29c9ad2 100644 --- a/packages/framework/themed-stylesheet/package.json +++ b/packages/framework/themed-stylesheet/package.json @@ -54,9 +54,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/framework/use-slot/package.json b/packages/framework/use-slot/package.json index 62454e01ac0..c76fb95c03d 100644 --- a/packages/framework/use-slot/package.json +++ b/packages/framework/use-slot/package.json @@ -57,8 +57,14 @@ "react-test-renderer": "19.1.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/framework/use-slots/package.json b/packages/framework/use-slots/package.json index fc7b975a819..6e3e04b214d 100644 --- a/packages/framework/use-slots/package.json +++ b/packages/framework/use-slots/package.json @@ -57,8 +57,14 @@ "react-test-renderer": "19.1.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/framework/use-styling/package.json b/packages/framework/use-styling/package.json index e09837c39e9..c56d1f26992 100644 --- a/packages/framework/use-styling/package.json +++ b/packages/framework/use-styling/package.json @@ -58,8 +58,14 @@ "react-test-renderer": "19.1.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/framework/use-tokens/package.json b/packages/framework/use-tokens/package.json index 77a597c3a7c..662869df855 100644 --- a/packages/framework/use-tokens/package.json +++ b/packages/framework/use-tokens/package.json @@ -57,8 +57,14 @@ "react-test-renderer": "19.1.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/framework/use-tokens/src/customizable.ts b/packages/framework/use-tokens/src/customizable.ts index a96dfd6c238..31e1e1b9e02 100644 --- a/packages/framework/use-tokens/src/customizable.ts +++ b/packages/framework/use-tokens/src/customizable.ts @@ -1,15 +1,13 @@ import type React from 'react'; import type { TokenSettings, UseTokens } from './buildUseTokens'; +import type { FurnJSX } from '@fluentui-react-native/framework-base'; /** * A component implementation, with a use tokens hook passed in. Implementing it this way allows the useTokens hook to be * modified by the customization handler */ -export type InjectableComponent = ( - props: TProps, - useTokens: UseTokens, -) => React.JSX.Element | null; +export type InjectableComponent = (props: TProps, useTokens: UseTokens) => FurnJSX.Element | null; /** * A component with an attached customize function, used to create alternatively styled versions of the component @@ -21,7 +19,7 @@ export type CustomizableComponent = React.FunctionCompo /** * Function helper for easily creating a customizable component based on the useTokens hook * - * @param injectable - a function component implementation, written in (props, useTokens) => React.JSX.Element form + * @param injectable - a function component implementation, written in (props, useTokens) => FurnJSX.Element form * @param useTokens - a hook function, generally built via buildUseTokens, used to retrieve design tokens for the component * * @returns - a function component that has a static function called customize attached. Customize will return a diff --git a/packages/libraries/core/package.json b/packages/libraries/core/package.json index ec91f2e57b5..32b831bf90c 100644 --- a/packages/libraries/core/package.json +++ b/packages/libraries/core/package.json @@ -72,6 +72,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -82,6 +83,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/libraries/core/src/index.ts b/packages/libraries/core/src/index.ts index b5bbf472450..066aea3490f 100644 --- a/packages/libraries/core/src/index.ts +++ b/packages/libraries/core/src/index.ts @@ -250,7 +250,6 @@ export { isGestureResponderEvent, isKeyPressEvent, isMouseEvent, - normalizeRect, preferKeyDownForKeyEvents, useAsPressable, useAsToggle, @@ -267,11 +266,6 @@ export { useViewCommandFocus, } from '@fluentui-react-native/interactive-hooks'; export type { - AbstractComponent, - BlurEvent, - ComponentMethods, - FocusEvent, - HostComponent, IFocusState, IFocusable, IHoverState, @@ -284,30 +278,14 @@ export type { IWithPressableOptions, KeyPressEvent, KeyCallback, - LayoutEvent, - MeasureInWindowOnSuccessCallback, - MeasureLayoutOnSuccessCallback, - MeasureOnSuccessCallback, - MouseEvent, - NativeMethods, OnChangeCallback, OnPressCallback, OnPressWithFocusCallback, OnToggleCallback, - PressEvent, - PressabilityConfig, - PressabilityEventHandlers, PressableFocusProps, - PressableHoverEventProps, PressableHoverProps, PressablePressProps, PressablePropsExtended, - Rect, - RectOrSize, - ResponderSyntheticEvent, - ScrollEvent, - SyntheticEvent, - TextLayoutEvent, onKeySelectCallback, } from '@fluentui-react-native/interactive-hooks'; diff --git a/packages/theming/android-theme/package.json b/packages/theming/android-theme/package.json index 744dfc70ab8..cfbfec3d707 100644 --- a/packages/theming/android-theme/package.json +++ b/packages/theming/android-theme/package.json @@ -61,6 +61,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -70,6 +71,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/theming/apple-theme/package.json b/packages/theming/apple-theme/package.json index f273a3683e6..4393313e29f 100644 --- a/packages/theming/apple-theme/package.json +++ b/packages/theming/apple-theme/package.json @@ -66,6 +66,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -75,6 +76,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/theming/default-theme/package.json b/packages/theming/default-theme/package.json index f65e5873afe..f9a1f659be1 100644 --- a/packages/theming/default-theme/package.json +++ b/packages/theming/default-theme/package.json @@ -63,6 +63,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -72,6 +73,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/theming/theme-tokens/package.json b/packages/theming/theme-tokens/package.json index 69d5fecae15..b9d6c7acccd 100644 --- a/packages/theming/theme-tokens/package.json +++ b/packages/theming/theme-tokens/package.json @@ -57,9 +57,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/theming/theme-types/package.json b/packages/theming/theme-types/package.json index 4eb7e35b208..8ba2cdbb2b7 100644 --- a/packages/theming/theme-types/package.json +++ b/packages/theming/theme-types/package.json @@ -49,9 +49,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/theming/theming-utils/package.json b/packages/theming/theming-utils/package.json index 3716bfddfa1..bbb96e0f825 100644 --- a/packages/theming/theming-utils/package.json +++ b/packages/theming/theming-utils/package.json @@ -57,6 +57,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -66,6 +67,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/theming/theming-utils/src/getCurrentAppearance.ts b/packages/theming/theming-utils/src/getCurrentAppearance.ts index 6baf970d514..47d810c483f 100644 --- a/packages/theming/theming-utils/src/getCurrentAppearance.ts +++ b/packages/theming/theming-utils/src/getCurrentAppearance.ts @@ -3,7 +3,7 @@ import { Appearance } from 'react-native'; import type { AppearanceOptions, ThemeOptions } from '@fluentui-react-native/theme-types'; export function getCurrentAppearance(appearance: ThemeOptions['appearance'], fallback: AppearanceOptions): AppearanceOptions { - if (appearance === undefined) { + if (appearance === undefined || appearance === null) { return fallback; } diff --git a/packages/theming/win32-theme/package.json b/packages/theming/win32-theme/package.json index 022af112709..e95011b72da 100644 --- a/packages/theming/win32-theme/package.json +++ b/packages/theming/win32-theme/package.json @@ -64,6 +64,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -73,6 +74,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/utils/adapters/package.json b/packages/utils/adapters/package.json index 750b43daa67..d3d4f8367e7 100644 --- a/packages/utils/adapters/package.json +++ b/packages/utils/adapters/package.json @@ -50,6 +50,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -59,6 +60,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/utils/adapters/src/filters.macos.ts b/packages/utils/adapters/src/filters.macos.ts index 167e6b4bf43..cf480f42658 100644 --- a/packages/utils/adapters/src/filters.macos.ts +++ b/packages/utils/adapters/src/filters.macos.ts @@ -34,14 +34,14 @@ function getMacViewMask74() { onPreferredScrollerStyleDidChange: true, tooltip: true, mouseDownCanMoveWindow: true, + tvParallaxProperties: true, }; } function getMacViewMask81(): IFilterMask { return { ...getMacViewMask74(), - mouseDownCanMoveWindow: true, - tvParallaxProperties: true, + onDoubleClick: true, }; } @@ -53,8 +53,7 @@ export function getViewMask(): IFilterMask { return getMacViewMask81(); } -export function getTextMask(): IFilterMask { - // no props added in 0.81 for Text, so just return the base mask +function getMacTextMask74() { return { ...getTextMaskBase(), disabled: true, @@ -67,6 +66,13 @@ export function getTextMask(): IFilterMask { }; } +export function getTextMask(): IFilterMask { + // no props added in 0.81 for Text, so just return the base mask + return { + ...getMacTextMask74(), + }; +} + export function getImageMask(): IFilterMask { return { ...getImageMaskBase(), diff --git a/packages/utils/interactive-hooks/package.json b/packages/utils/interactive-hooks/package.json index 5abbddbb71a..c52cf6d7f00 100644 --- a/packages/utils/interactive-hooks/package.json +++ b/packages/utils/interactive-hooks/package.json @@ -33,8 +33,7 @@ }, "dependencies": { "@fluentui-react-native/adapters": "workspace:*", - "@fluentui-react-native/framework-base": "workspace:*", - "invariant": "^2.2.0" + "@fluentui-react-native/framework-base": "workspace:*" }, "devDependencies": { "@babel/core": "catalog:", @@ -62,6 +61,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -71,6 +71,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/packages/utils/interactive-hooks/src/Pressability/CoreEventTypes.ts b/packages/utils/interactive-hooks/src/Pressability/CoreEventTypes.ts deleted file mode 100644 index 3bb0e573737..00000000000 --- a/packages/utils/interactive-hooks/src/Pressability/CoreEventTypes.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -'use strict'; - -/** - * Adapted from the flow code inside the react native project - */ - -import type * as React from 'react'; - -import type { HostComponent } from './InternalTypes'; -export type { - BlurEvent, - FocusEvent, - MouseEvent, - LayoutChangeEvent as LayoutEvent, - TextLayoutEvent, - ScrollResponderEvent as ScrollEvent, -} from 'react-native'; - -export type SyntheticEvent = Readonly<{ - bubbles?: boolean; - cancelable?: boolean; - currentTarget: number | React.ElementRef>; - defaultPrevented?: boolean; - dispatchConfig?: Readonly<{ - registrationName: string; - }>; - eventPhase?: number; - preventDefault: () => void; - isDefaultPrevented: () => boolean; - stopPropagation: () => void; - isPropagationStopped: () => boolean; - isTrusted?: boolean; - nativeEvent: T; - persist: () => void; - target?: number | React.ElementRef>; - timeStamp: number; - type?: string; -}>; - -export type ResponderSyntheticEvent = SyntheticEvent & - Readonly<{ - touchHistory: Readonly<{ - indexOfSingleActiveTouch: number; - mostRecentTimeStamp: number; - numberActiveTouches: number; - touchBank: ReadonlyArray< - Readonly<{ - touchActive: boolean; - startPageX: number; - startPageY: number; - startTimeStamp: number; - currentPageX: number; - currentPageY: number; - currentTimeStamp: number; - previousPageX: number; - previousPageY: number; - previousTimeStamp: number; - }> - >; - }>; - }>; - -export type PressEvent = ResponderSyntheticEvent< - Readonly<{ - changedTouches: ReadonlyArray; - force: number; - identifier: number; - locationX: number; - locationY: number; - pageX: number; - pageY: number; - target?: number; - timestamp: number; - touches: ReadonlyArray; - }> ->; - -export type KeyPressEvent = SyntheticEvent< - Readonly<{ - key: string; - target?: number; - eventCounter?: number; - }> ->; diff --git a/packages/utils/interactive-hooks/src/Pressability/HoverState.ts b/packages/utils/interactive-hooks/src/Pressability/HoverState.ts deleted file mode 100644 index 727e9757536..00000000000 --- a/packages/utils/interactive-hooks/src/Pressability/HoverState.ts +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -'use strict'; - -import { Platform } from 'react-native'; - -let isEnabled = false; - -if (Platform.OS === 'web') { - const canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement); - - if (canUseDOM) { - /** - * Web browsers emulate mouse events (and hover states) after touch events. - * This code infers when the currently-in-use modality supports hover - * (including for multi-modality devices) and considers "hover" to be enabled - * if a mouse movement occurs more than 1 second after the last touch event. - * This threshold is long enough to account for longer delays between the - * browser firing touch and mouse events on low-powered devices. - */ - const HOVER_THRESHOLD_MS = 1000; - let lastTouchTimestamp = 0; - - const enableHover = () => { - if (isEnabled || Date.now() - lastTouchTimestamp < HOVER_THRESHOLD_MS) { - return; - } - isEnabled = true; - }; - - const disableHover = () => { - lastTouchTimestamp = Date.now(); - if (isEnabled) { - isEnabled = false; - } - }; - - document.addEventListener('touchstart', disableHover, true); - document.addEventListener('touchmove', disableHover, true); - document.addEventListener('mousemove', enableHover, true); - } -} else if (Platform.OS === 'windows' || Platform.OS === ('win32' as any) || Platform.OS === 'macos') { - isEnabled = true; -} - -export function isHoverEnabled(): boolean { - return isEnabled; -} diff --git a/packages/utils/interactive-hooks/src/Pressability/InternalTypes.ts b/packages/utils/interactive-hooks/src/Pressability/InternalTypes.ts deleted file mode 100644 index b934aff3a63..00000000000 --- a/packages/utils/interactive-hooks/src/Pressability/InternalTypes.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * A collection of internal types from react-native that are not currently exposed in TypeScript - */ - -import type * as React from 'react'; - -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -type ObjectBase = {}; - -export type Rect = Readonly<{ - bottom?: number; - left?: number; - right?: number; - top?: number; -}>; - -export type RectOrSize = Rect | number; - -export function normalizeRect(size: RectOrSize): Rect { - return typeof size === 'number' ? { bottom: size, left: size, right: size, top: size } : size; -} - -export type MeasureOnSuccessCallback = (x: number, y: number, width: number, height: number, pageX: number, pageY: number) => void; - -export type MeasureInWindowOnSuccessCallback = (x: number, y: number, width: number, height: number) => void; - -export type MeasureLayoutOnSuccessCallback = (left: number, top: number, width: number, height: number) => void; - -/** - * temporary port of changes that are in flight for the react and react-native types definition - */ -export interface ComponentMethods { - context: any; - props: Props; - state: any; - refs: { - [key: string]: React.ReactInstance; - }; - setState(state: any, cb?: () => void): void; - render(): React.ReactNode; - forceUpdate(callback?: () => void): void; -} - -/** - * temporary port of changes that are in flight for the react and react-native types definition - */ -export type AbstractComponent = - // Either a function component that has a specific return type: - | (React.FunctionComponent & ((props: React.PropsWithChildren, context?: any) => Instance)) - // ...or a class component that has the required Component methods and the Instance methods - | { new (props: Config, context?: any): Instance & ComponentMethods }; - -/** - * internal definitions from RN project - */ -export type NativeMethods = { - blur(): void; - focus(): void; - measure(callback: MeasureOnSuccessCallback): void; - measureInWindow(callback: MeasureInWindowOnSuccessCallback): void; - measureLayout( - relativeToNativeNode: number | React.ElementRef>, - onSuccess: MeasureLayoutOnSuccessCallback, - onFail?: () => void, - ): void; - setNativeProps(nativeProps: ObjectBase): void; -}; - -export type HostComponent = AbstractComponent>; diff --git a/packages/utils/interactive-hooks/src/Pressability/Pressability.ts b/packages/utils/interactive-hooks/src/Pressability/Pressability.ts deleted file mode 100644 index 98c6dcf437d..00000000000 --- a/packages/utils/interactive-hooks/src/Pressability/Pressability.ts +++ /dev/null @@ -1,655 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -'use strict'; - -import type * as React from 'react'; -import { Platform, UIManager } from 'react-native'; - -import invariant from 'invariant'; - -import type { BlurEvent, FocusEvent, MouseEvent, PressEvent } from './CoreEventTypes'; -import { isHoverEnabled } from './HoverState'; -import type { HostComponent, Rect } from './InternalTypes'; -import { normalizeRect } from './InternalTypes'; -import type { PressabilityConfig, PressabilityEventHandlers } from './Pressability.types'; - -type TouchState = - | 'NOT_RESPONDER' - | 'RESPONDER_INACTIVE_PRESS_IN' - | 'RESPONDER_INACTIVE_PRESS_OUT' - | 'RESPONDER_ACTIVE_PRESS_IN' - | 'RESPONDER_ACTIVE_PRESS_OUT' - | 'RESPONDER_ACTIVE_LONG_PRESS_IN' - | 'RESPONDER_ACTIVE_LONG_PRESS_OUT' - | 'ERROR'; - -type TouchSignal = - | 'DELAY' - | 'RESPONDER_GRANT' - | 'RESPONDER_RELEASE' - | 'RESPONDER_TERMINATED' - | 'ENTER_PRESS_RECT' - | 'LEAVE_PRESS_RECT' - | 'LONG_PRESS_DETECTED'; - -const Transitions: { [K in TouchState]: { [T in TouchSignal]: TouchState } } = { - NOT_RESPONDER: { - DELAY: 'ERROR', - RESPONDER_GRANT: 'RESPONDER_INACTIVE_PRESS_IN', - RESPONDER_RELEASE: 'ERROR', - RESPONDER_TERMINATED: 'ERROR', - ENTER_PRESS_RECT: 'ERROR', - LEAVE_PRESS_RECT: 'ERROR', - LONG_PRESS_DETECTED: 'ERROR', - }, - RESPONDER_INACTIVE_PRESS_IN: { - DELAY: 'RESPONDER_ACTIVE_PRESS_IN', - RESPONDER_GRANT: 'ERROR', - RESPONDER_RELEASE: 'NOT_RESPONDER', - RESPONDER_TERMINATED: 'NOT_RESPONDER', - ENTER_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_IN', - LEAVE_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_OUT', - LONG_PRESS_DETECTED: 'ERROR', - }, - RESPONDER_INACTIVE_PRESS_OUT: { - DELAY: 'RESPONDER_ACTIVE_PRESS_OUT', - RESPONDER_GRANT: 'ERROR', - RESPONDER_RELEASE: 'NOT_RESPONDER', - RESPONDER_TERMINATED: 'NOT_RESPONDER', - ENTER_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_IN', - LEAVE_PRESS_RECT: 'RESPONDER_INACTIVE_PRESS_OUT', - LONG_PRESS_DETECTED: 'ERROR', - }, - RESPONDER_ACTIVE_PRESS_IN: { - DELAY: 'ERROR', - RESPONDER_GRANT: 'ERROR', - RESPONDER_RELEASE: 'NOT_RESPONDER', - RESPONDER_TERMINATED: 'NOT_RESPONDER', - ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_IN', - LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_OUT', - LONG_PRESS_DETECTED: 'RESPONDER_ACTIVE_LONG_PRESS_IN', - }, - RESPONDER_ACTIVE_PRESS_OUT: { - DELAY: 'ERROR', - RESPONDER_GRANT: 'ERROR', - RESPONDER_RELEASE: 'NOT_RESPONDER', - RESPONDER_TERMINATED: 'NOT_RESPONDER', - ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_IN', - LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_PRESS_OUT', - LONG_PRESS_DETECTED: 'ERROR', - }, - RESPONDER_ACTIVE_LONG_PRESS_IN: { - DELAY: 'ERROR', - RESPONDER_GRANT: 'ERROR', - RESPONDER_RELEASE: 'NOT_RESPONDER', - RESPONDER_TERMINATED: 'NOT_RESPONDER', - ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_IN', - LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT', - LONG_PRESS_DETECTED: 'RESPONDER_ACTIVE_LONG_PRESS_IN', - }, - RESPONDER_ACTIVE_LONG_PRESS_OUT: { - DELAY: 'ERROR', - RESPONDER_GRANT: 'ERROR', - RESPONDER_RELEASE: 'NOT_RESPONDER', - RESPONDER_TERMINATED: 'NOT_RESPONDER', - ENTER_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_IN', - LEAVE_PRESS_RECT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT', - LONG_PRESS_DETECTED: 'ERROR', - }, - ERROR: { - DELAY: 'NOT_RESPONDER', - RESPONDER_GRANT: 'RESPONDER_INACTIVE_PRESS_IN', - RESPONDER_RELEASE: 'NOT_RESPONDER', - RESPONDER_TERMINATED: 'NOT_RESPONDER', - ENTER_PRESS_RECT: 'NOT_RESPONDER', - LEAVE_PRESS_RECT: 'NOT_RESPONDER', - LONG_PRESS_DETECTED: 'NOT_RESPONDER', - }, -}; - -const isActiveSignal = (signal) => signal === 'RESPONDER_ACTIVE_PRESS_IN' || signal === 'RESPONDER_ACTIVE_LONG_PRESS_IN'; - -const isActivationSignal = (signal) => signal === 'RESPONDER_ACTIVE_PRESS_OUT' || signal === 'RESPONDER_ACTIVE_PRESS_IN'; - -const isPressInSignal = (signal) => - signal === 'RESPONDER_INACTIVE_PRESS_IN' || signal === 'RESPONDER_ACTIVE_PRESS_IN' || signal === 'RESPONDER_ACTIVE_LONG_PRESS_IN'; - -const isTerminalSignal = (signal) => signal === 'RESPONDER_TERMINATED' || signal === 'RESPONDER_RELEASE'; - -const DEFAULT_LONG_PRESS_DELAY_MS = 370; // 500 - 130 -const DEFAULT_PRESS_DELAY_MS = 130; -const DEFAULT_PRESS_RECT_OFFSETS: Rect = { - bottom: 30, - left: 20, - right: 20, - top: 20, -}; - -function normalizeDelay(delay?: number, min: number = 0, fallback: number = 0): number { - return Math.max(min, delay ?? fallback); -} - -const getTouchFromPressEvent = (event: PressEvent) => { - const { changedTouches, touches } = event.nativeEvent; - - if (touches != null && touches.length > 0) { - return touches[0]; - } - if (changedTouches != null && changedTouches.length > 0) { - return changedTouches[0]; - } - return event.nativeEvent; -}; - -/** - * Pressability implements press handling capabilities. - * - * =========================== Pressability Tutorial =========================== - * - * The `Pressability` class helps you create press interactions by analyzing the - * geometry of elements and observing when another responder (e.g. ScrollView) - * has stolen the touch lock. It offers hooks for your component to provide - * interaction feedback to the user: - * - * - When a press has activated (e.g. highlight an element) - * - When a press has deactivated (e.g. un-highlight an element) - * - When a press sould trigger an action, meaning it activated and deactivated - * while within the geometry of the element without the lock being stolen. - * - * A high quality interaction isn't as simple as you might think. There should - * be a slight delay before activation. Moving your finger beyond an element's - * bounds should trigger deactivation, but moving the same finger back within an - * element's bounds should trigger reactivation. - * - * In order to use `Pressability`, do the following: - * - * 1. Instantiate `Pressability` and store it on your component's state. - * - * state = { - * pressability: new Pressability({ - * // ... - * }), - * }; - * - * 2. Choose the rendered component who should collect the press events. On that - * element, spread `pressability.getEventHandlers()` into its props. - * - * return ( - * - * ); - * - * 3. Reset `Pressability` when your component unmounts. - * - * componentWillUnmount() { - * this.state.pressability.reset(); - * } - * - * ==================== Pressability Implementation Details ==================== - * - * `Pressability` only assumes that there exists a `HitRect` node. The `PressRect` - * is an abstract box that is extended beyond the `HitRect`. - * - * # Geometry - * - * ┌────────────────────────┐ - * │ ┌──────────────────┐ │ - Presses start anywhere within `HitRect`, which - * │ │ ┌────────────┐ │ │ is expanded via the prop `hitSlop`. - * │ │ │ VisualRect │ │ │ - * │ │ └────────────┘ │ │ - When pressed down for sufficient amount of time - * │ │ HitRect │ │ before letting up, `VisualRect` activates for - * │ └──────────────────┘ │ as long as the press stays within `PressRect`. - * │ PressRect o │ - * └────────────────────│───┘ - * Out Region └────── `PressRect`, which is expanded via the prop - * `pressRectOffset`, allows presses to move - * beyond `HitRect` while maintaining activation - * and being eligible for a "press". - * - * # State Machine - * - * ┌───────────────┐ ◀──── RESPONDER_RELEASE - * │ NOT_RESPONDER │ - * └───┬───────────┘ ◀──── RESPONDER_TERMINATED - * │ - * │ RESPONDER_GRANT (HitRect) - * │ - * ▼ - * ┌─────────────────────┐ ┌───────────────────┐ ┌───────────────────┐ - * │ RESPONDER_INACTIVE_ │ DELAY │ RESPONDER_ACTIVE_ │ T + DELAY │ RESPONDER_ACTIVE_ │ - * │ PRESS_IN ├────────▶ │ PRESS_IN ├────────────▶ │ LONG_PRESS_IN │ - * └─┬───────────────────┘ └─┬─────────────────┘ └─┬─────────────────┘ - * │ ▲ │ ▲ │ ▲ - * │LEAVE_ │ │LEAVE_ │ │LEAVE_ │ - * │PRESS_RECT │ENTER_ │PRESS_RECT │ENTER_ │PRESS_RECT │ENTER_ - * │ │PRESS_RECT │ │PRESS_RECT │ │PRESS_RECT - * ▼ │ ▼ │ ▼ │ - * ┌─────────────┴───────┐ ┌─────────────┴─────┐ ┌─────────────┴─────┐ - * │ RESPONDER_INACTIVE_ │ DELAY │ RESPONDER_ACTIVE_ │ │ RESPONDER_ACTIVE_ │ - * │ PRESS_OUT ├────────▶ │ PRESS_OUT │ │ LONG_PRESS_OUT │ - * └─────────────────────┘ └───────────────────┘ └───────────────────┘ - * - * T + DELAY => LONG_PRESS_DELAY + DELAY - * - * Not drawn are the side effects of each transition. The most important side - * effect is the invocation of `onPress` and `onLongPress` that occur when a - * responder is release while in the "press in" states. - */ -export class Pressability { - private _config: PressabilityConfig; - private _eventHandlers: PressabilityEventHandlers = null; - private _hoverInDelayTimeout: any /* TimeoutID */ = null; - private _hoverOutDelayTimeout: any /* TimeoutID */ = null; - private _isHovered: boolean = false; - private _longPressDelayTimeout: any /* TimeoutID */ = null; - private _pressDelayTimeout: any /* TimeoutID */ = null; - private _pressOutDelayTimeout: any /* TimeoutID */ = null; - private _responderID: number | React.ElementRef> = null; - private _responderRegion: Rect = null; - private _touchActivatePosition: Readonly<{ - pageX: number; - pageY: number; - }>; - private _touchState: TouchState = 'NOT_RESPONDER'; - - constructor(config: PressabilityConfig) { - this.configure(config); - } - - public configure(config: PressabilityConfig): void { - this._config = config; - } - - /** - * Resets any pending timers. This should be called on unmount. - */ - public reset(): void { - this._cancelHoverInDelayTimeout(); - this._cancelHoverOutDelayTimeout(); - this._cancelLongPressDelayTimeout(); - this._cancelPressDelayTimeout(); - this._cancelPressOutDelayTimeout(); - } - - /** - * Returns a set of props to spread into the interactive element. - */ - public getEventHandlers(): PressabilityEventHandlers { - if (this._eventHandlers == null) { - this._eventHandlers = this._createEventHandlers(); - } - return this._eventHandlers; - } - - private _createEventHandlers(): PressabilityEventHandlers { - const focusEventHandlers = { - onBlur: (event: BlurEvent): void => { - const { onBlur } = this._config; - if (onBlur != null) { - onBlur(event); - } - }, - onFocus: (event: FocusEvent): void => { - const { onFocus } = this._config; - if (onFocus != null) { - onFocus(event); - } - }, - }; - - const responderEventHandlers = { - onStartShouldSetResponder: (): boolean => { - const { disabled } = this._config; - if (disabled == null) { - return true; - } - return !disabled; - }, - - onResponderGrant: (event: PressEvent): void => { - event.persist(); - - this._cancelPressOutDelayTimeout(); - - this._responderID = event.currentTarget; - this._touchState = 'NOT_RESPONDER'; - this._receiveSignal('RESPONDER_GRANT', event); - - const delayPressIn = normalizeDelay(this._config.delayPressIn, 0, DEFAULT_PRESS_DELAY_MS); - - if (delayPressIn > 0) { - this._pressDelayTimeout = setTimeout(() => { - this._receiveSignal('DELAY', event); - }, delayPressIn); - } else { - this._receiveSignal('DELAY', event); - } - - const delayLongPress = normalizeDelay(this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS); - this._longPressDelayTimeout = setTimeout(() => { - this._handleLongPress(event); - }, delayLongPress + delayPressIn); - }, - - onResponderMove: (event: PressEvent): void => { - if (this._config.onPressMove != null) { - this._config.onPressMove(event); - } - - // Region may not have finished being measured, yet. - const responderRegion = this._responderRegion; - if (responderRegion == null) { - return; - } - - const touch = getTouchFromPressEvent(event); - if (touch == null) { - this._cancelLongPressDelayTimeout(); - this._receiveSignal('LEAVE_PRESS_RECT', event); - return; - } - - if (this._touchActivatePosition != null) { - const deltaX = this._touchActivatePosition.pageX - touch.pageX; - const deltaY = this._touchActivatePosition.pageY - touch.pageY; - if (Math.hypot(deltaX, deltaY) > 10) { - this._cancelLongPressDelayTimeout(); - } - } - - if (this._isTouchWithinResponderRegion(touch, responderRegion)) { - this._receiveSignal('ENTER_PRESS_RECT', event); - } else { - this._cancelLongPressDelayTimeout(); - this._receiveSignal('LEAVE_PRESS_RECT', event); - } - }, - - onResponderRelease: (event: PressEvent): void => { - this._receiveSignal('RESPONDER_RELEASE', event); - }, - - onResponderTerminate: (event: PressEvent): void => { - this._receiveSignal('RESPONDER_TERMINATED', event); - }, - - onResponderTerminationRequest: (): boolean => { - const { cancelable } = this._config; - return cancelable || true; - }, - - onClick: (event): void => { - const { onPress } = this._config; - if (onPress != null) { - onPress(event); - } - }, - }; - - const mouseEventHandlers = - Platform.OS === 'ios' || Platform.OS === 'android' - ? null - : { - onMouseEnter: (event: MouseEvent): void => { - if (isHoverEnabled()) { - this._isHovered = true; - this._cancelHoverOutDelayTimeout(); - const { onHoverIn } = this._config; - if (onHoverIn != null) { - const delayHoverIn = normalizeDelay(this._config.delayHoverIn); - if (delayHoverIn > 0) { - this._hoverInDelayTimeout = setTimeout(() => { - onHoverIn(event); - }, delayHoverIn); - } else { - onHoverIn(event); - } - } - } - }, - - onMouseLeave: (event: MouseEvent): void => { - if (this._isHovered) { - this._isHovered = false; - this._cancelHoverInDelayTimeout(); - const { onHoverOut } = this._config; - if (onHoverOut != null) { - const delayHoverOut = normalizeDelay(this._config.delayHoverOut); - if (delayHoverOut > 0) { - this._hoverInDelayTimeout = setTimeout(() => { - onHoverOut(event); - }, delayHoverOut); - } else { - onHoverOut(event); - } - } - } - }, - }; - - return { - ...focusEventHandlers, - ...responderEventHandlers, - ...mouseEventHandlers, - }; - } - - /** - * Receives a state machine signal, performs side effects of the transition - * and stores the new state. Validates the transition as well. - */ - private _receiveSignal(signal: TouchSignal, event: PressEvent): void { - const prevState = this._touchState; - const nextState: TouchState = Transitions[prevState][signal]; - if (this._responderID == null && signal === 'RESPONDER_RELEASE') { - return; - } - invariant( - nextState != null && nextState !== 'ERROR', - 'Pressability: Invalid signal `%s` for state `%s` on responder: %s', - signal, - prevState, - typeof this._responderID === 'number' ? this._responderID : '<>', - ); - if (prevState !== nextState) { - this._performTransitionSideEffects(prevState, nextState, signal, event); - this._touchState = nextState; - } - } - - /** - * Performs a transition between touchable states and identify any activations - * or deactivations (and callback invocations). - */ - private _performTransitionSideEffects(prevState: TouchState, nextState: TouchState, signal: TouchSignal, event): void { - if (isTerminalSignal(signal)) { - this._touchActivatePosition = null; - this._cancelLongPressDelayTimeout(); - } - - const isInitialTransition = prevState === 'NOT_RESPONDER' && nextState === 'RESPONDER_INACTIVE_PRESS_IN'; - - const isActivationTransiton = !isActivationSignal(prevState) && isActivationSignal(nextState); - - if (isInitialTransition || isActivationTransiton) { - this._measureResponderRegion(); - } - - if (isPressInSignal(prevState) && signal === 'LONG_PRESS_DETECTED') { - const { onLongPress } = this._config; - if (onLongPress != null) { - onLongPress(event); - } - } - - const isPrevActive = isActiveSignal(prevState); - const isNextActive = isActiveSignal(nextState); - - if (!isPrevActive && isNextActive) { - this._activate(event); - } else if (isPrevActive && !isNextActive) { - this._deactivate(event); - } - - if (isPressInSignal(prevState) && signal === 'RESPONDER_RELEASE') { - const { onLongPress, onPress /*, android_disableSound */ } = this._config; - if (onPress != null) { - const isPressCanceledByLongPress = - onLongPress != null && prevState === 'RESPONDER_ACTIVE_LONG_PRESS_IN' && this._shouldLongPressCancelPress(); - if (!isPressCanceledByLongPress) { - // If we never activated (due to delays), activate and deactivate now. - if (!isNextActive && !isPrevActive) { - this._activate(event); - this._deactivate(event); - } - /* - if (Platform.OS === 'android' && android_disableSound !== true) { - SoundManager.playTouchSound(); - } - */ - onPress(event); - } - } - } - - this._cancelPressDelayTimeout(); - } - - private _activate(event): void { - const { onPressIn } = this._config; - const touch = getTouchFromPressEvent(event); - this._touchActivatePosition = { - pageX: touch.pageX, - pageY: touch.pageY, - }; - if (onPressIn != null) { - onPressIn(event); - } - } - - private _deactivate(event): void { - const { onPressOut } = this._config; - if (onPressOut != null) { - const delayPressOut = normalizeDelay(this._config.delayPressOut); - if (delayPressOut > 0) { - this._pressOutDelayTimeout = setTimeout(() => { - onPressOut(event); - }, delayPressOut); - } else { - onPressOut(event); - } - } - } - - private _measureResponderRegion(): void { - if (this._responderID == null) { - return; - } - - if (typeof this._responderID === 'number') { - UIManager.measure(this._responderID, this._measureCallback); - } else { - const measure = (this as any)?._responderID?.measure; - - if (typeof measure === 'function' && this._measureCallback) { - (this as any)?._responderID?.measure(this._measureCallback); - } - } - } - - private _measureCallback = (left, top, width, height, pageX, pageY) => { - if (!left && !top && !width && !height && !pageX && !pageY) { - return; - } - this._responderRegion = { - bottom: pageY + height, - left: pageX, - right: pageX + width, - top: pageY, - }; - }; - - private _isTouchWithinResponderRegion(touch: any /* PropertyType */, responderRegion: Rect): boolean { - const hitSlop = normalizeRect(this._config.hitSlop); - const pressRectOffset = normalizeRect(this._config.pressRectOffset); - - let regionBottom = responderRegion.bottom; - let regionLeft = responderRegion.left; - let regionRight = responderRegion.right; - let regionTop = responderRegion.top; - - if (hitSlop != null) { - if (hitSlop.bottom != null) { - regionBottom += hitSlop.bottom; - } - if (hitSlop.left != null) { - regionLeft -= hitSlop.left; - } - if (hitSlop.right != null) { - regionRight += hitSlop.right; - } - if (hitSlop.top != null) { - regionTop -= hitSlop.top; - } - } - - regionBottom += pressRectOffset?.bottom ?? DEFAULT_PRESS_RECT_OFFSETS.bottom; - regionLeft -= pressRectOffset?.left ?? DEFAULT_PRESS_RECT_OFFSETS.left; - regionRight += pressRectOffset?.right ?? DEFAULT_PRESS_RECT_OFFSETS.right; - regionTop -= pressRectOffset?.top ?? DEFAULT_PRESS_RECT_OFFSETS.top; - - return touch.pageX > regionLeft && touch.pageX < regionRight && touch.pageY > regionTop && touch.pageY < regionBottom; - } - - private _handleLongPress(event: PressEvent): void { - if (this._touchState === 'RESPONDER_ACTIVE_PRESS_IN' || this._touchState === 'RESPONDER_ACTIVE_LONG_PRESS_IN') { - this._receiveSignal('LONG_PRESS_DETECTED', event); - } - } - - private _shouldLongPressCancelPress(): boolean { - return true; - } - - private _cancelHoverInDelayTimeout(): void { - if (this._hoverInDelayTimeout != null) { - clearTimeout(this._hoverInDelayTimeout); - this._hoverInDelayTimeout = null; - } - } - - private _cancelHoverOutDelayTimeout(): void { - if (this._hoverOutDelayTimeout != null) { - clearTimeout(this._hoverOutDelayTimeout); - this._hoverOutDelayTimeout = null; - } - } - - private _cancelLongPressDelayTimeout(): void { - if (this._longPressDelayTimeout != null) { - clearTimeout(this._longPressDelayTimeout); - this._longPressDelayTimeout = null; - } - } - - private _cancelPressDelayTimeout(): void { - if (this._pressDelayTimeout != null) { - clearTimeout(this._pressDelayTimeout); - this._pressDelayTimeout = null; - } - } - - private _cancelPressOutDelayTimeout(): void { - if (this._pressOutDelayTimeout != null) { - clearTimeout(this._pressOutDelayTimeout); - this._pressOutDelayTimeout = null; - } - } -} diff --git a/packages/utils/interactive-hooks/src/Pressability/Pressability.types.ts b/packages/utils/interactive-hooks/src/Pressability/Pressability.types.ts deleted file mode 100644 index d85f97cdf74..00000000000 --- a/packages/utils/interactive-hooks/src/Pressability/Pressability.types.ts +++ /dev/null @@ -1,139 +0,0 @@ -import type { ViewProps, PressableProps } from 'react-native'; - -import type { BlurEvent, FocusEvent, PressEvent, MouseEvent } from './CoreEventTypes'; -import type { RectOrSize } from './InternalTypes'; - -export type PressablePressProps = { - /** - * Called when a press gestute has been triggered. - */ - onPress?: PressableProps['onPress']; - - /** - * Called when the press is activated to provide visual feedback. - */ - onPressIn?: PressableProps['onPressIn']; - - /** - * Called when the press is deactivated to undo visual feedback. - */ - onPressOut?: PressableProps['onPressOut']; - - /** - * Called when a long press gesture has been triggered. - */ - onLongPress?: PressableProps['onLongPress']; -}; - -export type PressableFocusProps = { - /** - * Called after the element loses focus. - */ - onBlur?: (event: BlurEvent) => any; - - /** - * Called after the element is focused. - */ - onFocus?: (event: FocusEvent) => any; -}; - -export type PressableHoverProps = { - /** - * Called when the hover is activated to provide visual feedback. - */ - onHoverIn?: (event: MouseEvent) => any; - - /** - * Called when the hover is deactivated to undo visual feedback. - */ - onHoverOut?: (event: MouseEvent) => any; -}; - -export type PressableHoverEventProps = { - /** - * While the user API is onHoverIn the View event is onMouseEnter - */ - onMouseEnter?: (event: MouseEvent) => any; - - /** - * While the user API is onHoverOut the View event is onMouseLeave - */ - onMouseLeave?: (event: MouseEvent) => any; -}; - -export type PressabilityConfig = Readonly< - PressablePressProps & - PressableFocusProps & - PressableHoverProps & { - /** - * Whether a press gesture can be interrupted by a parent gesture such as a - * scroll event. Defaults to true. - */ - cancelable?: boolean; - - /** - * Whether to disable initialization of the press gesture. - */ - disabled?: boolean; - - /** - * Amount to extend the `VisualRect` by to create `HitRect`. - */ - hitSlop?: ViewProps['hitSlop']; - - /** - * Amount to extend the `HitRect` by to create `PressRect`. - */ - pressRectOffset?: RectOrSize; - - /** - * Whether to disable the systemm sound when `onPress` fires on Android. - **/ - android_disableSound?: boolean; - - /** - * Duration to wait after hover in before calling `onHoverIn`. - */ - delayHoverIn?: number; - - /** - * Duration to wait after hover out before calling `onHoverOut`. - */ - delayHoverOut?: number; - - /** - * Duration (in addition to `delayPressIn`) after which a press gesture is - * considered a long press gesture. Defaults to 500 (milliseconds). - */ - delayLongPress?: number; - - /** - * Duration to wait after press down before calling `onPressIn`. - */ - delayPressIn?: number; - - /** - * Duration to wait after letting up before calling `onPressOut`. - */ - delayPressOut?: number; - - /** - * Called when the press location moves. (This should rarely be used.) - */ - onPressMove?: (event: PressEvent) => any; - } ->; - -export type PressabilityEventHandlers = Readonly< - PressablePressProps & - PressableHoverEventProps & - PressableFocusProps & { - onClick: (event: PressEvent) => void; - onResponderGrant: (event: PressEvent) => void; - onResponderMove: (event: PressEvent) => void; - onResponderRelease: (event: PressEvent) => void; - onResponderTerminate: (event: PressEvent) => void; - onResponderTerminationRequest: () => boolean; - onStartShouldSetResponder: () => boolean; - } ->; diff --git a/packages/utils/interactive-hooks/src/Pressability/README.md b/packages/utils/interactive-hooks/src/Pressability/README.md deleted file mode 100644 index 73ad75d4671..00000000000 --- a/packages/utils/interactive-hooks/src/Pressability/README.md +++ /dev/null @@ -1,3 +0,0 @@ -Note that these files are a straight port and conversion to TypeScript of the Pressability hook from react-native. - -This code is temporary until this repo can target a version of react-native that includes that code. diff --git a/packages/utils/interactive-hooks/src/index.ts b/packages/utils/interactive-hooks/src/index.ts index 3da476cba0b..58bdb8e47dc 100644 --- a/packages/utils/interactive-hooks/src/index.ts +++ b/packages/utils/interactive-hooks/src/index.ts @@ -24,37 +24,7 @@ export { useAsToggleWithEvent } from './useAsToggleWithEvent'; export type { ValueChangeCallback } from './useControllableValue'; export { useControllableValue } from './useControllableValue'; export type { OnChangeWithEventCallback, OnToggleWithEventCallback } from './useAsToggleWithEvent'; -export type { - PressabilityConfig, - PressabilityEventHandlers, - PressableFocusProps, - PressableHoverEventProps, - PressableHoverProps, - PressablePressProps, -} from './Pressability/Pressability.types'; -export { normalizeRect } from './Pressability/InternalTypes'; -export type { - AbstractComponent, - ComponentMethods, - HostComponent, - MeasureInWindowOnSuccessCallback, - MeasureLayoutOnSuccessCallback, - MeasureOnSuccessCallback, - NativeMethods, - Rect, - RectOrSize, -} from './Pressability/InternalTypes'; -export type { - BlurEvent, - FocusEvent, - LayoutEvent, - MouseEvent, - PressEvent, - ResponderSyntheticEvent, - ScrollEvent, - SyntheticEvent, - TextLayoutEvent, -} from './Pressability/CoreEventTypes'; +export type { PressableFocusProps, PressableHoverProps, PressablePressProps } from './usePressableState.types'; export type { KeyPressEvent, KeyCallback, KeyPressProps } from './useKeyProps.types'; export { preferKeyDownForKeyEvents, useKeyCallback, useKeyDownProps, useKeyProps, useKeyUpProps } from './useKeyProps'; export { useOnPressWithFocus } from './useOnPressWithFocus'; diff --git a/packages/utils/interactive-hooks/src/useAsPressable.ts b/packages/utils/interactive-hooks/src/useAsPressable.ts index a5a01620fba..f69abece65a 100644 --- a/packages/utils/interactive-hooks/src/useAsPressable.ts +++ b/packages/utils/interactive-hooks/src/useAsPressable.ts @@ -1,6 +1,6 @@ -import * as React from 'react'; +import React from 'react'; -import type { PressableFocusProps, PressableHoverProps, PressablePressProps } from './Pressability/Pressability.types'; +import { usePressability } from './usePressability'; import type { IPressableHooks, IWithPressableOptions, @@ -9,7 +9,7 @@ import type { IFocusState, IWithPressableEvents, } from './useAsPressable.types'; -import { usePressability } from './usePressability'; +import type { PressableFocusProps, PressableHoverProps, PressablePressProps } from './usePressableState.types'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type type ObjectBase = {}; @@ -129,9 +129,6 @@ export function useHoverState(props: IWithPressableOptions } /** - * useAsPressable wraps the usePressability hook that will be available in RN 0.63 and beyond. Once this library is on a recent enough - * version of react-native this implementation can switch to using the official version. - * * The useAsPressable hook adds a simple state change function for listening to hover, press, and focus events on the base pressability implementation * @param props - input props for the component, mixed in with pressable and pressability options */ diff --git a/packages/utils/interactive-hooks/src/useAsPressable.types.ts b/packages/utils/interactive-hooks/src/useAsPressable.types.ts index 1147f3d1869..981b6ee9261 100644 --- a/packages/utils/interactive-hooks/src/useAsPressable.types.ts +++ b/packages/utils/interactive-hooks/src/useAsPressable.types.ts @@ -1,4 +1,4 @@ -import type { PressabilityConfig, PressabilityEventHandlers } from './Pressability/Pressability.types'; +import type { PressabilityConfig, EventHandlers } from './usePressability'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type type ObjectBase = {}; @@ -23,7 +23,7 @@ export type IPressableOptions = PressabilityConfig & { export type IWithPressableOptions = T & IPressableOptions; -export type IWithPressableEvents = T & PressabilityEventHandlers; +export type IWithPressableEvents = T & EventHandlers; export type IPressableHooks = { props: IWithPressableEvents; diff --git a/packages/utils/interactive-hooks/src/usePressability.ts b/packages/utils/interactive-hooks/src/usePressability.ts index 68aed1343b9..4ff8f0a5210 100644 --- a/packages/utils/interactive-hooks/src/usePressability.ts +++ b/packages/utils/interactive-hooks/src/usePressability.ts @@ -1,40 +1,92 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ +import type { PressableProps, GestureResponderEvent, BlurEvent, MouseEvent } from 'react-native'; + +import usePressabilityBase from 'react-native/Libraries/Pressability/usePressability'; + +export type Rect = { + bottom?: number | null; + left?: number | null; + right?: number | null; + top?: number | null; +}; +export type RectOrSize = Rect | number; -'use strict'; +type ConfigFromPressableProps = Pick< + PressableProps, + | 'cancelable' + | 'disabled' + | 'hitSlop' + | 'android_disableSound' + | 'delayHoverIn' + | 'delayHoverOut' + | 'delayLongPress' + | 'onBlur' + | 'onFocus' + | 'onHoverIn' + | 'onHoverOut' + | 'onLongPress' + | 'onPress' + | 'onPressIn' + | 'onPressOut' + | 'pressRetentionOffset' + | 'testOnly_pressed' + | 'android_ripple' +>; -import { useEffect, useRef } from 'react'; +export type PressabilityConfig = ConfigFromPressableProps & { + /** + * Amount to extend the `HitRect` by to create `PressRect`. + */ + pressRectOffset?: RectOrSize; -import { Pressability } from './Pressability/Pressability'; -import type { PressabilityConfig, PressabilityEventHandlers } from './Pressability/Pressability.types'; + /** + * Duration to wait after press down before calling `onPressIn`. + */ + delayPressIn?: number; -export function usePressability(config: PressabilityConfig): PressabilityEventHandlers { - const pressabilityRef = useRef(null); - if (pressabilityRef.current == null) { - pressabilityRef.current = new Pressability(config); - } - const pressability = pressabilityRef.current; + /** + * Duration to wait after letting up before calling `onPressOut`. + */ + delayPressOut?: number; - // On the initial mount, this is a no-op. On updates, `pressability` will be - // re-configured to use the new configuration. - useEffect(() => { - pressability.configure(config); - }, [config, pressability]); + /** + * Minimum duration to wait between calling `onPressIn` and `onPressOut`. + */ + minPressDuration?: number; - // On unmount, reset pending state and timers inside `pressability`. This is - // a separate effect because we do not want to reset when `config` changes. - useEffect(() => { - return () => { - pressability.reset(); - }; - }, [pressability]); + /** + * Called when the press location moves. (This should rarely be used.) + */ + onPressMove?: ((event: GestureResponderEvent) => void) | null; - return pressability.getEventHandlers(); + /** + * Whether to prevent any other native components from becoming responder + * while this pressable is responder. + */ + blockNativeResponder?: boolean; +}; + +export type EventHandlers = { + onBlur: (event: BlurEvent) => void; + onClick: (event: GestureResponderEvent) => void; + onFocus: (event: FocusEvent) => void; + onMouseEnter?: (event: MouseEvent) => void; + onMouseLeave?: (event: MouseEvent) => void; + onPointerEnter?: (event: PointerEvent) => void; + onPointerLeave?: (event: PointerEvent) => void; + onResponderGrant: (event: GestureResponderEvent) => void | boolean; + onResponderMove: (event: GestureResponderEvent) => void; + onResponderRelease: (event: GestureResponderEvent) => void; + onResponderTerminate: (event: GestureResponderEvent) => void; + onResponderTerminationRequest: () => boolean; + onStartShouldSetResponder: () => boolean; +}; + +/** + * Create a typed wrapper around the internal usePressability hook since the types are still in flow + * for that file. + * @param config pressability configuration options, replicated from internal usePressability hook. + * @returns event handlers for the pressable component or null if config is null. + */ +export function usePressability(config: PressabilityConfig | null): EventHandlers | null { + return usePressabilityBase(config); } diff --git a/packages/utils/interactive-hooks/src/usePressableState.types.ts b/packages/utils/interactive-hooks/src/usePressableState.types.ts index 9711b12bd17..ac33203b675 100644 --- a/packages/utils/interactive-hooks/src/usePressableState.types.ts +++ b/packages/utils/interactive-hooks/src/usePressableState.types.ts @@ -16,66 +16,14 @@ export type HoverState = { export type PressableState = PressState & FocusState & HoverState; -export type PressablePressProps = { - /** - * Duration (in milliseconds) from `onPressIn` before `onLongPress` is called. - */ - delayLongPress?: PressableProps['delayLongPress']; +export type PressablePressPropKeys = 'delayLongPress' | 'onPress' | 'onPressIn' | 'onPressOut' | 'onLongPress'; +export type PressablePressProps = Pick; - /** - * Called when a press gestute has been triggered. - */ - onPress?: PressableProps['onPress']; +export type PressableFocusPropKeys = 'onFocus' | 'onBlur'; +export type PressableFocusProps = Pick; - /** - * Called when the press is activated to provide visual feedback. - */ - onPressIn?: PressableProps['onPressIn']; - - /** - * Called when the press is deactivated to undo visual feedback. - */ - onPressOut?: PressableProps['onPressOut']; - - /** - * Called when a long press gesture has been triggered. - */ - onLongPress?: PressableProps['onLongPress']; -}; - -export type PressableFocusProps = { - /** - * Called after the element loses focus. - */ - onBlur?: (event: any) => any; - - /** - * Called after the element is focused. - */ - onFocus?: (event: any) => any; -}; - -export type PressableHoverProps = { - /** - * Duration to wait after hover in before calling `onHoverIn`. - */ - delayHoverIn?: number; - - /** - * Duration to wait after hover out before calling `onHoverOut`. - */ - delayHoverOut?: number; - - /** - * Called when the hover is activated to provide visual feedback. - */ - onHoverIn?: (event: any) => any; - - /** - * Called when the hover is deactivated to undo visual feedback. - */ - onHoverOut?: (event: any) => any; -}; +export type PressableHoverPropKeys = 'delayHoverIn' | 'delayHoverOut' | 'onHoverIn' | 'onHoverOut'; +export type PressableHoverProps = Pick; /** * PressablePropsExtended includes all the desktop specific types unique to IViewProps, along with the Pressable event handlers diff --git a/packages/utils/styling/package.json b/packages/utils/styling/package.json index c5795032469..bf3d9f637c3 100644 --- a/packages/utils/styling/package.json +++ b/packages/utils/styling/package.json @@ -46,9 +46,15 @@ "react-native": "^0.81.0" }, "peerDependencies": { + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + }, "rnx-kit": { "kitType": "library", "alignDeps": { diff --git a/packages/utils/tokens/package.json b/packages/utils/tokens/package.json index 2e0403bf795..dc80c01c99f 100644 --- a/packages/utils/tokens/package.json +++ b/packages/utils/tokens/package.json @@ -53,6 +53,7 @@ }, "peerDependencies": { "@office-iss/react-native-win32": "^0.74.0", + "@types/react": "~18.2.0 || ~19.0.0 || ~19.1.0", "react": "18.2.0 || 19.0.0 || 19.1.0", "react-native": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", "react-native-macos": "^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0", @@ -62,6 +63,9 @@ "@office-iss/react-native-win32": { "optional": true }, + "@types/react": { + "optional": true + }, "react-native-macos": { "optional": true }, diff --git a/scripts/src/tasks/lintPackage.ts b/scripts/src/tasks/lintPackage.ts index 001a96c9b3a..8fe1ba77ec8 100644 --- a/scripts/src/tasks/lintPackage.ts +++ b/scripts/src/tasks/lintPackage.ts @@ -71,6 +71,7 @@ export class LintPackageCommand extends Command { this.checkBuildConfig(buildConfig); this.checkDependencies(); this.checkDevDeps(); + this.checkPeerDeps(); this.checkRnxKitConfig(); await this.checkCatalogs(); @@ -189,6 +190,34 @@ export class LintPackageCommand extends Command { }); } + private checkPeerDeps() { + const issues: string[] = []; + const manifest = this.projRoot.manifest; + const peerDeps = new Set(Object.keys(manifest.peerDependencies || {})); + if (peerDeps.has('@types/react')) { + if (!manifest.peerDependenciesMeta) { + this.projRoot.setManifestEntry('peerDependenciesMeta', {}); + issues.push('- peerDependenciesMeta field should be added for optional peer dependencies'); + } + const peerDepsMeta = manifest.peerDependenciesMeta || {}; + if (!peerDepsMeta['@types/react'] || !peerDepsMeta['@types/react'].optional) { + this.projRoot.updateRecordEntry('peerDependenciesMeta', '@types/react', { optional: true }); + issues.push('- @types/react should be marked as an optional peer dependency'); + } + } + const peerDepsMeta = manifest.peerDependenciesMeta || {}; + for (const depName of Object.keys(peerDepsMeta)) { + if (!peerDeps.has(depName)) { + issues.push(`- peerDependenciesMeta entry for ${depName} should be removed since it's not a declared peer dependency`); + this.projRoot.updateRecordEntry('peerDependenciesMeta', depName, undefined); + } + } + + this.errorIf(issues.length > 0, issues.join('\n'), () => { + // changes already applied above + }); + } + private checkRnxKitConfig() { const projRoot = this.projRoot; const manifest = projRoot.manifest; diff --git a/yarn.lock b/yarn.lock index 6e66005f6b8..2be1b1ed24d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1849,14 +1849,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.25.0": - version: 7.28.2 - resolution: "@babel/runtime@npm:7.28.2" - checksum: 10c0/c20afe253629d53a405a610b12a62ac74d341a2c1e0fb202bbef0c118f6b5c84f94bf16039f58fd0483dd256901259930a43976845bdeb180cab1f882c21b6e0 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.5.5": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.5.5": version: 7.28.6 resolution: "@babel/runtime@npm:7.28.6" checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d @@ -2689,6 +2682,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -2696,6 +2690,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -2730,6 +2726,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -2737,6 +2734,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -2776,6 +2775,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -2783,6 +2783,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -2826,6 +2828,7 @@ __metadata: unicode-segmenter: "npm:^0.14.4" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -2834,6 +2837,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -2900,6 +2905,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -2908,6 +2914,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -2960,6 +2968,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -2968,6 +2977,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3005,6 +3016,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3012,6 +3024,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3060,6 +3074,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3068,6 +3083,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3111,6 +3128,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3119,6 +3137,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3166,7 +3186,11 @@ __metadata: react-native: "npm:^0.81.0" react-test-renderer: "npm:19.1.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -3211,6 +3235,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3219,6 +3244,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3255,6 +3282,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3262,6 +3290,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3425,6 +3455,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3433,6 +3464,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3469,6 +3502,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3476,6 +3510,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3514,6 +3550,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3522,6 +3559,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3572,6 +3611,7 @@ __metadata: webdriverio: "catalog:" peerDependencies: "@office-iss/react-native-win32": ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3579,6 +3619,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3624,6 +3666,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3632,6 +3675,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3662,6 +3707,7 @@ __metadata: use-subscription: "npm:^1.11.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3669,6 +3715,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3700,6 +3748,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3707,6 +3756,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3740,6 +3791,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3748,6 +3800,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3777,6 +3831,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3784,6 +3839,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3822,6 +3879,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3830,6 +3888,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3854,8 +3914,12 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -3878,8 +3942,12 @@ __metadata: react-native: "npm:^0.81.0" use-subscription: "npm:^1.11.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -3912,6 +3980,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3919,6 +3988,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -3957,6 +4028,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -3965,6 +4037,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4000,6 +4074,7 @@ __metadata: tslib: "npm:^2.3.1" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4007,6 +4082,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4043,6 +4120,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4050,6 +4128,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4087,6 +4167,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4094,6 +4175,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4114,8 +4197,13 @@ __metadata: "@types/node": "catalog:" "@types/react": "npm:~19.1.0" react: "npm:19.1.0" + react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -4153,6 +4241,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4160,6 +4249,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4198,6 +4289,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4206,6 +4298,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4225,8 +4319,11 @@ __metadata: "@types/react": "npm:~19.1.0" react: "npm:19.1.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 peerDependenciesMeta: + "@types/react": + optional: true react: optional: true languageName: unknown @@ -4267,6 +4364,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4275,6 +4373,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4305,7 +4405,6 @@ __metadata: "@types/jest": "npm:^29.0.0" "@types/react": "npm:~19.1.0" "@types/react-test-renderer": "npm:^19.1.0" - invariant: "npm:^2.2.0" react: "npm:19.1.0" react-native: "npm:^0.81.0" react-native-macos: "npm:^0.81.0" @@ -4313,6 +4412,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4320,6 +4420,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4391,6 +4493,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4398,6 +4501,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4418,8 +4523,11 @@ __metadata: react: "npm:19.1.0" tslib: "npm:^2.3.1" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 peerDependenciesMeta: + "@types/react": + optional: true react: optional: true languageName: unknown @@ -4459,6 +4567,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4467,6 +4576,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4515,6 +4626,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4523,6 +4635,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4541,8 +4655,11 @@ __metadata: "@types/react": "npm:~19.1.0" react: "npm:19.1.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 peerDependenciesMeta: + "@types/react": + optional: true react: optional: true languageName: unknown @@ -4589,6 +4706,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4597,6 +4715,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4631,6 +4751,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4639,6 +4760,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4676,6 +4799,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4683,6 +4807,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4719,6 +4845,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4726,6 +4853,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4756,6 +4885,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4763,6 +4893,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4794,6 +4926,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4801,6 +4934,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4848,6 +4983,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4856,6 +4992,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -4970,6 +5108,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -4977,6 +5116,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5011,6 +5152,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5019,6 +5161,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5059,6 +5203,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5066,6 +5211,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5090,8 +5237,12 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5128,6 +5279,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5135,6 +5287,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5179,6 +5333,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5187,6 +5342,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5332,6 +5489,7 @@ __metadata: "@fluentui-react-native/tooltip": "workspace:*" "@fluentui-react-native/vibrancy-view": "workspace:*" "@office-iss/react-native-win32": ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5364,6 +5522,8 @@ __metadata: optional: true "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5508,9 +5668,6 @@ __metadata: react-native-windows: "npm:^0.74.0" react-test-renderer: "npm:18.2.0" webdriverio: "catalog:" - peerDependenciesMeta: - "@office-iss/react-native-win32": - optional: true languageName: unknown linkType: soft @@ -5546,6 +5703,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5553,6 +5711,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5583,8 +5743,12 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5605,8 +5769,12 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5632,8 +5800,12 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5657,8 +5829,12 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5688,6 +5864,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5695,6 +5872,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5724,6 +5903,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5731,6 +5911,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5764,6 +5946,7 @@ __metadata: react-test-renderer: "npm:19.1.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5772,6 +5955,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5802,7 +5987,11 @@ __metadata: react-native: "npm:^0.81.0" react-test-renderer: "npm:19.1.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5829,7 +6018,11 @@ __metadata: react-native: "npm:^0.81.0" react-test-renderer: "npm:19.1.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5857,7 +6050,11 @@ __metadata: react-native: "npm:^0.81.0" react-test-renderer: "npm:19.1.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5884,7 +6081,11 @@ __metadata: react-native: "npm:^0.81.0" react-test-renderer: "npm:19.1.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -5910,6 +6111,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5917,6 +6119,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -5954,6 +6158,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -5961,6 +6166,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -6020,6 +6227,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -6028,6 +6236,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -8172,6 +8382,23 @@ __metadata: languageName: node linkType: hard +"@react-native-macos/virtualized-lists@npm:0.81.2": + version: 0.81.2 + resolution: "@react-native-macos/virtualized-lists@npm:0.81.2" + dependencies: + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@types/react": ^19.1.4 + react: "*" + react-native: "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/3d1d33241b3261b4e79f07fbc4cb4e9b87aacccc101544390947811e8beed6973bc5736cba4bad59080996010a277b13332fc48906e9e6f23a495937b315333a + languageName: node + linkType: hard + "@react-native-menu/menu@npm:^0.7.3": version: 0.7.3 resolution: "@react-native-menu/menu@npm:0.7.3" @@ -9816,13 +10043,59 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18.2.0": - version: 18.3.20 - resolution: "@types/react@npm:18.3.20" +"@types/react@npm:*": + version: 19.2.14 + resolution: "@types/react@npm:19.2.14" + dependencies: + csstype: "npm:^3.2.2" + checksum: 10c0/7d25bf41b57719452d86d2ac0570b659210402707313a36ee612666bf11275a1c69824f8c3ee1fdca077ccfe15452f6da8f1224529b917050eb2d861e52b59b7 + languageName: node + linkType: hard + +"@types/react@npm:^17": + version: 17.0.91 + resolution: "@types/react@npm:17.0.91" + dependencies: + "@types/prop-types": "npm:*" + "@types/scheduler": "npm:^0.16" + csstype: "npm:^3.2.2" + checksum: 10c0/f1a5f77dbe6d62c04bfa2692d1204fd537e5fb15461a10673fa116a4b211f8ebaf426a4b1b95da04d38cea47dfc77c4d403f0850db7d9853298248a54478cc60 + languageName: node + linkType: hard + +"@types/react@npm:^18": + version: 18.3.28 + resolution: "@types/react@npm:18.3.28" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.2.2" + checksum: 10c0/683e19cd12b5c691215529af2e32b5ffbaccae3bf0ba93bfafa0e460e8dfee18423afed568be2b8eadf4b837c3749dd296a4f64e2d79f68fa66962c05f5af661 + languageName: node + linkType: hard + +"@types/react@npm:~18.2.0": + version: 18.2.79 + resolution: "@types/react@npm:18.2.79" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/65fa867c91357e4c4c646945c8b99044360f8973cb7f928ec4de115fe3207827985d45be236e6fd6c092b09f631c2126ce835c137be30718419e143d73300d8f + checksum: 10c0/c8a8a005d8830a48cc1ef93c3510c4935a2a03e5557dbecaa8f1038450cbfcb18eb206fa7fba7077d54b8da21faeb25577e897a333392770a7797f625b62c78a + languageName: node + linkType: hard + +"@types/react@npm:~19.1.0": + version: 19.1.17 + resolution: "@types/react@npm:19.1.17" + dependencies: + csstype: "npm:^3.0.2" + checksum: 10c0/8a8369ea00fc961f0884be4d1da4a039b2b6445de9c8b690ed0ebe15acfb0b1f27005278fef1fe39a1722a30f4415778b790d0089e2b30019371c61355ea316f + languageName: node + linkType: hard + +"@types/scheduler@npm:^0.16": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: 10c0/f86de504945b8fc41b1f391f847444d542e2e4067cf7e5d9bfeb5d2d2393d3203b1161bc0ef3b1e104d828dabfb60baf06e8d2c27e27ff7e8258e6e618d8c4ec languageName: node linkType: hard @@ -10140,8 +10413,12 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -10168,6 +10445,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -10175,6 +10453,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -10197,7 +10477,11 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -10228,6 +10512,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -10235,6 +10520,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -10259,7 +10546,11 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -10281,7 +10572,11 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -10303,7 +10598,11 @@ __metadata: react: "npm:19.1.0" react-native: "npm:^0.81.0" peerDependencies: + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 + peerDependenciesMeta: + "@types/react": + optional: true languageName: unknown linkType: soft @@ -10315,6 +10614,7 @@ __metadata: "@fluentui-react-native/babel-config": "workspace:*" "@fluentui-react-native/default-theme": "workspace:*" "@fluentui-react-native/eslint-config-rules": "workspace:*" + "@fluentui-react-native/framework-base": "workspace:*" "@fluentui-react-native/kit-config": "workspace:*" "@fluentui-react-native/scripts": "workspace:*" "@fluentui-react-native/win32-theme": "workspace:*" @@ -10331,6 +10631,7 @@ __metadata: react-native-windows: "npm:^0.81.0" peerDependencies: "@office-iss/react-native-win32": ^0.74.0 + "@types/react": ~18.2.0 || ~19.0.0 || ~19.1.0 react: 18.2.0 || 19.0.0 || 19.1.0 react-native: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 react-native-macos: ^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.0 @@ -10338,6 +10639,8 @@ __metadata: peerDependenciesMeta: "@office-iss/react-native-win32": optional: true + "@types/react": + optional: true react-native-macos: optional: true react-native-windows: @@ -11692,6 +11995,13 @@ __metadata: languageName: node linkType: hard +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 10c0/0693d378cfe86842a70d4c849595a0bb50dc44c11649640ca982fa90cbfc74e3cc4753b5a0847e51933f2e9c65ce8e05576e75e5e1fd963a086e673735b35969 + languageName: node + linkType: hard + "async-listener@npm:^0.6.0": version: 0.6.10 resolution: "async-listener@npm:0.6.10" @@ -11762,7 +12072,7 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.12.0": +"axios@npm:1.13.2": version: 1.13.2 resolution: "axios@npm:1.13.2" dependencies: @@ -11773,6 +12083,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.12.0, axios@npm:^1.12.2, axios@npm:^1.4.0, axios@npm:^1.6.5, axios@npm:^1.6.7, axios@npm:^1.7.7, axios@npm:^1.x": + version: 1.13.5 + resolution: "axios@npm:1.13.5" + dependencies: + follow-redirects: "npm:^1.15.11" + form-data: "npm:^4.0.5" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/abf468c34f2d145f3dc7dbc0f1be67e520630624307bda69a41bbe8d386bd672d87b4405c4ee77f9ff54b235ab02f96a9968fb00e75b13ce64706e352a3068fd + languageName: node + linkType: hard + "b4a@npm:^1.6.4": version: 1.6.4 resolution: "b4a@npm:1.6.4" @@ -12481,14 +12802,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": - version: 3.7.1 - resolution: "ci-info@npm:3.7.1" - checksum: 10c0/bae9bbcb0c2cdaf9ecceb4680079486e6bd3634f767e7c27eba761bea01fa133ea79432245e6fe6a8f202e4661f43bb5ec42014c6b547f24393457aa53ce56e1 - languageName: node - linkType: hard - -"ci-info@npm:^3.7.0": +"ci-info@npm:^3.2.0, ci-info@npm:^3.7.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a @@ -13212,10 +13526,10 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2": - version: 3.1.1 - resolution: "csstype@npm:3.1.1" - checksum: 10c0/7c8b8c5923049d84132581c13bae6e1faf999746fe3998ba5f3819a8e1cdc7512ace87b7d0a4a69f0f4b8ba11daf835d4f1390af23e09fc4f0baad52c084753a +"csstype@npm:^3.0.2, csstype@npm:^3.2.2": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce languageName: node linkType: hard @@ -15181,13 +15495,13 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.15.6": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" +"follow-redirects@npm:^1.15.11, follow-redirects@npm:^1.15.6": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" peerDependenciesMeta: debug: optional: true - checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071 + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 languageName: node linkType: hard @@ -15210,16 +15524,16 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" +"form-data@npm:4.0.5, form-data@npm:^4.0.0, form-data@npm:^4.0.4, form-data@npm:^4.0.5": + version: 4.0.5 + resolution: "form-data@npm:4.0.5" dependencies: asynckit: "npm:^0.4.0" combined-stream: "npm:^1.0.8" es-set-tostringtag: "npm:^2.1.0" hasown: "npm:^2.0.2" mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 + checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b languageName: node linkType: hard @@ -15637,7 +15951,18 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.5.0": +"glob@npm:13.0.0, glob@npm:^13.0.0": + version: 13.0.0 + resolution: "glob@npm:13.0.0" + dependencies: + minimatch: "npm:^10.1.1" + minipass: "npm:^7.1.2" + path-scurry: "npm:^2.0.0" + checksum: 10c0/8e2f5821f3f7c312dd102e23a15b80c79e0837a9872784293ba2e15ec73b3f3749a49a42a31bfcb4e52c84820a474e92331c2eebf18819d20308f5c33876630a + languageName: node + linkType: hard + +"glob@npm:^10.0.0, glob@npm:^10.2.2": version: 10.5.0 resolution: "glob@npm:10.5.0" dependencies: @@ -15653,17 +15978,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^13.0.0": - version: 13.0.0 - resolution: "glob@npm:13.0.0" - dependencies: - minimatch: "npm:^10.1.1" - minipass: "npm:^7.1.2" - path-scurry: "npm:^2.0.0" - checksum: 10c0/8e2f5821f3f7c312dd102e23a15b80c79e0837a9872784293ba2e15ec73b3f3749a49a42a31bfcb4e52c84820a474e92331c2eebf18819d20308f5c33876630a - languageName: node - linkType: hard - "glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -16351,7 +16665,7 @@ __metadata: languageName: node linkType: hard -"invariant@npm:^2.2.0, invariant@npm:^2.2.4": +"invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: @@ -17534,7 +17848,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:3.14.1, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1": +"js-yaml@npm:3.14.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -17546,7 +17860,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.6.1": +"js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1, js-yaml@npm:^3.6.1": version: 3.14.2 resolution: "js-yaml@npm:3.14.2" dependencies: @@ -20069,7 +20383,14 @@ __metadata: languageName: node linkType: hard -"on-headers@npm:^1.1.0": +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f + languageName: node + linkType: hard + +"on-headers@npm:~1.1.0": version: 1.1.0 resolution: "on-headers@npm:1.1.0" checksum: 10c0/2c3b6b0d68ec9adbd561dc2d61c9b14da8ac03d8a2f0fd9e97bdf0600c887d5d97f664ff3be6876cf40cda6e3c587d73a4745e10b426ac50c7664fc5a0dfc0a1 @@ -21165,9 +21486,9 @@ __metadata: languageName: node linkType: hard -"react-native-macos@npm:0.74.30": - version: 0.74.30 - resolution: "react-native-macos@npm:0.74.30" +"react-native-macos@npm:^0.74.0": + version: 0.74.37 + resolution: "react-native-macos@npm:0.74.37" dependencies: "@jest/create-cache-key-function": "npm:^29.6.3" "@react-native-community/cli": "npm:13.6.9" @@ -21211,73 +21532,71 @@ __metadata: peerDependencies: "@types/react": ^18.2.6 react: 18.2.0 + react-native: 0.74.7 peerDependenciesMeta: "@types/react": optional: true bin: react-native-macos: cli.js - checksum: 10c0/07c7c7aff58df4e5ac1d1b85afb4c7b4f705d8dea5ecc95050a432fe869c9dbcfa8a32e0468cb8ab587026caf9eefe7b0fd283b3f82efff3ce7da0ca54e27b17 + checksum: 10c0/7672aed7a3318413cd7cbbed1d906da336117e419bb5acacee403f5376262ec9aa29c03b9abb8e02002a6053f0a24b70f1fb7cb2dabdc5fc7bb1edf603024d18 languageName: node linkType: hard -"react-native-macos@patch:react-native-macos@npm%3A0.74.30#~/.yarn/patches/react-native-macos-npm-0.74.30-e4edf98920.patch": - version: 0.74.30 - resolution: "react-native-macos@patch:react-native-macos@npm%3A0.74.30#~/.yarn/patches/react-native-macos-npm-0.74.30-e4edf98920.patch::version=0.74.30&hash=a20687" +"react-native-macos@npm:^0.81.0": + version: 0.81.2 + resolution: "react-native-macos@npm:0.81.2" dependencies: - "@jest/create-cache-key-function": "npm:^29.6.3" - "@react-native-community/cli": "npm:13.6.9" - "@react-native-community/cli-platform-android": "npm:13.6.9" - "@react-native-community/cli-platform-apple": "npm:13.6.9" - "@react-native-community/cli-platform-ios": "npm:13.6.9" - "@react-native-mac/virtualized-lists": "npm:0.74.87" - "@react-native/assets-registry": "npm:0.74.89" - "@react-native/codegen": "npm:0.74.89" - "@react-native/community-cli-plugin": "npm:0.74.89" - "@react-native/gradle-plugin": "npm:0.74.89" - "@react-native/js-polyfills": "npm:0.74.89" - "@react-native/normalize-colors": "npm:0.74.89" + "@jest/create-cache-key-function": "npm:^29.7.0" + "@react-native-macos/virtualized-lists": "npm:0.81.2" + "@react-native/assets-registry": "npm:0.81.5" + "@react-native/codegen": "npm:0.81.5" + "@react-native/community-cli-plugin": "npm:0.81.5" + "@react-native/gradle-plugin": "npm:0.81.5" + "@react-native/js-polyfills": "npm:0.81.5" + "@react-native/normalize-colors": "npm:0.81.5" abort-controller: "npm:^3.0.0" anser: "npm:^1.4.9" ansi-regex: "npm:^5.0.0" + babel-jest: "npm:^29.7.0" + babel-plugin-syntax-hermes-parser: "npm:0.29.1" base64-js: "npm:^1.5.1" - chalk: "npm:^4.0.0" - event-target-shim: "npm:^5.0.1" + commander: "npm:^12.0.0" flow-enums-runtime: "npm:^0.0.6" glob: "npm:^7.1.1" invariant: "npm:^2.2.4" - jest-environment-node: "npm:^29.6.3" - jsc-android: "npm:^250231.0.0" + jest-environment-node: "npm:^29.7.0" memoize-one: "npm:^5.0.0" - metro-runtime: "npm:^0.80.3" - metro-source-map: "npm:^0.80.3" - mkdirp: "npm:^0.5.1" + metro-runtime: "npm:^0.83.1" + metro-source-map: "npm:^0.83.1" nullthrows: "npm:^1.1.1" - pretty-format: "npm:^26.5.2" + pretty-format: "npm:^29.7.0" promise: "npm:^8.3.0" - react-devtools-core: "npm:^5.0.0" + react-devtools-core: "npm:^6.1.5" react-refresh: "npm:^0.14.0" - react-shallow-renderer: "npm:^16.15.0" regenerator-runtime: "npm:^0.13.2" - scheduler: "npm:0.24.0-canary-efb381bbf-20230505" + scheduler: "npm:0.26.0" + semver: "npm:^7.1.3" stacktrace-parser: "npm:^0.1.10" whatwg-fetch: "npm:^3.0.0" - ws: "npm:^6.2.2" + ws: "npm:^6.2.3" yargs: "npm:^17.6.2" peerDependencies: - "@types/react": ^18.2.6 - react: 18.2.0 + "@types/react": ^19.1.4 + react: ^19.1.4 + react-native: 0.81.5 peerDependenciesMeta: "@types/react": optional: true bin: + react-native: cli.js react-native-macos: cli.js - checksum: 10c0/a4a97c1ea72e2830ea97d03e1393de48ed7b5be5144dc8e50b735847dc8383258684e8c8469d51cffeb1bc29e125431b475fa5d4b8cd64c50546ec93eb279450 + checksum: 10c0/0d6486c1eb84eb901e387081fd4ff98177bae23dc21780411454c3d855bd8a7708d76b3e553cc95b02b236ec6f075e54726789acd71c1fb6376ea608a9780bfa languageName: node linkType: hard -"react-native-svg-transformer@npm:1.5.0": - version: 1.5.0 - resolution: "react-native-svg-transformer@npm:1.5.0" +"react-native-svg-transformer@npm:^1.0.0": + version: 1.5.3 + resolution: "react-native-svg-transformer@npm:1.5.3" dependencies: "@svgr/core": "npm:^8.1.0" "@svgr/plugin-jsx": "npm:^8.1.0" @@ -21286,7 +21605,7 @@ __metadata: peerDependencies: react-native: ">=0.59.0" react-native-svg: ">=12.0.0" - checksum: 10c0/2131b99d8ea88ff8d7e6f55d4091648b754e79a5c263fec555d310e0984f7283b6c3306d8e8fc8e17901f82d4aaf29c091dad26e51e560af8741d47d4b946309 + checksum: 10c0/0e2dd028c7e691a8db6f775c8142e07bd54f3f86473794a5512fbe8303d591f20eb35d7422ea7995347c8ea8776e32552be303499860699dc9325bd54ff1410f languageName: node linkType: hard @@ -22396,7 +22715,16 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:7.7.3": version: 7.7.3 resolution: "semver@npm:7.7.3" bin: @@ -22405,6 +22733,24 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.5.1, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3, semver@npm:^7.7.2, semver@npm:^7.7.3": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + "send@npm:^1.1.0, send@npm:^1.2.0": version: 1.2.1 resolution: "send@npm:1.2.1" @@ -23457,7 +23803,7 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^3.1.1": +"tar-fs@npm:^3.0.8": version: 3.1.1 resolution: "tar-fs@npm:3.1.1" dependencies: @@ -24737,9 +25083,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.17.1": - version: 8.17.1 - resolution: "ws@npm:8.17.1" +"ws@npm:8.18.3": + version: 8.18.3 + resolution: "ws@npm:8.18.3" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -24748,7 +25094,46 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/f4a49064afae4500be772abdc2211c8518f39e1c959640457dcee15d4488628620625c783902a52af2dd02f68558da2868fd06e6fd0e67ebcd09e6881b1b5bfe + checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53 + languageName: node + linkType: hard + +"ws@npm:^6.2.2, ws@npm:^6.2.3": + version: 6.2.3 + resolution: "ws@npm:6.2.3" + dependencies: + async-limiter: "npm:~1.0.0" + checksum: 10c0/56a35b9799993cea7ce2260197e7879f21bbbb194a967f31acbbda6f7f46ecda4365951966fb062044c95197e19fb2f053be6f65c172435455186835f494de41 + languageName: node + linkType: hard + +"ws@npm:^7, ws@npm:^7.5.10": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"ws@npm:^8.0.0, ws@npm:^8.13.0, ws@npm:^8.8.0": + version: 8.19.0 + resolution: "ws@npm:8.19.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/4741d9b9bc3f9c791880882414f96e36b8b254e34d4b503279d6400d9a4b87a033834856dbdd94ee4b637944df17ea8afc4bce0ff4a1560d2166be8855da5b04 languageName: node linkType: hard @@ -24845,10 +25230,19 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.2.2": - version: 2.3.1 - resolution: "yaml@npm:2.3.1" - checksum: 10c0/ed4c21a907fb1cd60a25177612fa46d95064a144623d269199817908475fe85bef20fb17406e3bdc175351b6488056a6f84beb7836e8c262646546a0220188e3 +"yaml@npm:2.8.2, yaml@npm:^2.2.1, yaml@npm:^2.6.1": + version: 2.8.2 + resolution: "yaml@npm:2.8.2" + bin: + yaml: bin.mjs + checksum: 10c0/703e4dc1e34b324aa66876d63618dcacb9ed49f7e7fe9b70f1e703645be8d640f68ab84f12b86df8ac960bac37acf5513e115de7c970940617ce0343c8c9cd96 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f languageName: node linkType: hard