From d02c997352a6b881ff38c530c22e7f53581d073f Mon Sep 17 00:00:00 2001 From: Andrew Coates <30809111+acoates-ms@users.noreply.github.com> Date: Fri, 15 Nov 2024 03:17:12 -0800 Subject: [PATCH] fix: react-native-windows implementation for new architecture (#2527) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Summary There are two main things going on with the PR. Both involve a reworking of the new arch implementation of rn-svg for windows. The current implementation attempts to implement a svg renderer from scratch. There are numerous edge cases that it wasn't handling correctly, and the performance had some serious issues. This implementation switches to use the svg rendering path built into Direct2D. This brings significant performance improvements. The 2nd issue is there have been various breaking changes in react-native-windows for how new arch native components are implemented. This brings the rn-svg implementation in line with those latest changes. ## Test Plan Primary testing right now is loading up the example app in the repo. New arch on react-native-windows is still in somewhat early days - so there are not really current users of this code. I am integrating this code into Microsoft Office, where I have tested some scenarios. But we will get expanded testing as we roll out the new arch. I expect there to be some follow-ups as we expand our usage. The version of rn-svg before this PR doesn't build with the latest new arch react-native-windows versions. - So its hard to get worse than that. ### What's required for testing (prerequisites)? ### What are the steps to reproduce (after prerequisites)? ## Compatibility | OS | Implemented | | ------- | :---------: | | iOS | N/A | | MacOS | N/A | | Android | N/A | | Web | ✅ | ## Checklist - [x] I have tested this on a device and a simulator - [ ] I added documentation in `README.md` - [ ] I updated the typed files (typescript) - [ ] I added a test for the API in the `__tests__` folder --- .../example/examples/Reanimated.windows.tsx | 19 + apps/common/noNavigationApp.tsx | 49 ++ apps/fabric-windows-example/.gitignore | 3 + apps/fabric-windows-example/babel.config.js | 3 - apps/fabric-windows-example/index.js | 5 +- apps/fabric-windows-example/package.json | 3 +- .../windows/FabricExample/FabricExample.cpp | 2 + .../FabricExample/FabricExample.vcxproj | 1 + .../windows/FabricExample/packages.lock.json | 64 +- apps/fabric-windows-example/yarn.lock | 650 ++++++++-------- apps/paper-windows-example/babel.config.js | 5 - apps/paper-windows-example/index.js | 2 +- apps/paper-windows-example/package.json | 6 +- ...react-native-view-shot+4.0.0-alpha.2.patch | 51 -- ...tch => react-native-windows+0.74.23.patch} | 2 +- .../windows/Example/packages.lock.json | 280 ++++++- apps/paper-windows-example/yarn.lock | 717 ++++++++---------- src/lib/extract/extractProps.windows.ts | 5 + windows/RNSVG/BrushView.cpp | 5 - windows/RNSVG/BrushView.h | 5 +- windows/RNSVG/CircleView.cpp | 42 - windows/RNSVG/CircleView.h | 41 +- windows/RNSVG/ClipPathView.cpp | 24 - windows/RNSVG/ClipPathView.h | 23 - windows/RNSVG/D2DHelpers.h | 4 - windows/RNSVG/DefsView.cpp | 25 - windows/RNSVG/DefsView.h | 23 - windows/RNSVG/EllipseView.cpp | 42 - windows/RNSVG/EllipseView.h | 44 +- windows/RNSVG/Fabric.idl | 166 ---- windows/RNSVG/Fabric/CircleView.cpp | 53 ++ windows/RNSVG/Fabric/CircleView.h | 9 + windows/RNSVG/Fabric/ClipPathView.cpp | 38 + windows/RNSVG/Fabric/ClipPathView.h | 10 + windows/RNSVG/Fabric/D2DHelpers.h | 18 + windows/RNSVG/Fabric/DefsView.cpp | 41 + windows/RNSVG/Fabric/DefsView.h | 9 + windows/RNSVG/Fabric/EllipseView.cpp | 56 ++ windows/RNSVG/Fabric/EllipseView.h | 11 + windows/RNSVG/Fabric/GroupView.cpp | 42 + windows/RNSVG/Fabric/GroupView.h | 8 + windows/RNSVG/Fabric/ImageView.cpp | 128 ++++ windows/RNSVG/Fabric/ImageView.h | 9 + windows/RNSVG/Fabric/LineView.cpp | 56 ++ windows/RNSVG/Fabric/LineView.h | 10 + windows/RNSVG/Fabric/LinearGradientView.cpp | 134 ++++ windows/RNSVG/Fabric/LinearGradientView.h | 11 + windows/RNSVG/Fabric/PathView.cpp | 49 ++ windows/RNSVG/Fabric/PathView.h | 9 + windows/RNSVG/Fabric/RadialGradientView.cpp | 161 ++++ windows/RNSVG/Fabric/RadialGradientView.h | 10 + windows/RNSVG/Fabric/RectView.cpp | 79 ++ windows/RNSVG/Fabric/RectView.h | 9 + windows/RNSVG/Fabric/RenderableView.cpp | 174 +++++ windows/RNSVG/Fabric/RenderableView.h | 302 ++++++++ windows/RNSVG/Fabric/SvgStrings.h | 58 ++ windows/RNSVG/Fabric/SvgView.cpp | 342 +++++++++ windows/RNSVG/Fabric/SvgView.h | 107 +++ windows/RNSVG/Fabric/UnsupportedSvgView.cpp | 33 + windows/RNSVG/Fabric/UnsupportedSvgView.h | 9 + windows/RNSVG/Fabric/UseView.cpp | 64 ++ windows/RNSVG/Fabric/UseView.h | 10 + windows/RNSVG/GroupView.cpp | 84 -- windows/RNSVG/GroupView.h | 94 +-- windows/RNSVG/ImageView.cpp | 63 -- windows/RNSVG/ImageView.h | 81 -- windows/RNSVG/LineView.cpp | 43 -- windows/RNSVG/LineView.h | 45 +- windows/RNSVG/LinearGradientView.cpp | 49 -- windows/RNSVG/LinearGradientView.h | 50 -- windows/RNSVG/MarkerView.cpp | 38 - windows/RNSVG/MarkerView.h | 60 -- windows/RNSVG/MaskView.cpp | 39 - windows/RNSVG/MaskView.h | 48 -- windows/RNSVG/PathView.cpp | 44 -- windows/RNSVG/PathView.h | 37 - windows/RNSVG/PatternView.cpp | 62 -- windows/RNSVG/PatternView.h | 62 -- windows/RNSVG/RNSVG.vcxproj | 49 +- windows/RNSVG/RadialGradientView.cpp | 53 -- windows/RNSVG/RadialGradientView.h | 53 -- windows/RNSVG/ReactPackageProvider.cpp | 78 +- windows/RNSVG/RectView.cpp | 26 +- windows/RNSVG/RectView.h | 47 -- windows/RNSVG/RenderableView.cpp | 78 +- windows/RNSVG/RenderableView.h | 156 ---- windows/RNSVG/SVGLength.cpp | 24 + windows/RNSVG/SVGLength.h | 2 - windows/RNSVG/SvgView.cpp | 186 ----- windows/RNSVG/SvgView.h | 84 -- windows/RNSVG/SymbolView.cpp | 46 +- windows/RNSVG/SymbolView.h | 48 -- windows/RNSVG/TSpanView.cpp | 39 - windows/RNSVG/TSpanView.h | 40 - windows/RNSVG/TextView.cpp | 78 -- windows/RNSVG/TextView.h | 62 +- windows/RNSVG/UseView.cpp | 48 -- windows/RNSVG/UseView.h | 45 -- windows/RNSVG/Utils.h | 66 -- windows/RNSVG/ViewProps.idl | 107 --- windows/RNSVG/packages.lock.json | 20 +- 101 files changed, 3268 insertions(+), 3436 deletions(-) create mode 100644 apps/common/example/examples/Reanimated.windows.tsx create mode 100644 apps/common/noNavigationApp.tsx delete mode 100644 apps/paper-windows-example/patches/react-native-view-shot+4.0.0-alpha.2.patch rename apps/paper-windows-example/patches/{react-native-windows+0.74.9.patch => react-native-windows+0.74.23.patch} (97%) delete mode 100644 windows/RNSVG/Fabric.idl create mode 100644 windows/RNSVG/Fabric/CircleView.cpp create mode 100644 windows/RNSVG/Fabric/CircleView.h create mode 100644 windows/RNSVG/Fabric/ClipPathView.cpp create mode 100644 windows/RNSVG/Fabric/ClipPathView.h create mode 100644 windows/RNSVG/Fabric/D2DHelpers.h create mode 100644 windows/RNSVG/Fabric/DefsView.cpp create mode 100644 windows/RNSVG/Fabric/DefsView.h create mode 100644 windows/RNSVG/Fabric/EllipseView.cpp create mode 100644 windows/RNSVG/Fabric/EllipseView.h create mode 100644 windows/RNSVG/Fabric/GroupView.cpp create mode 100644 windows/RNSVG/Fabric/GroupView.h create mode 100644 windows/RNSVG/Fabric/ImageView.cpp create mode 100644 windows/RNSVG/Fabric/ImageView.h create mode 100644 windows/RNSVG/Fabric/LineView.cpp create mode 100644 windows/RNSVG/Fabric/LineView.h create mode 100644 windows/RNSVG/Fabric/LinearGradientView.cpp create mode 100644 windows/RNSVG/Fabric/LinearGradientView.h create mode 100644 windows/RNSVG/Fabric/PathView.cpp create mode 100644 windows/RNSVG/Fabric/PathView.h create mode 100644 windows/RNSVG/Fabric/RadialGradientView.cpp create mode 100644 windows/RNSVG/Fabric/RadialGradientView.h create mode 100644 windows/RNSVG/Fabric/RectView.cpp create mode 100644 windows/RNSVG/Fabric/RectView.h create mode 100644 windows/RNSVG/Fabric/RenderableView.cpp create mode 100644 windows/RNSVG/Fabric/RenderableView.h create mode 100644 windows/RNSVG/Fabric/SvgStrings.h create mode 100644 windows/RNSVG/Fabric/SvgView.cpp create mode 100644 windows/RNSVG/Fabric/SvgView.h create mode 100644 windows/RNSVG/Fabric/UnsupportedSvgView.cpp create mode 100644 windows/RNSVG/Fabric/UnsupportedSvgView.h create mode 100644 windows/RNSVG/Fabric/UseView.cpp create mode 100644 windows/RNSVG/Fabric/UseView.h delete mode 100644 windows/RNSVG/ViewProps.idl diff --git a/apps/common/example/examples/Reanimated.windows.tsx b/apps/common/example/examples/Reanimated.windows.tsx new file mode 100644 index 00000000..1ba5fc97 --- /dev/null +++ b/apps/common/example/examples/Reanimated.windows.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import {StyleSheet, Text} from 'react-native'; + +function ReanimatedRectExample() { + return ( + + Reanimated not supported in react-native-windows new arch currently + + ); +} +ReanimatedRectExample.title = 'reanimated rectangle'; + +const title = 'Reanimated'; +const samples = [ReanimatedRectExample]; + +const style = StyleSheet.create({text: {width: 30, height: 30}}); +const icon = R; + +export {icon, samples}; diff --git a/apps/common/noNavigationApp.tsx b/apps/common/noNavigationApp.tsx new file mode 100644 index 00000000..baa0ed85 --- /dev/null +++ b/apps/common/noNavigationApp.tsx @@ -0,0 +1,49 @@ +/** + * Sample React Native App for react-native-svg library + * https://github.com/software-mansion/react-native-svg/tree/main/apps/common/example + */ + +/** + * This is a very simple render of the examples for react-native-svg library, to avoid dependencies on @react-navigation, + * which may not be fully supported on all platforms and versions of react-native + */ +'use strict'; + +import React from 'react'; +import {ScrollView, Text, View} from 'react-native'; +import {examples} from './example/examples'; +import type {Example} from './example/utils/types'; +import {commonStyles} from './example/utils/commonStyles'; + +const ExampleBlock = ({example, index}: {example: Example; index: number}) => { + if (Array.isArray(example.samples)) { + return ( + + {example.icon} + + {example.samples.map((sample, index) => { + return ( + + {sample.title} + {sample({})} + + ); + })} + + ); + } + + throw new Error('Unhandled Example type'); +}; + +export default function App() { + return ( + + {Object.values(examples).map((example, index) => { + return ; + })} + + ); +} diff --git a/apps/fabric-windows-example/.gitignore b/apps/fabric-windows-example/.gitignore index d5ae4566..59b85d69 100644 --- a/apps/fabric-windows-example/.gitignore +++ b/apps/fabric-windows-example/.gitignore @@ -52,6 +52,9 @@ yarn-error.log **/fastlane/screenshots **/fastlane/test_output +# Locally installed nuget packages +/windows/packages + # Bundle artifact *.jsbundle diff --git a/apps/fabric-windows-example/babel.config.js b/apps/fabric-windows-example/babel.config.js index 0f949a10..f7b3da3b 100644 --- a/apps/fabric-windows-example/babel.config.js +++ b/apps/fabric-windows-example/babel.config.js @@ -1,6 +1,3 @@ module.exports = { presets: ['module:@react-native/babel-preset'], - plugins: [ - 'react-native-reanimated/plugin', - ], }; diff --git a/apps/fabric-windows-example/index.js b/apps/fabric-windows-example/index.js index aa1be212..62d72c3f 100644 --- a/apps/fabric-windows-example/index.js +++ b/apps/fabric-windows-example/index.js @@ -3,7 +3,10 @@ */ import {AppRegistry} from 'react-native'; -import App from '../common'; +import App from '../common/noNavigationApp'; import {name as appName} from './app.json'; AppRegistry.registerComponent(appName, () => App); + + +AppRegistry.registerComponent("Example", () => App); diff --git a/apps/fabric-windows-example/package.json b/apps/fabric-windows-example/package.json index 886972a4..5c348726 100644 --- a/apps/fabric-windows-example/package.json +++ b/apps/fabric-windows-example/package.json @@ -11,8 +11,7 @@ "dependencies": { "react": "18.2.0", "react-native": "0.74.2", - "react-native-windows": "0.74.9", - "react-native-reanimated": "3.9.0", + "react-native-windows": "0.74.24", "react-native-svg": "link:../../" }, "devDependencies": { diff --git a/apps/fabric-windows-example/windows/FabricExample/FabricExample.cpp b/apps/fabric-windows-example/windows/FabricExample/FabricExample.cpp index a94fd9c8..eac183ee 100644 --- a/apps/fabric-windows-example/windows/FabricExample/FabricExample.cpp +++ b/apps/fabric-windows-example/windows/FabricExample/FabricExample.cpp @@ -36,6 +36,8 @@ void UpdateRootViewSizeToAppWindow( winrt::Microsoft::UI::Windowing::OverlappedPresenterState::Minimized) { winrt::Microsoft::ReactNative::LayoutConstraints constraints; constraints.MaximumSize = constraints.MinimumSize = size; + constraints.LayoutDirection = + winrt::Microsoft::ReactNative::LayoutDirection::Undefined; rootView.Arrange(constraints, {0, 0}); } } diff --git a/apps/fabric-windows-example/windows/FabricExample/FabricExample.vcxproj b/apps/fabric-windows-example/windows/FabricExample/FabricExample.vcxproj index 1f60e5f2..f11c014f 100644 --- a/apps/fabric-windows-example/windows/FabricExample/FabricExample.vcxproj +++ b/apps/fabric-windows-example/windows/FabricExample/FabricExample.vcxproj @@ -75,6 +75,7 @@ true %(AdditionalOptions) /bigobj 4453;28204 + stdcpp20 shell32.lib;user32.lib;windowsapp.lib;%(AdditionalDependenices) diff --git a/apps/fabric-windows-example/windows/FabricExample/packages.lock.json b/apps/fabric-windows-example/windows/FabricExample/packages.lock.json index c0281d92..97d58851 100644 --- a/apps/fabric-windows-example/windows/FabricExample/packages.lock.json +++ b/apps/fabric-windows-example/windows/FabricExample/packages.lock.json @@ -4,15 +4,15 @@ "native,Version=v0.0": { "boost": { "type": "Direct", - "requested": "[1.76.0, )", - "resolved": "1.76.0", - "contentHash": "p+w3YvNdXL8Cu9Fzrmexssu0tZbWxuf6ywsQqHjDlKFE5ojXHof1HIyMC3zDLfLnh80dIeFcEUAuR2Asg/XHRA==" + "requested": "[1.83.0, )", + "resolved": "1.83.0", + "contentHash": "cy53VNMzysEMvhBixDe8ujPk67Fcj3v6FPHQnH91NYJNLHpc6jxa2xq9ruCaaJjE4M3YrGSHDi4uUSTGBWw6EQ==" }, "Microsoft.JavaScript.Hermes": { "type": "Direct", - "requested": "[0.1.21, )", - "resolved": "0.1.21", - "contentHash": "5njCh+3eXTLOv7+8nOnp6nJ5C0r6it5ze54c0nuWleeDptuK8t3dEDB79XTU4D5DKNvAPlqJpgXRDOak5nYIug==" + "requested": "[0.1.23, )", + "resolved": "0.1.23", + "contentHash": "cA9t1GjY4Yo0JD1AfA//e1lOwk48hLANfuX6GXrikmEBNZVr2TIX5ONJt5tqCnpZyLz6xGiPDgTfFNKbSfb21g==" }, "Microsoft.VCRTForwarders.140": { "type": "Direct", @@ -35,6 +35,19 @@ "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" } }, + "Microsoft.UI.Xaml": { + "type": "Transitive", + "resolved": "2.8.0", + "contentHash": "vxdHxTr63s5KVtNddMFpgvjBjUH50z7seq/5jLWmmSuf8poxg+sXrywkofUdE8ZstbpO9y3FL/IXXUcPYbeesA==", + "dependencies": { + "Microsoft.Web.WebView2": "1.0.1264.42" + } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.1264.42", + "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, "Microsoft.Windows.SDK.BuildTools": { "type": "Transitive", "resolved": "10.0.22621.756", @@ -43,7 +56,7 @@ "common": { "type": "Project", "dependencies": { - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "fmt": { @@ -53,7 +66,7 @@ "type": "Project", "dependencies": { "Fmt": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "microsoft.reactnative": { @@ -61,17 +74,24 @@ "dependencies": { "Common": "[1.0.0, )", "Folly": "[1.0.0, )", - "Microsoft.JavaScript.Hermes": "[0.1.21, )", + "Microsoft.JavaScript.Hermes": "[0.1.23, )", "Microsoft.WindowsAppSDK": "[1.5.240227000, )", "ReactCommon": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "reactcommon": { "type": "Project", "dependencies": { "Folly": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" + } + }, + "reactnativeasyncstorage": { + "type": "Project", + "dependencies": { + "Microsoft.ReactNative": "[1.0.0, )", + "Microsoft.UI.Xaml": "[2.8.0, )" } }, "rnsvg": { @@ -80,7 +100,7 @@ "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", "Microsoft.WindowsAppSDK": "[1.5.240227000, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } } }, @@ -99,6 +119,11 @@ "dependencies": { "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.1264.42", + "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" } }, "native,Version=v0.0/win-arm64": { @@ -116,6 +141,11 @@ "dependencies": { "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.1264.42", + "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" } }, "native,Version=v0.0/win-x64": { @@ -133,6 +163,11 @@ "dependencies": { "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.1264.42", + "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" } }, "native,Version=v0.0/win-x86": { @@ -150,6 +185,11 @@ "dependencies": { "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.1264.42", + "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" } } } diff --git a/apps/fabric-windows-example/yarn.lock b/apps/fabric-windows-example/yarn.lock index c9ebc1ca..51cebf41 100644 --- a/apps/fabric-windows-example/yarn.lock +++ b/apps/fabric-windows-example/yarn.lock @@ -919,7 +919,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.24.1": +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== @@ -1377,7 +1377,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== @@ -1461,7 +1461,7 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.24.1": +"@babel/plugin-transform-optional-chaining@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== @@ -1617,7 +1617,7 @@ babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.24.1": +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== @@ -1661,7 +1661,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-template-literals@^7.0.0-0", "@babel/plugin-transform-template-literals@^7.24.1": +"@babel/plugin-transform-template-literals@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== @@ -1977,7 +1977,7 @@ "@babel/plugin-transform-modules-commonjs" "^7.24.7" "@babel/plugin-transform-typescript" "^7.24.7" -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7": +"@babel/preset-typescript@^7.13.0": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== @@ -2493,16 +2493,6 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.24.0.tgz#f074db930a7feb4d64103a9a576c5fbad046fcac" integrity sha512-yL0jI6Ltuz8R+Opj7jClGrul6pOoYrdfVmzQS4SITXRPH7I5IRZbrwe/6/v8v4WYMa6MYZG480S1+uc/IGfqsA== -"@react-native-community/cli-clean@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.6.tgz#87c7ad8746c38dab0fe7b3c6ff89d44351d5d943" - integrity sha512-cBwJTwl0NyeA4nyMxbhkWZhxtILYkbU3TW3k8AXLg+iGphe0zikYMGB3T+haTvTc6alTyEFwPbimk9bGIqkjAQ== - dependencies: - "@react-native-community/cli-tools" "13.6.6" - chalk "^4.1.2" - execa "^5.0.0" - fast-glob "^3.3.2" - "@react-native-community/cli-clean@13.6.8": version "13.6.8" resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz#95ce964047f005152ac100394b6dcd5d2cc2a474" @@ -2513,17 +2503,15 @@ execa "^5.0.0" fast-glob "^3.3.2" -"@react-native-community/cli-config@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.6.tgz#69f590694b3a079c74f781baab3b762db74f5dbd" - integrity sha512-mbG425zCKr8JZhv/j11382arezwS/70juWMsn8j2lmrGTrP1cUdW0MF15CCIFtJsqyK3Qs+FTmqttRpq81QfSg== +"@react-native-community/cli-clean@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz#b6754f39c2b877c9d730feb848945150e1d52209" + integrity sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA== dependencies: - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" + execa "^5.0.0" fast-glob "^3.3.2" - joi "^17.2.1" "@react-native-community/cli-config@13.6.8": version "13.6.8" @@ -2537,12 +2525,17 @@ fast-glob "^3.3.2" joi "^17.2.1" -"@react-native-community/cli-debugger-ui@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.6.tgz#ac021ebd795b0fd66fb52a8987d1d41c5a4b8cb3" - integrity sha512-Vv9u6eS4vKSDAvdhA0OiQHoA7y39fiPIgJ6biT32tN4avHDtxlc6TWZGiqv7g98SBvDWvoVAmdPLcRf3kU+c8g== +"@react-native-community/cli-config@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.9.tgz#d609a64d40a173c89bd7d24e31807bb7dcba69f9" + integrity sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg== dependencies: - serve-static "^1.13.1" + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + cosmiconfig "^5.1.0" + deepmerge "^4.3.0" + fast-glob "^3.3.2" + joi "^17.2.1" "@react-native-community/cli-debugger-ui@13.6.8": version "13.6.8" @@ -2551,28 +2544,12 @@ dependencies: serve-static "^1.13.1" -"@react-native-community/cli-doctor@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.6.tgz#ac0febff05601d9b86af3e03460e1a6b0a1d33a5" - integrity sha512-TWZb5g6EmQe2Ua2TEWNmyaEayvlWH4GmdD9ZC+p8EpKFpB1NpDGMK6sXbpb42TDvwZg5s4TDRplK0PBEA/SVDg== +"@react-native-community/cli-debugger-ui@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz#bc5727c51964206a00d417e5148b46331a81d5a5" + integrity sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw== dependencies: - "@react-native-community/cli-config" "13.6.6" - "@react-native-community/cli-platform-android" "13.6.6" - "@react-native-community/cli-platform-apple" "13.6.6" - "@react-native-community/cli-platform-ios" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - chalk "^4.1.2" - command-exists "^1.2.8" - deepmerge "^4.3.0" - envinfo "^7.10.0" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - node-stream-zip "^1.9.1" - ora "^5.4.1" - semver "^7.5.2" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - yaml "^2.2.1" + serve-static "^1.13.1" "@react-native-community/cli-doctor@13.6.8": version "13.6.8" @@ -2597,15 +2574,28 @@ wcwidth "^1.0.1" yaml "^2.2.1" -"@react-native-community/cli-hermes@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.6.tgz#590f55f151fec23b55498228f92d100a0e71d474" - integrity sha512-La5Ie+NGaRl3klei6WxKoOxmCUSGGxpOk6vU5pEGf0/O7ky+Ay0io+zXYUZqlNMi/cGpO7ZUijakBYOB/uyuFg== +"@react-native-community/cli-doctor@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz#f1d4eeff427ddc8a9d19851042621c10939c35cb" + integrity sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A== dependencies: - "@react-native-community/cli-platform-android" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-apple" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" + command-exists "^1.2.8" + deepmerge "^4.3.0" + envinfo "^7.10.0" + execa "^5.0.0" hermes-profile-transformer "^0.0.6" + node-stream-zip "^1.9.1" + ora "^5.4.1" + semver "^7.5.2" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + yaml "^2.2.1" "@react-native-community/cli-hermes@13.6.8": version "13.6.8" @@ -2617,17 +2607,15 @@ chalk "^4.1.2" hermes-profile-transformer "^0.0.6" -"@react-native-community/cli-platform-android@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.6.tgz#9e3863cb092709021f11848890bff0fc16fc1609" - integrity sha512-/tMwkBeNxh84syiSwNlYtmUz/Ppc+HfKtdopL/5RB+fd3SV1/5/NPNjMlyLNgFKnpxvKCInQ7dnl6jGHJjeHjg== +"@react-native-community/cli-hermes@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz#88c8dfe936a0d4272efc54429eda9ccc3fca3ad8" + integrity sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA== dependencies: - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" - execa "^5.0.0" - fast-glob "^3.3.2" - fast-xml-parser "^4.2.4" - logkitty "^0.7.1" + hermes-profile-transformer "^0.0.6" "@react-native-community/cli-platform-android@13.6.8": version "13.6.8" @@ -2641,17 +2629,17 @@ fast-xml-parser "^4.2.4" logkitty "^0.7.1" -"@react-native-community/cli-platform-apple@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.6.tgz#d445fd6ed02c5ae2f43f9c45501e04fee53a2790" - integrity sha512-bOmSSwoqNNT3AmCRZXEMYKz1Jf1l2F86Nhs7qBcXdY/sGiJ+Flng564LOqvdAlVLTbkgz47KjNKCS2pP4Jg0Mg== +"@react-native-community/cli-platform-android@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz#b175b9b11334fc90da3f395432678bd53c30fae4" + integrity sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw== dependencies: - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" - fast-xml-parser "^4.0.12" - ora "^5.4.1" + fast-xml-parser "^4.2.4" + logkitty "^0.7.1" "@react-native-community/cli-platform-apple@13.6.8": version "13.6.8" @@ -2665,12 +2653,17 @@ fast-xml-parser "^4.0.12" ora "^5.4.1" -"@react-native-community/cli-platform-ios@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.6.tgz#0cd700f36483ca37dda7ec044377f8a926b1df1f" - integrity sha512-vjDnRwhlSN5ryqKTas6/DPkxuouuyFBAqAROH4FR1cspTbn6v78JTZKDmtQy9JMMo7N5vZj1kASU5vbFep9IOQ== +"@react-native-community/cli-platform-apple@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz#02fb5dc47d62acd85f4d7a852e93216927a772fa" + integrity sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA== dependencies: - "@react-native-community/cli-platform-apple" "13.6.6" + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + execa "^5.0.0" + fast-glob "^3.3.2" + fast-xml-parser "^4.0.12" + ora "^5.4.1" "@react-native-community/cli-platform-ios@13.6.8": version "13.6.8" @@ -2679,20 +2672,12 @@ dependencies: "@react-native-community/cli-platform-apple" "13.6.8" -"@react-native-community/cli-server-api@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.6.tgz#467993006ef82361cdf7a9817999d5a09e85ca6a" - integrity sha512-ZtCXxoFlM7oDv3iZ3wsrT3SamhtUJuIkX2WePLPlN5bcbq7zimbPm2lHyicNJtpcGQ5ymsgpUWPCNZsWQhXBqQ== +"@react-native-community/cli-platform-ios@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz#f37ceab41c2302e8f0d4bcbd3bf58b3353db4306" + integrity sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw== dependencies: - "@react-native-community/cli-debugger-ui" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - compression "^1.7.1" - connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" - serve-static "^1.13.1" - ws "^6.2.2" + "@react-native-community/cli-platform-apple" "13.6.9" "@react-native-community/cli-server-api@13.6.8": version "13.6.8" @@ -2709,22 +2694,20 @@ serve-static "^1.13.1" ws "^6.2.2" -"@react-native-community/cli-tools@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.6.tgz#55c40cbabafbfc56cfb95a4d5fbf73ef60ec3cbc" - integrity sha512-ptOnn4AJczY5njvbdK91k4hcYazDnGtEPrqIwEI+k/CTBHNdb27Rsm2OZ7ye6f7otLBqF8gj/hK6QzJs8CEMgw== +"@react-native-community/cli-server-api@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz#269e666bc26e9d0b2f42c7f6099559b5f9259e9d" + integrity sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug== dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - execa "^5.0.0" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - sudo-prompt "^9.0.0" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + compression "^1.7.1" + connect "^3.6.5" + errorhandler "^1.5.1" + nocache "^3.0.1" + pretty-format "^26.6.2" + serve-static "^1.13.1" + ws "^6.2.2" "@react-native-community/cli-tools@13.6.8": version "13.6.8" @@ -2743,12 +2726,22 @@ shell-quote "^1.7.3" sudo-prompt "^9.0.0" -"@react-native-community/cli-types@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.6.tgz#b45af119d61888fea1074a7c32ddb093e3f119a9" - integrity sha512-733iaYzlmvNK7XYbnWlMjdE+2k0hlTBJW071af/xb6Bs+hbJqBP9c03FZuYH2hFFwDDntwj05bkri/P7VgSxug== +"@react-native-community/cli-tools@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz#2baee279358ba1a863e737b2fa9f45659ad91929" + integrity sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ== dependencies: - joi "^17.2.1" + appdirsjs "^1.2.4" + chalk "^4.1.2" + execa "^5.0.0" + find-up "^5.0.0" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^7.5.2" + shell-quote "^1.7.3" + sudo-prompt "^9.0.0" "@react-native-community/cli-types@13.6.8": version "13.6.8" @@ -2757,28 +2750,12 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.6.tgz#b929c8668e88344c03a46a3e635cb382dba16773" - integrity sha512-IqclB7VQ84ye8Fcs89HOpOscY4284VZg2pojHNl8H0Lzd4DadXJWQoxC7zWm8v2f8eyeX2kdhxp2ETD5tceIgA== +"@react-native-community/cli-types@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.9.tgz#08bfb796eacf0daeb31e2de516e81e78a36a1a55" + integrity sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w== dependencies: - "@react-native-community/cli-clean" "13.6.6" - "@react-native-community/cli-config" "13.6.6" - "@react-native-community/cli-debugger-ui" "13.6.6" - "@react-native-community/cli-doctor" "13.6.6" - "@react-native-community/cli-hermes" "13.6.6" - "@react-native-community/cli-server-api" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - "@react-native-community/cli-types" "13.6.6" - chalk "^4.1.2" - commander "^9.4.1" - deepmerge "^4.3.0" - execa "^5.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - graceful-fs "^4.1.3" - prompts "^2.4.2" - semver "^7.5.2" + joi "^17.2.1" "@react-native-community/cli@13.6.8": version "13.6.8" @@ -2803,15 +2780,38 @@ prompts "^2.4.2" semver "^7.5.2" -"@react-native-windows/cli@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.74.0.tgz#da85c0f8d7f96a761080fae27323fe257560e22d" - integrity sha512-grOp6b/Pfa4T+n+oWmoo18BXI97CKZPbRKTlCg2Ne5Hsq2rj4Ewg8tnRFKFOMthy5dZcPWLqsphkT0J/sQBHXw== +"@react-native-community/cli@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.9.tgz#ba6360b94e0aba9c4001bda256cf7e57e2ecb02c" + integrity sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ== dependencies: - "@react-native-windows/codegen" "0.74.0" - "@react-native-windows/fs" "0.74.0" - "@react-native-windows/package-utils" "0.74.0" - "@react-native-windows/telemetry" "0.74.0" + "@react-native-community/cli-clean" "13.6.9" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-doctor" "13.6.9" + "@react-native-community/cli-hermes" "13.6.9" + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native-community/cli-types" "13.6.9" + chalk "^4.1.2" + commander "^9.4.1" + deepmerge "^4.3.0" + execa "^5.0.0" + find-up "^4.1.0" + fs-extra "^8.1.0" + graceful-fs "^4.1.3" + prompts "^2.4.2" + semver "^7.5.2" + +"@react-native-windows/cli@0.74.8": + version "0.74.8" + resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.74.8.tgz#747b6d4de9fa5e3e837b643fc1a48600d756d2d2" + integrity sha512-XUqoXiGDlD4BCYcEweujpV3tUYr5pGijX3mNrP1DWzY8gKXVgcmzLs6fng/EK6VsWD7H8bRraYAu9pccGLN4fw== + dependencies: + "@react-native-windows/codegen" "0.74.5" + "@react-native-windows/fs" "0.74.1" + "@react-native-windows/package-utils" "0.74.1" + "@react-native-windows/telemetry" "0.74.2" "@xmldom/xmldom" "^0.7.7" chalk "^4.1.0" cli-spinners "^2.2.0" @@ -2830,50 +2830,50 @@ xml-parser "^1.2.1" xpath "^0.0.27" -"@react-native-windows/codegen@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/codegen/-/codegen-0.74.0.tgz#9024ba6e871088e42356f94eb126697e6268487b" - integrity sha512-jSN5PZQKZIuaukoUJU9LOyHs2Y/KmG5xsLtSGRUcjG8wTrzP+xXxj3115hHdk9vreL80o+pup5o1UNfyLfvGIA== +"@react-native-windows/codegen@0.74.5": + version "0.74.5" + resolved "https://registry.yarnpkg.com/@react-native-windows/codegen/-/codegen-0.74.5.tgz#a90d6caa0c1664ce25f43457bdb72bf424918f48" + integrity sha512-7v2QBQH7wBBYe+OUlbEsDEEOhsRAM4th55F8r9RtyEvMc+2W79up0se3+xYdBgwjYIPHsDp+g5XwDVjBJC4m7A== dependencies: - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" chalk "^4.1.0" - globby "^11.0.4" + globby "^11.1.0" mustache "^4.0.1" source-map-support "^0.5.19" yargs "^16.2.0" -"@react-native-windows/find-repo-root@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.74.0.tgz#687819c76825d3f7c58401a9d96c2c748774506f" - integrity sha512-6dxkKX+mtT+yXuTDUf7A+ZQnyX57WlYk3fDNeNTpI66xBR4QuRwPdzTNamZxvX6JEMSe4lm4PqXWlfAKYzPENw== +"@react-native-windows/find-repo-root@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.74.1.tgz#bf2f10545c29ffcdb76b9179fce346f84e15c5ab" + integrity sha512-k+Hk16/NmPhxsQYGCRtAfcQqCDCJvAxC74FLzFOO6+c/VDM0U05kEcJsJzI1dh/0kZh+YSZQo3w1RrA1z1S2gw== dependencies: - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" find-up "^4.1.0" -"@react-native-windows/fs@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.74.0.tgz#bbef312e6c9541292a69e607c1e5fbc47e2a665c" - integrity sha512-YK8CkNHSwskU3PPCPTw1DPen3/QXS7qP7rAp+FNK4LfyOgiO1V9TiIyz3DcvqOsD+iwriXoEl/3Bvo/8HmlTbQ== +"@react-native-windows/fs@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.74.1.tgz#2c6ade1f937adc6056b1a6b052b7b85acb725a14" + integrity sha512-Qepr2KyMvCKugOwIXKXtgMqww5P3yI5HTtxIUWytBCoIPEk1lJdpx/sFjTGmir0QXaLlZxXbdrxpLLnN7eq3Tg== dependencies: graceful-fs "^4.2.8" -"@react-native-windows/package-utils@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.74.0.tgz#bdcd18f993d899a6f9914365863bde7ee4eee509" - integrity sha512-b7c2/DycLM3MK7K6Y4XVuKFBTLvyg0DSP7++f/yZsBWyCysFycAS5gCrlVbXk6Kez3CIEspSS7op+GJMduMp8g== +"@react-native-windows/package-utils@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.74.1.tgz#18e49bb5b2ed967f279605223eae65a3ea55112f" + integrity sha512-nzKo1H991npbRx2EJT0wkniGkngEw7ND5+oz6jhbNFQ3UCKIUBCLc2bPBBX1Z5jp40R+qoVbgnQP2fuAN5y9tA== dependencies: - "@react-native-windows/find-repo-root" "0.74.0" - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/find-repo-root" "0.74.1" + "@react-native-windows/fs" "0.74.1" get-monorepo-packages "^1.2.0" lodash "^4.17.15" -"@react-native-windows/telemetry@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.74.0.tgz#e050312998d6c64f50f368bcb3299e9e3138fd10" - integrity sha512-80vMPWXLJpa3v+vAafXjCQM0GFE3Iq8breRkrwzmbANAfCEXoJdOI0Aju0sOqDyiE68OUekjU9lwWbIyFEQGJQ== +"@react-native-windows/telemetry@0.74.2": + version "0.74.2" + resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.74.2.tgz#3ad1bdc2be0f43f2009f13368d5c6659064ec3db" + integrity sha512-fTqPYaYB7MtPHTr1ytarFsoPHLHch8EAegblTDTo1ha3a1neGOMTGoxZF2a8/l0y8HSDdsfyTfv8JjCO3w5oow== dependencies: "@azure/core-auth" "1.5.0" - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" "@xmldom/xmldom" "^0.7.7" applicationinsights "2.9.1" ci-info "^3.2.0" @@ -2882,16 +2882,16 @@ os-locale "^5.0.0" xpath "^0.0.27" -"@react-native/assets-registry@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.83.tgz#c1815dc10f9e1075e0d03b4c8a9619145969522e" - integrity sha512-2vkLMVnp+YTZYTNSDIBZojSsjz8sl5PscP3j4GcV6idD8V978SZfwFlk8K0ti0BzRs11mzL0Pj17km597S/eTQ== - "@react-native/assets-registry@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.84.tgz#aa472f82c1b7d8a30098c8ba22fad7b3dbb5be5f" integrity sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ== +"@react-native/assets-registry@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.87.tgz#7dda64e48db14597e19e15f679e31abbb1c1fb4d" + integrity sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg== + "@react-native/assets@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" @@ -2904,13 +2904,6 @@ dependencies: "@react-native/codegen" "0.74.81" -"@react-native/babel-plugin-codegen@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.83.tgz#971f9cfec980dd05598d81964c05a26c6166f9fb" - integrity sha512-+S0st3t4Ro00bi9gjT1jnK8qTFOU+CwmziA7U9odKyWrCoRJrgmrvogq/Dr1YXlpFxexiGIupGut1VHxr+fxJA== - dependencies: - "@react-native/codegen" "0.74.83" - "@react-native/babel-plugin-codegen@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz#a3a72c188d875601704a421e395f6909fdec40f3" @@ -2918,6 +2911,13 @@ dependencies: "@react-native/codegen" "0.74.84" +"@react-native/babel-plugin-codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz#44457f4de69911f37a6ac308a7783203a757574a" + integrity sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw== + dependencies: + "@react-native/codegen" "0.74.87" + "@react-native/babel-preset@0.74.81": version "0.74.81" resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.81.tgz#80d0b96eef35d671f97eaf223c4d770170d7f23f" @@ -2967,55 +2967,6 @@ babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/babel-preset@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.83.tgz#9828457779b4ce0219078652327ce3203115cdf9" - integrity sha512-KJuu3XyVh3qgyUer+rEqh9a/JoUxsDOzkJNfRpDyXiAyjDRoVch60X/Xa/NcEQ93iCVHAWs0yQ+XGNGIBCYE6g== - dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.83" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.14.0" - "@react-native/babel-preset@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.84.tgz#703ebfc810d82c9f51f033352abd5f9fa70d492b" @@ -3065,6 +3016,55 @@ babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" +"@react-native/babel-preset@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.87.tgz#3d74517d2ea8898f83b5106027033607d5bda50d" + integrity sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.18.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.20.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.20.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.20.0" + "@babel/plugin-transform-flow-strip-types" "^7.20.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + "@react-native/babel-plugin-codegen" "0.74.87" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.14.0" + "@react-native/codegen@0.74.81": version "0.74.81" resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.81.tgz#1025ffd41f2b4710fd700c9e8e85210b9651a7c4" @@ -3078,19 +3078,6 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/codegen@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.83.tgz#7c56a82fe7603f0867f0d80ff29db3757b71be55" - integrity sha512-GgvgHS3Aa2J8/mp1uC/zU8HuTh8ZT5jz7a4mVMWPw7+rGyv70Ba8uOVBq6UH2Q08o617IATYc+0HfyzAfm4n0w== - dependencies: - "@babel/parser" "^7.20.0" - glob "^7.1.1" - hermes-parser "0.19.1" - invariant "^2.2.4" - jscodeshift "^0.14.0" - mkdirp "^0.5.1" - nullthrows "^1.1.1" - "@react-native/codegen@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.84.tgz#d3425a510b7da558ef5088d9b0aa5e0b1c05c783" @@ -3104,23 +3091,18 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.83.tgz#58808a58a5288895627548338731e72ebb5b507c" - integrity sha512-7GAFjFOg1mFSj8bnFNQS4u8u7+QtrEeflUIDVZGEfBZQ3wMNI5ycBzbBGycsZYiq00Xvoc6eKFC7kvIaqeJpUQ== +"@react-native/codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.87.tgz#47f07a627d0294c8270a03aee098991ed91f8ae9" + integrity sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg== dependencies: - "@react-native-community/cli-server-api" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - "@react-native/dev-middleware" "0.74.83" - "@react-native/metro-babel-transformer" "0.74.83" - chalk "^4.0.0" - execa "^5.1.1" - metro "^0.80.3" - metro-config "^0.80.3" - metro-core "^0.80.3" - node-fetch "^2.2.0" - querystring "^0.2.1" - readline "^1.3.0" + "@babel/parser" "^7.20.0" + glob "^7.1.1" + hermes-parser "0.19.1" + invariant "^2.2.4" + jscodeshift "^0.14.0" + mkdirp "^0.5.1" + nullthrows "^1.1.1" "@react-native/community-cli-plugin@0.74.84": version "0.74.84" @@ -3140,23 +3122,41 @@ querystring "^0.2.1" readline "^1.3.0" -"@react-native/debugger-frontend@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.83.tgz#48050afa4e086438073b95f041c0cc84fe3f20de" - integrity sha512-RGQlVUegBRxAUF9c1ss1ssaHZh6CO+7awgtI9sDeU0PzDZY/40ImoPD5m0o0SI6nXoVzbPtcMGzU+VO590pRfA== +"@react-native/community-cli-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.87.tgz#4d9798d51381912f3771acded9b6b2804987e952" + integrity sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ== + dependencies: + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native/dev-middleware" "0.74.87" + "@react-native/metro-babel-transformer" "0.74.87" + chalk "^4.0.0" + execa "^5.1.1" + metro "^0.80.3" + metro-config "^0.80.3" + metro-core "^0.80.3" + node-fetch "^2.2.0" + querystring "^0.2.1" + readline "^1.3.0" "@react-native/debugger-frontend@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz#0bde122a988916b6a50f05a7c3ab1c5db029b149" integrity sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A== -"@react-native/dev-middleware@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.83.tgz#9d09cfdb763e8ef81c003b0f99ae4ed1a3539639" - integrity sha512-UH8iriqnf7N4Hpi20D7M2FdvSANwTVStwFCSD7VMU9agJX88Yk0D1T6Meh2RMhUu4kY2bv8sTkNRm7LmxvZqgA== +"@react-native/debugger-frontend@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.87.tgz#0bb4f4f54365d04fc975349d5f635cb575f6a5d8" + integrity sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ== + +"@react-native/dev-middleware@0.74.84": + version "0.74.84" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz#19ccfece791742f83f4c0a22a8c14593a45562a2" + integrity sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.83" + "@react-native/debugger-frontend" "0.74.84" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -3169,13 +3169,13 @@ temp-dir "^2.0.0" ws "^6.2.2" -"@react-native/dev-middleware@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz#19ccfece791742f83f4c0a22a8c14593a45562a2" - integrity sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ== +"@react-native/dev-middleware@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.87.tgz#254807b579a3015ced659a14c374dbf029a9c04e" + integrity sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.84" + "@react-native/debugger-frontend" "0.74.87" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -3212,31 +3212,31 @@ resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.81.tgz#ac53da7c41a35948b0f9d01d88d2a858e879edb1" integrity sha512-vlbLJ38MFJzcEgNxNswjgDRELvZX5e4SmGhtN9N1ZQpXLkgo3hs+l2m4ulSpKhSmqpbacB5XbuTTMgKOsLj/5w== -"@react-native/gradle-plugin@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.83.tgz#4ac60a6d6295d5b920173cbf184ee32e53690810" - integrity sha512-Pw2BWVyOHoBuJVKxGVYF6/GSZRf6+v1Ygc+ULGz5t20N8qzRWPa2fRZWqoxsN7TkNLPsECYY8gooOl7okOcPAQ== - "@react-native/gradle-plugin@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz#6ff25fad5f78c276afde96ffc42e04e92d6d92b1" integrity sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg== +"@react-native/gradle-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.87.tgz#a66c01fda7a938a116dc27447f0ccce285796b2a" + integrity sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A== + "@react-native/js-polyfills@0.74.81": version "0.74.81" resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.81.tgz#64780497be4ecbff1b27076294e3ebd7df1ba485" integrity sha512-o4MiR+/kkHoeoQ/zPwt81LnTm6pqdg0wOhU7S7vIZUqzJ7YUpnpaAvF+/z7HzUOPudnavoCN0wvcZPe/AMEyCA== -"@react-native/js-polyfills@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.83.tgz#0e189ce3ab0efecd00223f3bfc53663ce08ba013" - integrity sha512-/t74n8r6wFhw4JEoOj3bN71N1NDLqaawB75uKAsSjeCwIR9AfCxlzZG0etsXtOexkY9KMeZIQ7YwRPqUdNXuqw== - "@react-native/js-polyfills@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz#edf0e8463616a2683269bbfe3957590f7ebd910c" integrity sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ== +"@react-native/js-polyfills@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.87.tgz#d28090a4dae417a2e9ad14e065fcf8cf52cc482c" + integrity sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw== + "@react-native/metro-babel-transformer@0.74.81": version "0.74.81" resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.81.tgz#f724eab91e6de82f8d098e6de57f25bb7501d2d6" @@ -3247,16 +3247,6 @@ hermes-parser "0.19.1" nullthrows "^1.1.1" -"@react-native/metro-babel-transformer@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.83.tgz#ba87c3cf041f4c0d2b991231af1a6b4a216e9b5d" - integrity sha512-hGdx5N8diu8y+GW/ED39vTZa9Jx1di2ZZ0aapbhH4egN1agIAusj5jXTccfNBwwWF93aJ5oVbRzfteZgjbutKg== - dependencies: - "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.74.83" - hermes-parser "0.19.1" - nullthrows "^1.1.1" - "@react-native/metro-babel-transformer@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.84.tgz#6c2c1632bdf557f176c9d489fbb676522ffb222a" @@ -3267,6 +3257,16 @@ hermes-parser "0.19.1" nullthrows "^1.1.1" +"@react-native/metro-babel-transformer@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.87.tgz#f60958f5e7eb39008a2c01dc5248ab60240bdc01" + integrity sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A== + dependencies: + "@babel/core" "^7.20.0" + "@react-native/babel-preset" "0.74.87" + hermes-parser "0.19.1" + nullthrows "^1.1.1" + "@react-native/metro-config@0.74.81": version "0.74.81" resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.74.81.tgz#3ed605c0bb51081905171af3e0326abd3adc0b27" @@ -3277,29 +3277,21 @@ metro-config "^0.80.3" metro-runtime "^0.80.3" -"@react-native/normalize-colors@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.83.tgz#86ef925bacf219d74df115bcfb615f62d8142e85" - integrity sha512-jhCY95gRDE44qYawWVvhTjTplW1g+JtKTKM3f8xYT1dJtJ8QWv+gqEtKcfmOHfDkSDaMKG0AGBaDTSK8GXLH8Q== - "@react-native/normalize-colors@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz#4764d59775c17a6ed193509cb01ae2f42dd5c045" integrity sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A== +"@react-native/normalize-colors@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.87.tgz#a814169d0ce4ce13ffebcda0a3a5a3f780ccd772" + integrity sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA== + "@react-native/typescript-config@0.74.81": version "0.74.81" resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.74.81.tgz#a249b6a21b577d572a0a70056d7c48a55fd6662f" integrity sha512-jk4LJUKdRYmXxxpebRSW8mK9xJPW90W6BE1IE9LdFi0exdsnVv5gXM9QylG+9kDVZj3bltMuMVdijWnU7SRNbg== -"@react-native/virtualized-lists@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.83.tgz#5595d6aefd9679d1295c56a1d1653b1fb261bd62" - integrity sha512-rmaLeE34rj7py4FxTod7iMTC7BAsm+HrGA8WxYmEJeyTV7WSaxAkosKoYBz8038mOiwnG9VwA/7FrB6bEQvn1A== - dependencies: - invariant "^2.2.4" - nullthrows "^1.1.1" - "@react-native/virtualized-lists@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz#cf32fffc93072942532c9c81bd7e4c01a2949626" @@ -3308,6 +3300,14 @@ invariant "^2.2.4" nullthrows "^1.1.1" +"@react-native/virtualized-lists@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.87.tgz#31bc44d62617df7d893df22c4c57094f576677a0" + integrity sha512-lsGxoFMb0lyK/MiplNKJpD+A1EoEUumkLrCjH4Ht+ZlG8S0BfCxmskLZ6qXn3BiDSkLjfjI/qyZ3pnxNBvkXpQ== + dependencies: + invariant "^2.2.4" + nullthrows "^1.1.1" + "@rnx-kit/chromium-edge-launcher@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz#c0df8ea00a902c7a417cd9655aab06de398b939c" @@ -5489,7 +5489,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.4, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -7627,43 +7627,29 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-native-reanimated@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.9.0.tgz#e5c5f303415a2aadd7db786005159b26c21ae495" - integrity sha512-OMZV2BVmxZvm8UhlXBrESO0y/ODGTRpQRQUO7U9QXysOF9RaR8FbO6KS0x99MH19zfFTV8cLGN/vYW1dFia9Rw== - dependencies: - "@babel/plugin-transform-arrow-functions" "^7.0.0-0" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0" - "@babel/plugin-transform-optional-chaining" "^7.0.0-0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0-0" - "@babel/plugin-transform-template-literals" "^7.0.0-0" - "@babel/preset-typescript" "^7.16.7" - convert-source-map "^2.0.0" - invariant "^2.2.4" - "react-native-svg@link:../..": version "0.0.0" uid "" -react-native-windows@0.74.9: - version "0.74.9" - resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.74.9.tgz#2abcc8eb99a4ce0ce80dfe2dea8ce249b8e21469" - integrity sha512-0WEwKhfi+WyjVswT6pRewfw2V694KYfTMIDSITDEu3Y3A9m1o0YyisnURxc4KRndRc0FQuw1iUf49uVK7BnXAw== +react-native-windows@0.74.24: + version "0.74.24" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.74.24.tgz#1dfbf992d377663da0578adf7507934c363c27b2" + integrity sha512-Vdpmpr9JDHdZUQFfr7rPeYNkcAaP0BRR1gLd4hz80pShIOuxuVUKmccN3mtr1S4y8VF+hEnhXdMHRjk64OE4GQ== dependencies: "@babel/runtime" "^7.0.0" "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "13.6.6" - "@react-native-community/cli-platform-android" "13.6.6" - "@react-native-community/cli-platform-ios" "13.6.6" - "@react-native-windows/cli" "0.74.0" + "@react-native-community/cli" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-windows/cli" "0.74.8" "@react-native/assets" "1.0.0" - "@react-native/assets-registry" "0.74.83" - "@react-native/codegen" "0.74.83" - "@react-native/community-cli-plugin" "0.74.83" - "@react-native/gradle-plugin" "0.74.83" - "@react-native/js-polyfills" "0.74.83" - "@react-native/normalize-colors" "0.74.83" - "@react-native/virtualized-lists" "0.74.83" + "@react-native/assets-registry" "0.74.87" + "@react-native/codegen" "0.74.87" + "@react-native/community-cli-plugin" "0.74.87" + "@react-native/gradle-plugin" "0.74.87" + "@react-native/js-polyfills" "0.74.87" + "@react-native/normalize-colors" "0.74.87" + "@react-native/virtualized-lists" "0.74.87" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" diff --git a/apps/paper-windows-example/babel.config.js b/apps/paper-windows-example/babel.config.js index bd798c39..f7b3da3b 100644 --- a/apps/paper-windows-example/babel.config.js +++ b/apps/paper-windows-example/babel.config.js @@ -1,8 +1,3 @@ module.exports = { presets: ['module:@react-native/babel-preset'], - plugins: [ - '@babel/plugin-proposal-export-namespace-from', - 'module:react-native-dotenv', - 'react-native-reanimated/plugin', - ], }; diff --git a/apps/paper-windows-example/index.js b/apps/paper-windows-example/index.js index a7ab94e9..8526e8c4 100644 --- a/apps/paper-windows-example/index.js +++ b/apps/paper-windows-example/index.js @@ -3,7 +3,7 @@ */ import { AppRegistry } from 'react-native'; -import App from '../common'; +import App from '../common/noNavigationApp'; import { name as appName } from './app.json'; AppRegistry.registerComponent(appName, () => App); diff --git a/apps/paper-windows-example/package.json b/apps/paper-windows-example/package.json index fec7cf7c..48facc96 100644 --- a/apps/paper-windows-example/package.json +++ b/apps/paper-windows-example/package.json @@ -14,14 +14,11 @@ "react": "18.2.0", "react-dom": "^18.2.0", "react-native": "0.74.2", - "react-native-reanimated": "3.15.4", "react-native-svg": "link:../../", - "react-native-view-shot": "4.0.0-alpha.2", - "react-native-windows": "0.74.9" + "react-native-windows": "0.74.24" }, "devDependencies": { "@babel/core": "^7.20.0", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "@react-native/babel-preset": "0.74.84", @@ -39,7 +36,6 @@ "patch-package": "^8.0.0", "postinstall-postinstall": "^2.1.0", "prettier": "2.8.8", - "react-native-dotenv": "^3.4.11", "react-test-renderer": "18.2.0", "typescript": "5.0.4" }, diff --git a/apps/paper-windows-example/patches/react-native-view-shot+4.0.0-alpha.2.patch b/apps/paper-windows-example/patches/react-native-view-shot+4.0.0-alpha.2.patch deleted file mode 100644 index 0caa5602..00000000 --- a/apps/paper-windows-example/patches/react-native-view-shot+4.0.0-alpha.2.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/node_modules/react-native-view-shot/ios/RNViewShot.m b/node_modules/react-native-view-shot/ios/RNViewShot.m -index bd55b92..6a20e9d 100644 ---- a/node_modules/react-native-view-shot/ios/RNViewShot.m -+++ b/node_modules/react-native-view-shot/ios/RNViewShot.m -@@ -106,7 +106,7 @@ - (dispatch_queue_t)methodQueue - scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height); - } - -- UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:size]; -+ UIGraphicsBeginImageContextWithOptions(size, NO, 0); - - if (renderInContext) { - // this comes with some trade-offs such as inability to capture gradients or scrollview's content in full but it works for large views -@@ -117,8 +117,8 @@ - (dispatch_queue_t)methodQueue - // this doesn't work for large views and reports incorrect success even though the image is blank - success = [rendered drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES]; - } -- -- UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {}]; -+ UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); -+ UIGraphicsEndImageContext(); - - if (snapshotContentContainer) { - // Restore scroll & frame -@@ -152,11 +152,11 @@ - (dispatch_queue_t)methodQueue - NSString *res = nil; - if ([result isEqualToString:@"base64"]) { - // Return as a base64 raw string -- res = [data base64EncodedStringWithOptions: 0]; -+ res = [data base64EncodedStringWithOptions: NSDataBase64EncodingEndLineWithLineFeed]; - } - else if ([result isEqualToString:@"data-uri"]) { - // Return as a base64 data uri string -- NSString *base64 = [data base64EncodedStringWithOptions: 0]; -+ NSString *base64 = [data base64EncodedStringWithOptions: NSDataBase64EncodingEndLineWithLineFeed]; - NSString *imageFormat = ([format isEqualToString:@"jpg"]) ? @"jpeg" : format; - res = [NSString stringWithFormat:@"data:image/%@;base64,%@", imageFormat, base64]; - } -diff --git a/node_modules/react-native-view-shot/src/specs/NativeRNViewShot.ts b/node_modules/react-native-view-shot/src/specs/NativeRNViewShot.ts -index a6f4c00..1e9e6ce 100644 ---- a/node_modules/react-native-view-shot/src/specs/NativeRNViewShot.ts -+++ b/node_modules/react-native-view-shot/src/specs/NativeRNViewShot.ts -@@ -2,7 +2,7 @@ import type { TurboModule } from 'react-native'; - import { TurboModuleRegistry } from 'react-native'; - - export interface Spec extends TurboModule { -- releaseCapture: () => string; -+ releaseCapture: (uri: string) => void; - captureRef: (tag: number, options: Object) => Promise - captureScreen: (options: Object) => Promise; - } \ No newline at end of file diff --git a/apps/paper-windows-example/patches/react-native-windows+0.74.9.patch b/apps/paper-windows-example/patches/react-native-windows+0.74.23.patch similarity index 97% rename from apps/paper-windows-example/patches/react-native-windows+0.74.9.patch rename to apps/paper-windows-example/patches/react-native-windows+0.74.23.patch index 8d1dd238..fdf1ad4d 100644 --- a/apps/paper-windows-example/patches/react-native-windows+0.74.9.patch +++ b/apps/paper-windows-example/patches/react-native-windows+0.74.23.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/react-native-windows/Microsoft.ReactNative/Modules/NativeUIManager.cpp b/node_modules/react-native-windows/Microsoft.ReactNative/Modules/NativeUIManager.cpp -index 97c1691..8136008 100644 +index fb25176..eb1201a 100644 --- a/node_modules/react-native-windows/Microsoft.ReactNative/Modules/NativeUIManager.cpp +++ b/node_modules/react-native-windows/Microsoft.ReactNative/Modules/NativeUIManager.cpp @@ -309,16 +309,10 @@ static YGValue YGValueOrDefault( diff --git a/apps/paper-windows-example/windows/Example/packages.lock.json b/apps/paper-windows-example/windows/Example/packages.lock.json index 30a6a022..f5419aae 100644 --- a/apps/paper-windows-example/windows/Example/packages.lock.json +++ b/apps/paper-windows-example/windows/Example/packages.lock.json @@ -4,9 +4,9 @@ "native,Version=v0.0": { "Microsoft.JavaScript.Hermes": { "type": "Direct", - "requested": "[0.1.21, )", - "resolved": "0.1.21", - "contentHash": "5njCh+3eXTLOv7+8nOnp6nJ5C0r6it5ze54c0nuWleeDptuK8t3dEDB79XTU4D5DKNvAPlqJpgXRDOak5nYIug==" + "requested": "[0.1.23, )", + "resolved": "0.1.23", + "contentHash": "cA9t1GjY4Yo0JD1AfA//e1lOwk48hLANfuX6GXrikmEBNZVr2TIX5ONJt5tqCnpZyLz6xGiPDgTfFNKbSfb21g==" }, "Microsoft.UI.Xaml": { "type": "Direct", @@ -25,18 +25,130 @@ }, "boost": { "type": "Transitive", - "resolved": "1.76.0", - "contentHash": "p+w3YvNdXL8Cu9Fzrmexssu0tZbWxuf6ywsQqHjDlKFE5ojXHof1HIyMC3zDLfLnh80dIeFcEUAuR2Asg/XHRA==" + "resolved": "1.83.0", + "contentHash": "cy53VNMzysEMvhBixDe8ujPk67Fcj3v6FPHQnH91NYJNLHpc6jxa2xq9ruCaaJjE4M3YrGSHDi4uUSTGBWw6EQ==" + }, + "Microsoft.Net.Native.Compiler": { + "type": "Transitive", + "resolved": "2.2.9-rel-29512-01", + "contentHash": "xjK9G8qoKaN1kUvOp/PuqYYxk6uGTZFwHUsHLrLXLyFVxnoHq/woqWyVb/n22uNWYtAoioeXlm6hZ0M8/f7eXw==", + "dependencies": { + "runtime.win10-arm.Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "runtime.win10-arm64.Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "runtime.win10-x64.Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "runtime.win10-x86.Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01" + } + }, + "Microsoft.Net.UWPCoreRuntimeSdk": { + "type": "Transitive", + "resolved": "2.2.11", + "contentHash": "B1p3txWKwmO+Csf126X9y1gVQej/zOfUUAOE90iOmEHFMieIle/XfKrrAtlHIIo5snylwB8LgDsRn0kWlDsHhg==", + "dependencies": { + "runtime.win10-arm.Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "runtime.win10-x64.Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "ok+RPAtESz/9MUXeIEz6Lv5XAGQsaNmEYXMsgVALj4D7kqC8gveKWXWXbufLySR2fWrwZf8smyN5RmHu0e4BHA==" + }, + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3" + } }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "runtime.win10-arm.Microsoft.Net.Native.Compiler": { + "type": "Transitive", + "resolved": "2.2.9-rel-29512-01", + "contentHash": "p+v2gthEgj5Tgm4Cl05mfV0w6Q7IFMdOQXZQsiZRg4wBkKSdVoW9lgaxF8bVffBJYes2Vm8ovKpxwTrmEXRzFg==", + "dependencies": { + "runtime.win10-arm.Microsoft.Net.Native.SharedLibrary": "2.2.8-rel-29512-01" + } + }, + "runtime.win10-arm.Microsoft.Net.Native.SharedLibrary": { + "type": "Transitive", + "resolved": "2.2.8-rel-29512-01", + "contentHash": "GUQ7Ubf9ts1XfNNaDrJUnmpsKfpcyZ+8NeZoDyYlImgT/UukkW1cYaxqbxM8VH+g5iIGXeO7suVv8tkwE862FA==" + }, + "runtime.win10-arm.Microsoft.Net.UWPCoreRuntimeSdk": { + "type": "Transitive", + "resolved": "2.2.11", + "contentHash": "R1RaI4RSc+H9E5Pq9pndWzAv4dxztym4+TAII4VrsReePMGRM8eoJByg47BAPM4Y9mBv7esR0KhYc5J1/hpUIw==" + }, + "runtime.win10-arm64.Microsoft.Net.Native.Compiler": { + "type": "Transitive", + "resolved": "2.2.9-rel-29512-01", + "contentHash": "8ex2blgQcIw/MoaJH7hqRJdekTWgMUz5Qb+xmVeGvbB/lWl4BPv6/J9+cmcFxEM+Z7OA8xilFH1kwWFMyvak1A==", + "dependencies": { + "runtime.win10-arm64.Microsoft.Net.Native.SharedLibrary": "2.2.8-rel-29512-01" + } + }, + "runtime.win10-arm64.Microsoft.Net.Native.SharedLibrary": { + "type": "Transitive", + "resolved": "2.2.8-rel-29512-01", + "contentHash": "iYqXJq6hpg07RqAqq8RAffVU1308cQ2ta4ZZtfWI8tbVXGuKOU6he52AMgz4JfcP/Yb/khy9Gdxl62MVXcctzg==" + }, + "runtime.win10-x64.Microsoft.Net.Native.Compiler": { + "type": "Transitive", + "resolved": "2.2.9-rel-29512-01", + "contentHash": "sgiiODHWt4WZ9mDpZd+XkCdWYCBZukjZPNz3XJdeKeeNcRA4y4OTtd2+STWytXDxWAXUNRjImDF5XP48jNXj8A==", + "dependencies": { + "runtime.win10-x64.Microsoft.Net.Native.SharedLibrary": "2.2.8-rel-29512-01" + } + }, + "runtime.win10-x64.Microsoft.Net.Native.SharedLibrary": { + "type": "Transitive", + "resolved": "2.2.8-rel-29512-01", + "contentHash": "JoJavADSFAHk8KQo/bIHT+TTM1gn26X7A3DBltr0ocxcR+6FEnrFa1dLev2tFWmUcndeoyTklndZKwBkSFfEDw==" + }, + "runtime.win10-x64.Microsoft.Net.UWPCoreRuntimeSdk": { + "type": "Transitive", + "resolved": "2.2.11", + "contentHash": "7e8MH4/tzwVV25dUvq+eYgvH31Tyi7kpGNcsqfzfJDYxA6hpGijhfZFFn2QHjORRoTu/BVxGM/9xc/bP4J0vRg==" + }, + "runtime.win10-x86.Microsoft.Net.Native.Compiler": { + "type": "Transitive", + "resolved": "2.2.9-rel-29512-01", + "contentHash": "M586UCPkXEXFbbC7dNznyN9/uNSWNjOeWWHrKNhwztaIl5iCaqr9ITDu55hd7tRdsoi/mPthAH470k4Vml/UrA==", + "dependencies": { + "runtime.win10-x86.Microsoft.Net.Native.SharedLibrary": "2.2.8-rel-29512-01" + } + }, + "runtime.win10-x86.Microsoft.Net.Native.SharedLibrary": { + "type": "Transitive", + "resolved": "2.2.8-rel-29512-01", + "contentHash": "s+oRLOdFSD8FS/hG2MBLzcdPzvBOzQqydYGLl/E+jaB7ijqYs8Dd3yeK72HgWLmKvp3rtkPhCHeRqYhA54+1YQ==" + }, + "runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk": { + "type": "Transitive", + "resolved": "2.2.11", + "contentHash": "NF8tUTxFfwd8MXiA6ygCVuT7dVgEkaHpuwFnDeP1L2i1SIOxhk5w4HHySjmvbRSYtnjLA9BlOtwjGIJCztOHeg==" + }, "common": { "type": "Project", "dependencies": { - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "fmt": { @@ -46,7 +158,7 @@ "type": "Project", "dependencies": { "Fmt": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "microsoft.reactnative": { @@ -54,17 +166,38 @@ "dependencies": { "Common": "[1.0.0, )", "Folly": "[1.0.0, )", - "Microsoft.JavaScript.Hermes": "[0.1.21, )", + "Microsoft.JavaScript.Hermes": "[0.1.23, )", "Microsoft.UI.Xaml": "[2.8.0, )", "ReactCommon": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" + } + }, + "microsoft.reactnative.managed": { + "type": "Project", + "dependencies": { + "Microsoft.NETCore.UniversalWindowsPlatform": "[6.2.9, )", + "Microsoft.ReactNative": "[1.0.0, )" } }, "reactcommon": { "type": "Project", "dependencies": { "Folly": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" + } + }, + "reactnativeasyncstorage": { + "type": "Project", + "dependencies": { + "Microsoft.ReactNative": "[1.0.0, )", + "Microsoft.UI.Xaml": "[2.8.0, )" + } + }, + "rnscreens": { + "type": "Project", + "dependencies": { + "Microsoft.ReactNative": "[1.0.0, )", + "Microsoft.UI.Xaml": "[2.8.0, )" } }, "rnsvg": { @@ -73,55 +206,182 @@ "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.UI.Xaml": "[2.8.0, )" } + }, + "rnviewshot": { + "type": "Project", + "dependencies": { + "Microsoft.NETCore.UniversalWindowsPlatform": "[6.2.11, )", + "Microsoft.ReactNative": "[1.0.0, )", + "Microsoft.ReactNative.Managed": "[1.0.0, )" + } } }, "native,Version=v0.0/win10-arm": { + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3", + "runtime.win10-arm.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.11" + } + }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, + "runtime.win10-arm.Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "TMXtd4TVwVgENc4tFWZ+rfnJXZfwRmeL9vkkwMjyCK6+dknZaFuiRMnZ9ggPDMZ4qtq4eKXDqhp7GIVzLkmTxQ==" } }, "native,Version=v0.0/win10-arm-aot": { + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3", + "runtime.win10-arm-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.11" + } + }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, + "runtime.win10-arm-aot.Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "Sn/jnBh7ggB1TqoxrsEM2S+JpFM8FOO8lXRfdp9LWbUI1Vgzb+a5wpS1bXki1lJK6cFrVldDjbZv4D4NEfJuyg==" } }, "native,Version=v0.0/win10-arm64-aot": { + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3", + "runtime.win10-arm64-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.11" + } + }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, + "runtime.win10-arm64-aot.Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "07IvykpRbKdON7JjrBxshOKTqkJ39h7b6xc6AE09h8DaoP8CsUkyn+IBRlMGAzfVNnQwaoCKf+EWoSCueBKaqQ==" } }, "native,Version=v0.0/win10-x64": { + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3", + "runtime.win10-x64.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.11" + } + }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, + "runtime.win10-x64.Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "EqfKqHuQsosS4oPFBaKlUFMSV2ZSLh2VoxWnLkPiydVK9jIh31c2Au1csZ5ucQmXOra3vEuZLToOK4XNVLW2wQ==" } }, "native,Version=v0.0/win10-x64-aot": { + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3", + "runtime.win10-x64-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.11" + } + }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, + "runtime.win10-x64-aot.Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "PfST4gE/8rgl0tPMlGYp7BqzFjrhSGMQd+V68P4IMze9V6cnlkyXof4apD9MDzl7MPMPO0wwlkMj89+4+vXP3A==" } }, "native,Version=v0.0/win10-x86": { + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3", + "runtime.win10-x86.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.11" + } + }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, + "runtime.win10-x86.Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "Svwt46NcUEBhH+LNdg+9J+phHiWW3mmfuKrKT1RGI9QCownxaFg0kI5NCT0YhoMcndFT6fLsUA5VLswApg3/HA==" } }, "native,Version=v0.0/win10-x86-aot": { + "Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "YeOCD+m2tfqkYzQ2hAKZ52cTrHWU0HRS4/2vf3SeZ+KHWq+unmskH+TrRktaIj/pChwPUMwLdCTU5/+4WeQcWQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.0", + "Microsoft.Net.Native.Compiler": "2.2.9-rel-29512-01", + "Microsoft.Net.UWPCoreRuntimeSdk": "2.2.11", + "NETStandard.Library": "2.0.3", + "runtime.win10-x86-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.11" + } + }, "Microsoft.Web.WebView2": { "type": "Transitive", "resolved": "1.0.1264.42", "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + }, + "runtime.win10-x86-aot.Microsoft.NETCore.UniversalWindowsPlatform": { + "type": "Transitive", + "resolved": "6.2.11", + "contentHash": "2Yz+NstJwZlo4+9jfpQ+5fVuowPVIOG/Lp2yABPtfmh4VhbxoKyiAjeRo7bZUMk1RdwZL+LjJ5zg2l2Sh3ZhEA==" } } } diff --git a/apps/paper-windows-example/yarn.lock b/apps/paper-windows-example/yarn.lock index 63d2ee81..bbb52fd3 100644 --- a/apps/paper-windows-example/yarn.lock +++ b/apps/paper-windows-example/yarn.lock @@ -252,7 +252,7 @@ dependencies: "@babel/types" "^7.25.9" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== @@ -404,14 +404,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-proposal-logical-assignment-operators@^7.18.0": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" @@ -511,13 +503,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.9.tgz#30ddd09b4ad822f291efbbeb3bc4c5d3027af61d" @@ -631,7 +616,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.25.9": +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== @@ -670,7 +655,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-properties@^7.0.0-0", "@babel/plugin-transform-class-properties@^7.25.9": +"@babel/plugin-transform-class-properties@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== @@ -686,7 +671,7 @@ "@babel/helper-create-class-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.0.0-0", "@babel/plugin-transform-classes@^7.25.9": +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== @@ -861,7 +846,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== @@ -899,7 +884,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.25.9": +"@babel/plugin-transform-optional-chaining@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== @@ -997,7 +982,7 @@ babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.25.9": +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== @@ -1019,7 +1004,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.0.0-0", "@babel/plugin-transform-template-literals@^7.25.9": +"@babel/plugin-transform-template-literals@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== @@ -1059,7 +1044,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.0.0-0", "@babel/plugin-transform-unicode-regex@^7.25.9": +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== @@ -1167,7 +1152,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7": +"@babel/preset-typescript@^7.13.0": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.25.9.tgz#bb82f26cda46dc2eb1ee10bf72fa994e759a08ba" integrity sha512-XWxw1AcKk36kgxf4C//fl0ikjLeqGUWn062/Fd8GtpTfDJOX6Ud95FK+4JlDA36BX4bNGndXi3a6Vr4Jo5/61A== @@ -1651,16 +1636,6 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz#1a857dcc95a5ab30122e04417148211e6f945e6c" integrity sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg== -"@react-native-community/cli-clean@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.6.tgz#87c7ad8746c38dab0fe7b3c6ff89d44351d5d943" - integrity sha512-cBwJTwl0NyeA4nyMxbhkWZhxtILYkbU3TW3k8AXLg+iGphe0zikYMGB3T+haTvTc6alTyEFwPbimk9bGIqkjAQ== - dependencies: - "@react-native-community/cli-tools" "13.6.6" - chalk "^4.1.2" - execa "^5.0.0" - fast-glob "^3.3.2" - "@react-native-community/cli-clean@13.6.8": version "13.6.8" resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz#95ce964047f005152ac100394b6dcd5d2cc2a474" @@ -1671,17 +1646,15 @@ execa "^5.0.0" fast-glob "^3.3.2" -"@react-native-community/cli-config@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.6.tgz#69f590694b3a079c74f781baab3b762db74f5dbd" - integrity sha512-mbG425zCKr8JZhv/j11382arezwS/70juWMsn8j2lmrGTrP1cUdW0MF15CCIFtJsqyK3Qs+FTmqttRpq81QfSg== +"@react-native-community/cli-clean@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz#b6754f39c2b877c9d730feb848945150e1d52209" + integrity sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA== dependencies: - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" + execa "^5.0.0" fast-glob "^3.3.2" - joi "^17.2.1" "@react-native-community/cli-config@13.6.8": version "13.6.8" @@ -1695,12 +1668,17 @@ fast-glob "^3.3.2" joi "^17.2.1" -"@react-native-community/cli-debugger-ui@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.6.tgz#ac021ebd795b0fd66fb52a8987d1d41c5a4b8cb3" - integrity sha512-Vv9u6eS4vKSDAvdhA0OiQHoA7y39fiPIgJ6biT32tN4avHDtxlc6TWZGiqv7g98SBvDWvoVAmdPLcRf3kU+c8g== +"@react-native-community/cli-config@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.9.tgz#d609a64d40a173c89bd7d24e31807bb7dcba69f9" + integrity sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg== dependencies: - serve-static "^1.13.1" + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + cosmiconfig "^5.1.0" + deepmerge "^4.3.0" + fast-glob "^3.3.2" + joi "^17.2.1" "@react-native-community/cli-debugger-ui@13.6.8": version "13.6.8" @@ -1709,28 +1687,12 @@ dependencies: serve-static "^1.13.1" -"@react-native-community/cli-doctor@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.6.tgz#ac0febff05601d9b86af3e03460e1a6b0a1d33a5" - integrity sha512-TWZb5g6EmQe2Ua2TEWNmyaEayvlWH4GmdD9ZC+p8EpKFpB1NpDGMK6sXbpb42TDvwZg5s4TDRplK0PBEA/SVDg== +"@react-native-community/cli-debugger-ui@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz#bc5727c51964206a00d417e5148b46331a81d5a5" + integrity sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw== dependencies: - "@react-native-community/cli-config" "13.6.6" - "@react-native-community/cli-platform-android" "13.6.6" - "@react-native-community/cli-platform-apple" "13.6.6" - "@react-native-community/cli-platform-ios" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - chalk "^4.1.2" - command-exists "^1.2.8" - deepmerge "^4.3.0" - envinfo "^7.10.0" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - node-stream-zip "^1.9.1" - ora "^5.4.1" - semver "^7.5.2" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - yaml "^2.2.1" + serve-static "^1.13.1" "@react-native-community/cli-doctor@13.6.8": version "13.6.8" @@ -1755,15 +1717,28 @@ wcwidth "^1.0.1" yaml "^2.2.1" -"@react-native-community/cli-hermes@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.6.tgz#590f55f151fec23b55498228f92d100a0e71d474" - integrity sha512-La5Ie+NGaRl3klei6WxKoOxmCUSGGxpOk6vU5pEGf0/O7ky+Ay0io+zXYUZqlNMi/cGpO7ZUijakBYOB/uyuFg== +"@react-native-community/cli-doctor@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz#f1d4eeff427ddc8a9d19851042621c10939c35cb" + integrity sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A== dependencies: - "@react-native-community/cli-platform-android" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-apple" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" + command-exists "^1.2.8" + deepmerge "^4.3.0" + envinfo "^7.10.0" + execa "^5.0.0" hermes-profile-transformer "^0.0.6" + node-stream-zip "^1.9.1" + ora "^5.4.1" + semver "^7.5.2" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + yaml "^2.2.1" "@react-native-community/cli-hermes@13.6.8": version "13.6.8" @@ -1775,17 +1750,15 @@ chalk "^4.1.2" hermes-profile-transformer "^0.0.6" -"@react-native-community/cli-platform-android@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.6.tgz#9e3863cb092709021f11848890bff0fc16fc1609" - integrity sha512-/tMwkBeNxh84syiSwNlYtmUz/Ppc+HfKtdopL/5RB+fd3SV1/5/NPNjMlyLNgFKnpxvKCInQ7dnl6jGHJjeHjg== +"@react-native-community/cli-hermes@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz#88c8dfe936a0d4272efc54429eda9ccc3fca3ad8" + integrity sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA== dependencies: - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" - execa "^5.0.0" - fast-glob "^3.3.2" - fast-xml-parser "^4.2.4" - logkitty "^0.7.1" + hermes-profile-transformer "^0.0.6" "@react-native-community/cli-platform-android@13.6.8": version "13.6.8" @@ -1799,17 +1772,17 @@ fast-xml-parser "^4.2.4" logkitty "^0.7.1" -"@react-native-community/cli-platform-apple@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.6.tgz#d445fd6ed02c5ae2f43f9c45501e04fee53a2790" - integrity sha512-bOmSSwoqNNT3AmCRZXEMYKz1Jf1l2F86Nhs7qBcXdY/sGiJ+Flng564LOqvdAlVLTbkgz47KjNKCS2pP4Jg0Mg== +"@react-native-community/cli-platform-android@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz#b175b9b11334fc90da3f395432678bd53c30fae4" + integrity sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw== dependencies: - "@react-native-community/cli-tools" "13.6.6" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" - fast-xml-parser "^4.0.12" - ora "^5.4.1" + fast-xml-parser "^4.2.4" + logkitty "^0.7.1" "@react-native-community/cli-platform-apple@13.6.8": version "13.6.8" @@ -1823,12 +1796,17 @@ fast-xml-parser "^4.0.12" ora "^5.4.1" -"@react-native-community/cli-platform-ios@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.6.tgz#0cd700f36483ca37dda7ec044377f8a926b1df1f" - integrity sha512-vjDnRwhlSN5ryqKTas6/DPkxuouuyFBAqAROH4FR1cspTbn6v78JTZKDmtQy9JMMo7N5vZj1kASU5vbFep9IOQ== +"@react-native-community/cli-platform-apple@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz#02fb5dc47d62acd85f4d7a852e93216927a772fa" + integrity sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA== dependencies: - "@react-native-community/cli-platform-apple" "13.6.6" + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + execa "^5.0.0" + fast-glob "^3.3.2" + fast-xml-parser "^4.0.12" + ora "^5.4.1" "@react-native-community/cli-platform-ios@13.6.8": version "13.6.8" @@ -1837,20 +1815,12 @@ dependencies: "@react-native-community/cli-platform-apple" "13.6.8" -"@react-native-community/cli-server-api@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.6.tgz#467993006ef82361cdf7a9817999d5a09e85ca6a" - integrity sha512-ZtCXxoFlM7oDv3iZ3wsrT3SamhtUJuIkX2WePLPlN5bcbq7zimbPm2lHyicNJtpcGQ5ymsgpUWPCNZsWQhXBqQ== +"@react-native-community/cli-platform-ios@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz#f37ceab41c2302e8f0d4bcbd3bf58b3353db4306" + integrity sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw== dependencies: - "@react-native-community/cli-debugger-ui" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - compression "^1.7.1" - connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" - serve-static "^1.13.1" - ws "^6.2.2" + "@react-native-community/cli-platform-apple" "13.6.9" "@react-native-community/cli-server-api@13.6.8": version "13.6.8" @@ -1867,22 +1837,20 @@ serve-static "^1.13.1" ws "^6.2.2" -"@react-native-community/cli-tools@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.6.tgz#55c40cbabafbfc56cfb95a4d5fbf73ef60ec3cbc" - integrity sha512-ptOnn4AJczY5njvbdK91k4hcYazDnGtEPrqIwEI+k/CTBHNdb27Rsm2OZ7ye6f7otLBqF8gj/hK6QzJs8CEMgw== +"@react-native-community/cli-server-api@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz#269e666bc26e9d0b2f42c7f6099559b5f9259e9d" + integrity sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug== dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - execa "^5.0.0" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - sudo-prompt "^9.0.0" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + compression "^1.7.1" + connect "^3.6.5" + errorhandler "^1.5.1" + nocache "^3.0.1" + pretty-format "^26.6.2" + serve-static "^1.13.1" + ws "^6.2.2" "@react-native-community/cli-tools@13.6.8": version "13.6.8" @@ -1901,12 +1869,22 @@ shell-quote "^1.7.3" sudo-prompt "^9.0.0" -"@react-native-community/cli-types@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.6.tgz#b45af119d61888fea1074a7c32ddb093e3f119a9" - integrity sha512-733iaYzlmvNK7XYbnWlMjdE+2k0hlTBJW071af/xb6Bs+hbJqBP9c03FZuYH2hFFwDDntwj05bkri/P7VgSxug== +"@react-native-community/cli-tools@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz#2baee279358ba1a863e737b2fa9f45659ad91929" + integrity sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ== dependencies: - joi "^17.2.1" + appdirsjs "^1.2.4" + chalk "^4.1.2" + execa "^5.0.0" + find-up "^5.0.0" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^7.5.2" + shell-quote "^1.7.3" + sudo-prompt "^9.0.0" "@react-native-community/cli-types@13.6.8": version "13.6.8" @@ -1915,28 +1893,12 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli@13.6.6": - version "13.6.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.6.tgz#b929c8668e88344c03a46a3e635cb382dba16773" - integrity sha512-IqclB7VQ84ye8Fcs89HOpOscY4284VZg2pojHNl8H0Lzd4DadXJWQoxC7zWm8v2f8eyeX2kdhxp2ETD5tceIgA== +"@react-native-community/cli-types@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.9.tgz#08bfb796eacf0daeb31e2de516e81e78a36a1a55" + integrity sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w== dependencies: - "@react-native-community/cli-clean" "13.6.6" - "@react-native-community/cli-config" "13.6.6" - "@react-native-community/cli-debugger-ui" "13.6.6" - "@react-native-community/cli-doctor" "13.6.6" - "@react-native-community/cli-hermes" "13.6.6" - "@react-native-community/cli-server-api" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - "@react-native-community/cli-types" "13.6.6" - chalk "^4.1.2" - commander "^9.4.1" - deepmerge "^4.3.0" - execa "^5.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - graceful-fs "^4.1.3" - prompts "^2.4.2" - semver "^7.5.2" + joi "^17.2.1" "@react-native-community/cli@13.6.8": version "13.6.8" @@ -1961,15 +1923,38 @@ prompts "^2.4.2" semver "^7.5.2" -"@react-native-windows/cli@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.74.0.tgz#da85c0f8d7f96a761080fae27323fe257560e22d" - integrity sha512-grOp6b/Pfa4T+n+oWmoo18BXI97CKZPbRKTlCg2Ne5Hsq2rj4Ewg8tnRFKFOMthy5dZcPWLqsphkT0J/sQBHXw== +"@react-native-community/cli@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.9.tgz#ba6360b94e0aba9c4001bda256cf7e57e2ecb02c" + integrity sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ== dependencies: - "@react-native-windows/codegen" "0.74.0" - "@react-native-windows/fs" "0.74.0" - "@react-native-windows/package-utils" "0.74.0" - "@react-native-windows/telemetry" "0.74.0" + "@react-native-community/cli-clean" "13.6.9" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-doctor" "13.6.9" + "@react-native-community/cli-hermes" "13.6.9" + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native-community/cli-types" "13.6.9" + chalk "^4.1.2" + commander "^9.4.1" + deepmerge "^4.3.0" + execa "^5.0.0" + find-up "^4.1.0" + fs-extra "^8.1.0" + graceful-fs "^4.1.3" + prompts "^2.4.2" + semver "^7.5.2" + +"@react-native-windows/cli@0.74.8": + version "0.74.8" + resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.74.8.tgz#747b6d4de9fa5e3e837b643fc1a48600d756d2d2" + integrity sha512-XUqoXiGDlD4BCYcEweujpV3tUYr5pGijX3mNrP1DWzY8gKXVgcmzLs6fng/EK6VsWD7H8bRraYAu9pccGLN4fw== + dependencies: + "@react-native-windows/codegen" "0.74.5" + "@react-native-windows/fs" "0.74.1" + "@react-native-windows/package-utils" "0.74.1" + "@react-native-windows/telemetry" "0.74.2" "@xmldom/xmldom" "^0.7.7" chalk "^4.1.0" cli-spinners "^2.2.0" @@ -1988,50 +1973,50 @@ xml-parser "^1.2.1" xpath "^0.0.27" -"@react-native-windows/codegen@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/codegen/-/codegen-0.74.0.tgz#9024ba6e871088e42356f94eb126697e6268487b" - integrity sha512-jSN5PZQKZIuaukoUJU9LOyHs2Y/KmG5xsLtSGRUcjG8wTrzP+xXxj3115hHdk9vreL80o+pup5o1UNfyLfvGIA== +"@react-native-windows/codegen@0.74.5": + version "0.74.5" + resolved "https://registry.yarnpkg.com/@react-native-windows/codegen/-/codegen-0.74.5.tgz#a90d6caa0c1664ce25f43457bdb72bf424918f48" + integrity sha512-7v2QBQH7wBBYe+OUlbEsDEEOhsRAM4th55F8r9RtyEvMc+2W79up0se3+xYdBgwjYIPHsDp+g5XwDVjBJC4m7A== dependencies: - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" chalk "^4.1.0" - globby "^11.0.4" + globby "^11.1.0" mustache "^4.0.1" source-map-support "^0.5.19" yargs "^16.2.0" -"@react-native-windows/find-repo-root@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.74.0.tgz#687819c76825d3f7c58401a9d96c2c748774506f" - integrity sha512-6dxkKX+mtT+yXuTDUf7A+ZQnyX57WlYk3fDNeNTpI66xBR4QuRwPdzTNamZxvX6JEMSe4lm4PqXWlfAKYzPENw== +"@react-native-windows/find-repo-root@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.74.1.tgz#bf2f10545c29ffcdb76b9179fce346f84e15c5ab" + integrity sha512-k+Hk16/NmPhxsQYGCRtAfcQqCDCJvAxC74FLzFOO6+c/VDM0U05kEcJsJzI1dh/0kZh+YSZQo3w1RrA1z1S2gw== dependencies: - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" find-up "^4.1.0" -"@react-native-windows/fs@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.74.0.tgz#bbef312e6c9541292a69e607c1e5fbc47e2a665c" - integrity sha512-YK8CkNHSwskU3PPCPTw1DPen3/QXS7qP7rAp+FNK4LfyOgiO1V9TiIyz3DcvqOsD+iwriXoEl/3Bvo/8HmlTbQ== +"@react-native-windows/fs@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.74.1.tgz#2c6ade1f937adc6056b1a6b052b7b85acb725a14" + integrity sha512-Qepr2KyMvCKugOwIXKXtgMqww5P3yI5HTtxIUWytBCoIPEk1lJdpx/sFjTGmir0QXaLlZxXbdrxpLLnN7eq3Tg== dependencies: graceful-fs "^4.2.8" -"@react-native-windows/package-utils@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.74.0.tgz#bdcd18f993d899a6f9914365863bde7ee4eee509" - integrity sha512-b7c2/DycLM3MK7K6Y4XVuKFBTLvyg0DSP7++f/yZsBWyCysFycAS5gCrlVbXk6Kez3CIEspSS7op+GJMduMp8g== +"@react-native-windows/package-utils@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.74.1.tgz#18e49bb5b2ed967f279605223eae65a3ea55112f" + integrity sha512-nzKo1H991npbRx2EJT0wkniGkngEw7ND5+oz6jhbNFQ3UCKIUBCLc2bPBBX1Z5jp40R+qoVbgnQP2fuAN5y9tA== dependencies: - "@react-native-windows/find-repo-root" "0.74.0" - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/find-repo-root" "0.74.1" + "@react-native-windows/fs" "0.74.1" get-monorepo-packages "^1.2.0" lodash "^4.17.15" -"@react-native-windows/telemetry@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.74.0.tgz#e050312998d6c64f50f368bcb3299e9e3138fd10" - integrity sha512-80vMPWXLJpa3v+vAafXjCQM0GFE3Iq8breRkrwzmbANAfCEXoJdOI0Aju0sOqDyiE68OUekjU9lwWbIyFEQGJQ== +"@react-native-windows/telemetry@0.74.2": + version "0.74.2" + resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.74.2.tgz#3ad1bdc2be0f43f2009f13368d5c6659064ec3db" + integrity sha512-fTqPYaYB7MtPHTr1ytarFsoPHLHch8EAegblTDTo1ha3a1neGOMTGoxZF2a8/l0y8HSDdsfyTfv8JjCO3w5oow== dependencies: "@azure/core-auth" "1.5.0" - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" "@xmldom/xmldom" "^0.7.7" applicationinsights "2.9.1" ci-info "^3.2.0" @@ -2040,28 +2025,21 @@ os-locale "^5.0.0" xpath "^0.0.27" -"@react-native/assets-registry@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.83.tgz#c1815dc10f9e1075e0d03b4c8a9619145969522e" - integrity sha512-2vkLMVnp+YTZYTNSDIBZojSsjz8sl5PscP3j4GcV6idD8V978SZfwFlk8K0ti0BzRs11mzL0Pj17km597S/eTQ== - "@react-native/assets-registry@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.84.tgz#aa472f82c1b7d8a30098c8ba22fad7b3dbb5be5f" integrity sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ== +"@react-native/assets-registry@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.87.tgz#7dda64e48db14597e19e15f679e31abbb1c1fb4d" + integrity sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg== + "@react-native/assets@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== -"@react-native/babel-plugin-codegen@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.83.tgz#971f9cfec980dd05598d81964c05a26c6166f9fb" - integrity sha512-+S0st3t4Ro00bi9gjT1jnK8qTFOU+CwmziA7U9odKyWrCoRJrgmrvogq/Dr1YXlpFxexiGIupGut1VHxr+fxJA== - dependencies: - "@react-native/codegen" "0.74.83" - "@react-native/babel-plugin-codegen@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz#a3a72c188d875601704a421e395f6909fdec40f3" @@ -2069,54 +2047,12 @@ dependencies: "@react-native/codegen" "0.74.84" -"@react-native/babel-preset@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.83.tgz#9828457779b4ce0219078652327ce3203115cdf9" - integrity sha512-KJuu3XyVh3qgyUer+rEqh9a/JoUxsDOzkJNfRpDyXiAyjDRoVch60X/Xa/NcEQ93iCVHAWs0yQ+XGNGIBCYE6g== +"@react-native/babel-plugin-codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz#44457f4de69911f37a6ac308a7783203a757574a" + integrity sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw== dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.83" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.14.0" + "@react-native/codegen" "0.74.87" "@react-native/babel-preset@0.74.84": version "0.74.84" @@ -2167,18 +2103,54 @@ babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/codegen@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.83.tgz#7c56a82fe7603f0867f0d80ff29db3757b71be55" - integrity sha512-GgvgHS3Aa2J8/mp1uC/zU8HuTh8ZT5jz7a4mVMWPw7+rGyv70Ba8uOVBq6UH2Q08o617IATYc+0HfyzAfm4n0w== +"@react-native/babel-preset@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.87.tgz#3d74517d2ea8898f83b5106027033607d5bda50d" + integrity sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg== dependencies: - "@babel/parser" "^7.20.0" - glob "^7.1.1" - hermes-parser "0.19.1" - invariant "^2.2.4" - jscodeshift "^0.14.0" - mkdirp "^0.5.1" - nullthrows "^1.1.1" + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.18.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.20.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.20.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.20.0" + "@babel/plugin-transform-flow-strip-types" "^7.20.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + "@react-native/babel-plugin-codegen" "0.74.87" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.14.0" "@react-native/codegen@0.74.84": version "0.74.84" @@ -2193,23 +2165,18 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.83.tgz#58808a58a5288895627548338731e72ebb5b507c" - integrity sha512-7GAFjFOg1mFSj8bnFNQS4u8u7+QtrEeflUIDVZGEfBZQ3wMNI5ycBzbBGycsZYiq00Xvoc6eKFC7kvIaqeJpUQ== +"@react-native/codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.87.tgz#47f07a627d0294c8270a03aee098991ed91f8ae9" + integrity sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg== dependencies: - "@react-native-community/cli-server-api" "13.6.6" - "@react-native-community/cli-tools" "13.6.6" - "@react-native/dev-middleware" "0.74.83" - "@react-native/metro-babel-transformer" "0.74.83" - chalk "^4.0.0" - execa "^5.1.1" - metro "^0.80.3" - metro-config "^0.80.3" - metro-core "^0.80.3" - node-fetch "^2.2.0" - querystring "^0.2.1" - readline "^1.3.0" + "@babel/parser" "^7.20.0" + glob "^7.1.1" + hermes-parser "0.19.1" + invariant "^2.2.4" + jscodeshift "^0.14.0" + mkdirp "^0.5.1" + nullthrows "^1.1.1" "@react-native/community-cli-plugin@0.74.84": version "0.74.84" @@ -2229,23 +2196,41 @@ querystring "^0.2.1" readline "^1.3.0" -"@react-native/debugger-frontend@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.83.tgz#48050afa4e086438073b95f041c0cc84fe3f20de" - integrity sha512-RGQlVUegBRxAUF9c1ss1ssaHZh6CO+7awgtI9sDeU0PzDZY/40ImoPD5m0o0SI6nXoVzbPtcMGzU+VO590pRfA== +"@react-native/community-cli-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.87.tgz#4d9798d51381912f3771acded9b6b2804987e952" + integrity sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ== + dependencies: + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native/dev-middleware" "0.74.87" + "@react-native/metro-babel-transformer" "0.74.87" + chalk "^4.0.0" + execa "^5.1.1" + metro "^0.80.3" + metro-config "^0.80.3" + metro-core "^0.80.3" + node-fetch "^2.2.0" + querystring "^0.2.1" + readline "^1.3.0" "@react-native/debugger-frontend@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz#0bde122a988916b6a50f05a7c3ab1c5db029b149" integrity sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A== -"@react-native/dev-middleware@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.83.tgz#9d09cfdb763e8ef81c003b0f99ae4ed1a3539639" - integrity sha512-UH8iriqnf7N4Hpi20D7M2FdvSANwTVStwFCSD7VMU9agJX88Yk0D1T6Meh2RMhUu4kY2bv8sTkNRm7LmxvZqgA== +"@react-native/debugger-frontend@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.87.tgz#0bb4f4f54365d04fc975349d5f635cb575f6a5d8" + integrity sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ== + +"@react-native/dev-middleware@0.74.84": + version "0.74.84" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz#19ccfece791742f83f4c0a22a8c14593a45562a2" + integrity sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.83" + "@react-native/debugger-frontend" "0.74.84" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -2258,13 +2243,13 @@ temp-dir "^2.0.0" ws "^6.2.2" -"@react-native/dev-middleware@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz#19ccfece791742f83f4c0a22a8c14593a45562a2" - integrity sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ== +"@react-native/dev-middleware@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.87.tgz#254807b579a3015ced659a14c374dbf029a9c04e" + integrity sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.84" + "@react-native/debugger-frontend" "0.74.87" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -2301,35 +2286,25 @@ resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.84.tgz#f0e9618551c9340caca7624001f8ce32794715c9" integrity sha512-pDzo4Qm1uPZQne2sv0QK89ePxP/i+ZHjrBW3rkTVStLvsDVdyFahMmt6bzJTdYL2cGgK2oyNmfXtvO57INOu3Q== -"@react-native/gradle-plugin@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.83.tgz#4ac60a6d6295d5b920173cbf184ee32e53690810" - integrity sha512-Pw2BWVyOHoBuJVKxGVYF6/GSZRf6+v1Ygc+ULGz5t20N8qzRWPa2fRZWqoxsN7TkNLPsECYY8gooOl7okOcPAQ== - "@react-native/gradle-plugin@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz#6ff25fad5f78c276afde96ffc42e04e92d6d92b1" integrity sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg== -"@react-native/js-polyfills@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.83.tgz#0e189ce3ab0efecd00223f3bfc53663ce08ba013" - integrity sha512-/t74n8r6wFhw4JEoOj3bN71N1NDLqaawB75uKAsSjeCwIR9AfCxlzZG0etsXtOexkY9KMeZIQ7YwRPqUdNXuqw== +"@react-native/gradle-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.87.tgz#a66c01fda7a938a116dc27447f0ccce285796b2a" + integrity sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A== "@react-native/js-polyfills@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz#edf0e8463616a2683269bbfe3957590f7ebd910c" integrity sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ== -"@react-native/metro-babel-transformer@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.83.tgz#ba87c3cf041f4c0d2b991231af1a6b4a216e9b5d" - integrity sha512-hGdx5N8diu8y+GW/ED39vTZa9Jx1di2ZZ0aapbhH4egN1agIAusj5jXTccfNBwwWF93aJ5oVbRzfteZgjbutKg== - dependencies: - "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.74.83" - hermes-parser "0.19.1" - nullthrows "^1.1.1" +"@react-native/js-polyfills@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.87.tgz#d28090a4dae417a2e9ad14e065fcf8cf52cc482c" + integrity sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw== "@react-native/metro-babel-transformer@0.74.84": version "0.74.84" @@ -2341,6 +2316,16 @@ hermes-parser "0.19.1" nullthrows "^1.1.1" +"@react-native/metro-babel-transformer@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.87.tgz#f60958f5e7eb39008a2c01dc5248ab60240bdc01" + integrity sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A== + dependencies: + "@babel/core" "^7.20.0" + "@react-native/babel-preset" "0.74.87" + hermes-parser "0.19.1" + nullthrows "^1.1.1" + "@react-native/metro-config@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.74.84.tgz#b2c1b45f62af9b8140a9a02798fa4fb2a3db7c0c" @@ -2351,29 +2336,21 @@ metro-config "^0.80.3" metro-runtime "^0.80.3" -"@react-native/normalize-colors@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.83.tgz#86ef925bacf219d74df115bcfb615f62d8142e85" - integrity sha512-jhCY95gRDE44qYawWVvhTjTplW1g+JtKTKM3f8xYT1dJtJ8QWv+gqEtKcfmOHfDkSDaMKG0AGBaDTSK8GXLH8Q== - "@react-native/normalize-colors@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz#4764d59775c17a6ed193509cb01ae2f42dd5c045" integrity sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A== +"@react-native/normalize-colors@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.87.tgz#a814169d0ce4ce13ffebcda0a3a5a3f780ccd772" + integrity sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA== + "@react-native/typescript-config@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.74.84.tgz#aff6132ced5679c99b33b4e3a6747338b99e5e09" integrity sha512-yMAyxl0wzRKT6JkQV0WCryiBQ1hj97u/JiT4LjXbwpPSErgiTRq+SKwhKH5vhSw9P0O8JCLIG6rS5rkbjranDg== -"@react-native/virtualized-lists@0.74.83": - version "0.74.83" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.83.tgz#5595d6aefd9679d1295c56a1d1653b1fb261bd62" - integrity sha512-rmaLeE34rj7py4FxTod7iMTC7BAsm+HrGA8WxYmEJeyTV7WSaxAkosKoYBz8038mOiwnG9VwA/7FrB6bEQvn1A== - dependencies: - invariant "^2.2.4" - nullthrows "^1.1.1" - "@react-native/virtualized-lists@0.74.84": version "0.74.84" resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz#cf32fffc93072942532c9c81bd7e4c01a2949626" @@ -2382,6 +2359,14 @@ invariant "^2.2.4" nullthrows "^1.1.1" +"@react-native/virtualized-lists@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.87.tgz#31bc44d62617df7d893df22c4c57094f576677a0" + integrity sha512-lsGxoFMb0lyK/MiplNKJpD+A1EoEUumkLrCjH4Ht+ZlG8S0BfCxmskLZ6qXn3BiDSkLjfjI/qyZ3pnxNBvkXpQ== + dependencies: + invariant "^2.2.4" + nullthrows "^1.1.1" + "@rnx-kit/chromium-edge-launcher@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz#c0df8ea00a902c7a417cd9655aab06de398b939c" @@ -3148,11 +3133,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-arraybuffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" - integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== - base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -3574,13 +3554,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-line-break@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" - integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== - dependencies: - utrie "^1.0.2" - css-select@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" @@ -3801,11 +3774,6 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" -dotenv@^16.4.5: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -4640,7 +4608,7 @@ globalthis@^1.0.3, globalthis@^1.0.4: define-properties "^1.2.1" gopd "^1.0.1" -globby@^11.0.4, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -4763,14 +4731,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html2canvas@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" - integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== - dependencies: - css-line-break "^2.1.0" - text-segmentation "^1.0.3" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -6888,60 +6848,29 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-native-dotenv@^3.4.11: - version "3.4.11" - resolved "https://registry.yarnpkg.com/react-native-dotenv/-/react-native-dotenv-3.4.11.tgz#2e6c4eabd55d5f1bf109b3dd9141dadf9c55cdd4" - integrity sha512-6vnIE+WHABSeHCaYP6l3O1BOEhWxKH6nHAdV7n/wKn/sciZ64zPPp2NUdEUf1m7g4uuzlLbjgr+6uDt89q2DOg== - dependencies: - dotenv "^16.4.5" - -react-native-reanimated@3.15.4: - version "3.15.4" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.15.4.tgz#0d4aa65b53f9c845fe8c33aa8a3ad3d06a23f063" - integrity sha512-jcpHE+MnsvSbClhHgAFoken7SnaHrUJ5gVA8BUw8S1j6rkrw2VzRpht6cxn14NlqYx5ytjfG9IXJDOzq8tFvfw== - dependencies: - "@babel/plugin-transform-arrow-functions" "^7.0.0-0" - "@babel/plugin-transform-class-properties" "^7.0.0-0" - "@babel/plugin-transform-classes" "^7.0.0-0" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0" - "@babel/plugin-transform-optional-chaining" "^7.0.0-0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0-0" - "@babel/plugin-transform-template-literals" "^7.0.0-0" - "@babel/plugin-transform-unicode-regex" "^7.0.0-0" - "@babel/preset-typescript" "^7.16.7" - convert-source-map "^2.0.0" - invariant "^2.2.4" - "react-native-svg@link:../..": version "0.0.0" uid "" -react-native-view-shot@4.0.0-alpha.2: - version "4.0.0-alpha.2" - resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-4.0.0-alpha.2.tgz#389f5323722c3acad1c002bf4f0f0539fd2508c9" - integrity sha512-BNQ+FoOUrB2Y6zxwhSZtZMMXVLewN2Ic8y5gS+5Y7hdgphqWmlHZIGbcLn/NmJS+soz0Pe3WO1sM5vX6u7h6VQ== - dependencies: - html2canvas "^1.4.1" - -react-native-windows@0.74.9: - version "0.74.9" - resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.74.9.tgz#2abcc8eb99a4ce0ce80dfe2dea8ce249b8e21469" - integrity sha512-0WEwKhfi+WyjVswT6pRewfw2V694KYfTMIDSITDEu3Y3A9m1o0YyisnURxc4KRndRc0FQuw1iUf49uVK7BnXAw== +react-native-windows@0.74.24: + version "0.74.24" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.74.24.tgz#1dfbf992d377663da0578adf7507934c363c27b2" + integrity sha512-Vdpmpr9JDHdZUQFfr7rPeYNkcAaP0BRR1gLd4hz80pShIOuxuVUKmccN3mtr1S4y8VF+hEnhXdMHRjk64OE4GQ== dependencies: "@babel/runtime" "^7.0.0" "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "13.6.6" - "@react-native-community/cli-platform-android" "13.6.6" - "@react-native-community/cli-platform-ios" "13.6.6" - "@react-native-windows/cli" "0.74.0" + "@react-native-community/cli" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-windows/cli" "0.74.8" "@react-native/assets" "1.0.0" - "@react-native/assets-registry" "0.74.83" - "@react-native/codegen" "0.74.83" - "@react-native/community-cli-plugin" "0.74.83" - "@react-native/gradle-plugin" "0.74.83" - "@react-native/js-polyfills" "0.74.83" - "@react-native/normalize-colors" "0.74.83" - "@react-native/virtualized-lists" "0.74.83" + "@react-native/assets-registry" "0.74.87" + "@react-native/codegen" "0.74.87" + "@react-native/community-cli-plugin" "0.74.87" + "@react-native/gradle-plugin" "0.74.87" + "@react-native/js-polyfills" "0.74.87" + "@react-native/normalize-colors" "0.74.87" + "@react-native/virtualized-lists" "0.74.87" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" @@ -7791,13 +7720,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-segmentation@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" - integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== - dependencies: - utrie "^1.0.2" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -8034,13 +7956,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -utrie@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" - integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== - dependencies: - base64-arraybuffer "^1.0.2" - uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" diff --git a/src/lib/extract/extractProps.windows.ts b/src/lib/extract/extractProps.windows.ts index 2a949a8e..55829520 100644 --- a/src/lib/extract/extractProps.windows.ts +++ b/src/lib/extract/extractProps.windows.ts @@ -6,6 +6,7 @@ import extractOpacity from './extractOpacity'; import { idPattern } from '../util'; import type { ClipProps, + ColorProps, extractedProps, FillProps, NumberProp, @@ -53,6 +54,7 @@ export default function extractProps( ResponderProps & StrokeProps & FillProps & + ColorProps & ClipProps, ref: object ) { @@ -75,6 +77,9 @@ export default function extractProps( extractResponder(extracted, props, ref); extractFill(extracted, props, inherited); extractStroke(extracted, props, inherited); + if (props.color) { + extracted.color = props.color; + } if (inherited.length) { extracted.propList = inherited; diff --git a/windows/RNSVG/BrushView.cpp b/windows/RNSVG/BrushView.cpp index 6436f2ee..903b161c 100644 --- a/windows/RNSVG/BrushView.cpp +++ b/windows/RNSVG/BrushView.cpp @@ -8,11 +8,6 @@ namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -BrushView::BrushView( - const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} -#endif - void BrushView::SaveDefinition() { if (auto const &root{SvgRoot()}) { CreateBrush(); diff --git a/windows/RNSVG/BrushView.h b/windows/RNSVG/BrushView.h index 57aefa16..b92a7577 100644 --- a/windows/RNSVG/BrushView.h +++ b/windows/RNSVG/BrushView.h @@ -8,10 +8,6 @@ struct BrushView : BrushViewT { public: BrushView() = default; -#ifdef USE_FABRIC - BrushView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); -#endif - // IRenderable void SaveDefinition(); @@ -32,3 +28,4 @@ struct BrushView : BrushViewT { namespace winrt::RNSVG::factory_implementation { struct BrushView : BrushViewT {}; } // namespace winrt::RNSVG::factory_implementation + diff --git a/windows/RNSVG/CircleView.cpp b/windows/RNSVG/CircleView.cpp index 131d1835..12b0e91c 100644 --- a/windows/RNSVG/CircleView.cpp +++ b/windows/RNSVG/CircleView.cpp @@ -12,47 +12,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -CircleProps::CircleProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void CircleProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -CircleView::CircleView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void CircleView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGCircle", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void CircleView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto circleProps = props.try_as(); - if (circleProps) { - m_props = circleProps; - - m_cx = m_props->cx; - m_cy = m_props->cy; - m_r = m_props->r; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void CircleView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -71,7 +30,6 @@ void CircleView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void CircleView::CreateGeometry(RNSVG::D2DDeviceContext const &context) { auto const root{SvgRoot()}; diff --git a/windows/RNSVG/CircleView.h b/windows/RNSVG/CircleView.h index d14d8e96..e1206133 100644 --- a/windows/RNSVG/CircleView.h +++ b/windows/RNSVG/CircleView.h @@ -1,53 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "CircleProps.g.h" -#endif - #include "CircleView.g.h" #include "RenderableView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(CircleProps) -struct CircleProps : CirclePropsT { - CircleProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(r) - RNSVG::SVGLength r{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(cx) - RNSVG::SVGLength cx{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(cy) - RNSVG::SVGLength cy{0, winrt::RNSVG::LengthType::Unknown}; -}; -#endif - struct CircleView : CircleViewT { public: CircleView() = default; -#ifdef USE_FABRIC - CircleView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void CreateGeometry(RNSVG::D2DDeviceContext const &context); @@ -57,11 +20,9 @@ struct CircleView : CircleViewT m_props; -#endif }; } // namespace winrt::RNSVG::implementation + namespace winrt::RNSVG::factory_implementation { struct CircleView : CircleViewT {}; } // namespace winrt::RNSVG::factory_implementation diff --git a/windows/RNSVG/ClipPathView.cpp b/windows/RNSVG/ClipPathView.cpp index cecf21ac..9ed0465a 100644 --- a/windows/RNSVG/ClipPathView.cpp +++ b/windows/RNSVG/ClipPathView.cpp @@ -7,28 +7,4 @@ using namespace winrt; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -ClipPathProps::ClipPathProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void ClipPathProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -ClipPathView::ClipPathView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void ClipPathView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGClipPath", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} -#endif } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/ClipPathView.h b/windows/RNSVG/ClipPathView.h index 5f5b7856..f56c7cdc 100644 --- a/windows/RNSVG/ClipPathView.h +++ b/windows/RNSVG/ClipPathView.h @@ -1,36 +1,13 @@ #pragma once -#ifdef USE_FABRIC -#include "ClipPathProps.g.h" -#endif - #include "ClipPathView.g.h" #include "GroupView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(ClipPathProps) -struct ClipPathProps : ClipPathPropsT { - ClipPathProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - REACT_SVG_GROUP_COMMON_PROPS; -}; -#endif struct ClipPathView : ClipPathViewT { public: ClipPathView() = default; -#ifdef USE_FABRIC - ClipPathView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; -#endif - // IRenderable void Draw(RNSVG::D2DDeviceContext const & /*deviceContext*/, Windows::Foundation::Size const & /*size*/){}; }; diff --git a/windows/RNSVG/D2DHelpers.h b/windows/RNSVG/D2DHelpers.h index 19b381a6..931f86e4 100644 --- a/windows/RNSVG/D2DHelpers.h +++ b/windows/RNSVG/D2DHelpers.h @@ -131,11 +131,7 @@ struct D2DHelpers { } static DWRITE_FONT_WEIGHT FontWeightFrom( -#ifdef USE_FABRIC - winrt::Microsoft::ReactNative::ComponentView const &parent, -#else xaml::FrameworkElement const &parent, -#endif hstring const &weight) { if (weight == L"normal") { return DWRITE_FONT_WEIGHT_NORMAL; diff --git a/windows/RNSVG/DefsView.cpp b/windows/RNSVG/DefsView.cpp index f3604236..9674cbe1 100644 --- a/windows/RNSVG/DefsView.cpp +++ b/windows/RNSVG/DefsView.cpp @@ -8,30 +8,5 @@ using namespace winrt; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -DefsProps::DefsProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void DefsProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -DefsView::DefsView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void DefsView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGDefs", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} -#endif - void DefsView::Draw(RNSVG::D2DDeviceContext const& /*deviceContext*/, Size const & /*size*/) {} } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/DefsView.h b/windows/RNSVG/DefsView.h index ae9262a8..7176535f 100644 --- a/windows/RNSVG/DefsView.h +++ b/windows/RNSVG/DefsView.h @@ -1,37 +1,14 @@ #pragma once -#ifdef USE_FABRIC -#include "DefsProps.g.h" -#endif - #include "DefsView.g.h" #include "GroupView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(DefsProps) -struct DefsProps : DefsPropsT { - DefsProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; -}; -#endif - struct DefsView : DefsViewT { public: DefsView() = default; -#ifdef USE_FABRIC - DefsView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; -#endif - // IRenderable void Draw(RNSVG::D2DDeviceContext const &deviceContext, Windows::Foundation::Size const &size); }; diff --git a/windows/RNSVG/EllipseView.cpp b/windows/RNSVG/EllipseView.cpp index 2b1e0c85..cf37a1cc 100644 --- a/windows/RNSVG/EllipseView.cpp +++ b/windows/RNSVG/EllipseView.cpp @@ -11,48 +11,7 @@ using namespace winrt; using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -EllipseProps::EllipseProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} -void EllipseProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -EllipseView::EllipseView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void EllipseView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGEllipse", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void EllipseView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto ellipseProps = props.try_as(); - if (ellipseProps) { - m_props = ellipseProps; - - m_cx = m_props->cx; - m_cy = m_props->cy; - m_rx = m_props->rx; - m_ry = m_props->ry; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void EllipseView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -73,7 +32,6 @@ void EllipseView::UpdateProperties(IJSValueReader const &reader, bool forceUpdat __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void EllipseView::CreateGeometry(RNSVG::D2DDeviceContext const &context) { auto const root{SvgRoot()}; diff --git a/windows/RNSVG/EllipseView.h b/windows/RNSVG/EllipseView.h index e52363b6..acbc270c 100644 --- a/windows/RNSVG/EllipseView.h +++ b/windows/RNSVG/EllipseView.h @@ -1,55 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "EllipseProps.g.h" -#endif - #include "EllipseView.g.h" #include "RenderableView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(EllipseProps) -struct EllipseProps : EllipsePropsT { - EllipseProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(cx) - RNSVG::SVGLength cx{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(cy) - RNSVG::SVGLength cy{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(rx) - RNSVG::SVGLength rx{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(ry) - RNSVG::SVGLength ry{0, winrt::RNSVG::LengthType::Unknown}; -}; -#endif - struct EllipseView : EllipseViewT { public: EllipseView() = default; -#ifdef USE_FABRIC - EllipseView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void CreateGeometry(RNSVG::D2DDeviceContext const &context); @@ -59,12 +20,9 @@ struct EllipseView : EllipseViewT m_props; -#endif }; } // namespace winrt::RNSVG::implementation + namespace winrt::RNSVG::factory_implementation { struct EllipseView : EllipseViewT {}; } // namespace winrt::RNSVG::factory_implementation diff --git a/windows/RNSVG/Fabric.idl b/windows/RNSVG/Fabric.idl deleted file mode 100644 index fe8305ff..00000000 --- a/windows/RNSVG/Fabric.idl +++ /dev/null @@ -1,166 +0,0 @@ -import "Views.idl"; - -namespace RNSVG -{ - [experimental] - interface IRenderableFabric - { - Microsoft.ReactNative.ComponentView SvgParent { get; }; - - void UpdateProperties(Microsoft.ReactNative.IComponentProps props, Microsoft.ReactNative.IComponentProps oldProps, Boolean forceUpdate, Boolean invalidate); - }; - - [experimental] - [default_interface] - runtimeclass SvgView : Microsoft.ReactNative.Composition.ViewComponentView, - Microsoft.ReactNative.Composition.Experimental.IInternalCreateVisual, IRenderable, IRenderableFabric, ISvgView - { - SvgView(Microsoft.ReactNative.Composition.CreateCompositionComponentViewArgs args); - - GroupView Group; - Microsoft.ReactNative.Color CurrentColor{ get; }; - }; - - [experimental] - [default_interface] - unsealed runtimeclass RenderableView : Microsoft.ReactNative.ComponentView, IRenderable, IRenderableFabric, IRenderableView - { - RenderableView(Microsoft.ReactNative.CreateComponentViewArgs args); - SvgView SvgRoot{ get; }; - Microsoft.ReactNative.Color Fill{ get; }; - Microsoft.ReactNative.Color Stroke{ get; }; - }; - - [experimental] - [default_interface] - runtimeclass RectView : RenderableView - { - RectView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass CircleView : RenderableView - { - CircleView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass EllipseView : RenderableView - { - EllipseView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass LineView : RenderableView - { - LineView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass PathView : RenderableView - { - PathView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass UseView : RenderableView - { - UseView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass ImageView : RenderableView - { - ImageView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - unsealed runtimeclass GroupView : RenderableView, IGroupView - { - GroupView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - unsealed runtimeclass TextView : GroupView, ITextView - { - TextView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass TSpanView : TextView, ITSpanView - { - TSpanView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass DefsView : GroupView - { - DefsView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass SymbolView : GroupView, ISymbolView - { - SymbolView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass ClipPathView : GroupView - { - ClipPathView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass MarkerView : GroupView - { - MarkerView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass MaskView : GroupView - { - MaskView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - unsealed runtimeclass BrushView : GroupView, IBrushView - { - BrushView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass LinearGradientView : BrushView - { - LinearGradientView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass RadialGradientView : BrushView - { - RadialGradientView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; - - [experimental] - [default_interface] - runtimeclass PatternView : BrushView - { - PatternView(Microsoft.ReactNative.CreateComponentViewArgs args); - }; -} \ No newline at end of file diff --git a/windows/RNSVG/Fabric/CircleView.cpp b/windows/RNSVG/Fabric/CircleView.cpp new file mode 100644 index 00000000..60b007eb --- /dev/null +++ b/windows/RNSVG/Fabric/CircleView.cpp @@ -0,0 +1,53 @@ +#include "pch.h" +#include "CircleView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(CircleProps) +struct CircleProps : public winrt::implements { + CircleProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(CircleProps) + r = cloneFromProps->r; + cx = cloneFromProps->cx; + cy = cloneFromProps->cy; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(r) + D2D1_SVG_LENGTH r{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(cx) + D2D1_SVG_LENGTH cx{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(cy) + D2D1_SVG_LENGTH cy{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; +}; + +struct CircleView : winrt::implements { + public: + CircleView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"circle"; + } + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = winrt::get_self(m_props); + + SetCommonSvgProps(svgView, document, element, *props); + + element.SetAttributeValue(SvgStrings::cxAttributeName, props->cx); + element.SetAttributeValue(SvgStrings::cyAttributeName, props->cy); + element.SetAttributeValue(SvgStrings::rAttributeName, props->r); + } +}; + +void RegisterCircleComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGCircle", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/CircleView.h b/windows/RNSVG/Fabric/CircleView.h new file mode 100644 index 00000000..2b03d4c2 --- /dev/null +++ b/windows/RNSVG/Fabric/CircleView.h @@ -0,0 +1,9 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterCircleComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/ClipPathView.cpp b/windows/RNSVG/Fabric/ClipPathView.cpp new file mode 100644 index 00000000..25ea3e6a --- /dev/null +++ b/windows/RNSVG/Fabric/ClipPathView.cpp @@ -0,0 +1,38 @@ +#include "pch.h" +#include "ClipPathView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(ClipPathProps) +struct ClipPathProps : winrt::implements { + ClipPathProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(ClipPathProps) + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; +}; + +struct ClipPathView : winrt::implements { + public: + ClipPathView() = default; + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = winrt::get_self(m_props); + SetCommonSvgProps(svgView, document, element, *props); + } + + const wchar_t *GetSvgElementName() noexcept override { + return L"clipPath"; + } +}; + +void RegisterClipPathComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGClipPath", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/ClipPathView.h b/windows/RNSVG/Fabric/ClipPathView.h new file mode 100644 index 00000000..2fda1f36 --- /dev/null +++ b/windows/RNSVG/Fabric/ClipPathView.h @@ -0,0 +1,10 @@ +#pragma once + +#include "GroupView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterClipPathComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/D2DHelpers.h b/windows/RNSVG/Fabric/D2DHelpers.h new file mode 100644 index 00000000..e95feb92 --- /dev/null +++ b/windows/RNSVG/Fabric/D2DHelpers.h @@ -0,0 +1,18 @@ +#pragma once + +namespace winrt::RNSVG { +struct D2DHelpers { + public: + static D2D1::ColorF AsD2DColor(winrt::Windows::UI::Color const &color) { + return { + color.R / 255.0f, + color.G / 255.0f, + color.B / 255.0f, + color.A / 255.0f}; + } + + static D2D1::Matrix3x2F AsD2DTransform(winrt::Windows::Foundation::Numerics::float3x2 const &transform) { + return D2D1::Matrix3x2F(transform.m11, transform.m12, transform.m21, transform.m22, transform.m31, transform.m32); + } +}; +} // namespace winrt::RNSVG diff --git a/windows/RNSVG/Fabric/DefsView.cpp b/windows/RNSVG/Fabric/DefsView.cpp new file mode 100644 index 00000000..a41e75fe --- /dev/null +++ b/windows/RNSVG/Fabric/DefsView.cpp @@ -0,0 +1,41 @@ +#include "pch.h" +#include "DefsView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(DefsProps) +struct DefsProps : winrt::implements { + DefsProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(DefsProps) + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; +}; + +struct DefsView : winrt::implements { + public: + DefsView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"defs"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + if (m_props) { + auto props = winrt::get_self(m_props); + SetCommonSvgProps(svgView, document, element, *props); + } + } +}; + +void RegisterDefsComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGDefs", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/DefsView.h b/windows/RNSVG/Fabric/DefsView.h new file mode 100644 index 00000000..e421bac4 --- /dev/null +++ b/windows/RNSVG/Fabric/DefsView.h @@ -0,0 +1,9 @@ +#pragma once + +#include "GroupView.h" + +namespace winrt::RNSVG::implementation { + + void RegisterDefsComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/EllipseView.cpp b/windows/RNSVG/Fabric/EllipseView.cpp new file mode 100644 index 00000000..612520c6 --- /dev/null +++ b/windows/RNSVG/Fabric/EllipseView.cpp @@ -0,0 +1,56 @@ +#include "pch.h" +#include "EllipseView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(EllipseProps) +struct EllipseProps : winrt::implements { + EllipseProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(EllipseProps) + cx = cloneFromProps->cx; + cy = cloneFromProps->cy; + rx = cloneFromProps->rx; + ry = cloneFromProps->ry; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(cx) + D2D1_SVG_LENGTH cx{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(cy) + D2D1_SVG_LENGTH cy{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(rx) + D2D1_SVG_LENGTH rx{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(ry) + D2D1_SVG_LENGTH ry{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; +}; + +struct EllipseView : winrt::implements { + public: + EllipseView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"ellipse"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + element.SetAttributeValue(SvgStrings::cxAttributeName, props->cx); + element.SetAttributeValue(SvgStrings::cyAttributeName, props->cy); + element.SetAttributeValue(SvgStrings::rxAttributeName, props->rx); + element.SetAttributeValue(SvgStrings::ryAttributeName, props->ry); + } +}; + +void RegisterEllipseComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGEllipse", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/EllipseView.h b/windows/RNSVG/Fabric/EllipseView.h new file mode 100644 index 00000000..2eef3ba6 --- /dev/null +++ b/windows/RNSVG/Fabric/EllipseView.h @@ -0,0 +1,11 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterEllipseComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + + +} // namespace winrt::RNSVG::implementation + diff --git a/windows/RNSVG/Fabric/GroupView.cpp b/windows/RNSVG/Fabric/GroupView.cpp new file mode 100644 index 00000000..da595810 --- /dev/null +++ b/windows/RNSVG/Fabric/GroupView.cpp @@ -0,0 +1,42 @@ +#include "pch.h" + +#include "GroupView.h" + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(SvgGroupProps) +struct SvgGroupProps : winrt::implements { + SvgGroupProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(SvgGroupProps) + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; +}; + +struct GroupView : winrt::implements { + public: + GroupView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"g"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = winrt::get_self(m_props); + SetCommonSvgProps(svgView, document, element, *props); + } +}; + +void RegisterGroupComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGGroup", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/GroupView.h b/windows/RNSVG/Fabric/GroupView.h new file mode 100644 index 00000000..35261592 --- /dev/null +++ b/windows/RNSVG/Fabric/GroupView.h @@ -0,0 +1,8 @@ +#pragma once +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterGroupComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/ImageView.cpp b/windows/RNSVG/Fabric/ImageView.cpp new file mode 100644 index 00000000..0d8279d1 --- /dev/null +++ b/windows/RNSVG/Fabric/ImageView.cpp @@ -0,0 +1,128 @@ +#include "pch.h" +#include "ImageView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(ImageSource) +struct ImageSource { + REACT_FIELD(uri) + std::wstring uri{}; + REACT_FIELD(width) + float width{0.0f}; + REACT_FIELD(height) + float height{0.0f}; + + bool operator==(const ImageSource &rhs) const { + return uri == rhs.uri && width == rhs.width && height == rhs.height; + } + + bool operator!=(const ImageSource &rhs) const { + return !(*this == rhs); + } +}; + +REACT_STRUCT(ImageProps) +struct ImageProps : winrt::implements { + ImageProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(ImageProps) + x = cloneFromProps->x; + y = cloneFromProps->y; + width = cloneFromProps->width; + height = cloneFromProps->height; + src = cloneFromProps->src; + align = cloneFromProps->align; + meetOrSlice = cloneFromProps->meetOrSlice; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(x) + std::optional x; + REACT_FIELD(y) + std::optional y; + REACT_FIELD(width) + std::optional width; + REACT_FIELD(height) + std::optional height; + REACT_FIELD(src) + ImageSource src; + REACT_FIELD(align) + std::optional align{""}; + REACT_FIELD(meetOrSlice) + std::optional meetOrSlice; +}; + +struct ImageView : winrt::implements { + public: + ImageView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"image"; + } + + void UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept { + RenderableView::UpdateProps(view, newProps, oldProps); + + auto props = newProps.as(); + + if (!props->align) { + m_aspectAlign = AlignToAspectAlign(props->align.value()); + } else { + m_aspectAlign = D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_NONE; + } + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + + if (props->x) { + element.SetAttributeValue(SvgStrings::xAttributeName, props->x.value()); + } + if (props->y) { + element.SetAttributeValue(SvgStrings::yAttributeName, props->y.value()); + } + if (props->width) { + element.SetAttributeValue(SvgStrings::widthAttributeName, props->width.value()); + } + if (props->height) { + element.SetAttributeValue(SvgStrings::heightAttributeName, props->height.value()); + } + + if (props->align != std::nullopt || props->meetOrSlice != std::nullopt) { + D2D1_SVG_PRESERVE_ASPECT_RATIO preserveAspectRatio; + preserveAspectRatio.defer = false; + preserveAspectRatio.align = m_aspectAlign; + + preserveAspectRatio.meetOrSlice = props->meetOrSlice.value() == MeetOrSlice::Meet + ? D2D1_SVG_ASPECT_SCALING::D2D1_SVG_ASPECT_SCALING_MEET + : D2D1_SVG_ASPECT_SCALING::D2D1_SVG_ASPECT_SCALING_SLICE; + element.SetAttributeValue(SvgStrings::preserveAspectRatioAttributeName, preserveAspectRatio); + } + + if (!props->src.uri.empty()) { + element.SetAttributeValue( + SvgStrings::xlinkhrefAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->src.uri.c_str()); + } + } + + private: + D2D1_SVG_ASPECT_ALIGN m_aspectAlign; +}; + +void RegisterImageComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGImage", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/ImageView.h b/windows/RNSVG/Fabric/ImageView.h new file mode 100644 index 00000000..fd79aac4 --- /dev/null +++ b/windows/RNSVG/Fabric/ImageView.h @@ -0,0 +1,9 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterImageComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/LineView.cpp b/windows/RNSVG/Fabric/LineView.cpp new file mode 100644 index 00000000..542a623c --- /dev/null +++ b/windows/RNSVG/Fabric/LineView.cpp @@ -0,0 +1,56 @@ +#include "pch.h" +#include "LineView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(LineProps) +struct LineProps : winrt::implements { + LineProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(LineProps) + x1 = cloneFromProps->x1; + y1 = cloneFromProps->y1; + x2 = cloneFromProps->x2; + y2 = cloneFromProps->y2; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(x1) + D2D1_SVG_LENGTH x1{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(y1) + D2D1_SVG_LENGTH y1{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(x2) + D2D1_SVG_LENGTH x2{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(y2) + D2D1_SVG_LENGTH y2{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; +}; + +struct LineView : winrt::implements { + public: + LineView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"line"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + element.SetAttributeValue(SvgStrings::x1AttributeName, props->x1); + element.SetAttributeValue(SvgStrings::y1AttributeName, props->y1); + element.SetAttributeValue(SvgStrings::x2AttributeName, props->x2); + element.SetAttributeValue(SvgStrings::y2AttributeName, props->y2); + } +}; + +void RegisterLineComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGLine", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/LineView.h b/windows/RNSVG/Fabric/LineView.h new file mode 100644 index 00000000..55c13069 --- /dev/null +++ b/windows/RNSVG/Fabric/LineView.h @@ -0,0 +1,10 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterLineComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/LinearGradientView.cpp b/windows/RNSVG/Fabric/LinearGradientView.cpp new file mode 100644 index 00000000..6b0c6218 --- /dev/null +++ b/windows/RNSVG/Fabric/LinearGradientView.cpp @@ -0,0 +1,134 @@ +#include "pch.h" +#include "LinearGradientView.h" + +namespace winrt::RNSVG::implementation { + +struct SvgLinearGradientStop { + float offset{0}; + D2D1_COLOR_F color; + float opacity{1.0f}; +}; + +REACT_STRUCT(LinearGradientProps) +struct LinearGradientProps : winrt::implements { + LinearGradientProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(LinearGradientProps) + x1 = cloneFromProps->x1; + y1 = cloneFromProps->y1; + x2 = cloneFromProps->x2; + y2 = cloneFromProps->y2; + gradient = cloneFromProps->gradient; + gradientUnits = cloneFromProps->gradientUnits; + gradientTransform = cloneFromProps->gradientTransform; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(x1) + std::optional x1; + REACT_FIELD(y1) + std::optional y1; + REACT_FIELD(x2) + std::optional x2; + REACT_FIELD(y2) + std::optional y2; + REACT_FIELD(gradient) + std::optional> gradient{}; + REACT_FIELD(gradientUnits) + std::optional gradientUnits; + REACT_FIELD(gradientTransform) + std::optional> gradientTransform; +}; + +struct LinearGradientView : winrt::implements { + public: + LinearGradientView() = default; + + void UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept override { + auto props = newProps.as(); + m_stops.clear(); + + if (props->gradient) { + auto it = props->gradient->begin(); + while (it != props->gradient->end()) { + SvgLinearGradientStop stop; + + stop.offset = *it; + ++it; + auto clr = static_cast(*it); + stop.color = D2D1_COLOR_F{ + ((clr & 0x00FF0000) >> 16) / 255.0f, + ((clr & 0x0000FF00) >> 8) / 255.0f, + (clr & 0x000000FF) / 255.0f, + ((clr & 0xFF000000) >> 24) / 255.0f}; + stop.opacity = ((clr & 0xFF000000) >> 24) / 255.0f; + ++it; + m_stops.push_back(stop); + } + } + RenderableView::UpdateProps(view, newProps, oldProps); + } + + const wchar_t *GetSvgElementName() noexcept override { + return L"linearGradient"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + if (props->x1) + element.SetAttributeValue( + SvgStrings::x1AttributeName, D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, props->x1.value().c_str()); + if (props->y1) + element.SetAttributeValue( + SvgStrings::y1AttributeName, D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, props->y1.value().c_str()); + if (props->x2) + element.SetAttributeValue( + SvgStrings::x2AttributeName, D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, props->x2.value().c_str()); + if (props->y2) + element.SetAttributeValue( + SvgStrings::y2AttributeName, D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, props->y2.value().c_str()); + + if (props->gradientUnits.value_or(0) == 0) { + element.SetAttributeValue( + SvgStrings::gradientUnitsAttributeName, D2D1_SVG_UNIT_TYPE::D2D1_SVG_UNIT_TYPE_OBJECT_BOUNDING_BOX); + } else { + element.SetAttributeValue( + SvgStrings::gradientUnitsAttributeName, D2D1_SVG_UNIT_TYPE::D2D1_SVG_UNIT_TYPE_USER_SPACE_ON_USE); + } + + if (props->gradientTransform) { + auto &matrix = props->gradientTransform.value(); + element.SetAttributeValue( + SvgStrings::gradientTransformAttributeName, + D2D1_MATRIX_3X2_F{matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]}); + } + + for (const auto &stop : m_stops) { + winrt::com_ptr svgStop; + element.CreateChild(SvgStrings::stopAttributeName, svgStop.put()); + svgStop->SetAttributeValue(SvgStrings::offsetAttributeName, stop.offset); + svgStop->SetAttributeValue(SvgStrings::stopColorAttributeName, stop.color); + svgStop->SetAttributeValue(SvgStrings::stopOpacityAttributeName, stop.opacity); + } + } + + private: + std::vector m_stops; +}; + +void RegisterLinearGradientComponent( + const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGLinearGradient", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/LinearGradientView.h b/windows/RNSVG/Fabric/LinearGradientView.h new file mode 100644 index 00000000..d901dd51 --- /dev/null +++ b/windows/RNSVG/Fabric/LinearGradientView.h @@ -0,0 +1,11 @@ +#pragma once + +#include "GroupView.h" + +namespace winrt::RNSVG::implementation { + + +void RegisterLinearGradientComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/PathView.cpp b/windows/RNSVG/Fabric/PathView.cpp new file mode 100644 index 00000000..fd2e8bc3 --- /dev/null +++ b/windows/RNSVG/Fabric/PathView.cpp @@ -0,0 +1,49 @@ +#include "pch.h" +#include "PathView.h" + +#include "d2d1svg.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(PathProps) +struct PathProps : winrt::implements { + PathProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(PathProps) + d = cloneFromProps->d; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(d) + std::wstring d; +}; + +struct PathView : winrt::implements { + public: + PathView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"path"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + element.SetAttributeValue( + SvgStrings::dAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->d.c_str()); + } +}; + +void RegisterPathComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGPath", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/PathView.h b/windows/RNSVG/Fabric/PathView.h new file mode 100644 index 00000000..2279b028 --- /dev/null +++ b/windows/RNSVG/Fabric/PathView.h @@ -0,0 +1,9 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterPathComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/RadialGradientView.cpp b/windows/RNSVG/Fabric/RadialGradientView.cpp new file mode 100644 index 00000000..10ae9b1b --- /dev/null +++ b/windows/RNSVG/Fabric/RadialGradientView.cpp @@ -0,0 +1,161 @@ +#include "pch.h" +#include "RadialGradientView.h" + +namespace winrt::RNSVG::implementation { + +struct SvgRadialGradientStop { + float offset{0}; + D2D1_COLOR_F color; + float opacity{1.0f}; +}; + +REACT_STRUCT(RadialGradientProps) +struct RadialGradientProps : winrt::implements { + RadialGradientProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(RadialGradientProps) + fx = cloneFromProps->fx; + fy = cloneFromProps->fy; + cx = cloneFromProps->cx; + cy = cloneFromProps->cy; + rx = cloneFromProps->rx; + ry = cloneFromProps->ry; + gradient = cloneFromProps->gradient; + gradientUnits = cloneFromProps->gradientUnits; + gradientTransform = cloneFromProps->gradientTransform; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(fx) + std::optional fx; + REACT_FIELD(fy) + std::optional fy; + REACT_FIELD(cx) + std::optional cx; + REACT_FIELD(cy) + std::optional cy; + REACT_FIELD(rx) + std::optional rx; + REACT_FIELD(ry) + std::optional ry; + REACT_FIELD(gradient) + std::optional> gradient{}; + REACT_FIELD(gradientUnits) + std::optional gradientUnits; + REACT_FIELD(gradientTransform) + std::optional> gradientTransform; +}; + +struct RadialGradientView : winrt::implements { + public: + RadialGradientView() = default; + + void UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept override { + auto props = newProps.as(); + m_stops.clear(); + + if (props->gradient) { + auto it = props->gradient->begin(); + while (it != props->gradient->end()) { + SvgRadialGradientStop stop; + + stop.offset = *it; + ++it; + auto clr = static_cast(*it); + stop.color = D2D1_COLOR_F{ + ((clr & 0x00FF0000) >> 16) / 255.0f, + ((clr & 0x0000FF00) >> 8) / 255.0f, + (clr & 0x000000FF) / 255.0f, + ((clr & 0xFF000000) >> 24) / 255.0f}; + stop.opacity = ((clr & 0xFF000000) >> 24) / 255.0f; + ++it; + m_stops.push_back(stop); + } + } + + RenderableView::UpdateProps(view, newProps, oldProps); + } + + const wchar_t *GetSvgElementName() noexcept override { + return L"radialGradient"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + if (props->cx) + element.SetAttributeValue( + SvgStrings::cxAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->cx->c_str()); + if (props->cy) + element.SetAttributeValue( + SvgStrings::cyAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->cy->c_str()); + + // RNSVG can decompose r to rx and ry, but D2D svgs don't support rx or ry, so if that is specified then take rx as + // r, and make sure the specified rx and ry are the same. + assert(props->rx == props->ry); + + if (props->rx) + element.SetAttributeValue( + SvgStrings::rAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->rx->c_str()); + + if (props->fx) + element.SetAttributeValue( + SvgStrings::fxAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->fx->c_str()); + + if (props->fy) + element.SetAttributeValue( + SvgStrings::fyAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->fy->c_str()); + + if (props->gradientUnits.value_or(0) == 0) { + element.SetAttributeValue( + SvgStrings::gradientUnitsAttributeName, D2D1_SVG_UNIT_TYPE::D2D1_SVG_UNIT_TYPE_OBJECT_BOUNDING_BOX); + } else { + element.SetAttributeValue( + SvgStrings::gradientUnitsAttributeName, D2D1_SVG_UNIT_TYPE::D2D1_SVG_UNIT_TYPE_USER_SPACE_ON_USE); + } + + if (props->gradientTransform) { + auto &matrix = props->gradientTransform.value(); + element.SetAttributeValue( + SvgStrings::gradientTransformAttributeName, + D2D1_MATRIX_3X2_F{matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]}); + } + + for (const auto &stop : m_stops) { + winrt::com_ptr svgStop; + element.CreateChild(SvgStrings::stopAttributeName, svgStop.put()); + svgStop->SetAttributeValue(SvgStrings::offsetAttributeName, stop.offset); + svgStop->SetAttributeValue(SvgStrings::stopColorAttributeName, stop.color); + svgStop->SetAttributeValue(SvgStrings::stopOpacityAttributeName, stop.opacity); + } + } + + private: + std::vector m_stops; +}; + +void RegisterRadialGradientComponent( + const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGRadialGradient", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/RadialGradientView.h b/windows/RNSVG/Fabric/RadialGradientView.h new file mode 100644 index 00000000..457300b1 --- /dev/null +++ b/windows/RNSVG/Fabric/RadialGradientView.h @@ -0,0 +1,10 @@ +#pragma once + +#include "GroupView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterRadialGradientComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/RectView.cpp b/windows/RNSVG/Fabric/RectView.cpp new file mode 100644 index 00000000..8972129e --- /dev/null +++ b/windows/RNSVG/Fabric/RectView.cpp @@ -0,0 +1,79 @@ +#include "pch.h" +#include "RectView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(RectProps) +struct RectProps : winrt::implements { + RectProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(RectProps) + x = cloneFromProps->x; + y = cloneFromProps->y; + height = cloneFromProps->height; + width = cloneFromProps->width; + rx = cloneFromProps->rx; + ry = cloneFromProps->ry; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(x) + std::wstring x; + REACT_FIELD(y) + std::wstring y; + REACT_FIELD(height) + std::wstring height; + REACT_FIELD(width) + std::wstring width; + REACT_FIELD(rx) + D2D1_SVG_LENGTH rx{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(ry) + D2D1_SVG_LENGTH ry{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; +}; + +struct RectView : winrt::implements { + public: + RectView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"rect"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + element.SetAttributeValue( + SvgStrings::xAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->x.c_str()); + element.SetAttributeValue( + SvgStrings::yAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->y.c_str()); + element.SetAttributeValue( + SvgStrings::widthAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->width.c_str()); + element.SetAttributeValue( + SvgStrings::heightAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + props->height.c_str()); + + if (props->rx.value) + element.SetAttributeValue(SvgStrings::rxAttributeName, props->rx); + if (props->ry.value) + element.SetAttributeValue(SvgStrings::ryAttributeName, props->ry); + } +}; + +void RegisterRectComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGRect", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/RectView.h b/windows/RNSVG/Fabric/RectView.h new file mode 100644 index 00000000..803be4dc --- /dev/null +++ b/windows/RNSVG/Fabric/RectView.h @@ -0,0 +1,9 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterRectComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/RenderableView.cpp b/windows/RNSVG/Fabric/RenderableView.cpp new file mode 100644 index 00000000..fb6a70ce --- /dev/null +++ b/windows/RNSVG/Fabric/RenderableView.cpp @@ -0,0 +1,174 @@ +#include "pch.h" +#include "RenderableView.h" + +#include "SvgView.h" +#include "D2DHelpers.h" + +namespace winrt::Microsoft::ReactNative { + +void WriteValue(IJSValueWriter const &writer, const D2D1_SVG_LENGTH &value) noexcept { + if (value.units == D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_PERCENTAGE) { + writer.WriteString(winrt::to_hstring(std::to_string(value.value) + "%")); + } else { + writer.WriteDouble(value.value); + } +} + +void ReadValue(IJSValueReader const &reader, /*out*/ D2D1_SVG_LENGTH &value) noexcept { + switch (reader.ValueType()) { + case JSValueType::String: { + auto str = to_string(reader.GetString()); + + auto strLength{str.size()}; + if (strLength == 0 || str == "normal") { + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + value.value = 0.0; + return; + } else if (str.back() == '%') { + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_PERCENTAGE; + value.value = std::stof(str.substr(0, strLength - 1), nullptr); + return; + } else if (strLength > 2) { + auto end{strLength - 2}; + auto lastTwo{str.substr(end)}; + + if (lastTwo == "px") { + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + } else if (lastTwo == "em") { + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + // value.unit = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_EM; + } else if (lastTwo == "ex") { + // value.unit = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_EX; + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + } else if (lastTwo == "cm") { + // value.unit = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_CM; + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + } else if (lastTwo == "mm") { + // value.unit = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_MM; + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + } else if (lastTwo == "in") { + // value.unit = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_INCH; + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + } else if (lastTwo == "pt") { + // value.unit = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_POINT; + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + } else if (lastTwo == "pc") { + // value.unit = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_PICA; + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + } else { + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + end = strLength; + } + + value.value = std::stof(str.substr(0, end), nullptr); + return; + } + + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + value.value = std::stof(str, nullptr); + } + return; + case JSValueType::Int64: + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + value.value = static_cast(reader.GetInt64()); + return; + case JSValueType::Double: + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + value.value = static_cast(reader.GetDouble()); + return; + default: + value.units = D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER; + value.value = 0.0f; + return; + } +} + +} + +namespace winrt::RNSVG::implementation { + +HRESULT +SetColorMode( + const SvgView &svgView, + ID2D1SvgElement &element, + const std::wstring &attribute, + const ColorStruct &colorProp) noexcept { + HRESULT hr = S_OK; + if (colorProp.type == 0 /*Native Color*/) { + hr = element.SetAttributeValue( + attribute.c_str(), D2DHelpers::AsD2DColor(colorProp.payload.AsWindowsColor(svgView.Theme()))); + } else if (colorProp.type == 1 /*Brush ref*/) { + std::wstring namedRefStr = L"url(#" + colorProp.brushRef + L")"; + hr = element.SetAttributeValue( + attribute.c_str(), D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, namedRefStr.c_str()); + } else if (colorProp.type == 2 /*Current Color*/) { + hr = element.SetAttributeValue( + attribute.c_str(), D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, L"currentColor"); + } else if (colorProp.type == 3 /*context-fill*/) { + hr = element.SetAttributeValue( + attribute.c_str(), D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, L"context-fill"); + } else if (colorProp.type == 4 /*context-stroke*/) { + hr = element.SetAttributeValue( + attribute.c_str(), D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, L"context-fill"); + } + + assert(hr == S_OK); + return hr; +} + + +void RenderableView::Invalidate(const winrt::Microsoft::ReactNative::ComponentView &view) { + winrt::com_ptr svgView{nullptr}; + auto current = view.Parent(); + while (current && !svgView) { + svgView = current.UserData().try_as(); + current = current.Parent(); + } + + if (svgView) { + svgView->Invalidate(); + } +} + +void RenderableView::MountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView &parent, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &) noexcept { + Invalidate(parent); +} + +void RenderableView::UnmountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView &parent, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &) noexcept { + Invalidate(parent); +} + +void RenderableView::UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, + const winrt::Microsoft::ReactNative::IComponentProps &props, + const winrt::Microsoft::ReactNative::IComponentProps &) noexcept { + m_props = props; +} + +void RenderableView::FinalizeUpates( + const winrt::Microsoft::ReactNative::ComponentView &view, + winrt::Microsoft::ReactNative::ComponentViewUpdateMask) noexcept { + Invalidate(view); +} + +ID2D1SvgElement &RenderableView::Render(const SvgView &svgView, ID2D1SvgDocument& document, ID2D1SvgElement &svgElement) noexcept { + svgElement.CreateChild(GetSvgElementName(), m_spD2DSvgElement.put()); + OnRender(svgView, document, *m_spD2DSvgElement); + return *m_spD2DSvgElement; +} + +bool RenderableView::IsSupported() const noexcept { + return true; +} +void RenderableView::OnRender( + const SvgView & /*svgView*/, + ID2D1SvgDocument & /*document*/, + ID2D1SvgElement & /*element*/) noexcept { + assert(false); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/RenderableView.h b/windows/RNSVG/Fabric/RenderableView.h new file mode 100644 index 00000000..f48326ce --- /dev/null +++ b/windows/RNSVG/Fabric/RenderableView.h @@ -0,0 +1,302 @@ +#pragma once + +#include "SvgView.h" + +#include +#include +#include "D2DHelpers.h" +#include "SvgStrings.h" + +namespace winrt::Microsoft::ReactNative { +void WriteValue(IJSValueWriter const &writer, const D2D1_SVG_LENGTH &value) noexcept; +void ReadValue(IJSValueReader const &reader, /*out*/ D2D1_SVG_LENGTH &value) noexcept; +} // namespace winrt::Microsoft::ReactNative + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(ColorStruct) +struct ColorStruct { + REACT_FIELD(type) + int32_t type{-1}; + + REACT_FIELD(payload) + winrt::Microsoft::ReactNative::Color payload{nullptr}; + + REACT_FIELD(brushRef) + std::wstring brushRef; + + bool operator==(const ColorStruct &rhs) const { + if (type != rhs.type || brushRef != rhs.brushRef) + return false; + + // When we move to a RNW version that provides Color::Equals switch to that for the payload comparison + auto writer = winrt::Microsoft::ReactNative::MakeJSValueTreeWriter(); + winrt::Microsoft::ReactNative::WriteValue(writer, payload); + auto rhsWriter = winrt::Microsoft::ReactNative::MakeJSValueTreeWriter(); + winrt::Microsoft::ReactNative::WriteValue(rhsWriter, rhs.payload); + return winrt::Microsoft::ReactNative::TakeJSValue(writer).Equals( + winrt::Microsoft::ReactNative::TakeJSValue(rhsWriter)); + } + + bool operator!=(const ColorStruct &rhs) const { + return !(*this == rhs); + } +}; + +HRESULT SetColorMode( + const SvgView &svgView, + ID2D1SvgElement &element, + const std::wstring &attribute, + const ColorStruct &colorProp) noexcept; + +// Currently no good way to do inheritance in REACT_STRUCTS +#define REACT_SVG_RENDERABLE_COMMON_PROPS \ + REACT_FIELD(name) \ + std::optional name; \ + REACT_FIELD(opacity) \ + std::optional opacity; \ + REACT_FIELD(matrix) \ + std::optional> matrix; \ + REACT_FIELD(clipPath) \ + std::optional clipPath; \ + REACT_FIELD(clipRule) \ + std::optional clipRule; \ + REACT_FIELD(fill) \ + std::optional fill; \ + REACT_FIELD(fillOpacity) \ + std::optional fillOpacity; \ + REACT_FIELD(fillRule) \ + std::optional fillRule; \ + REACT_FIELD(stroke) \ + std::optional stroke; \ + REACT_FIELD(strokeOpacity) \ + std::optional strokeOpacity; \ + REACT_FIELD(strokeWidth) \ + std::optional strokeWidth; \ + REACT_FIELD(strokeLinecap) \ + std::optional strokeLinecap; \ + REACT_FIELD(strokeLinejoin) \ + std::optional strokeLinejoin; \ + REACT_FIELD(strokeDasharray) \ + std::optional> strokeDasharray; \ + REACT_FIELD(strokeDashoffset) \ + std::optional strokeDashoffset; \ + REACT_FIELD(strokeMiterlimit) \ + std::optional strokeMiterlimit; \ + REACT_FIELD(propList) \ + std::optional> propList; \ + std::optional color; \ + winrt::Microsoft::ReactNative::ViewProps m_props{nullptr}; + +#define REACT_SVG_RENDERABLE_COMMON_PROPS_INIT \ + : m_props(props) + +#define REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(TProps) \ + if (cloneFrom) { \ + auto cloneFromProps = cloneFrom.as(); \ + name = cloneFromProps->name; \ + opacity = cloneFromProps->opacity; \ + matrix = cloneFromProps->matrix; \ + clipPath = cloneFromProps->clipPath; \ + clipRule = cloneFromProps->clipRule; \ + fill = cloneFromProps->fill; \ + fillOpacity = cloneFromProps->fillOpacity; \ + fillRule = cloneFromProps->fillRule; \ + stroke = cloneFromProps->stroke; \ + strokeOpacity = cloneFromProps->strokeOpacity; \ + strokeWidth = cloneFromProps->strokeWidth; \ + strokeLinecap = cloneFromProps->strokeLinecap; \ + strokeLinejoin = cloneFromProps->strokeLinejoin; \ + strokeDasharray = cloneFromProps->strokeDasharray; \ + strokeMiterlimit = cloneFromProps->strokeMiterlimit; \ + propList = cloneFromProps->propList; \ + color = cloneFromProps->color; + +#define REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE \ + } + +struct __declspec(uuid("a03986c0-b06e-4fb8-a86e-16fcc47b2f31")) RenderableView : public ::IUnknown { + public: + RenderableView() = default; + + virtual const wchar_t *GetSvgElementName() noexcept = 0; + + // ComponentView + void MountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept; + void UnmountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept; + + virtual void UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, + const winrt::Microsoft::ReactNative::IComponentProps &props, + const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept; + + virtual void FinalizeUpates( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, + winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept; + + ID2D1SvgElement &Render(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &svgElement) noexcept; + + virtual void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement & /*svgElement*/) noexcept; + virtual bool IsSupported() const noexcept; + + void Invalidate(const winrt::Microsoft::ReactNative::ComponentView &view); + + protected: + winrt::Microsoft::ReactNative::IComponentProps m_props; + + private: + winrt::com_ptr m_spD2DSvgElement; +}; + +template +void SetCommonSvgProps( + const SvgView &svgView, + ID2D1SvgDocument &document, + ID2D1SvgElement &element, + const TProps &commonProps) noexcept { + HRESULT hr = S_OK; + if (commonProps.color != std::nullopt) { + auto color = commonProps.color.value().AsWindowsColor(svgView.Theme()); + hr |= element.SetAttributeValue(SvgStrings::colorAttributeName, D2DHelpers::AsD2DColor(color)); + } + + if (commonProps.propList) { + for (auto &prop : commonProps.propList.value()) { + if (prop == "fill") { + if (commonProps.fill != std::nullopt) + hr |= SetColorMode(svgView, element, SvgStrings::fillAttributeName, commonProps.fill.value()); + else + hr |= element.SetAttributeValue( + SvgStrings::fillAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + SvgStrings::noneAttributeValue); + } else if (prop == "fillOpacity") { + if (commonProps.fillOpacity != std::nullopt) + hr |= element.SetAttributeValue(SvgStrings::fillOpacityAttributeName, commonProps.fillOpacity.value()); + } else if (prop == "fillRule") { + if (commonProps.fillRule != std::nullopt) { + hr |= element.SetAttributeValue(SvgStrings::fillRuleAttributeName, commonProps.fillRule.value()); + } + } else if (prop == "stroke") { + if (commonProps.stroke != std::nullopt) + hr |= SetColorMode(svgView, element, SvgStrings::strokeAttributeName, commonProps.stroke.value()); + else + hr |= element.SetAttributeValue( + SvgStrings::strokeAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + SvgStrings::noneAttributeValue); + } else if (prop == "strokeWidth") { + if (commonProps.strokeWidth != std::nullopt) + hr |= element.SetAttributeValue(SvgStrings::strokeWidthAttributeName, commonProps.strokeWidth.value()); + } else if (prop == "strokeOpacity") { + if (commonProps.strokeOpacity != std::nullopt) + hr |= element.SetAttributeValue(SvgStrings::strokeOpacityAttributeName, commonProps.strokeOpacity.value()); + } else if (prop == "strokeDasharray") { + if (commonProps.strokeDasharray != std::nullopt && !commonProps.strokeDasharray->empty()) { + winrt::com_ptr dashArray; + document.CreateStrokeDashArray( + &commonProps.strokeDasharray.value()[0], + static_cast(commonProps.strokeDasharray.value().size()), + dashArray.put()); + hr |= element.SetAttributeValue(SvgStrings::strokeDashArrayAttributeName, dashArray.get()); + } + } else if (prop == "strokeDashoffset") { + if (commonProps.strokeDashoffset != std::nullopt) { + hr |= element.SetAttributeValue( + SvgStrings::strokeDashOffsetAttributeName, commonProps.strokeDashoffset.value()); + } + } else if (prop == "strokeLinecap") { + if (commonProps.strokeLinecap != std::nullopt) { + static D2D1_SVG_LINE_CAP supportedCaps[] = { + D2D1_SVG_LINE_CAP_BUTT, D2D1_SVG_LINE_CAP_ROUND, D2D1_SVG_LINE_CAP_SQUARE}; + hr |= element.SetAttributeValue( + SvgStrings::strokeLinecapAttributeName, supportedCaps[commonProps.strokeLinecap.value()]); + } + } else if (prop == "strokeLinejoin") { + if (commonProps.strokeLinejoin != std::nullopt) { + static D2D1_SVG_LINE_JOIN supportedJoins[] = { + D2D1_SVG_LINE_JOIN_MITER, D2D1_SVG_LINE_JOIN_ROUND, D2D1_SVG_LINE_JOIN_BEVEL}; + hr |= element.SetAttributeValue( + SvgStrings::strokeLinejoinAttributeName, supportedJoins[commonProps.strokeLinejoin.value()]); + } + } else if (prop == "strokeMiterlimit") { + if (commonProps.strokeMiterlimit != std::nullopt) { + hr |= element.SetAttributeValue( + SvgStrings::strokeMiterLimitAttributeName, commonProps.strokeMiterlimit.value()); + } + } + } + } + + if (commonProps.clipPath != std::nullopt) { + std::wstring namedRefStr = L"url(#" + commonProps.clipPath.value() + L")"; + hr |= element.SetAttributeValue( + SvgStrings::clipPathAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + namedRefStr.c_str()); + } + + if (commonProps.clipRule != std::nullopt) { + hr |= element.SetAttributeValue(SvgStrings::clipRuleAttributeName, commonProps.clipRule.value()); + } + + if (commonProps.name != std::nullopt) + hr |= element.SetAttributeValue( + SvgStrings::idAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + commonProps.name.value().c_str()); + + if (commonProps.opacity != std::nullopt) + hr |= element.SetAttributeValue(SvgStrings::opacityAttributeName, commonProps.opacity.value()); + + if (commonProps.matrix != std::nullopt) { + auto &matrix = commonProps.matrix.value(); + hr |= element.SetAttributeValue( + SvgStrings::transformAttributeName, + D2D1_MATRIX_3X2_F{matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]}); + } + + assert(hr == S_OK); +} +} // namespace winrt::RNSVG::implementation + +template +void RegisterRenderableComponent( + const winrt::hstring &name, + const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + builder.AddViewComponent(name, [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { + builder.SetComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept { + auto userData = winrt::make_self(); + view.UserData(*userData); + }); + builder.SetCreateProps( + [](winrt::Microsoft::ReactNative::ViewProps props, const winrt::Microsoft::ReactNative::IComponentProps &cloneFrom) noexcept { return winrt::make(props, cloneFrom); }); + builder.SetUpdatePropsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept { + auto userData = winrt::get_self(view.UserData()); + userData->UpdateProps(view, newProps, oldProps); + }); + builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept { + auto userData = winrt::get_self(view.UserData()); + userData->FinalizeUpates(view, mask); + }); + builder.SetMountChildComponentViewHandler( + [](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept { + auto userData = winrt::get_self(view.UserData()); + return userData->MountChildComponentView(view, args); + }); + builder.SetUnmountChildComponentViewHandler( + [](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept { + auto userData = winrt::get_self(view.UserData()); + return userData->UnmountChildComponentView(view, args); + }); + }); +} diff --git a/windows/RNSVG/Fabric/SvgStrings.h b/windows/RNSVG/Fabric/SvgStrings.h new file mode 100644 index 00000000..4f426d66 --- /dev/null +++ b/windows/RNSVG/Fabric/SvgStrings.h @@ -0,0 +1,58 @@ +#pragma once + +namespace winrt::RNSVG::SvgStrings { + constexpr wchar_t fillAttributeName[] = L"fill"; + constexpr wchar_t clipPathAttributeName[] = L"clip-path"; + constexpr wchar_t clipRuleAttributeName[] = L"clip-rule"; + constexpr wchar_t fillRuleAttributeName[] = L"fill-rule"; + + constexpr wchar_t colorAttributeName[] = L"color"; + constexpr wchar_t opacityAttributeName[] = L"opacity"; + constexpr wchar_t fillOpacityAttributeName[] = L"fill-opacity"; + constexpr wchar_t stopOpacityAttributeName[] = L"stop-opacity"; + constexpr wchar_t strokeAttributeName[] = L"stroke"; + constexpr wchar_t strokeWidthAttributeName[] = L"stroke-width"; + constexpr wchar_t strokeOpacityAttributeName[] = L"stroke-opacity"; + constexpr wchar_t strokeLinecapAttributeName[] = L"stroke-linecap"; + constexpr wchar_t strokeLinejoinAttributeName[] = L"stroke-linejoin"; + constexpr wchar_t strokeDashArrayAttributeName[] = L"stroke-dasharray"; + constexpr wchar_t strokeDashOffsetAttributeName[] = L"stroke-dashoffset"; + constexpr wchar_t strokeMiterLimitAttributeName[] = L"stroke-miterlimit"; + constexpr wchar_t idAttributeName[] = L"id"; + constexpr wchar_t transformAttributeName[] = L"transform"; + + constexpr wchar_t xAttributeName[] = L"x"; + constexpr wchar_t yAttributeName[] = L"y"; + constexpr wchar_t widthAttributeName[] = L"width"; + constexpr wchar_t heightAttributeName[] = L"height"; + + constexpr wchar_t cxAttributeName[] = L"cx"; + constexpr wchar_t cyAttributeName[] = L"cy"; + constexpr wchar_t rxAttributeName[] = L"rx"; + constexpr wchar_t ryAttributeName[] = L"ry"; + + constexpr wchar_t rAttributeName[] = L"r"; + constexpr wchar_t fxAttributeName[] = L"fx"; + constexpr wchar_t fyAttributeName[] = L"fy"; + + constexpr wchar_t x1AttributeName[] = L"x1"; + constexpr wchar_t y1AttributeName[] = L"y1"; + + constexpr wchar_t x2AttributeName[] = L"x2"; + constexpr wchar_t y2AttributeName[] = L"y2"; + + constexpr wchar_t gradientUnitsAttributeName[] = L"gradientUnits"; + constexpr wchar_t gradientTransformAttributeName[] = L"gradientTransform"; + constexpr wchar_t offsetAttributeName[] = L"offset"; + constexpr wchar_t stopColorAttributeName[] = L"stop-color"; + constexpr wchar_t stopAttributeName[] = L"stop"; + + constexpr wchar_t xlinkhrefAttributeName[] = L"xlink:href"; + + constexpr wchar_t dAttributeName[] = L"d"; + + constexpr wchar_t noneAttributeValue[] = L"none"; + + constexpr wchar_t viewBoxAttributeName[] = L"viewBox"; + constexpr wchar_t preserveAspectRatioAttributeName[] = L"preserveAspectRatio"; +} \ No newline at end of file diff --git a/windows/RNSVG/Fabric/SvgView.cpp b/windows/RNSVG/Fabric/SvgView.cpp new file mode 100644 index 00000000..2877093f --- /dev/null +++ b/windows/RNSVG/Fabric/SvgView.cpp @@ -0,0 +1,342 @@ +#include "pch.h" + +#include "SvgView.h" + +#include "D2DHelpers.h" +#include "GroupView.h" + +#include +#include +#include +#include + +#include + +namespace winrt::RNSVG::implementation { + +SvgViewProps::SvgViewProps(const winrt::Microsoft::ReactNative::ViewProps& props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) + : m_props(props) +{ + if (cloneFrom) { + auto cloneFromProps = cloneFrom.as(); + minX = cloneFromProps->minX; + minY = cloneFromProps->minY; + vbWidth = cloneFromProps->vbWidth; + vbHeight = cloneFromProps->vbHeight; + align = cloneFromProps->align; + meetOrSlice = cloneFromProps->meetOrSlice; + color = cloneFromProps->color; + } +} + +void SvgViewProps::SetProp( + uint32_t hash, + winrt::hstring propName, + winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); +} + +SvgView::SvgView(const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext) + : m_compContext(compContext) {} + +winrt::Microsoft::ReactNative::Composition::Experimental::IVisual SvgView::CreateInternalVisual() { + m_visual = m_compContext.CreateSpriteVisual(); + m_visual.Comment(L"SVGRoot"); + return m_visual; +} + +void SvgView::MountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView &, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &) noexcept { + Invalidate(); +} + +void SvgView::UnmountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView &, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &) noexcept { + Invalidate(); +} + +void SvgView::OnThemeChanged() noexcept { + Invalidate(); +} + +void SvgView::OnMounted() noexcept { + m_isMounted = true; + Invalidate(); +} + +void SvgView::OnUnmounted() noexcept { + m_isMounted = false; +} + +D2D1_SVG_ASPECT_ALIGN AlignToAspectAlign(const std::string &align) noexcept { + if (align.compare("xMinYMin") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MIN; + else if (align.compare("xMidYMin") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MIN; + else if (align.compare("xMaxYMin") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MIN; + else if (align.compare("xMinYMid") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MID; + else if (align.compare("xMidYMid") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MID; + else if (align.compare("xMaxYMid") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MID; + else if (align.compare("xMinYMax") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MAX; + else if (align.compare("xMidYMax") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MAX; + else if (align.compare("xMaxYMax") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MAX; + else if (align.compare("none") == 0) + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_NONE; + + assert(false); + return D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_NONE; +} + +void SvgView::UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps & /*oldProps*/) noexcept { + m_props = newProps.as(); + + if (m_props->align) { + m_aspectAlign = AlignToAspectAlign(m_props->align.value()); + } else { + m_aspectAlign = D2D1_SVG_ASPECT_ALIGN::D2D1_SVG_ASPECT_ALIGN_NONE; + } +} + +void SvgView::FinalizeUpates( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, + winrt::Microsoft::ReactNative::ComponentViewUpdateMask) noexcept { + Invalidate(); // Move to finalize +} + +void SvgView::Initialize(const winrt::Microsoft::ReactNative::ComponentView &sender) noexcept { + auto view = sender.as(); + m_wkView = view; + + sender.as() + .CreateInternalVisualHandler([wkThis = get_weak()](const winrt::Microsoft::ReactNative::ComponentView &) { + return wkThis.get()->CreateInternalVisual(); + }); + + sender.LayoutMetricsChanged( + [wkThis = get_weak()]( + const winrt::Windows::Foundation::IInspectable &, const winrt::Microsoft::ReactNative::LayoutMetricsChangedArgs &args) { + if (auto strongThis = wkThis.get()) { + strongThis->UpdateLayoutMetrics(args.NewLayoutMetrics(), args.OldLayoutMetrics()); + } + }); + + view.ThemeChanged( + [wkThis = get_weak()](const winrt::Windows::Foundation::IInspectable & /*sender*/, const winrt::Windows::Foundation::IInspectable & /*args*/) { + if (auto strongThis = wkThis.get()) { + strongThis->OnThemeChanged(); + } + }); + + view.Mounted([wkThis = get_weak()]( + const winrt::Windows::Foundation::IInspectable & /*sender*/, const winrt::Microsoft::ReactNative::ComponentView &) { + if (auto strongThis = wkThis.get()) { + strongThis->OnMounted(); + } + }); + + view.Unmounted([wkThis = get_weak()]( + const winrt::Windows::Foundation::IInspectable & /*sender*/, const winrt::Microsoft::ReactNative::ComponentView &) { + if (auto strongThis = wkThis.get()) { + strongThis->OnUnmounted(); + } + }); +} + +void SvgView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + builder.AddViewComponent( + L"RNSVGSvgView", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { + builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props, + const winrt::Microsoft::ReactNative::IComponentProps &cloneFrom) noexcept { + return winrt::make(props, cloneFrom); + }); + auto compBuilder = + builder.as(); + + compBuilder.SetViewComponentViewInitializer( + [](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept { + auto userData = winrt::make_self( + view.as() + .CompositionContext()); + userData->Initialize(view); + view.UserData(*userData); + }); + + compBuilder.SetViewFeatures( + winrt::Microsoft::ReactNative::Composition::ComponentViewFeatures::Default & + ~winrt::Microsoft::ReactNative::Composition::ComponentViewFeatures::Background); + + builder.SetUpdatePropsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept { + auto userData = winrt::get_self(view.UserData()); + userData->UpdateProps(view, newProps, oldProps); + }); + + builder.SetFinalizeUpdateHandler( + [](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept { + auto userData = winrt::get_self(view.UserData()); + userData->FinalizeUpates(view, mask); + }); + + builder.SetMountChildComponentViewHandler( + [](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept { + auto userData = winrt::get_self(view.UserData()); + return userData->MountChildComponentView(view, args); + }); + + builder.SetUnmountChildComponentViewHandler( + [](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept { + auto userData = winrt::get_self(view.UserData()); + return userData->UnmountChildComponentView(view, args); + }); + }); +} + +void SvgView::UpdateLayoutMetrics( + const winrt::Microsoft::ReactNative::LayoutMetrics &metrics, + const winrt::Microsoft::ReactNative::LayoutMetrics &oldMetrics) { + m_layoutMetrics = metrics; + + if (metrics != oldMetrics) { + Invalidate(); + } +} + +void RecurseRenderNode( + const SvgView *root, + const winrt::Microsoft::ReactNative::ComponentView &view, + ID2D1SvgDocument &document, + ID2D1SvgElement &svgElement) noexcept { + for (auto const &child : view.Children()) { + { + auto renderable = child.UserData().try_as(); + + if (renderable && renderable->IsSupported()) { + ID2D1SvgElement &newElement = renderable->Render(*root, document, svgElement); + RecurseRenderNode(root, child, document, newElement); + } + } + } +} + +void SvgView::Draw( + const winrt::Microsoft::ReactNative::Composition::ViewComponentView &view, + ID2D1DeviceContext &context, + winrt::Windows::Foundation::Size const &size) noexcept { + + com_ptr deviceContext; + deviceContext.copy_from(&context); + + auto deviceContext5 = deviceContext.as(); + + winrt::com_ptr spSvgDocument; + deviceContext5->CreateSvgDocument(nullptr, D2D1_SIZE_F{size.Width, size.Height}, spSvgDocument.put()); + + winrt::com_ptr spRoot; + spSvgDocument->GetRoot(spRoot.put()); + + if (m_props->vbWidth != std::nullopt || m_props->vbHeight != std::nullopt) { + std::wstring viewBoxStr = std::to_wstring(m_props->minX.value_or(0)) + L" " + + std::to_wstring(m_props->minY.value_or(0)) + L" " + std::to_wstring(m_props->vbWidth.value_or(0)) + L" " + + std::to_wstring(m_props->vbHeight.value_or(0)); + spRoot->SetAttributeValue( + SvgStrings::viewBoxAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + viewBoxStr.c_str()); + } + + spRoot->SetAttributeValue( + SvgStrings::widthAttributeName, D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, std::to_wstring(size.Width).c_str()); + spRoot->SetAttributeValue( + SvgStrings::heightAttributeName, D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, std::to_wstring(size.Height).c_str()); + + if (m_props->color) { + spRoot->SetAttributeValue( + SvgStrings::colorAttributeName, D2DHelpers::AsD2DColor(m_props->color.AsWindowsColor(Theme()))); + } else + spRoot->SetAttributeValue( + SvgStrings::colorAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + SvgStrings::noneAttributeValue); + + if (m_props->align != std::nullopt || m_props->meetOrSlice != std::nullopt) { + D2D1_SVG_PRESERVE_ASPECT_RATIO preserveAspectRatio; + preserveAspectRatio.defer = false; + preserveAspectRatio.align = m_aspectAlign; + + preserveAspectRatio.meetOrSlice = m_props->meetOrSlice.value() == MeetOrSlice::Meet + ? D2D1_SVG_ASPECT_SCALING::D2D1_SVG_ASPECT_SCALING_MEET + : D2D1_SVG_ASPECT_SCALING::D2D1_SVG_ASPECT_SCALING_SLICE; + spRoot->SetAttributeValue(SvgStrings::preserveAspectRatioAttributeName, preserveAspectRatio); + } + + for (auto const &child : view.Children()) { + auto renderable = child.UserData().as(); + if (renderable->IsSupported()) { + RecurseRenderNode(this, child, *spSvgDocument, *spRoot); + } + } + + deviceContext5->DrawSvgDocument(spSvgDocument.get()); +} + +winrt::Microsoft::ReactNative::Composition::Theme SvgView::Theme() const noexcept { + if (auto view = m_wkView.get()) { + return view.Theme(); + } + return nullptr; +} + +void SvgView::Invalidate() { + if (auto view = m_wkView.get()) { + auto size = winrt::Windows::Foundation::Size{m_layoutMetrics.Frame.Width, m_layoutMetrics.Frame.Height}; + + if (!m_isMounted) { + return; + } + + if (size.Height == 0 || size.Width == 0) { + return; + } + + auto drawingSurface = m_compContext.CreateDrawingSurfaceBrush( + size, + winrt::Windows::Graphics::DirectX::DirectXPixelFormat::B8G8R8A8UIntNormalized, + winrt::Windows::Graphics::DirectX::DirectXAlphaMode::Premultiplied); + + POINT offset; + { + ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(drawingSurface, 1.0, &offset); + if (auto deviceContext = autoDraw.GetRenderTarget()) { + auto transform = + winrt::Windows::Foundation::Numerics::make_float3x2_translation({static_cast(offset.x), static_cast(offset.y)}); + deviceContext->SetTransform(D2DHelpers::AsD2DTransform(transform)); + + deviceContext->Clear(D2D1::ColorF(D2D1::ColorF::Black, 0.0f)); + + com_ptr spDeviceContext; + spDeviceContext.copy_from(deviceContext); + + Draw(view, *spDeviceContext, size); + } + } + + m_visual.Brush(drawingSurface); + } +} +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/SvgView.h b/windows/RNSVG/Fabric/SvgView.h new file mode 100644 index 00000000..f9ba7c65 --- /dev/null +++ b/windows/RNSVG/Fabric/SvgView.h @@ -0,0 +1,107 @@ +#pragma once + +#include + +#include +#include +#pragma push_macro("X86") +#undef X86 +#include +#include +#include +#pragma pop_macro("X86") + +namespace winrt::RNSVG::implementation { + +D2D1_SVG_ASPECT_ALIGN AlignToAspectAlign(const std::string &align) noexcept; + +enum class MeetOrSlice { + Meet = 0, + Slice = 1, +}; + +REACT_STRUCT(SvgViewProps) +struct SvgViewProps : winrt::implements { + SvgViewProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom); + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept; + + REACT_FIELD(minX) + std::optional minX; + REACT_FIELD(minY) + std::optional minY; + REACT_FIELD(vbWidth) + std::optional vbWidth; + REACT_FIELD(vbHeight) + std::optional vbHeight; + REACT_FIELD(align) + std::optional align; + REACT_FIELD(meetOrSlice) + std::optional meetOrSlice; + REACT_FIELD(color) + winrt::Microsoft::ReactNative::Color color{nullptr}; + private: + winrt::Microsoft::ReactNative::ViewProps m_props{nullptr}; +}; + +struct __declspec(uuid("ed381ffa-461a-48Bf-a3c0-5d9a42eecd30")) ISvgView : public ::IUnknown { + virtual void Invalidate() = 0; +}; + +struct SvgView : winrt::implements { + public: + + SvgView(const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext); + + // Overrides + // IInternalCreateVisual + winrt::Microsoft::ReactNative::Composition::Experimental::IVisual CreateInternalVisual(); + + // ComponentView + void UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps & /*oldProps*/) noexcept; + void UpdateLayoutMetrics( + const winrt::Microsoft::ReactNative::LayoutMetrics &metrics, + const winrt::Microsoft::ReactNative::LayoutMetrics &oldMetrics); + void MountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView& view, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs& args) noexcept; + void UnmountChildComponentView( + const winrt::Microsoft::ReactNative::ComponentView& view, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs& args) noexcept; + + void FinalizeUpates( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, + winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept; + + void OnThemeChanged() noexcept; + void OnMounted() noexcept; + void OnUnmounted() noexcept; + + void Initialize(const winrt::Microsoft::ReactNative::ComponentView & /*view*/) noexcept; + + static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + + void Invalidate(); + winrt::Microsoft::ReactNative::Composition::Theme Theme() const noexcept; + + private: + void Draw( + const winrt::Microsoft::ReactNative::Composition::ViewComponentView &view, + ID2D1DeviceContext &context, + winrt::Windows::Foundation::Size const &size) noexcept; + + bool m_isMounted{false}; + winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual m_visual{nullptr}; + winrt::Microsoft::ReactNative::LayoutMetrics m_layoutMetrics{{0, 0, 0, 0}, 1.0}; + winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext m_compContext{nullptr}; + winrt::weak_ref m_wkView; + D2D1_SVG_ASPECT_ALIGN m_aspectAlign; + winrt::com_ptr m_props; + + // Shared + Microsoft::ReactNative::IReactContext m_reactContext{nullptr}; +}; +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/UnsupportedSvgView.cpp b/windows/RNSVG/Fabric/UnsupportedSvgView.cpp new file mode 100644 index 00000000..7f62c8e2 --- /dev/null +++ b/windows/RNSVG/Fabric/UnsupportedSvgView.cpp @@ -0,0 +1,33 @@ +#include "pch.h" +#include "UnsupportedSvgView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(UnsupportedProps) +struct UnsupportedProps : public winrt::implements { + UnsupportedProps(const winrt::Microsoft::ReactNative::ViewProps &/*props*/, const winrt::Microsoft::ReactNative::IComponentProps& /*cloneFrom*/) {} + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } +}; + +struct UnsupportedSvgView : winrt::implements { + public: + UnsupportedSvgView() = default; + + const wchar_t *GetSvgElementName() noexcept override{ + assert(false); + return L"unsupported"; +} + + bool IsSupported() const noexcept override { + return false; + } +}; + +void RegisterUnsupportedSvgComponent(const winrt::hstring& name, const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(name, builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/UnsupportedSvgView.h b/windows/RNSVG/Fabric/UnsupportedSvgView.h new file mode 100644 index 00000000..94ff3bc3 --- /dev/null +++ b/windows/RNSVG/Fabric/UnsupportedSvgView.h @@ -0,0 +1,9 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterUnsupportedSvgComponent(const winrt::hstring& name, const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/UseView.cpp b/windows/RNSVG/Fabric/UseView.cpp new file mode 100644 index 00000000..696bf39e --- /dev/null +++ b/windows/RNSVG/Fabric/UseView.cpp @@ -0,0 +1,64 @@ +#include "pch.h" +#include "UseView.h" + +namespace winrt::RNSVG::implementation { + +REACT_STRUCT(UseProps) +struct UseProps : winrt::implements { + UseProps(const winrt::Microsoft::ReactNative::ViewProps &props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) REACT_SVG_RENDERABLE_COMMON_PROPS_INIT + { + REACT_BEGIN_SVG_RENDERABLE_COMMON_PROPS_CLONE(UseProps) + href = cloneFromProps->href; + x = cloneFromProps->x; + y = cloneFromProps->y; + width = cloneFromProps->width; + height = cloneFromProps->height; + REACT_END_SVG_RENDERABLE_COMMON_PROPS_CLONE + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_SVG_RENDERABLE_COMMON_PROPS; + + REACT_FIELD(href) + std::wstring href; + REACT_FIELD(x) + D2D1_SVG_LENGTH x{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(y) + D2D1_SVG_LENGTH y{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(width) + D2D1_SVG_LENGTH width{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + REACT_FIELD(height) + D2D1_SVG_LENGTH height{0, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; +}; + +struct UseView : winrt::implements { + public: + UseView() = default; + + const wchar_t *GetSvgElementName() noexcept override { + return L"use"; + } + + void OnRender(const SvgView &svgView, ID2D1SvgDocument &document, ID2D1SvgElement &element) noexcept override { + auto props = m_props.as(); + SetCommonSvgProps(svgView, document, element, *props); + element.SetAttributeValue( + SvgStrings::xlinkhrefAttributeName, + D2D1_SVG_ATTRIBUTE_STRING_TYPE::D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG, + (L"#" + props->href).c_str()); + + element.SetAttributeValue(SvgStrings::xAttributeName, props->x); + element.SetAttributeValue(SvgStrings::yAttributeName, props->y); + element.SetAttributeValue(SvgStrings::widthAttributeName, props->width); + element.SetAttributeValue(SvgStrings::heightAttributeName, props->height); + } +}; + +void RegisterUseComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { + RegisterRenderableComponent(L"RNSVGUse", builder); +} + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Fabric/UseView.h b/windows/RNSVG/Fabric/UseView.h new file mode 100644 index 00000000..ac3ce441 --- /dev/null +++ b/windows/RNSVG/Fabric/UseView.h @@ -0,0 +1,10 @@ +#pragma once + +#include "RenderableView.h" + +namespace winrt::RNSVG::implementation { + +void RegisterUseComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; + + +} // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/GroupView.cpp b/windows/RNSVG/GroupView.cpp index e8f9167c..7f0725e2 100644 --- a/windows/RNSVG/GroupView.cpp +++ b/windows/RNSVG/GroupView.cpp @@ -14,87 +14,7 @@ using namespace winrt; using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -SvgGroupCommonProps::SvgGroupCommonProps( - const winrt::Microsoft::ReactNative::ViewProps &props) - : base_type(props) {} -void SvgGroupCommonProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -GroupView::GroupView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) - : base_type(args), m_reactContext(args.ReactContext()) {} - -void GroupView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGGroup", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView( - [](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void GroupView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto groupProps = props.as(); - auto oldGroupProps = oldProps ? oldProps.as() : nullptr; - - auto const &parent{Parent().try_as()}; - - if (!oldGroupProps || groupProps->font != oldGroupProps->font) { - if (forceUpdate || !m_fontPropMap[RNSVG::FontProp::FontSize]) { - if (groupProps->font.fontSize) { - m_fontSize = groupProps->font.fontSize != std::nullopt - ? *groupProps->font.fontSize - : (parent ? parent.FontSize() : 12.0f); - } - - m_fontPropMap[RNSVG::FontProp::FontSize] = !!groupProps->font.fontSize; - } - - if (forceUpdate || !m_fontPropMap[RNSVG::FontProp::FontFamily]) { - if (groupProps->font.fontFamily) { - m_fontFamily = !(*groupProps->font.fontFamily).empty() - ? winrt::to_hstring(*groupProps->font.fontFamily) - : (parent ? parent.FontFamily() : L"Segoe UI"); - - m_fontPropMap[RNSVG::FontProp::FontFamily] = !(*groupProps->font.fontFamily).empty(); - } - } - - if (forceUpdate || !m_fontPropMap[RNSVG::FontProp::FontWeight]) { - if (groupProps->font.fontWeight) { - m_fontWeight = !(*groupProps->font.fontWeight).empty() - ? winrt::to_hstring(*groupProps->font.fontWeight) - : (parent ? parent.FontWeight() : L"auto"); - - m_fontPropMap[RNSVG::FontProp::FontWeight] = !(*groupProps->font.fontWeight).empty(); - } - } - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, false); - - for (auto const &child : Children()) { - child.as().UpdateProperties(props, oldProps, false, false); - } - - if (invalidate && Parent()) { - SvgRoot().Invalidate(); - } -} -#else void GroupView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -180,7 +100,6 @@ void GroupView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, SvgRoot().Invalidate(); } } -#endif void GroupView::CreateGeometry(RNSVG::D2DDeviceContext const &context) { std::vector geometries; @@ -274,12 +193,9 @@ void GroupView::Unload() { child.as().Unload(); } - m_reactContext = nullptr; m_fontPropMap.clear(); -#ifndef USE_FABRIC m_children.Clear(); -#endif __super::Unload(); } diff --git a/windows/RNSVG/GroupView.h b/windows/RNSVG/GroupView.h index e5d9ee26..5af9c76e 100644 --- a/windows/RNSVG/GroupView.h +++ b/windows/RNSVG/GroupView.h @@ -2,108 +2,19 @@ #include "GroupView.g.h" #include "RenderableView.h" -#ifdef USE_FABRIC -#include "SvgGroupCommonProps.g.h" -#endif - namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(FontObject) -struct FontObject { - REACT_FIELD(fontStyle) - std::optional fontStyle; - REACT_FIELD(fontVariant) - std::optional fontVariant; - REACT_FIELD(fontWeight) - std::optional fontWeight; - REACT_FIELD(fontStretch) - std::optional fontStretch; - REACT_FIELD(fontSize) - std::optional fontSize; - REACT_FIELD(fontFamily) - std::optional fontFamily; - REACT_FIELD(textAnchor) - std::optional textAnchor; - REACT_FIELD(textDecoration) - std::optional textDecoration; - REACT_FIELD(letterSpacing) - std::optional letterSpacing; - REACT_FIELD(wordSpacing) - std::optional wordSpacing; - REACT_FIELD(kerning) - std::optional kerning; - REACT_FIELD(fontFeatureSettings) - std::optional fontFeatureSettings; - REACT_FIELD(fontVariantLigatures) - std::optional fontVariantLigatures; - REACT_FIELD(fontVariationSettings) - std::optional fontVariationSettings; - - bool operator==(const FontObject &rhs) const { - return fontStyle == rhs.fontStyle && fontVariant == rhs.fontVariant && - fontWeight == rhs.fontWeight && fontStretch == rhs.fontStretch && - fontSize == rhs.fontSize && fontFamily == rhs.fontFamily && - textAnchor == rhs.textAnchor && textDecoration == rhs.textDecoration && - letterSpacing == rhs.letterSpacing && wordSpacing == rhs.wordSpacing && - kerning == rhs.kerning && - fontFeatureSettings == rhs.fontFeatureSettings && - fontVariantLigatures == rhs.fontVariantLigatures && - fontVariationSettings == rhs.fontVariationSettings; - } - - bool operator!=(const FontObject &rhs) const { - return !(*this == rhs); - } -}; - -#define REACT_SVG_GROUP_COMMON_PROPS \ - REACT_FIELD(fontSize) \ - REACT_FIELD(fontWeight) \ - REACT_FIELD(font) - -REACT_STRUCT(SvgGroupCommonProps) -struct SvgGroupCommonProps - : SvgGroupCommonPropsT { - SvgGroupCommonProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - REACT_SVG_GROUP_COMMON_PROPS; - - std::string fontSize; - std::string fontWeight; - FontObject font; -}; -#endif struct GroupView : GroupViewT { public: GroupView() = default; -#ifdef USE_FABRIC - GroupView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else - GroupView(Microsoft::ReactNative::IReactContext const &context) : m_reactContext(context) {} + GroupView(Microsoft::ReactNative::IReactContext const & /*context*/) {} Windows::Foundation::Collections::IVector Children() { return m_children; } // IRenderablePaper virtual void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif hstring FontFamily() { return m_fontFamily; } void FontFamily(hstring const &value) { m_fontFamily = value; } @@ -126,12 +37,9 @@ struct GroupView virtual void DrawGroup(RNSVG::D2DDeviceContext const &deviceContext, Windows::Foundation::Size const &size); private: - Microsoft::ReactNative::IReactContext m_reactContext{nullptr}; -#ifndef USE_FABRIC Windows::Foundation::Collections::IVector m_children{ winrt::single_threaded_vector()}; -#endif float m_fontSize{12.0f}; hstring m_fontFamily{L"Segoe UI"}; diff --git a/windows/RNSVG/ImageView.cpp b/windows/RNSVG/ImageView.cpp index 1926c129..42d4c6d4 100644 --- a/windows/RNSVG/ImageView.cpp +++ b/windows/RNSVG/ImageView.cpp @@ -14,9 +14,7 @@ #include #include -#ifndef USE_FABRIC #include -#endif using namespace winrt::Microsoft::ReactNative; using namespace winrt::Windows::Security::Cryptography; @@ -25,64 +23,6 @@ using namespace winrt::Windows::Web::Http; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -ImageProps::ImageProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void ImageProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -ImageView::ImageView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void ImageView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGImage", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void ImageView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto imageProps = props.try_as(); - auto oldImageProps = oldProps.try_as(); - if (imageProps) { - m_props = imageProps; - - m_x = m_props->x; - m_y = m_props->y; - m_width = m_props->width; - m_height = m_props->height; - - // preserveAspectRatio - m_align = m_props->align; - m_meetOrSlice = m_props->meetOrSlice; - - // IamgeSource - m_source.uri = m_props->src.uri; - m_source.method = m_props->src.method; - m_source.width = m_props->src.width; - m_source.height = m_props->src.height; - m_source.scale = m_props->src.scale; - - if (!oldImageProps || (oldImageProps->src.uri != imageProps->src.uri)) { - LoadImageSourceAsync(true); - } - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void ImageView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -141,7 +81,6 @@ void ImageView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void ImageView::Draw(RNSVG::D2DDeviceContext const &context, Size const &size) { if (!m_wicbitmap) { @@ -302,7 +241,6 @@ IAsyncOperation ImageView::GetImageStreamAsync( Uri uri{winrt::to_hstring(source.uri)}; HttpRequestMessage request{httpMethod, uri}; -#ifndef USE_FABRIC if (!source.headers.empty()) { for (auto const &header : source.headers) { if (_stricmp(to_string(header.first).c_str(), "authorization") == 0) { @@ -312,7 +250,6 @@ IAsyncOperation ImageView::GetImageStreamAsync( } } } -#endif HttpClient httpClient; HttpResponseMessage response{co_await httpClient.SendRequestAsync(request)}; diff --git a/windows/RNSVG/ImageView.h b/windows/RNSVG/ImageView.h index 3b3f5570..e1a2c9a9 100644 --- a/windows/RNSVG/ImageView.h +++ b/windows/RNSVG/ImageView.h @@ -1,9 +1,5 @@ #pragma once -#ifdef USE_FABRIC -#include "ImageProps.g.h" -#endif - #include "ImageView.g.h" #include "RenderableView.h" @@ -13,65 +9,6 @@ namespace winrt::RNSVG::implementation { enum class ImageSourceType { Uri = 0, Download = 1, InlineData = 2 }; enum class ImageSourceFormat { Bitmap = 0, Svg = 1 }; -#ifdef USE_FABRIC -REACT_STRUCT(ImageSource) -struct ImageSource { - REACT_FIELD(uri) - std::string uri{""}; - REACT_FIELD(method) - std::string method{""}; - //REACT_FIELD(headers) - //std::vector headers; - REACT_FIELD(body) - std::string body{""}; - REACT_FIELD(width) - float width{0.0f}; - REACT_FIELD(height) - float height{0.0f}; - REACT_FIELD(scale) - float scale{1.0f}; - /*REACT_FIELD(packagerAsset) - bool packagerAsset{false}; - REACT_FIELD(type) - ImageSourceType type{ImageSourceType::Uri}; - REACT_FIELD(format) - ImageSourceFormat format{ImageSourceFormat::Bitmap};*/ - - bool operator==(const ImageSource &rhs) const { - return uri == rhs.uri && method == rhs.method && width == rhs.width && height == rhs.height && scale == rhs.scale; - } - - bool operator!=(const ImageSource &rhs) const { - return !(*this == rhs); - } -}; - -REACT_STRUCT(ImageProps) -struct ImageProps : ImagePropsT { - ImageProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(x) - RNSVG::SVGLength x{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y) - RNSVG::SVGLength y{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(width) - RNSVG::SVGLength width{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(height) - RNSVG::SVGLength height{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(src) - ImageSource src; - REACT_FIELD(align) - std::string align{""}; - REACT_FIELD(meetOrSlice) - RNSVG::MeetOrSlice meetOrSlice{RNSVG::MeetOrSlice::Meet}; -}; -#else struct ImageSource { std::string uri{""}; std::string method{""}; @@ -83,27 +20,13 @@ struct ImageSource { ImageSourceType type{ImageSourceType::Uri}; ImageSourceFormat format{ImageSourceFormat::Bitmap}; }; -#endif struct ImageView : ImageViewT { public: ImageView() = default; -#ifdef USE_FABRIC - ImageView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void Draw(RNSVG::D2DDeviceContext const &deviceContext, Windows::Foundation::Size const &size); @@ -119,10 +42,6 @@ struct ImageView : ImageViewT ImageSourceType m_type{ImageSourceType::Uri}; ImageSourceFormat m_format{ImageSourceFormat::Bitmap}; -#ifdef USE_FABRIC - com_ptr m_props; -#endif - // preserveAspectRatio std::string m_align{""}; RNSVG::MeetOrSlice m_meetOrSlice{RNSVG::MeetOrSlice::Meet}; diff --git a/windows/RNSVG/LineView.cpp b/windows/RNSVG/LineView.cpp index 582b6376..a784808c 100644 --- a/windows/RNSVG/LineView.cpp +++ b/windows/RNSVG/LineView.cpp @@ -12,48 +12,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -LineProps::LineProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void LineProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -LineView::LineView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void LineView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGLine", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void LineView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto lineProps = props.try_as(); - if (lineProps) { - m_props = lineProps; - - m_x1 = m_props->x1; - m_y1 = m_props->y1; - m_x2 = m_props->x2; - m_y2 = m_props->y2; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void LineView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -74,7 +32,6 @@ void LineView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void LineView::CreateGeometry(RNSVG::D2DDeviceContext const &context) { auto const &root{SvgRoot()}; diff --git a/windows/RNSVG/LineView.h b/windows/RNSVG/LineView.h index c2466cb8..4edc95ce 100644 --- a/windows/RNSVG/LineView.h +++ b/windows/RNSVG/LineView.h @@ -1,55 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "LineProps.g.h" -#endif - #include "LineView.g.h" #include "RenderableView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(LineProps) -struct LineProps : LinePropsT { - LineProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(x1) - RNSVG::SVGLength x1{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y1) - RNSVG::SVGLength y1{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(x2) - RNSVG::SVGLength x2{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y2) - RNSVG::SVGLength y2{0, winrt::RNSVG::LengthType::Unknown}; -}; -#endif - struct LineView : LineViewT { public: LineView() = default; -#ifdef USE_FABRIC - LineView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void CreateGeometry(RNSVG::D2DDeviceContext const &context); @@ -59,13 +20,9 @@ struct LineView : LineViewT { RNSVG::SVGLength m_y1{}; RNSVG::SVGLength m_x2{}; RNSVG::SVGLength m_y2{}; - -#ifdef USE_FABRIC - com_ptr m_props; -#endif - }; } // namespace winrt::RNSVG::implementation + namespace winrt::RNSVG::factory_implementation { struct LineView : LineViewT {}; } // namespace winrt::RNSVG::factory_implementation diff --git a/windows/RNSVG/LinearGradientView.cpp b/windows/RNSVG/LinearGradientView.cpp index 29807343..9a04d72a 100644 --- a/windows/RNSVG/LinearGradientView.cpp +++ b/windows/RNSVG/LinearGradientView.cpp @@ -11,54 +11,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -LinearGradientProps::LinearGradientProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void LinearGradientProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -LinearGradientView::LinearGradientView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void LinearGradientView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGLinearGradient", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void LinearGradientView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto linearGradientProps = props.try_as(); - if (linearGradientProps) { - m_props = linearGradientProps; - - m_x1 = m_props->x1; - m_y1 = m_props->y1; - m_x2 = m_props->x2; - m_y2 = m_props->y2; - - m_stops = Utils::JSValueAsGradientStops(m_props->gradient); - m_gradientUnits = Utils::JSValueAsBrushUnits(m_props->gradientUnits); - m_transform = Utils::JSValueAsD2DTransform(m_props->gradientTransform); - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); - - SaveDefinition(); -} -#else void LinearGradientView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -91,7 +43,6 @@ void LinearGradientView::UpdateProperties(IJSValueReader const &reader, bool for SaveDefinition(); } -#endif void LinearGradientView::Unload() { m_stops.clear(); diff --git a/windows/RNSVG/LinearGradientView.h b/windows/RNSVG/LinearGradientView.h index 0fca6abc..59420b8d 100644 --- a/windows/RNSVG/LinearGradientView.h +++ b/windows/RNSVG/LinearGradientView.h @@ -1,62 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "LinearGradientProps.g.h" -#endif - #include "LinearGradientView.g.h" #include "BrushView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(LinearGradientProps) -struct LinearGradientProps : LinearGradientPropsT { - LinearGradientProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - REACT_SVG_GROUP_COMMON_PROPS; - - REACT_FIELD(x1) - RNSVG::SVGLength x1{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y1) - RNSVG::SVGLength y1{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(x2) - RNSVG::SVGLength x2{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y2) - RNSVG::SVGLength y2{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(gradient) - std::optional> gradient{}; - REACT_FIELD(gradientUnits) - std::optional gradientUnits; - REACT_FIELD(gradientTransform) - std::optional> gradientTransform; -}; -#endif - struct LinearGradientView : LinearGradientViewT { public: LinearGradientView() = default; -#ifdef USE_FABRIC - LinearGradientView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void Unload(); @@ -69,10 +23,6 @@ struct LinearGradientView : LinearGradientViewT m_stops{}; std::string m_gradientUnits{"objectBoundingBox"}; -#ifdef USE_FABRIC - com_ptr m_props; -#endif - // BrushView void CreateBrush(); void UpdateBounds(); diff --git a/windows/RNSVG/MarkerView.cpp b/windows/RNSVG/MarkerView.cpp index 9548c5f0..683407d7 100644 --- a/windows/RNSVG/MarkerView.cpp +++ b/windows/RNSVG/MarkerView.cpp @@ -8,43 +8,5 @@ using namespace winrt; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -MarkerProps::MarkerProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void MarkerProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -MarkerView::MarkerView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void MarkerView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGMarker", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void MarkerView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto markerProps = props.try_as(); - if (markerProps) { - m_props = markerProps; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else -#endif } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/MarkerView.h b/windows/RNSVG/MarkerView.h index 503de6c3..fa78510a 100644 --- a/windows/RNSVG/MarkerView.h +++ b/windows/RNSVG/MarkerView.h @@ -1,78 +1,18 @@ #pragma once -#ifdef USE_FABRIC -#include "MarkerProps.g.h" -#endif - #include "MarkerView.g.h" #include "GroupView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(MarkerProps) -struct MarkerProps : MarkerPropsT { - MarkerProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(refX) - RNSVG::SVGLength refX{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(refY) - RNSVG::SVGLength refY{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(markerHeight) - RNSVG::SVGLength markerHeight{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(markerWidth) - RNSVG::SVGLength markerWidth{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(markerUnits) - std::string markerUnits{""}; - REACT_FIELD(orient) - std::string orient{""}; - REACT_FIELD(minX) - float minX{0.0f}; - REACT_FIELD(minY) - float minY{0.0f}; - REACT_FIELD(vbWidth) - float vbWidth{0.0f}; - REACT_FIELD(vbHeight) - float vbHeight{0.0f}; - REACT_FIELD(align) - std::string align{""}; - REACT_FIELD(meetOrSlice) - RNSVG::MeetOrSlice meetOrSlice{RNSVG::MeetOrSlice::Meet}; -}; -#endif - struct MarkerView : MarkerViewT { public: MarkerView() = default; -#ifdef USE_FABRIC - MarkerView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#endif - // IRenderable void Draw(RNSVG::D2DDeviceContext const & /*deviceContext*/, Windows::Foundation::Size const & /*size*/){}; private: - -#ifdef USE_FABRIC - com_ptr m_props; -#endif - }; } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/MaskView.cpp b/windows/RNSVG/MaskView.cpp index ffac2648..ee012724 100644 --- a/windows/RNSVG/MaskView.cpp +++ b/windows/RNSVG/MaskView.cpp @@ -8,43 +8,4 @@ using namespace winrt; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -MaskProps::MaskProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void MaskProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -MaskView::MaskView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void MaskView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGMask", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void MaskView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto maskProps = props.try_as(); - if (maskProps) { - m_props = maskProps; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else -#endif - } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/MaskView.h b/windows/RNSVG/MaskView.h index 26ce0eee..dc3f9078 100644 --- a/windows/RNSVG/MaskView.h +++ b/windows/RNSVG/MaskView.h @@ -1,66 +1,18 @@ #pragma once -#ifdef USE_FABRIC -#include "MaskProps.g.h" -#endif - #include "MaskView.g.h" #include "GroupView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(MaskProps) -struct MaskProps : MaskPropsT { - MaskProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(x) - RNSVG::SVGLength x{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y) - RNSVG::SVGLength y{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(height) - RNSVG::SVGLength height{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(width) - RNSVG::SVGLength width{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(maskUnits) - uint32_t maskUnits{0}; - REACT_FIELD(maskContentUnits) - uint32_t maskContentUnits{0}; -}; -#endif - struct MaskView : MaskViewT { public: MaskView() = default; -#ifdef USE_FABRIC - MaskView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#endif - // IRenderable void Draw(RNSVG::D2DDeviceContext const & /*deviceContext*/, Windows::Foundation::Size const & /*size*/){}; private: - -#ifdef USE_FABRIC - com_ptr m_props; -#endif - }; } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/PathView.cpp b/windows/RNSVG/PathView.cpp index 4307c185..2f0f7e44 100644 --- a/windows/RNSVG/PathView.cpp +++ b/windows/RNSVG/PathView.cpp @@ -15,49 +15,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -PathProps::PathProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void PathProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -PathView::PathView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void PathView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGPath", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void PathView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - - auto pathProps = props.try_as(); - if (pathProps) { - m_props = pathProps; - - m_d = m_props->d; - m_commands.clear(); - m_segmentData.clear(); - ParsePath(); - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void PathView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -81,7 +38,6 @@ void PathView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void PathView::CreateGeometry(RNSVG::D2DDeviceContext const &context) { auto const &root{SvgRoot()}; diff --git a/windows/RNSVG/PathView.h b/windows/RNSVG/PathView.h index 4596566f..fc1eb06c 100644 --- a/windows/RNSVG/PathView.h +++ b/windows/RNSVG/PathView.h @@ -1,49 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "PathProps.g.h" -#endif - #include "PathView.g.h" #include "RenderableView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(PathProps) -struct PathProps : PathPropsT { - PathProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(d) - std::string d; -}; -#endif - struct PathView : PathViewT { public: PathView() = default; -#ifdef USE_FABRIC - PathView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void CreateGeometry(RNSVG::D2DDeviceContext const &context); @@ -53,10 +20,6 @@ struct PathView : PathViewT { std::vector m_segmentData; std::vector m_commands; -#ifdef USE_FABRIC - com_ptr m_props; -#endif - std::unordered_map m_cmds{ {'M', D2D1_SVG_PATH_COMMAND_MOVE_ABSOLUTE}, {'m', D2D1_SVG_PATH_COMMAND_MOVE_RELATIVE}, diff --git a/windows/RNSVG/PatternView.cpp b/windows/RNSVG/PatternView.cpp index 1c02fc03..db3a607e 100644 --- a/windows/RNSVG/PatternView.cpp +++ b/windows/RNSVG/PatternView.cpp @@ -12,67 +12,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -PatternProps::PatternProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void PatternProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -PatternView::PatternView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void PatternView::RegisterComponent( - const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGPattern", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void PatternView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto patternProps = props.try_as(); - if (patternProps) { - m_props = patternProps; - - m_x = m_props->x; - m_y = m_props->y; - m_width = m_props->width; - m_height = m_props->height; - - m_minX = m_props->minX; - m_minY = m_props->minY; - m_vbWidth = m_props->vbWidth; - m_vbHeight = m_props->vbHeight; - m_align = m_props->align; - m_meetOrSlice = m_props->meetOrSlice; - - m_patternUnits = Utils::JSValueAsBrushUnits(m_props->patternUnits); - m_patternContentUnits = Utils::JSValueAsBrushUnits(m_props->patternContentUnits, "userSpaceOnUse"); - - m_transform = Utils::JSValueAsD2DTransform(m_props->patternTransform); - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); - - SaveDefinition(); - - if (auto const &root{SvgRoot()}) { - root.Invalidate(); - } -} -#else void PatternView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -121,7 +60,6 @@ void PatternView::UpdateProperties(IJSValueReader const &reader, bool forceUpdat root.Invalidate(); } } -#endif void PatternView::UpdateBounds() { if (m_patternUnits == "objectBoundingBox") { diff --git a/windows/RNSVG/PatternView.h b/windows/RNSVG/PatternView.h index 95ea0683..8b20b3ed 100644 --- a/windows/RNSVG/PatternView.h +++ b/windows/RNSVG/PatternView.h @@ -1,74 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "PatternProps.g.h" -#endif - #include "PatternView.g.h" #include "BrushView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(PatternProps) -struct PatternProps : PatternPropsT { - PatternProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(x) - RNSVG::SVGLength x{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y) - RNSVG::SVGLength y{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(width) - RNSVG::SVGLength width{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(height) - RNSVG::SVGLength height{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(patternUnits) - std::optional patternUnits; - REACT_FIELD(patternContentUnits) - std::optional patternContentUnits; - REACT_FIELD(patternTransform) - std::optional> patternTransform; - - REACT_FIELD(minX) - float minX{0.0f}; - REACT_FIELD(minY) - float minY{0.0f}; - REACT_FIELD(vbWidth) - float vbWidth{0.0f}; - REACT_FIELD(vbHeight) - float vbHeight{0.0f}; - REACT_FIELD(align) - std::string align{""}; - REACT_FIELD(meetOrSlice) - RNSVG::MeetOrSlice meetOrSlice{RNSVG::MeetOrSlice::Meet}; -}; -#endif - struct PatternView : PatternViewT { public: PatternView() = default; -#ifdef USE_FABRIC - PatternView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void Draw(RNSVG::D2DDeviceContext const & /*deviceContext*/, Windows::Foundation::Size const & /*size*/){}; @@ -89,10 +31,6 @@ struct PatternView : PatternViewT std::string m_align{""}; RNSVG::MeetOrSlice m_meetOrSlice{RNSVG::MeetOrSlice::Meet}; -#ifdef USE_FABRIC - com_ptr m_props; -#endif - // BrushView void CreateBrush(); void UpdateBounds(); diff --git a/windows/RNSVG/RNSVG.vcxproj b/windows/RNSVG/RNSVG.vcxproj index b8a0a820..b3786c81 100644 --- a/windows/RNSVG/RNSVG.vcxproj +++ b/windows/RNSVG/RNSVG.vcxproj @@ -195,13 +195,40 @@ - - - + + Create + + + ReactPackageProvider.idl + + + + + + + + + + + + + + + + + + + + + + + + + @@ -212,24 +239,14 @@ - - Create - - - ReactPackageProvider.idl - - - - - @@ -252,13 +269,11 @@ - - + - - + diff --git a/windows/RNSVG/RadialGradientView.cpp b/windows/RNSVG/RadialGradientView.cpp index 707acc77..b3993e1b 100644 --- a/windows/RNSVG/RadialGradientView.cpp +++ b/windows/RNSVG/RadialGradientView.cpp @@ -11,58 +11,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -RadialGradientProps::RadialGradientProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void RadialGradientProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -RadialGradientView::RadialGradientView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) - : base_type(args) {} - -void RadialGradientView::RegisterComponent( - const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGRadialGradient", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void RadialGradientView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto radialGradientProps = props.try_as(); - if (radialGradientProps) { - m_props = radialGradientProps; - - m_rx = m_props->rx; - m_ry = m_props->ry; - m_fx = m_props->fx; - m_fy = m_props->fy; - m_cx = m_props->cx; - m_cy = m_props->cy; - - m_stops = Utils::JSValueAsGradientStops(m_props->gradient); - m_gradientUnits = Utils::JSValueAsBrushUnits(m_props->gradientUnits); - m_transform = Utils::JSValueAsD2DTransform(m_props->gradientTransform); - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); - - SaveDefinition(); -} -#else void RadialGradientView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -99,7 +47,6 @@ void RadialGradientView::UpdateProperties(IJSValueReader const &reader, bool for SaveDefinition(); } -#endif void RadialGradientView::Unload() { m_stops.clear(); diff --git a/windows/RNSVG/RadialGradientView.h b/windows/RNSVG/RadialGradientView.h index 0735530c..a2462c9b 100644 --- a/windows/RNSVG/RadialGradientView.h +++ b/windows/RNSVG/RadialGradientView.h @@ -1,65 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "RadialGradientProps.g.h" -#endif - #include "RadialGradientView.g.h" #include "BrushView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(RadialGradientProps) -struct RadialGradientProps : RadialGradientPropsT { - RadialGradientProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(fx) - RNSVG::SVGLength fx{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(fy) - RNSVG::SVGLength fy{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(cx) - RNSVG::SVGLength cx{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(cy) - RNSVG::SVGLength cy{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(rx) - RNSVG::SVGLength rx{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(ry) - RNSVG::SVGLength ry{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(gradient) - std::optional> gradient{}; - REACT_FIELD(gradientUnits) - std::optional gradientUnits; - REACT_FIELD(gradientTransform) - std::optional> gradientTransform; -}; -#endif - struct RadialGradientView : RadialGradientViewT { public: RadialGradientView() = default; -#ifdef USE_FABRIC - RadialGradientView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void Unload(); @@ -74,10 +25,6 @@ struct RadialGradientView : RadialGradientViewT m_stops{}; std::string m_gradientUnits{"objectBoundingBox"}; -#ifdef USE_FABRIC - com_ptr m_props; -#endif - // BrushView void CreateBrush(); void UpdateBounds(); diff --git a/windows/RNSVG/ReactPackageProvider.cpp b/windows/RNSVG/ReactPackageProvider.cpp index b8e62dbc..b8715e5c 100644 --- a/windows/RNSVG/ReactPackageProvider.cpp +++ b/windows/RNSVG/ReactPackageProvider.cpp @@ -7,25 +7,20 @@ #include "RNSVGModule.h" #ifdef USE_FABRIC -#include "SvgView.h" -#include "RectView.h" -#include "CircleView.h" -#include "EllipseView.h" -#include "LineView.h" -#include "PathView.h" -#include "ImageView.h" -#include "UseView.h" -#include "GroupView.h" -#include "SymbolView.h" -#include "DefsView.h" -#include "ClipPathView.h" -#include "MarkerView.h" -#include "MaskView.h" -#include "LinearGradientView.h" -#include "RadialGradientView.h" -#include "PatternView.h" -#include "TextView.h" -#include "TSpanView.h" +#include "Fabric/SvgView.h" +#include "Fabric/RectView.h" +#include "Fabric/CircleView.h" +#include "Fabric/EllipseView.h" +#include "Fabric/LineView.h" +#include "Fabric/PathView.h" +#include "Fabric/ImageView.h" +#include "Fabric/UseView.h" +#include "Fabric/GroupView.h" +#include "Fabric/DefsView.h" +#include "Fabric/ClipPathView.h" +#include "Fabric/LinearGradientView.h" +#include "Fabric/RadialGradientView.h" +#include "Fabric/UnsupportedSvgView.h" #else #include "SvgViewManager.h" #include "GroupViewManager.h" @@ -60,24 +55,33 @@ namespace winrt::RNSVG::implementation auto fabricPackageBuilder = packageBuilder.as(); SvgView::RegisterComponent(fabricPackageBuilder); - RectView::RegisterComponent(fabricPackageBuilder); - CircleView::RegisterComponent(fabricPackageBuilder); - EllipseView::RegisterComponent(fabricPackageBuilder); - LineView::RegisterComponent(fabricPackageBuilder); - PathView::RegisterComponent(fabricPackageBuilder); - ImageView::RegisterComponent(fabricPackageBuilder); - UseView::RegisterComponent(fabricPackageBuilder); - GroupView::RegisterComponent(fabricPackageBuilder); - SymbolView::RegisterComponent(fabricPackageBuilder); - DefsView::RegisterComponent(fabricPackageBuilder); - ClipPathView::RegisterComponent(fabricPackageBuilder); - MarkerView::RegisterComponent(fabricPackageBuilder); - MaskView::RegisterComponent(fabricPackageBuilder); - LinearGradientView::RegisterComponent(fabricPackageBuilder); - RadialGradientView::RegisterComponent(fabricPackageBuilder); - PatternView::RegisterComponent(fabricPackageBuilder); - TextView::RegisterComponent(fabricPackageBuilder); - TSpanView::RegisterComponent(fabricPackageBuilder); + RegisterRectComponent(fabricPackageBuilder); + RegisterCircleComponent(fabricPackageBuilder); + RegisterEllipseComponent(fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFilter", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFeBlend", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFeColorMatrix", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFeComposite", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFeFlood", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFeGaussianBlur", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFeMerge", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGFeOffset", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGForeignObject", fabricPackageBuilder); + RegisterLineComponent(fabricPackageBuilder); + RegisterPathComponent(fabricPackageBuilder); + RegisterImageComponent(fabricPackageBuilder); + RegisterUseComponent(fabricPackageBuilder); + RegisterGroupComponent(fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGSymbol", fabricPackageBuilder); + RegisterDefsComponent(fabricPackageBuilder); + RegisterClipPathComponent(fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGMarker", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGMask", fabricPackageBuilder); + RegisterLinearGradientComponent(fabricPackageBuilder); + RegisterRadialGradientComponent(fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGPattern", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGText", fabricPackageBuilder); + RegisterUnsupportedSvgComponent(L"RNSVGTSpan", fabricPackageBuilder); #else packageBuilder.AddViewManager(L"SvgViewManager", []() { return winrt::make(); }); packageBuilder.AddViewManager(L"RectViewManager", []() { return winrt::make(); }); diff --git a/windows/RNSVG/RectView.cpp b/windows/RNSVG/RectView.cpp index bf3f5a18..77d250a0 100644 --- a/windows/RNSVG/RectView.cpp +++ b/windows/RNSVG/RectView.cpp @@ -22,18 +22,8 @@ void RectProps::SetProp( winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); } -RectView::RectView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - void RectView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGRect", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); + RegisterRenderableComponent(L"RNSVGRect", builder); } void RectView::UpdateProperties( @@ -43,14 +33,12 @@ void RectView::UpdateProperties( bool invalidate) noexcept { auto rectProps = props.try_as(); if (rectProps) { - m_props = rectProps; - - m_x = m_props->x; - m_y = m_props->y; - m_width = m_props->width; - m_height = m_props->height; - m_rx = m_props->rx; - m_ry = m_props->ry; + m_x = rectProps->x; + m_y = rectProps->y; + m_width = rectProps->width; + m_height = rectProps->height; + m_rx = rectProps->rx; + m_ry = rectProps->ry; } base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); diff --git a/windows/RNSVG/RectView.h b/windows/RNSVG/RectView.h index 8be7d78e..90c13668 100644 --- a/windows/RNSVG/RectView.h +++ b/windows/RNSVG/RectView.h @@ -1,59 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "RectProps.g.h" -#endif - #include "RectView.g.h" #include "RenderableView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(RectProps) -struct RectProps : RectPropsT { - RectProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(x) - RNSVG::SVGLength x{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y) - RNSVG::SVGLength y{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(height) - RNSVG::SVGLength height{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(width) - RNSVG::SVGLength width{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(rx) - RNSVG::SVGLength rx{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(ry) - RNSVG::SVGLength ry{0, winrt::RNSVG::LengthType::Unknown}; -}; -#endif - struct RectView : RectViewT { public: RectView() = default; -#ifdef USE_FABRIC - RectView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable void CreateGeometry(RNSVG::D2DDeviceContext const &context); @@ -65,10 +22,6 @@ struct RectView : RectViewT { RNSVG::SVGLength m_y{}; RNSVG::SVGLength m_rx{}; RNSVG::SVGLength m_ry{}; - -#ifdef USE_FABRIC - com_ptr m_props; -#endif }; } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/RenderableView.cpp b/windows/RNSVG/RenderableView.cpp index 989d9067..ce7b61d6 100644 --- a/windows/RNSVG/RenderableView.cpp +++ b/windows/RNSVG/RenderableView.cpp @@ -35,52 +35,59 @@ void SvgRenderableCommonProps::SetProp( winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); } -RenderableView::RenderableView( - const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) - : base_type(args), m_reactContext(args.ReactContext()) {} - void RenderableView::MountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept { + const winrt::Microsoft::ReactNative::ComponentView&, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs& args) noexcept +{ const RNSVG::RenderableView &view{*this}; - const auto &group{view.try_as()}; - const auto &child{childComponentView.try_as()}; + if (auto userData = args.Child().UserData()) { + const auto &group{view.try_as()}; + const auto &child{userData.try_as()}; + m_children.InsertAt(args.Index(), child); - if (group && child) { - base_type::MountChildComponentView(childComponentView, index); - child.MergeProperties(*this); + userData.as().SvgParent(*this); - if (child.IsResponsible() && !IsResponsible()) { - IsResponsible(true); - } + assert(group && child); + if (group && child) { + child.MergeProperties(*this); - if (auto const &root{SvgRoot()}) { - root.Invalidate(); + if (child.IsResponsible() && !IsResponsible()) { + IsResponsible(true); + } + + if (auto const &root{SvgRoot()}) { + root.Invalidate(); + } } } } void RenderableView::UnmountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept { - const RNSVG::RenderableView &view{*this}; - const auto &group{view.try_as()}; - const auto &child{childComponentView.try_as()}; + const winrt::Microsoft::ReactNative::ComponentView &, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept { + if (auto userData = args.Child().UserData()) { + const RNSVG::RenderableView &view{*this}; + const auto &group{view.try_as()}; + const auto &child{userData.try_as()}; - if (group && child) { - if (!IsUnloaded()) { - child.Unload(); - } + userData.as().SvgParent(nullptr); - base_type::UnmountChildComponentView(childComponentView, index); + if (group && child) { + if (!IsUnloaded()) { + child.Unload(); + } - if (auto const &root{SvgRoot()}) { - root.Invalidate(); + m_children.RemoveAt(args.Index()); + + if (auto const &root{SvgRoot()}) { + root.Invalidate(); + } } } } void RenderableView::UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView & /*view*/, const winrt::Microsoft::ReactNative::IComponentProps &props, const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept { if (!props && !oldProps) @@ -98,7 +105,7 @@ void RenderableView::UpdateProperties( auto oldRenderableProps = oldProps ? oldProps.as() : nullptr; - auto const &parent{Parent().try_as()}; + auto const &parent{SvgParent().try_as()}; // propList /* @@ -207,7 +214,7 @@ void RenderableView::UpdateProperties( std::find(renderableProps->propList->begin(), renderableProps->propList->end(), "fill") != renderableProps->propList->end()}; - if (forceUpdate || !m_propSetMap[RNSVG::BaseProp::Fill]) { + if (forceUpdate || (fillSet && !m_propSetMap[RNSVG::BaseProp::Fill])) { winrt::Microsoft::ReactNative::Color fallbackColor{winrt::Microsoft::ReactNative::Color::Black()}; if (renderableProps->fill == std::nullopt && fillSet) { fallbackColor = winrt::Microsoft::ReactNative::Color::Transparent(); @@ -400,10 +407,15 @@ void RenderableView::UpdateProperties( m_recreateResources = true; - if (invalidate && Parent()) { + if (invalidate && SvgParent()) { SvgRoot().Invalidate(); } } + +const winrt::Windows::Foundation::Collections::IVector& RenderableView::Children() const noexcept { + return m_children; +} + #else void RenderableView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -717,8 +729,8 @@ RNSVG::SvgView RenderableView::SvgRoot() { if (auto parent = SvgParent()) { if (auto const &svgView{parent.try_as()}) { if (auto const &svgViewParent = svgView.SvgParent()) { - if (auto const &parent{svgViewParent.try_as()}) { - return parent.SvgRoot(); + if (auto const &renderableParent{svgViewParent.try_as()}) { + return renderableParent.SvgRoot(); } else { return svgView; } diff --git a/windows/RNSVG/RenderableView.h b/windows/RNSVG/RenderableView.h index 5b8b4fa2..a8eed7b2 100644 --- a/windows/RNSVG/RenderableView.h +++ b/windows/RNSVG/RenderableView.h @@ -5,156 +5,14 @@ #include "D2DDeviceContext.h" #include "D2DGeometry.h" -#ifdef USE_FABRIC -#include "SvgNodeCommonProps.g.h" -#include "SvgRenderableCommonProps.g.h" - -#include -#endif - #include namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(ColorStruct) -struct ColorStruct { - REACT_FIELD(type) - int32_t type{-1}; - - REACT_FIELD(payload) - winrt::Microsoft::ReactNative::Color payload{nullptr}; - - REACT_FIELD(brushRef) - std::string brushRef; - - bool operator==(const ColorStruct &rhs) const { - return type == rhs.type && payload == rhs.payload && brushRef == rhs.brushRef; - } - - bool operator!=(const ColorStruct &rhs) const { - return !(*this == rhs); - } -}; - -// Currently no good way to do inheritance in REACT_STRUCTS -#define REACT_SVG_NODE_COMMON_PROPS \ - REACT_FIELD(name) \ - REACT_FIELD(opacity) \ - REACT_FIELD(matrix) \ - REACT_FIELD(mask) \ - REACT_FIELD(markerStart) \ - REACT_FIELD(markerMid) \ - REACT_FIELD(markerEnd) \ - REACT_FIELD(clipPath) \ - REACT_FIELD(clipRule) \ - REACT_FIELD(responsible) \ - REACT_FIELD(display) \ - REACT_FIELD(pointerEvents) - -REACT_STRUCT(SvgNodeCommonProps) -struct SvgNodeCommonProps : SvgNodeCommonPropsT { - SvgNodeCommonProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - virtual void SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept; - - REACT_SVG_NODE_COMMON_PROPS; - - std::optional name; - std::optional opacity; // 1.0f - std::optional> matrix; - std::optional mask; - std::optional markerStart; - std::optional markerMid; - std::optional markerEnd; - std::optional clipPath; - std::optional clipRule; // RNSVG::FillRule::EvenOdd - std::optional responsible; - std::optional display; - std::optional pointerEvents; - - private: - winrt::Microsoft::ReactNative::ViewProps m_props{nullptr}; -}; - -// Currently no good way to do inheritance in REACT_STRUCTS -#define REACT_SVG_RENDERABLE_COMMON_PROPS \ - REACT_FIELD(fill) \ - REACT_FIELD(fillOpacity) \ - REACT_FIELD(fillRule) \ - REACT_FIELD(stroke) \ - REACT_FIELD(strokeOpacity) \ - REACT_FIELD(strokeWidth) \ - REACT_FIELD(strokeLinecap) \ - REACT_FIELD(strokeLinejoin) \ - REACT_FIELD(strokeDasharray) \ - REACT_FIELD(strokeDashoffset) \ - REACT_FIELD(strokeMiterlimit) \ - REACT_FIELD(vectorEffect) \ - REACT_FIELD(propList) - -REACT_STRUCT(SvgRenderableCommonProps) -struct SvgRenderableCommonProps - : SvgRenderableCommonPropsT { - SvgRenderableCommonProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - std::optional fill; - std::optional fillOpacity; // 1.0f - std::optional fillRule; // RNSVG::FillRule::NonZero - std::optional stroke; - std::optional strokeOpacity; // 1.0f - std::optional strokeWidth; - std::optional strokeLinecap; // RNSVG::LineCap::Butt - std::optional strokeLinejoin; // RNSVG::LineJoin::Miter - std::optional> strokeDasharray; - std::optional strokeDashoffset; - std::optional strokeMiterlimit; - std::optional vectorEffect; // 0 - std::optional> propList; -}; -#endif struct RenderableView : RenderableViewT { public: RenderableView() = default; -#ifdef USE_FABRIC - RenderableView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - // IRenderableFabric - winrt::Microsoft::ReactNative::ComponentView SvgParent() { return Parent(); } - winrt::Microsoft::ReactNative::Color Fill() { return m_fill; } - winrt::Microsoft::ReactNative::Color Stroke() { return m_stroke; } - - // ComponentView - void MountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept; - void UnmountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept; - - virtual void UpdateProps( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept; - - // IRenderableFabric - virtual void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept; -#else RenderableView(Microsoft::ReactNative::IReactContext const &context) : m_reactContext(context) {} // IRenderablePaper @@ -165,7 +23,6 @@ struct RenderableView : RenderableViewT { Windows::UI::Color Stroke() { return m_stroke; } virtual void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate = true, bool invalidate = true); -#endif RNSVG::SvgView SvgRoot(); @@ -203,9 +60,7 @@ struct RenderableView : RenderableViewT { virtual RNSVG::IRenderable HitTest(Windows::Foundation::Point const &point); protected: -#ifndef USE_FABRIC std::vector m_propList{}; -#endif float m_opacity{1.0f}; std::map m_propSetMap{ @@ -224,22 +79,11 @@ struct RenderableView : RenderableViewT { }; private: -#ifdef USE_FABRIC - winrt::Microsoft::ReactNative::ComponentView m_parent{nullptr}; - winrt::Microsoft::ReactNative::Color m_fill{winrt::Microsoft::ReactNative::Color::Black()}; - winrt::Microsoft::ReactNative::Color m_stroke{winrt::Microsoft::ReactNative::Color::Transparent()}; - - void SetColor( - std::optional &propValue, - winrt::Microsoft::ReactNative::Color const &fallbackColor, - std::string propName); -#else xaml::FrameworkElement m_parent{nullptr}; Windows::UI::Color m_fill{Colors::Black()}; Windows::UI::Color m_stroke{Colors::Transparent()}; void SetColor(const Microsoft::ReactNative::JSValueObject &propValue, Windows::UI::Color const &fallbackColor, std::string propName); -#endif Microsoft::ReactNative::IReactContext m_reactContext{nullptr}; RNSVG::D2DGeometry m_geometry{nullptr}; diff --git a/windows/RNSVG/SVGLength.cpp b/windows/RNSVG/SVGLength.cpp index 7f757e71..c326652e 100644 --- a/windows/RNSVG/SVGLength.cpp +++ b/windows/RNSVG/SVGLength.cpp @@ -104,4 +104,28 @@ void ReadValue(IJSValueReader const &reader, /*out*/ winrt::RNSVG::SVGLength &va } } + } // namespace winrt::Microsoft::ReactNative + +namespace winrt::RNSVG { + +D2D1_SVG_LENGTH D2dSvgLength(const winrt::RNSVG::SVGLength &value) noexcept { + switch (value.Unit) { + case RNSVG::LengthType::Percentage: + return {value.Value, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_PERCENTAGE}; + case RNSVG::LengthType::Unknown: + case RNSVG::LengthType::EMS: + case RNSVG::LengthType::EXS: + case RNSVG::LengthType::Centimeter: + case RNSVG::LengthType::Millimeter: + case RNSVG::LengthType::Inch: + case RNSVG::LengthType::Point: + case RNSVG::LengthType::Pica: + default: + // Unsupported unit type + __fallthrough; + case RNSVG::LengthType::Number: + return {value.Value, D2D1_SVG_LENGTH_UNITS::D2D1_SVG_LENGTH_UNITS_NUMBER}; + } +} +} // namespace winrt::RNSVG diff --git a/windows/RNSVG/SVGLength.h b/windows/RNSVG/SVGLength.h index 046a5a81..920f3fee 100644 --- a/windows/RNSVG/SVGLength.h +++ b/windows/RNSVG/SVGLength.h @@ -2,9 +2,7 @@ #include -#ifndef USE_FABRIC #include "JSValueXaml.h" -#endif namespace winrt::Microsoft::ReactNative { void WriteValue(IJSValueWriter const &writer, const winrt::RNSVG::SVGLength &value) noexcept; diff --git a/windows/RNSVG/SvgView.cpp b/windows/RNSVG/SvgView.cpp index c40cd4c7..9100caa7 100644 --- a/windows/RNSVG/SvgView.cpp +++ b/windows/RNSVG/SvgView.cpp @@ -18,148 +18,12 @@ #include "D2DDeviceContext.h" #include "GroupView.h" -#ifdef USE_FABRIC -#include -#include -#endif - #include using namespace winrt; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -SvgViewProps::SvgViewProps( - const winrt::Microsoft::ReactNative::ViewProps &props) - : m_props(props) {} - -void SvgViewProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -SvgView::SvgView(const winrt::Microsoft::ReactNative::Composition::CreateCompositionComponentViewArgs &args) - : base_type(args), - m_reactContext(args.ReactContext()), - m_compContext( - args.as() - .CompositionContext()) {} - -winrt::Microsoft::ReactNative::Composition::Experimental::IVisual SvgView::CreateInternalVisual() { - m_visual = m_compContext.CreateSpriteVisual(); - m_visual.Comment(L"SVGRoot"); - return m_visual; -} - -void SvgView::MountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept { - auto const &group{childComponentView.try_as()}; - - if (group) { - // Every SvgView has exactly one child - a Group that gets - // all of Svg's children piped through. - Group(group); - } - - base_type::MountChildComponentView(childComponentView, index); -} - -void SvgView::UnmountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept { - if (Group()) { - Group().Unload(); - } - Group(nullptr); - - base_type::UnmountChildComponentView(childComponentView, index); -} - -void SvgView::OnThemeChanged() noexcept { - Invalidate(); - base_type::OnThemeChanged(); -} - -void SvgView::UpdateProps( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept { - UpdateProperties(props, oldProps); -} - -void SvgView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent(L"RNSVGSvgView", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - auto compBuilder = builder.as(); - compBuilder.SetCreateViewComponentView([](const winrt::Microsoft::ReactNative::Composition::CreateCompositionComponentViewArgs &args) noexcept { - args.Features(args.Features() & ~winrt::Microsoft::ReactNative::Composition::ComponentViewFeatures::Background); - return winrt::make(args); - }); - }); -} - -void SvgView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) { - auto svgProps = props.try_as(); - auto oldSvgProps = oldProps ? oldProps.try_as() : nullptr; - - // If forceUpdate is false, that means this is a nested Svg - // and we're inheriting props. Pass those along to the group. - if (!forceUpdate && m_group) { - m_group.UpdateProperties(props, oldProps, forceUpdate, invalidate); - return; - } - - if (!oldSvgProps || svgProps->bbWidth != oldSvgProps->bbWidth) { - m_bbWidth = svgProps->bbWidth; - } - if (!oldSvgProps || svgProps->bbHeight != oldSvgProps->bbHeight) { - m_bbHeight = svgProps->bbHeight; - } - if (!oldSvgProps || svgProps->vbWidth != oldSvgProps->vbWidth) { - m_vbWidth = svgProps->vbWidth; - } - if (!oldSvgProps || svgProps->vbHeight != oldSvgProps->vbHeight) { - m_vbHeight = svgProps->vbHeight; - } - if (!oldSvgProps || svgProps->minX != oldSvgProps->minX) { - m_minX = svgProps->minX; - } - if (!oldSvgProps || svgProps->minY != oldSvgProps->minY) { - m_minY = svgProps->minY; - } - if (!oldSvgProps || svgProps->align != oldSvgProps->align) { - m_align = svgProps->align; - } - if (!oldSvgProps || svgProps->meetOrSlice != oldSvgProps->meetOrSlice) { - m_meetOrSlice = svgProps->meetOrSlice; - } - if (!oldSvgProps || svgProps->color != oldSvgProps->color) { - m_currentColor = svgProps->color; - } - - Invalidate(); -} - -void SvgView::UpdateLayoutMetrics( - const LayoutMetrics &metrics, - const LayoutMetrics &oldMetrics) { - m_layoutMetrics = metrics; - base_type::UpdateLayoutMetrics(metrics, oldMetrics); - - if (metrics != oldMetrics) { - Invalidate(); - } -} -#else SvgView::SvgView(IReactContext const &context) : m_reactContext(context) { uint32_t creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; @@ -290,14 +154,9 @@ void SvgView::Panel_Unloaded(IInspectable const &sender, xaml::RoutedEventArgs c svgView.Unload(); } } -#endif winrt::Windows::Foundation::Size SvgView::CanvasSize() noexcept { -#ifdef USE_FABRIC - return winrt::Windows::Foundation::Size{m_layoutMetrics.Frame.Width, m_layoutMetrics.Frame.Height}; -#else return ActualSize(); -#endif } void SvgView::SaveDefinition() { @@ -357,12 +216,10 @@ void SvgView::CreateResources() { Invalidate(); -#ifndef USE_FABRIC m_image.Width(ActualWidth()); m_image.Height(ActualHeight()); m_image.Stretch(xaml::Media::Stretch::UniformToFill); Children().Append(m_image); -#endif } void SvgView::Unload() { @@ -379,48 +236,6 @@ void SvgView::Invalidate() { m_brushes.Clear(); m_templates.Clear(); -#ifdef USE_FABRIC - Size size = CanvasSize(); - - if (size.Height == 0 || size.Width == 0) { - return; - } - - if (Theme().IsEmpty()) { - return; - } - - auto drawingSurface = m_compContext.CreateDrawingSurfaceBrush( - size, - winrt::Windows::Graphics::DirectX::DirectXPixelFormat::B8G8R8A8UIntNormalized, - winrt::Windows::Graphics::DirectX::DirectXAlphaMode::Premultiplied); - - POINT offset; - { - ::Microsoft::ReactNative::Composition::AutoDrawDrawingSurface autoDraw(drawingSurface, 1.0, &offset); - if (auto deviceContext = autoDraw.GetRenderTarget()) { - auto transform = Numerics::make_float3x2_translation({static_cast(offset.x), static_cast(offset.y)}); - deviceContext->SetTransform(D2DHelpers::AsD2DTransform(transform)); - - deviceContext->Clear(D2D1::ColorF(D2D1::ColorF::Black, 0.0f)); - - com_ptr spDeviceContext; - spDeviceContext.copy_from(deviceContext); - - m_deviceContext = winrt::make(spDeviceContext); - - com_ptr spDevice; - spDeviceContext->GetDevice(spDevice.put()); - - m_device = winrt::make(spDevice); - - Draw(m_deviceContext, size); - } - } - - m_visual.Brush(drawingSurface); - -#else if (!m_loaded) { return; } @@ -465,6 +280,5 @@ void SvgView::Invalidate() { sisNativeWithD2D->EndDraw(); m_image.Source(surfaceImageSource); -#endif } } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/SvgView.h b/windows/RNSVG/SvgView.h index 43bb7138..251851d7 100644 --- a/windows/RNSVG/SvgView.h +++ b/windows/RNSVG/SvgView.h @@ -2,91 +2,15 @@ #include "SvgView.g.h" -#ifdef USE_FABRIC -#include "SvgViewProps.g.h" - -#include -#include "NativeModules.h" -#endif - #include "SVGLength.h" #include "Utils.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(SvgViewProps) -struct SvgViewProps : SvgViewPropsT { - SvgViewProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept; - - REACT_FIELD(bbWidth) - winrt::RNSVG::SVGLength bbWidth{0.0, winrt::RNSVG::LengthType::Unknown}; - - REACT_FIELD(bbHeight) - winrt::RNSVG::SVGLength bbHeight{0.0, winrt::RNSVG::LengthType::Unknown}; - - REACT_FIELD(minX) - float minX; - REACT_FIELD(minY) - float minY; - REACT_FIELD(vbWidth) - float vbWidth; - REACT_FIELD(vbHeight) - float vbHeight; - REACT_FIELD(align) - std::string align; - REACT_FIELD(meetOrSlice) - RNSVG::MeetOrSlice meetOrSlice{RNSVG::MeetOrSlice::Meet}; - REACT_FIELD(tintColor) - winrt::Microsoft::ReactNative::Color tintColor{nullptr}; - REACT_FIELD(color) - winrt::Microsoft::ReactNative::Color color{nullptr}; - - private: - winrt::Microsoft::ReactNative::ViewProps m_props{nullptr}; -}; -#endif - struct SvgView : SvgViewT { public: SvgView() = default; -#ifdef USE_FABRIC - SvgView(const winrt::Microsoft::ReactNative::Composition::CreateCompositionComponentViewArgs &args); - - winrt::Microsoft::ReactNative::ComponentView SvgParent() { return Parent(); } - winrt::Microsoft::ReactNative::Color CurrentColor() { return m_currentColor; } - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true); - - // Overrides - // IInternalCreateVisual - winrt::Microsoft::ReactNative::Composition::Experimental::IVisual CreateInternalVisual(); - - // ComponentView - void UpdateProps( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept; - void UpdateLayoutMetrics( - const winrt::Microsoft::ReactNative::LayoutMetrics &metrics, - const winrt::Microsoft::ReactNative::LayoutMetrics &oldMetrics); - void MountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept; - void UnmountChildComponentView( - const winrt::Microsoft::ReactNative::ComponentView &childComponentView, - uint32_t index) noexcept; - void OnThemeChanged() noexcept; - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; -#else SvgView(winrt::Microsoft::ReactNative::IReactContext const &context); xaml::FrameworkElement SvgParent() { return m_parent; } @@ -103,7 +27,6 @@ struct SvgView : SvgViewT { void Panel_Loaded(winrt::Windows::Foundation::IInspectable const &sender, xaml::RoutedEventArgs const &args); void Panel_Unloaded(winrt::Windows::Foundation::IInspectable const &sender, xaml::RoutedEventArgs const &args); -#endif winrt::Windows::Foundation::Size CanvasSize() noexcept; @@ -139,12 +62,6 @@ struct SvgView : SvgViewT { void Invalidate(); private: -#ifdef USE_FABRIC - winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual m_visual{nullptr}; - winrt::Microsoft::ReactNative::Color m_currentColor{nullptr}; - winrt::Microsoft::ReactNative::LayoutMetrics m_layoutMetrics{{0, 0, 0, 0}, 1.0}; - winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext m_compContext{nullptr}; -#else bool m_loaded{false}; xaml::FrameworkElement m_parent{nullptr}; xaml::Controls::Image m_image; @@ -152,7 +69,6 @@ struct SvgView : SvgViewT { xaml::FrameworkElement::Loaded_revoker m_panelLoadedRevoker{}; xaml::FrameworkElement::Unloaded_revoker m_panelUnloadedRevoker{}; -#endif // Shared Microsoft::ReactNative::IReactContext m_reactContext{nullptr}; diff --git a/windows/RNSVG/SymbolView.cpp b/windows/RNSVG/SymbolView.cpp index 451474bc..d1143c3a 100644 --- a/windows/RNSVG/SymbolView.cpp +++ b/windows/RNSVG/SymbolView.cpp @@ -10,50 +10,6 @@ using namespace winrt; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -SymbolProps::SymbolProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void SymbolProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -SymbolView::SymbolView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void SymbolView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGSymbol", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void SymbolView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto symbolProps = props.try_as(); - if (symbolProps) { - m_props = symbolProps; - - m_minX = m_props->minX; - m_minY = m_props->minY; - m_vbWidth = m_props->vbWidth; - m_vbHeight = m_props->vbHeight; - m_align = m_props->align; - m_meetOrSlice = m_props->meetOrSlice; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void SymbolView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -78,5 +34,5 @@ void SymbolView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif + } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/SymbolView.h b/windows/RNSVG/SymbolView.h index 76874969..5f864e2f 100644 --- a/windows/RNSVG/SymbolView.h +++ b/windows/RNSVG/SymbolView.h @@ -1,59 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "SymbolProps.g.h" -#endif - #include "SymbolView.g.h" #include "GroupView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(SymbolProps) -struct SymbolProps : SymbolPropsT { - SymbolProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(minX) - float minX{0.0f}; - REACT_FIELD(minY) - float minY{0.0f}; - REACT_FIELD(vbWidth) - float vbWidth{0.0f}; - REACT_FIELD(vbHeight) - float vbHeight{0.0f}; - REACT_FIELD(align) - std::string align{""}; - REACT_FIELD(meetOrSlice) - RNSVG::MeetOrSlice meetOrSlice{RNSVG::MeetOrSlice::Meet}; -}; -#endif - struct SymbolView : SymbolViewT { public: SymbolView() = default; -#ifdef USE_FABRIC - SymbolView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif float MinX() { return m_minX; } float MinY() { return m_minY; } @@ -72,11 +29,6 @@ struct SymbolView : SymbolViewT { float m_vbHeight{0.0f}; std::string m_align{""}; RNSVG::MeetOrSlice m_meetOrSlice{RNSVG::MeetOrSlice::Meet}; - -#ifdef USE_FABRIC - com_ptr m_props; -#endif - }; } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/TSpanView.cpp b/windows/RNSVG/TSpanView.cpp index 91ca8354..580679b8 100644 --- a/windows/RNSVG/TSpanView.cpp +++ b/windows/RNSVG/TSpanView.cpp @@ -13,44 +13,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -TSpanProps::TSpanProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void TSpanProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -TSpanView::TSpanView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void TSpanView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGTSpan", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void TSpanView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto tspanProps = props.try_as(); - if (tspanProps) { - m_props = tspanProps; - m_content = m_props->content; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void TSpanView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -65,7 +27,6 @@ void TSpanView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void TSpanView::Draw(RNSVG::D2DDeviceContext const &context, Size const &size) { com_ptr deviceContext{get_self(context)->Get()}; diff --git a/windows/RNSVG/TSpanView.h b/windows/RNSVG/TSpanView.h index c7f15a8d..2d2188cc 100644 --- a/windows/RNSVG/TSpanView.h +++ b/windows/RNSVG/TSpanView.h @@ -1,62 +1,22 @@ #pragma once -#ifdef USE_FABRIC -#include "TSpanProps.g.h" -#endif - #include "TSpanView.g.h" #include "TextView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(TSpanProps) -struct TSpanProps : TSpanPropsT { - TSpanProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - REACT_SVG_GROUP_COMMON_PROPS; - REACT_SVG_TEXT_COMMON_PROPS; - - REACT_FIELD(content) - std::string content{""}; -}; -#endif - struct TSpanView : TSpanViewT { public: TSpanView() = default; -#ifdef USE_FABRIC - TSpanView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // IRenderable virtual void Draw(RNSVG::D2DDeviceContext const &deviceContext, Windows::Foundation::Size const &size); private: std::string m_content; - -#ifdef USE_FABRIC - com_ptr m_props; -#endif - }; } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/TextView.cpp b/windows/RNSVG/TextView.cpp index 6e65211c..29fdd8d7 100644 --- a/windows/RNSVG/TextView.cpp +++ b/windows/RNSVG/TextView.cpp @@ -11,83 +11,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -SvgTextCommonProps::SvgTextCommonProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void SvgTextCommonProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -TextView::TextView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void TextView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGText", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void TextView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto textProps = props.try_as(); - if (textProps) { - m_props = textProps; - - if (textProps->x != std::nullopt) { - m_x.Clear(); - - for (auto const &item : *textProps->x) { - m_x.Append(item); - } - } - - if (textProps->y != std::nullopt) { - m_y.Clear(); - - for (auto const &item : *textProps->y) { - m_y.Append(item); - } - } - - if (textProps->dx != std::nullopt) { - m_dx.Clear(); - - for (auto const &item : *textProps->dx) { - m_dx.Append(item); - } - } - - if (textProps->dy != std::nullopt) { - m_dy.Clear(); - - for (auto const &item : *textProps->dy) { - m_dy.Append(item); - } - } - - if (textProps->rotate != std::nullopt) { - m_rotate.Clear(); - - for (auto const &item : *textProps->rotate) { - m_rotate.Append(item); - } - } - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void TextView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -125,7 +48,6 @@ void TextView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void TextView::DrawGroup(RNSVG::D2DDeviceContext const &context, Size const &size) { com_ptr deviceContext{get_self(context)->Get()}; diff --git a/windows/RNSVG/TextView.h b/windows/RNSVG/TextView.h index 4865857b..29313587 100644 --- a/windows/RNSVG/TextView.h +++ b/windows/RNSVG/TextView.h @@ -1,72 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "SvgTextCommonProps.g.h" -#endif - #include "TextView.g.h" #include "GroupView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -#define REACT_SVG_TEXT_COMMON_PROPS \ - REACT_FIELD(dx) \ - REACT_FIELD(dy) \ - REACT_FIELD(x) \ - REACT_FIELD(y) \ - REACT_FIELD(rotate) \ - REACT_FIELD(inlineSize) \ - REACT_FIELD(textLength) \ - REACT_FIELD(baselineShift) \ - REACT_FIELD(lengthAdjust) \ - REACT_FIELD(alignmentBaseline) \ - REACT_FIELD(verticalAlign) - -REACT_STRUCT(SvgTextCommonProps) -struct SvgTextCommonProps : SvgTextCommonPropsT { - SvgTextCommonProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - REACT_SVG_GROUP_COMMON_PROPS; - - std::optional> dx; - std::optional> dy; - std::optional> x; - std::optional> y; - std::optional> rotate; - RNSVG::SVGLength inlineSize{0, winrt::RNSVG::LengthType::Unknown}; - RNSVG::SVGLength textLength{0, winrt::RNSVG::LengthType::Unknown}; - RNSVG::SVGLength baselineShift{0, winrt::RNSVG::LengthType::Unknown}; - std::string lengthAdjust; - std::string alignmentBaseline; - RNSVG::SVGLength verticalAlign{0, winrt::RNSVG::LengthType::Unknown}; -}; -#endif - struct TextView : TextViewT { public: TextView() = default; -#ifdef USE_FABRIC - TextView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; - - // IRenderableFabric - virtual void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept; -#else // IRenderablePaper virtual void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif Windows::Foundation::Collections::IVector X() { return m_x; } Windows::Foundation::Collections::IVector Y() { return m_y; } @@ -83,13 +27,9 @@ struct TextView : TextViewT { Windows::Foundation::Collections::IVector m_dx{winrt::single_threaded_vector()}; Windows::Foundation::Collections::IVector m_dy{winrt::single_threaded_vector()}; Windows::Foundation::Collections::IVector m_rotate{winrt::single_threaded_vector()}; - -#ifdef USE_FABRIC - com_ptr m_props; -#endif - }; } // namespace winrt::RNSVG::implementation + namespace winrt::RNSVG::factory_implementation { struct TextView : TextViewT {}; } // namespace winrt::RNSVG::factory_implementation diff --git a/windows/RNSVG/UseView.cpp b/windows/RNSVG/UseView.cpp index 04de3e6e..8a044972 100644 --- a/windows/RNSVG/UseView.cpp +++ b/windows/RNSVG/UseView.cpp @@ -11,49 +11,6 @@ using namespace Microsoft::ReactNative; namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -UseProps::UseProps(const winrt::Microsoft::ReactNative::ViewProps &props) : base_type(props) {} - -void UseProps::SetProp( - uint32_t hash, - winrt::hstring propName, - winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { - winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); -} - -UseView::UseView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) : base_type(args) {} - -void UseView::RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept { - builder.AddViewComponent( - L"RNSVGUse", [](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { - builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props) noexcept { - return winrt::make(props); - }); - builder.SetCreateComponentView([](const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args) noexcept { - return winrt::make(args); - }); - }); -} - -void UseView::UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate, - bool invalidate) noexcept { - auto useProps = props.try_as(); - if (useProps) { - m_props = useProps; - - m_href = winrt::to_hstring(m_props->href); - m_x = m_props->x; - m_y = m_props->y; - m_width = m_props->width; - m_height = m_props->height; - } - - base_type::UpdateProperties(props, oldProps, forceUpdate, invalidate); -} -#else void UseView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, bool invalidate) { const JSValueObject &propertyMap{JSValue::ReadObjectFrom(reader)}; @@ -76,7 +33,6 @@ void UseView::UpdateProperties(IJSValueReader const &reader, bool forceUpdate, b __super::UpdateProperties(reader, forceUpdate, invalidate); } -#endif void UseView::Draw(RNSVG::D2DDeviceContext const &context, Size const &size) { if (auto const &view{GetRenderableTemplate()}) { @@ -129,11 +85,7 @@ void UseView::Draw(RNSVG::D2DDeviceContext const &context, Size const &size) { deviceContext->PopLayer(); // Restore original template props -#ifdef USE_FABRIC - auto renderable{view.try_as()}; -#else auto renderable{view.try_as()}; -#endif if (renderable) { if (auto const &parent{renderable.SvgParent().try_as()}) { view.MergeProperties(parent); diff --git a/windows/RNSVG/UseView.h b/windows/RNSVG/UseView.h index 7aa78f25..40aa52bc 100644 --- a/windows/RNSVG/UseView.h +++ b/windows/RNSVG/UseView.h @@ -1,57 +1,16 @@ #pragma once -#ifdef USE_FABRIC -#include "UseProps.g.h" -#endif - #include "UseView.g.h" #include "RenderableView.h" namespace winrt::RNSVG::implementation { -#ifdef USE_FABRIC -REACT_STRUCT(UseProps) -struct UseProps : UsePropsT { - UseProps(const winrt::Microsoft::ReactNative::ViewProps &props); - - void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept - override; - - REACT_SVG_NODE_COMMON_PROPS; - REACT_SVG_RENDERABLE_COMMON_PROPS; - - REACT_FIELD(href) - std::string href; - REACT_FIELD(x) - RNSVG::SVGLength x{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(y) - RNSVG::SVGLength y{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(width) - RNSVG::SVGLength width{0, winrt::RNSVG::LengthType::Unknown}; - REACT_FIELD(height) - RNSVG::SVGLength height{0, winrt::RNSVG::LengthType::Unknown}; -}; -#endif - struct UseView : UseViewT { public: UseView() = default; -#ifdef USE_FABRIC - UseView(const winrt::Microsoft::ReactNative::CreateComponentViewArgs &args); - - // IRenderableFabric - void UpdateProperties( - const winrt::Microsoft::ReactNative::IComponentProps &props, - const winrt::Microsoft::ReactNative::IComponentProps &oldProps, - bool forceUpdate = true, - bool invalidate = true) noexcept override; - - static void RegisterComponent(const winrt::Microsoft::ReactNative::IReactPackageBuilderFabric &builder) noexcept; -#else // IRenderablePaper void UpdateProperties(Microsoft::ReactNative::IJSValueReader const &reader, bool forceUpdate, bool invalidate); -#endif // RenderableView void Draw(RNSVG::D2DDeviceContext const &deviceContext, Windows::Foundation::Size const &size); @@ -63,10 +22,6 @@ private: RNSVG::SVGLength m_width{}; RNSVG::SVGLength m_height{}; -#ifdef USE_FABRIC - com_ptr m_props; -#endif - RNSVG::IRenderable GetRenderableTemplate(); }; } // namespace winrt::RNSVG::implementation diff --git a/windows/RNSVG/Utils.h b/windows/RNSVG/Utils.h index c6a53f9c..34f684e2 100644 --- a/windows/RNSVG/Utils.h +++ b/windows/RNSVG/Utils.h @@ -2,11 +2,6 @@ #include "pch.h" -#ifdef USE_FABRIC -#include -#include -#endif - #include #include #include "JSValueReader.h" @@ -171,54 +166,6 @@ struct Utils { } } -#ifdef USE_FABRIC - static std::string JSValueAsBrushUnits( - std::optional const &value, - std::string defaultValue = "objectBoundingBox") { - return (value.has_value() && *value == 1) ? "userSpaceOnUse" : defaultValue; - } - - static float JSValueAsFloat(std::optional const &value, float defaultValue = 0.0f) { - return value.has_value() ? *value : defaultValue; - } - - static std::string JSValueAsString(std::optional const &value, std::string defaultValue = "") { - return value.has_value() ? *value : defaultValue; - } - - static D2D1::Matrix3x2F JSValueAsD2DTransform(std::optional> const &value) { - if (value.has_value()) { - auto matrix{value.value()}; - return D2D1::Matrix3x2F( - matrix.at(0), - matrix.at(1), - matrix.at(2), - matrix.at(3), - matrix.at(4), - matrix.at(5)); - } - - return D2D1::Matrix3x2F::Identity(); - } - - static std::vector JSValueAsGradientStops(std::optional> const &value) { - if (value.has_value()) { - auto gradient = value.value(); - std::vector gradientStops; - - for (size_t i = 0; i < gradient.size(); ++i) { - D2D1_GRADIENT_STOP stop{}; - stop.position = Utils::JSValueAsFloat(gradient.at(i)); - stop.color = D2DHelpers::AsD2DColor(Utils::JSValueAsD2DColor(gradient.at(++i))); - gradientStops.emplace_back(stop); - } - - return gradientStops; - } - - return {}; - } -#else static std::string JSValueAsBrushUnits(JSValue const &value, std::string defaultValue = "objectBoundingBox") { if (value.IsNull()) { return defaultValue; @@ -306,7 +253,6 @@ struct Utils { return gradientStops; } -#endif static winrt::Windows::UI::Color JSValueAsD2DColor(float value) { auto color = static_cast(value); @@ -321,11 +267,7 @@ struct Utils { static com_ptr GetCanvasBrush( hstring const &brushId, -#ifdef USE_FABRIC - winrt::Microsoft::ReactNative::Color const &color, -#else Windows::UI::Color const &color, -#endif RNSVG::SvgView const &root, com_ptr const &geometry, RNSVG::D2DDeviceContext const &context) { @@ -337,11 +279,7 @@ struct Utils { if (root && brushId != L"") { if (brushId == L"currentColor") { com_ptr scb; -#ifdef USE_FABRIC - winColor = root.CurrentColor().AsWindowsColor(root.Theme()); -#else winColor = root.CurrentColor(); -#endif deviceContext->CreateSolidColorBrush(D2DHelpers::AsD2DColor(winColor), scb.put()); brush = scb.as(); } else if (auto const &brushView{root.Brushes().TryLookup(brushId)}) { @@ -360,11 +298,7 @@ struct Utils { if (!brush) { com_ptr scb; assert(root != nullptr); -#ifdef USE_FABRIC - winColor = color.AsWindowsColor(root.Theme()); -#else winColor = color; -#endif deviceContext->CreateSolidColorBrush(D2DHelpers::AsD2DColor(winColor), scb.put()); brush = scb.as(); } diff --git a/windows/RNSVG/ViewProps.idl b/windows/RNSVG/ViewProps.idl deleted file mode 100644 index e154a217..00000000 --- a/windows/RNSVG/ViewProps.idl +++ /dev/null @@ -1,107 +0,0 @@ -namespace RNSVG -{ - [experimental] - [default_interface] - unsealed runtimeclass SvgNodeCommonProps : Microsoft.ReactNative.IComponentProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass SvgRenderableCommonProps : SvgNodeCommonProps { - }; - - [experimental] - [default_interface] - runtimeclass SvgViewProps : Microsoft.ReactNative.IComponentProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass RectProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass CircleProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass EllipseProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass LineProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass PathProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass UseProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass SymbolProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass ImageProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass SvgGroupCommonProps : SvgRenderableCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass DefsProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass ClipPathProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass MarkerProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass MaskProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass LinearGradientProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass RadialGradientProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass PatternProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass SvgTextCommonProps : SvgGroupCommonProps { - }; - - [experimental] - [default_interface] - unsealed runtimeclass TSpanProps : SvgTextCommonProps { - }; -} \ No newline at end of file diff --git a/windows/RNSVG/packages.lock.json b/windows/RNSVG/packages.lock.json index 7bb35021..f371378e 100644 --- a/windows/RNSVG/packages.lock.json +++ b/windows/RNSVG/packages.lock.json @@ -4,9 +4,9 @@ "native,Version=v0.0": { "boost": { "type": "Direct", - "requested": "[1.76.0, )", - "resolved": "1.76.0", - "contentHash": "p+w3YvNdXL8Cu9Fzrmexssu0tZbWxuf6ywsQqHjDlKFE5ojXHof1HIyMC3zDLfLnh80dIeFcEUAuR2Asg/XHRA==" + "requested": "[1.83.0, )", + "resolved": "1.83.0", + "contentHash": "cy53VNMzysEMvhBixDe8ujPk67Fcj3v6FPHQnH91NYJNLHpc6jxa2xq9ruCaaJjE4M3YrGSHDi4uUSTGBWw6EQ==" }, "Microsoft.VCRTForwarders.140": { "type": "Direct", @@ -31,8 +31,8 @@ }, "Microsoft.JavaScript.Hermes": { "type": "Transitive", - "resolved": "0.1.21", - "contentHash": "5njCh+3eXTLOv7+8nOnp6nJ5C0r6it5ze54c0nuWleeDptuK8t3dEDB79XTU4D5DKNvAPlqJpgXRDOak5nYIug==" + "resolved": "0.1.23", + "contentHash": "cA9t1GjY4Yo0JD1AfA//e1lOwk48hLANfuX6GXrikmEBNZVr2TIX5ONJt5tqCnpZyLz6xGiPDgTfFNKbSfb21g==" }, "Microsoft.Windows.SDK.BuildTools": { "type": "Transitive", @@ -42,7 +42,7 @@ "common": { "type": "Project", "dependencies": { - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "fmt": { @@ -52,7 +52,7 @@ "type": "Project", "dependencies": { "Fmt": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "microsoft.reactnative": { @@ -60,17 +60,17 @@ "dependencies": { "Common": "[1.0.0, )", "Folly": "[1.0.0, )", - "Microsoft.JavaScript.Hermes": "[0.1.21, )", + "Microsoft.JavaScript.Hermes": "[0.1.23, )", "Microsoft.WindowsAppSDK": "[1.5.240227000, )", "ReactCommon": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } }, "reactcommon": { "type": "Project", "dependencies": { "Folly": "[1.0.0, )", - "boost": "[1.76.0, )" + "boost": "[1.83.0, )" } } }