From 4e159a6a9ed45491dfd02a325f88d2defab21314 Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Tue, 21 Mar 2023 19:18:49 +0300 Subject: [PATCH 01/27] Fix react native bugs --- packages/camera/package.json | 5 +- .../AddDamageModal/AddDamageHelpModal.js | 1 + .../components/AddDamageModal/PartSelector.js | 7 +- .../SVGComponentMapper.native.js | 128 +++++++++++++++++ ...entMapper.js => SVGComponentMapper.web.js} | 0 .../AddDamageModal/assets/RotateLeft.js | 1 - .../AddDamageModal/assets/RotateRight.js | 1 - .../AddDamageModal/hooks/useXMLParser.js | 1 + .../src/components/AddDamageModal/index.js | 1 + .../AddDamageOverlay/index.native.js | 90 ++++++++++-- .../src/components/Camera/index.native.js | 19 ++- .../camera/src/components/Camera/styles.js | 1 - .../camera/src/components/Capture/capture.js | 5 +- .../camera/src/components/Capture/hooks.js | 134 ++++++++++++------ .../camera/src/components/Controls/index.js | 2 +- .../camera/src/components/Sights/index.js | 1 - .../camera/src/components/Thumbnail/index.js | 1 - .../src/components/UploadCenter/index.js | 58 ++++---- .../camera/src/hooks/useEventStorage/index.js | 15 +- .../assets/overlays/fesc20-0mJeXBDf.svg | 2 +- .../assets/overlays/fesc20-26n47kaO.svg | 2 +- .../assets/overlays/fesc20-2bLRuhEQ.svg | 2 +- .../assets/overlays/fesc20-4Wqx52oU.svg | 2 +- .../assets/overlays/fesc20-5Ts1UkPT.svg | 2 +- .../assets/overlays/fesc20-6GPUkfYn.svg | 2 +- .../assets/overlays/fesc20-CEGtqHkk.svg | 2 +- .../assets/overlays/fesc20-DBLpo-52.svg | 2 +- .../assets/overlays/fesc20-EJ0tXYBW.svg | 2 +- .../assets/overlays/fesc20-GdIxD-_N.svg | 2 +- .../assets/overlays/fesc20-H1dfdfvH.svg | 2 +- .../assets/overlays/fesc20-HYz5ziHi.svg | 2 +- .../assets/overlays/fesc20-LTe3X2bg.svg | 2 +- .../assets/overlays/fesc20-LZc7p2kK.svg | 2 +- .../assets/overlays/fesc20-NLdqASzl.svg | 2 +- .../assets/overlays/fesc20-P0oSEh8p.svg | 2 +- .../assets/overlays/fesc20-P470Q-jm.svg | 2 +- .../assets/overlays/fesc20-T4dIGLgy.svg | 2 +- .../assets/overlays/fesc20-UjtbRtJS.svg | 2 +- .../assets/overlays/fesc20-WIQsf_gX.svg | 2 +- .../assets/overlays/fesc20-WMUaKDp1.svg | 2 +- .../assets/overlays/fesc20-Wzdtgqqz.svg | 2 +- .../assets/overlays/fesc20-X8k7UFGf.svg | 2 +- .../assets/overlays/fesc20-bD8CBhYZ.svg | 2 +- .../assets/overlays/fesc20-dKVLig1i.svg | 2 +- .../assets/overlays/fesc20-dfICsfSV.svg | 2 +- .../assets/overlays/fesc20-fOt832UV.svg | 2 +- .../assets/overlays/fesc20-gg1Xyrpu.svg | 2 +- .../assets/overlays/fesc20-hp3Tk53x.svg | 2 +- .../assets/overlays/fesc20-iUN0g_Zn.svg | 2 +- .../assets/overlays/fesc20-j3H8Z415.svg | 2 +- .../assets/overlays/fesc20-r_UeXQRO.svg | 2 +- .../assets/overlays/fesc20-xBFiEy-_.svg | 2 +- .../assets/overlays/fesc20-xDFQNR3C.svg | 2 +- .../sights/assets/overlays/ff150--xPZZd83.svg | 2 +- .../sights/assets/overlays/ff150-18YVVN-G.svg | 2 +- .../sights/assets/overlays/ff150-2WUJ179s.svg | 2 +- .../sights/assets/overlays/ff150-3dkU10af.svg | 2 +- .../sights/assets/overlays/ff150-3he9UOwy.svg | 2 +- .../sights/assets/overlays/ff150-3lKZIoxw.svg | 2 +- .../sights/assets/overlays/ff150-3rM9XB0Z.svg | 2 +- .../sights/assets/overlays/ff150-7UI3m9B3.svg | 2 +- .../sights/assets/overlays/ff150-7nvlys8r.svg | 2 +- .../sights/assets/overlays/ff150-BmXfb-qD.svg | 2 +- .../sights/assets/overlays/ff150-FqbrFVr2.svg | 2 +- .../sights/assets/overlays/ff150-GOx2s_9L.svg | 2 +- .../sights/assets/overlays/ff150-KgHVkQBW.svg | 2 +- .../sights/assets/overlays/ff150-OviO2DlY.svg | 2 +- .../sights/assets/overlays/ff150-Ttsc7q6V.svg | 2 +- .../sights/assets/overlays/ff150-V-xzfWsx.svg | 2 +- .../sights/assets/overlays/ff150-_AoeFdVO.svg | 2 +- .../sights/assets/overlays/ff150-_UIadfVL.svg | 2 +- .../sights/assets/overlays/ff150-eOjyMInj.svg | 2 +- .../sights/assets/overlays/ff150-gFp78fQO.svg | 2 +- .../sights/assets/overlays/ff150-g_xBOOS2.svg | 2 +- .../sights/assets/overlays/ff150-k4kh7Vra.svg | 2 +- .../sights/assets/overlays/ff150-nF_oFvhI.svg | 2 +- .../sights/assets/overlays/ff150-o8MiTw8u.svg | 2 +- .../sights/assets/overlays/ff150-ouGGtRnf.svg | 2 +- .../sights/assets/overlays/ff150-phbX7Bef.svg | 2 +- .../sights/assets/overlays/ff150-t3KBMPeD.svg | 2 +- .../sights/assets/overlays/ff150-tT8sqplK.svg | 2 +- .../sights/assets/overlays/ff150-vwE3yqdh.svg | 2 +- .../sights/assets/overlays/ff150-wO_fJ3DL.svg | 2 +- .../sights/assets/overlays/ff150-xbOhu7nK.svg | 2 +- .../sights/assets/overlays/ff150-zXbg0l3z.svg | 2 +- .../assets/overlays/ffocus18-3TiCVAaN.svg | 2 +- .../assets/overlays/ffocus18-43ljK5xC.svg | 2 +- .../assets/overlays/ffocus18-6FX31ty1.svg | 2 +- .../assets/overlays/ffocus18-8WjvbtMD.svg | 2 +- .../assets/overlays/ffocus18-9MeSIqp7.svg | 2 +- .../assets/overlays/ffocus18-D_QaaCTd.svg | 2 +- .../assets/overlays/ffocus18-FdsQDaTW.svg | 2 +- .../assets/overlays/ffocus18-GgOSpLl6.svg | 2 +- .../assets/overlays/ffocus18-GiTxaJUq.svg | 2 +- .../assets/overlays/ffocus18-IoqRrmlA.svg | 2 +- .../assets/overlays/ffocus18-KkeGvT-F.svg | 2 +- .../assets/overlays/ffocus18-L2UM_68Q.svg | 2 +- .../assets/overlays/ffocus18-L_oZ0LyK.svg | 2 +- .../assets/overlays/ffocus18-P2jFq1Ea.svg | 2 +- .../assets/overlays/ffocus18-QKfhXU7o.svg | 2 +- .../assets/overlays/ffocus18-S3kgFOBb.svg | 2 +- .../assets/overlays/ffocus18-U3Bcfc2Q.svg | 2 +- .../assets/overlays/ffocus18-UBB7HoxF.svg | 2 +- .../assets/overlays/ffocus18-Wo8PkcLF.svg | 2 +- .../assets/overlays/ffocus18-X2LDjCvr.svg | 2 +- .../assets/overlays/ffocus18-XlfgjQb9.svg | 2 +- .../assets/overlays/ffocus18-ZXKOomlv.svg | 2 +- .../assets/overlays/ffocus18-cPUyM28L.svg | 2 +- .../assets/overlays/ffocus18-cXSAj2ez.svg | 2 +- .../assets/overlays/ffocus18-e5netaNs.svg | 2 +- .../assets/overlays/ffocus18-iQvwc6wa.svg | 2 +- .../assets/overlays/ffocus18-jWOq2CNN.svg | 2 +- .../assets/overlays/ffocus18-lRDlWiwR.svg | 2 +- .../assets/overlays/ffocus18-p6mBZGcW.svg | 2 +- .../assets/overlays/ffocus18-seOy3jwd.svg | 2 +- .../assets/overlays/ffocus18-ts3buSD1.svg | 2 +- .../assets/overlays/ffocus18-vFR9PKjB.svg | 2 +- .../assets/overlays/ffocus18-x_1SE7X-.svg | 2 +- .../assets/overlays/ffocus18-yo9eBDW6.svg | 2 +- .../assets/overlays/ffocus18-zgLKB-Do.svg | 2 +- .../assets/overlays/ftransit18--w_ir_yH.svg | 2 +- .../assets/overlays/ftransit18-3Sbfx_KZ.svg | 2 +- .../assets/overlays/ftransit18-3dkU10af.svg | 2 +- .../assets/overlays/ftransit18-3fnjrISV.svg | 2 +- .../assets/overlays/ftransit18-4NMPqEV6.svg | 2 +- .../assets/overlays/ftransit18-5SiNC94w.svg | 2 +- .../assets/overlays/ftransit18-6X8IAjy0.svg | 2 +- .../assets/overlays/ftransit18-6khKhof0.svg | 2 +- .../assets/overlays/ftransit18-E7DAv47J.svg | 2 +- .../assets/overlays/ftransit18-FFP5b34o.svg | 2 +- .../assets/overlays/ftransit18-G24AdP6r.svg | 2 +- .../assets/overlays/ftransit18-IIVI_pnX.svg | 2 +- .../assets/overlays/ftransit18-NwBMLo3Z.svg | 2 +- .../assets/overlays/ftransit18-RJ2D7DNz.svg | 2 +- .../assets/overlays/ftransit18-TkXihCj4.svg | 2 +- .../assets/overlays/ftransit18-UNAZWJ-r.svg | 2 +- .../assets/overlays/ftransit18-Y0vPhBVF.svg | 2 +- .../assets/overlays/ftransit18-aA2K898S.svg | 2 +- .../assets/overlays/ftransit18-cf0e-pcB.svg | 2 +- .../assets/overlays/ftransit18-eXJDDYmE.svg | 2 +- .../assets/overlays/ftransit18-eztNpSRX.svg | 2 +- .../assets/overlays/ftransit18-f2W6pHaR.svg | 2 +- .../assets/overlays/ftransit18-ffghVsNz.svg | 2 +- .../assets/overlays/ftransit18-iu1Vj2Oa.svg | 2 +- .../assets/overlays/ftransit18-klUp8BS4.svg | 2 +- .../assets/overlays/ftransit18-pd2Q_O9P.svg | 2 +- .../assets/overlays/ftransit18-qmLP7A-b.svg | 2 +- .../assets/overlays/ftransit18-rsXWUN8X.svg | 2 +- .../assets/overlays/ftransit18-sLAPXyG8.svg | 2 +- .../assets/overlays/ftransit18-wyXf7MTv.svg | 2 +- .../assets/overlays/ftransit18-xyp1rU0h.svg | 2 +- .../assets/overlays/ftransit18-y_wTc7ED.svg | 2 +- .../assets/overlays/haccord-2a8VfA8m.svg | 2 +- .../assets/overlays/haccord-5LlCuIfL.svg | 2 +- .../assets/overlays/haccord-6kYUBv_e.svg | 2 +- .../assets/overlays/haccord-8YjMcu0D.svg | 2 +- .../assets/overlays/haccord-DUPnw5jj.svg | 2 +- .../assets/overlays/haccord-EfRIciFr.svg | 2 +- .../assets/overlays/haccord-GQcZz48C.svg | 2 +- .../assets/overlays/haccord-GdWvsqrm.svg | 2 +- .../assets/overlays/haccord-Gtt0JNQl.svg | 2 +- .../assets/overlays/haccord-Jq65fyD4.svg | 2 +- .../assets/overlays/haccord-KN23XXkX.svg | 2 +- .../assets/overlays/haccord-KvP-pm8L.svg | 2 +- .../assets/overlays/haccord-OXYy5gET.svg | 2 +- .../assets/overlays/haccord-PGr3RzzP.svg | 2 +- .../assets/overlays/haccord-QKfhXU7o.svg | 2 +- .../assets/overlays/haccord-Qel0qUky.svg | 2 +- .../assets/overlays/haccord-W-Bn3bU1.svg | 2 +- .../assets/overlays/haccord-Z84erkMb.svg | 2 +- .../assets/overlays/haccord-_YnTubBA.svg | 2 +- .../assets/overlays/haccord-bSAv3Hrj.svg | 2 +- .../assets/overlays/haccord-bg-RFHl_.svg | 2 +- .../assets/overlays/haccord-cXSAj2ez.svg | 2 +- .../assets/overlays/haccord-d3VJTvYw.svg | 2 +- .../assets/overlays/haccord-d_u3qyQ-.svg | 2 +- .../assets/overlays/haccord-hsCc_Nct.svg | 2 +- .../assets/overlays/haccord-huAZfQJA.svg | 2 +- .../assets/overlays/haccord-k6MiX2MR.svg | 2 +- .../assets/overlays/haccord-mdZ7optI.svg | 2 +- .../assets/overlays/haccord-oiY_yPTR.svg | 2 +- .../assets/overlays/haccord-pplCo6sV.svg | 2 +- .../assets/overlays/haccord-ps7cWy6K.svg | 2 +- .../assets/overlays/haccord-sorgeRJ7.svg | 2 +- .../assets/overlays/haccord-t5sLlmfv.svg | 2 +- .../assets/overlays/haccord-zNA0vVT0.svg | 2 +- .../sights/assets/overlays/jgc21-0QM-q8k5.svg | 2 +- .../sights/assets/overlays/jgc21-1j-oTPag.svg | 2 +- .../sights/assets/overlays/jgc21-2_5eHL-F.svg | 2 +- .../sights/assets/overlays/jgc21-3JJvM7_B.svg | 2 +- .../sights/assets/overlays/jgc21-3gjMwvQG.svg | 2 +- .../sights/assets/overlays/jgc21-5lovhZgA.svg | 2 +- .../sights/assets/overlays/jgc21-ESc0HCzy.svg | 2 +- .../sights/assets/overlays/jgc21-Emzc8jJA.svg | 2 +- .../sights/assets/overlays/jgc21-F-PPd4qN.svg | 2 +- .../sights/assets/overlays/jgc21-J1Ezdyar.svg | 2 +- .../sights/assets/overlays/jgc21-JerG7oW5.svg | 2 +- .../sights/assets/overlays/jgc21-KyUUVU2P.svg | 2 +- .../sights/assets/overlays/jgc21-QIkcNhc_.svg | 2 +- .../sights/assets/overlays/jgc21-QIvfeg0X.svg | 2 +- .../sights/assets/overlays/jgc21-QwNQX0Cr.svg | 2 +- .../sights/assets/overlays/jgc21-RAVpqaE4.svg | 2 +- .../sights/assets/overlays/jgc21-RE3li6rE.svg | 2 +- .../sights/assets/overlays/jgc21-TEoi50Ff.svg | 2 +- .../sights/assets/overlays/jgc21-TRN9Des4.svg | 2 +- .../sights/assets/overlays/jgc21-TyJPUs8E.svg | 2 +- .../sights/assets/overlays/jgc21-VHq_6BM-.svg | 2 +- .../sights/assets/overlays/jgc21-XXh8GWm8.svg | 2 +- .../sights/assets/overlays/jgc21-ZubJ48-U.svg | 2 +- .../sights/assets/overlays/jgc21-__JKllz9.svg | 2 +- .../sights/assets/overlays/jgc21-ezXzTRkj.svg | 2 +- .../sights/assets/overlays/jgc21-imomJ2V0.svg | 2 +- .../sights/assets/overlays/jgc21-m2dDoMup.svg | 2 +- .../sights/assets/overlays/jgc21-omlus7Ui.svg | 2 +- .../sights/assets/overlays/jgc21-s7WDTRmE.svg | 2 +- .../sights/assets/overlays/jgc21-tbF2Ax8v.svg | 2 +- .../sights/assets/overlays/jgc21-z15ZdJL6.svg | 2 +- .../sights/assets/overlays/jgc21-zCrDwYWE.svg | 2 +- .../sights/assets/overlays/jgc21-zkvFMHnS.svg | 2 +- .../assets/overlays/tsienna20--a2RmRcs.svg | 2 +- .../assets/overlays/tsienna20-1LNxhgCR.svg | 2 +- .../assets/overlays/tsienna20-1n_z8bYy.svg | 2 +- .../assets/overlays/tsienna20-4ihRwDkS.svg | 2 +- .../assets/overlays/tsienna20-65mfPdRD.svg | 2 +- .../assets/overlays/tsienna20-670P2H2V.svg | 2 +- .../assets/overlays/tsienna20-D6pPBrXx.svg | 2 +- .../assets/overlays/tsienna20-HykkFbXf.svg | 2 +- .../assets/overlays/tsienna20-Ia0SGJ6z.svg | 2 +- .../assets/overlays/tsienna20-KHB_Cd9k.svg | 2 +- .../assets/overlays/tsienna20-MPCqHzeH.svg | 2 +- .../assets/overlays/tsienna20-OxFWgEPk.svg | 2 +- .../assets/overlays/tsienna20-QIMXlb0L.svg | 2 +- .../assets/overlays/tsienna20-Rw0Gtt7O.svg | 2 +- .../assets/overlays/tsienna20-SebsoqJm.svg | 2 +- .../assets/overlays/tsienna20-TI4TVvT9.svg | 2 +- .../assets/overlays/tsienna20-TibS83Qr.svg | 2 +- .../assets/overlays/tsienna20-U_FqYq-a.svg | 2 +- .../assets/overlays/tsienna20-V2jVo2wV.svg | 2 +- .../assets/overlays/tsienna20-YwrRNr9n.svg | 2 +- .../assets/overlays/tsienna20-ZlRQXL-j.svg | 2 +- .../assets/overlays/tsienna20-cI285Gon.svg | 2 +- .../assets/overlays/tsienna20-g2uWI1l8.svg | 2 +- .../assets/overlays/tsienna20-gkvZE2c7.svg | 2 +- .../assets/overlays/tsienna20-is1tpnqR.svg | 2 +- .../assets/overlays/tsienna20-jY3cR5vy.svg | 2 +- .../assets/overlays/tsienna20-ouPvuX-j.svg | 2 +- .../assets/overlays/tsienna20-qA3aAUUq.svg | 2 +- .../assets/overlays/tsienna20-u57qDaN_.svg | 2 +- .../assets/overlays/tsienna20-uIHdpQ9y.svg | 2 +- .../assets/overlays/tsienna20-wlbzVAxz.svg | 2 +- .../assets/overlays/tsienna20-xtDcn3GS.svg | 2 +- .../part-selectors/fesc20-front-left.svg | 2 +- .../part-selectors/fesc20-front-right.svg | 2 +- .../part-selectors/fesc20-rear-left.svg | 2 +- .../part-selectors/fesc20-rear-right.svg | 2 +- .../part-selectors/ff150-front-left.svg | 2 +- .../part-selectors/ff150-front-right.svg | 2 +- .../assets/part-selectors/ff150-rear-left.svg | 2 +- .../part-selectors/ff150-rear-right.svg | 2 +- .../part-selectors/ffocus18-front-left.svg | 2 +- .../part-selectors/ffocus18-front-right.svg | 2 +- .../part-selectors/ffocus18-rear-left.svg | 2 +- .../part-selectors/ffocus18-rear-right.svg | 2 +- .../part-selectors/ftransit18-front-left.svg | 2 +- .../part-selectors/ftransit18-front-right.svg | 2 +- .../part-selectors/ftransit18-rear-left.svg | 2 +- .../part-selectors/ftransit18-rear-right.svg | 2 +- .../part-selectors/haccord-front-left.svg | 2 +- .../part-selectors/haccord-front-right.svg | 2 +- .../part-selectors/haccord-rear-left.svg | 2 +- .../part-selectors/haccord-rear-right.svg | 2 +- .../part-selectors/jgc21-front-left.svg | 2 +- .../part-selectors/jgc21-front-right.svg | 2 +- .../assets/part-selectors/jgc21-rear-left.svg | 2 +- .../part-selectors/jgc21-rear-right.svg | 2 +- .../part-selectors/tsienna20-front-left.svg | 2 +- .../part-selectors/tsienna20-front-right.svg | 2 +- .../part-selectors/tsienna20-rear-left.svg | 2 +- .../part-selectors/tsienna20-rear-right.svg | 2 +- 279 files changed, 625 insertions(+), 366 deletions(-) create mode 100644 packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js rename packages/camera/src/components/AddDamageModal/{SVGComponentMapper.js => SVGComponentMapper.web.js} (100%) diff --git a/packages/camera/package.json b/packages/camera/package.json index f2825b9d7..915521d4a 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -44,11 +44,8 @@ }, "dependencies": { "@expo/match-media": "^0.3.0", - "@expo/vector-icons": "^12.0.5", - "@unimodules/core": "^7.1.2", - "@unimodules/react-native-adapter": "^6.3.9", "axios": "^0.24.0", - "expo-image-manipulator": "^10.2.1", + "expo-image-manipulator": "~11.1.1", "expo-screen-orientation": "^4.1.1", "i18next": "^21.8.13", "image-conversion": "^2.1.1", diff --git a/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js b/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js index eac3b082b..bb9e285be 100644 --- a/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js +++ b/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js @@ -14,6 +14,7 @@ const styles = StyleSheet.create({ padding: 20, paddingBottom: 5, maxWidth: 400, + maxHeight: 235 }, header: { alignSelf: 'stretch', diff --git a/packages/camera/src/components/AddDamageModal/PartSelector.js b/packages/camera/src/components/AddDamageModal/PartSelector.js index b03adc13b..7f064118f 100644 --- a/packages/camera/src/components/AddDamageModal/PartSelector.js +++ b/packages/camera/src/components/AddDamageModal/PartSelector.js @@ -32,7 +32,12 @@ export default function PartSelector({ orientation, togglePart, isPartSelected, [height], ); const svgElement = useMemo(() => { - const svg = doc.children[0]; + let svg; + if (Platform.OS === 'web') { + svg = doc.children[0]; + } else { + svg = doc.childNodes[1]; + } if (svg.tagName !== 'svg') { throw new Error('Invalid part selector SVG format: expected tag as the first children of XML document'); } diff --git a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js b/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js new file mode 100644 index 000000000..d358a9bf6 --- /dev/null +++ b/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js @@ -0,0 +1,128 @@ +/* eslint-disable react/no-array-index-key */ +import React, { useMemo } from 'react'; +import PropTypes from 'prop-types'; + +import Svg, { Path, G, } from "react-native-svg"; +import CAR_PARTS from './hooks/carParts'; + +const SELECTED_FILL_COLOR = '#ADE0FFB3'; +const UNSELECTED_FILL_COLOR = 'none'; + +const jsxSpecialAttributes = { + class: 'className', +}; + +export default function SVGComponentMapper({ element, togglePart, isPartSelected, groupName }) { + let names = []; + for (let i = 0; i < element.attributes.length; i++) { + names.push(element.attributes[i].name); + } + + const attributes = useMemo(() => names.reduce((prev, attr) => ({ + ...prev, + [jsxSpecialAttributes[attr] ?? attr]: element.getAttribute(attr), + }), {}), [element]); + + let elementClass; + let elementId; + for (let i = 0; i < element.attributes.length; i++) { + if (element.attributes[i].name === 'class') { + elementClass = element.attributes[i].nodeValue; + } + if (element.attributes[i].name === 'id') { + elementId = element.attributes[i].nodeValue; + } + } + + let partKey = null; + if (groupName && CAR_PARTS.includes(groupName)) { + partKey = groupName; + } + if (elementClass && elementClass.includes('selectable') && CAR_PARTS.includes(elementId)) { + partKey = elementId; + } + + const color = isPartSelected(partKey) ? SELECTED_FILL_COLOR : UNSELECTED_FILL_COLOR; + const onPress = () => { + togglePart(partKey); + }; + + let elementChildren; + elementChildren = []; + if (element.childNodes) { + for (let i = 0; i < element.childNodes.length; i++) { + elementChildren.push(element.childNodes[i]); + } + } + const children = useMemo(() => [...elementChildren], [element]); + const passThroughGroupName = useMemo( + () => { + if (element.tagName === 'g') { + return elementId; + } else { + return null; + } + }, + [element], + ); + + if (element.tagName === 'svg') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } else if (element.tagName === 'path') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } else if (element.tagName === 'g') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } else { + return null; + } +} + +SVGComponentMapper.propTypes = { + element: PropTypes.any.isRequired, + groupName: PropTypes.string, + isPartSelected: PropTypes.func.isRequired, + togglePart: PropTypes.func.isRequired, +}; + +SVGComponentMapper.defaultProps = { + groupName: undefined, +}; diff --git a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.js b/packages/camera/src/components/AddDamageModal/SVGComponentMapper.web.js similarity index 100% rename from packages/camera/src/components/AddDamageModal/SVGComponentMapper.js rename to packages/camera/src/components/AddDamageModal/SVGComponentMapper.web.js diff --git a/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js b/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js index 3ad96583d..27376b31e 100644 --- a/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js +++ b/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js @@ -11,7 +11,6 @@ export default function RotateLeft({ width, height }) { xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 21" preserveAspectRatio="xMidYMid slice" - pointerEvents="box-none" > new DOMParser().parseFromString(xml, 'text/xml'), [xml]); diff --git a/packages/camera/src/components/AddDamageModal/index.js b/packages/camera/src/components/AddDamageModal/index.js index 19e657be3..a53ac4cef 100644 --- a/packages/camera/src/components/AddDamageModal/index.js +++ b/packages/camera/src/components/AddDamageModal/index.js @@ -19,6 +19,7 @@ const styles = StyleSheet.create({ borderRadius: 10, padding: CONTAINER_PADDING, paddingBottom: 5, + maxHeight: 400 }, header: { alignSelf: 'stretch', diff --git a/packages/camera/src/components/AddDamageOverlay/index.native.js b/packages/camera/src/components/AddDamageOverlay/index.native.js index 1c6cb31d9..cf99dba9a 100644 --- a/packages/camera/src/components/AddDamageOverlay/index.native.js +++ b/packages/camera/src/components/AddDamageOverlay/index.native.js @@ -1,24 +1,84 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import PropTypes from 'prop-types'; -import { SvgXml } from 'react-native-svg'; +import { StyleSheet, useWindowDimensions, View } from 'react-native'; + +const styles = StyleSheet.create({ + container: { + position: 'absolute', + top: 0, + bottom: 0, + right: 0, + left: 0, + }, + overlay: { + position: 'absolute', + backgroundColor: '#00000080', + }, +}); + +export default function AddDamageOverlay({ innerWidth, innerHeight }) { + const { width, height } = useWindowDimensions(); + const effectiveInnerHeight = useMemo( + () => (innerHeight > height * 0.75 ? height * 0.75 : innerHeight), + [height, innerHeight], + ); + const effectiveInnerWidth = useMemo( + () => (innerWidth > width * 0.68 ? width * 0.68 : innerWidth), + [height, innerWidth], + ); -export default function Overlay({ label, svg, ...passThoughProps }) { return ( - + <> + + + + + ); } -Overlay.propTypes = { - label: PropTypes.string, - svg: PropTypes.string.isRequired, +AddDamageOverlay.propTypes = { + innerHeight: PropTypes.number, + innerWidth: PropTypes.number, }; -Overlay.defaultProps = { - label: '', +AddDamageOverlay.defaultProps = { + innerHeight: 300, + innerWidth: 450, }; diff --git a/packages/camera/src/components/Camera/index.native.js b/packages/camera/src/components/Camera/index.native.js index b4b30573c..694d730d6 100644 --- a/packages/camera/src/components/Camera/index.native.js +++ b/packages/camera/src/components/Camera/index.native.js @@ -1,4 +1,4 @@ -import React, { forwardRef, useCallback } from 'react'; +import React, { forwardRef, useCallback, useState, useImperativeHandle } from 'react'; import PropTypes from 'prop-types'; import { I18nextProvider, useTranslation } from 'react-i18next'; @@ -22,7 +22,20 @@ function Camera({ }, ref) { const { t } = useTranslation(); const permissions = usePermissions(); + const [cameraRef, setCameraRef] = useState(null); + useImperativeHandle(ref, () => ({ + async takePictureAsync(options) { + return await cameraRef?.takePictureAsync(options); + }, + resumePreview() { + cameraRef?.resumePreview() + }, + pausePreview() { + cameraRef?.pausePreview() + } + })); + const { height: windowHeight, width: windowWidth } = useWindowDimensions(); const size = getSize(ratio, { windowHeight, windowWidth }); @@ -33,7 +46,9 @@ function Camera({ if (permissions.granted && permissions.status === PermissionStatus.GRANTED) { return ( { + setCameraRef(ref) ; + }} ratio={ratio} onMountError={handleError} {...passThroughProps} diff --git a/packages/camera/src/components/Camera/styles.js b/packages/camera/src/components/Camera/styles.js index 6a94150ca..476451318 100644 --- a/packages/camera/src/components/Camera/styles.js +++ b/packages/camera/src/components/Camera/styles.js @@ -12,7 +12,6 @@ export default StyleSheet.create({ backgroundColor: 'rgba(0,0,0,0.75)', borderRadius: 18, color: 'white', - fontFamily: 'monospace', fontSize: 14, lineHeight: 9, marginTop: 4, diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index 3cb278e0d..e8a30c829 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -45,6 +45,9 @@ const ADD_DAMAGE_HELP_EVENT_KEY = 'ADD_DAMAGE_HELP'; const styles = StyleSheet.create({ container: { flex: 1, + height: '100%', + width: '100%', + backgroundColor: 'rgba(0,0,0,0.5)', ...Platform.select({ web: { position: 'absolute', @@ -353,7 +356,7 @@ const Capture = forwardRef(({ const handlePartSelectorConfirm = useCallback((selectedParts) => { setAddDamageParts(selectedParts); setAddDamageStatus(AddDamageStatus.TAKE_PICTURE); - }, [setAddDamageStatus]); + }, [setAddDamageParts, setAddDamageStatus]); const handleCloseCaptureEarly = useCallback(() => { if (typeof onCloseEarly === 'function') { diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index d2bb944af..3cb2c14d6 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -1,7 +1,6 @@ import monk, { useMonitoring } from '@monkvision/corejs'; import { utils } from '@monkvision/toolkit'; import axios from 'axios'; -import { Buffer } from 'buffer'; import { manipulateAsync, SaveFormat } from 'expo-image-manipulator'; import { useCallback, useEffect, useMemo, useState } from 'react'; @@ -190,16 +189,14 @@ export function useStartUploadAsync({ }) { const [queue, setQueue] = useState([]); const { errorHandler } = useMonitoring(); - let isRunning = false; - - const addElement = useCallback((element) => setQueue((prevState) => [...prevState, element]), []); + const [isRunning, setIsRunning] = useState(false); const runQuery = useCallback(async () => { const { ids } = sights.state; const { dispatch } = uploads; if (!isRunning && queue.length > 0) { - isRunning = true; + setIsRunning(true); const queryParams = queue.shift(); if (queryParams) { @@ -209,10 +206,22 @@ export function useStartUploadAsync({ try { const data = new FormData(); data.append(multiPartKeys.json, json); - data.append(multiPartKeys.image, file); - const result = await monk.entity.image.addOne(inspectionId, data); + let result; + if (Platform.OS === 'web') { + result = await monk.entity.image.addOne(inspectionId, data); + } else { + const response = await fetch(monk.config.axiosConfig.baseURL + 'inspections/' + inspectionId + '/images',{ + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data', + 'Authorization': monk.config.accessToken + }, + body: data + }) + result = await response.json() + } onPictureUploaded({ result, picture, inspectionId }); // call onFinish callback when capturing the last picture @@ -237,7 +246,7 @@ export function useStartUploadAsync({ onWarningMessage(null); } } - isRunning = false; + setIsRunning(false); } }, [isRunning, queue, sights.state, uploads, endTour]); @@ -265,10 +274,21 @@ export function useStartUploadAsync({ payload: { id, status: 'pending', label }, }); - const fileType = picture.fileType; - const filename = `${id}-${inspectionId}.${picture.imageFilenameExtension}`; + let fileType; + let filename; + let fileKey; + if (Platform.OS === 'web') { + fileType = picture.fileType; + filename = `${id}-${inspectionId}.${picture.imageFilenameExtension}`; + fileKey = 'image'; + } else { + fileType = 'image/jpeg'; + filename = `${id}-${inspectionId}.${picture.uri.split(/[#?]/)[0].split('.').pop().trim()}`; + fileKey = filename; + } + const multiPartKeys = { - image: 'image', + image: fileKey, json: 'json', type: fileType, filename, @@ -277,7 +297,7 @@ export function useStartUploadAsync({ const json = JSON.stringify({ acquisition: { strategy: 'upload_multipart_form_keys', - file_key: multiPartKeys.image, + file_key: fileKey, }, compliances: { image_quality_assessment: {}, @@ -294,25 +314,25 @@ export function useStartUploadAsync({ }, }); - let fileBits; - + let file; if (Platform.OS === 'web') { const res = await axios.get(picture.uri, { responseType: 'blob' }); - const file = res.data; - - fileBits = [file]; + fileBits = [res.data]; + file = await new File( + fileBits, + multiPartKeys.filename, + { type: multiPartKeys.type }, + ); } else { - const buffer = Buffer.from(picture.uri, 'base64'); - fileBits = new Blob([buffer], { type: picture.imageFilenameExtension }); + file = { + uri: picture.uri, + type: multiPartKeys.type, + name: multiPartKeys.filename + } } - const file = await new File( - fileBits, - multiPartKeys.filename, - { type: multiPartKeys.type }, - ); - - addElement({ multiPartKeys, json, file, id, picture }); + const currentQueue = queue.concat([{ multiPartKeys, json, file, id, picture }]); + setQueue(currentQueue); } catch (err) { dispatch({ type: Actions.uploads.UPDATE_UPLOAD, @@ -324,7 +344,7 @@ export function useStartUploadAsync({ throw err; } - }, [uploads, inspectionId, sights.state, mapTasksToSights, task, onFinish, endTour]); + }, [queue, uploads, inspectionId, sights.state, mapTasksToSights, task, onFinish, endTour]); } export function useUploadAdditionalDamage({ @@ -336,10 +356,23 @@ export function useUploadAdditionalDamage({ } try { - const fileType = picture.fileType; - const filename = `close-up-${Date.now()}-${inspectionId}.${picture.imageFilenameExtension}`; + + let fileType; + let filename; + let fileKey; + if (Platform.OS === 'web') { + fileType = picture.fileType; + filename = `close-up-${Date.now()}-${inspectionId}.${picture.imageFilenameExtension}`; + fileKey = 'image'; + } else { + const fileExtension = picture.uri.split(/[#?]/)[0].split('.').pop().trim(); + fileType = 'image/' + fileExtension; + filename = `close-up-${Date.now()}-${inspectionId}.${fileType}`; + fileKey = filename; + } + const multiPartKeys = { - image: 'image', + image: fileKey, json: 'json', type: fileType, filename, @@ -348,7 +381,7 @@ export function useUploadAdditionalDamage({ const json = JSON.stringify({ acquisition: { strategy: 'upload_multipart_form_keys', - file_key: multiPartKeys.image, + file_key: fileKey, }, compliances: { image_quality_assessment: {}, @@ -368,30 +401,39 @@ export function useUploadAdditionalDamage({ }, }); - let fileBits; - + let file; if (Platform.OS === 'web') { const res = await axios.get(picture.uri, { responseType: 'blob' }); - const file = res.data; - - fileBits = [file]; + fileBits = [res.data]; + file = await new File( + fileBits, + multiPartKeys.filename, + { type: multiPartKeys.type }, + ); } else { - const buffer = Buffer.from(picture.uri, 'base64'); - fileBits = new Blob([buffer], { type: picture.imageFilenameExtension }); + file = { + uri: picture.uri, + type: multiPartKeys.type, + name: multiPartKeys.filename + } } - const file = await new File( - fileBits, - multiPartKeys.filename, - { type: multiPartKeys.type }, - ); - try { const data = new FormData(); data.append(multiPartKeys.json, json); data.append(multiPartKeys.image, file); - - await monk.entity.image.addOne(inspectionId, data); + if (Platform.OS === 'web') { + await monk.entity.image.addOne(inspectionId, data); + } else { + await fetch(monk.config.axiosConfig.baseURL + 'inspections/' + inspectionId + '/images',{ + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data', + 'Authorization': monk.config.accessToken + }, + body: data + }); + } } catch (err) { console.error(err); } finally { diff --git a/packages/camera/src/components/Controls/index.js b/packages/camera/src/components/Controls/index.js index f55ac2c2a..312588622 100644 --- a/packages/camera/src/components/Controls/index.js +++ b/packages/camera/src/components/Controls/index.js @@ -25,7 +25,7 @@ const styles = StyleSheet.create({ display: 'flex', flexDirection: 'column', alignItems: 'center', - justifyContent: 'end', + justifyContent: 'flex-end', }, controlArraySpacer: { height: 20, diff --git a/packages/camera/src/components/Sights/index.js b/packages/camera/src/components/Sights/index.js index ade8b111d..b84dc4514 100644 --- a/packages/camera/src/components/Sights/index.js +++ b/packages/camera/src/components/Sights/index.js @@ -19,7 +19,6 @@ const styles = StyleSheet.create({ paddingVertical: 6, alignSelf: 'center', color: 'white', - fontFamily: 'monospace', textAlign: 'center', lineHeight: 20, marginTop: 10, diff --git a/packages/camera/src/components/Thumbnail/index.js b/packages/camera/src/components/Thumbnail/index.js index d9b171dd5..619b6cd9e 100644 --- a/packages/camera/src/components/Thumbnail/index.js +++ b/packages/camera/src/components/Thumbnail/index.js @@ -36,7 +36,6 @@ const styles = StyleSheet.create({ color: 'white', lineHeight: 10, fontSize: 10, - fontFamily: 'monospace', textAlign: 'center', maxWidth: '100%', paddingVertical: 2, diff --git a/packages/camera/src/components/UploadCenter/index.js b/packages/camera/src/components/UploadCenter/index.js index 5b1babc16..ee7f216b0 100644 --- a/packages/camera/src/components/UploadCenter/index.js +++ b/packages/camera/src/components/UploadCenter/index.js @@ -162,6 +162,35 @@ export default function UploadCenter({ style={[styles.card, { backgroundColor: colors.background, height }]} contentContainerStyle={styles.container} > + + {displayRetakeAll ? ( + + ) : null} + + {/* content */} @@ -217,35 +246,6 @@ export default function UploadCenter({ {/* actions */} - - {displayRetakeAll ? ( - - ) : null} - - ); diff --git a/packages/camera/src/hooks/useEventStorage/index.js b/packages/camera/src/hooks/useEventStorage/index.js index 86734af4c..7c0b506eb 100644 --- a/packages/camera/src/hooks/useEventStorage/index.js +++ b/packages/camera/src/hooks/useEventStorage/index.js @@ -5,8 +5,10 @@ * @param key The event identifier */ import { useCallback, useEffect, useMemo, useState } from 'react'; +import { Platform } from 'react-native'; const EVENTS_PREFIX = '@monkvision_'; +const savedEvents = {}; export default function useEventStorage({ key, @@ -15,7 +17,12 @@ export default function useEventStorage({ const storeKey = useMemo(() => `${EVENTS_PREFIX}${key}`, [key]); useEffect(() => { - const timestampStored = localStorage.getItem(storeKey); + let timestampStored; + if (Platform.OS === 'web') { + timestampStored = localStorage.getItem(storeKey); + } else { + timestampStored = savedEvents.storeKey; + } if (timestampStored) { setLastEventTimestamp(timestampStored); } else { @@ -25,7 +32,11 @@ export default function useEventStorage({ const fireEvent = useCallback(() => { const timestamp = Date.now(); - localStorage.setItem(storeKey, timestamp.toString()); + if (Platform.OS === 'web') { + localStorage.setItem(storeKey, timestamp.toString()); + } else { + savedEvents.storeKey = timestamp.toString(); + } setLastEventTimestamp(timestamp); }, [storeKey, setLastEventTimestamp]); diff --git a/packages/sights/assets/overlays/fesc20-0mJeXBDf.svg b/packages/sights/assets/overlays/fesc20-0mJeXBDf.svg index af0e7be80..8d8efab43 100644 --- a/packages/sights/assets/overlays/fesc20-0mJeXBDf.svg +++ b/packages/sights/assets/overlays/fesc20-0mJeXBDf.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-26n47kaO.svg b/packages/sights/assets/overlays/fesc20-26n47kaO.svg index dc997a3fe..f1af82f36 100644 --- a/packages/sights/assets/overlays/fesc20-26n47kaO.svg +++ b/packages/sights/assets/overlays/fesc20-26n47kaO.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg b/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg index e7bf64733..85c4f1ce4 100644 --- a/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg +++ b/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg b/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg index fd359d74d..f4e658f9a 100644 --- a/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg +++ b/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg b/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg index bed83f169..306ce99d4 100644 --- a/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg +++ b/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg b/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg index f70164c9f..c32c4a26f 100644 --- a/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg +++ b/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg b/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg index b7c792cc1..bab68b568 100644 --- a/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg +++ b/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-DBLpo-52.svg b/packages/sights/assets/overlays/fesc20-DBLpo-52.svg index 62d5ee031..0c5d70321 100644 --- a/packages/sights/assets/overlays/fesc20-DBLpo-52.svg +++ b/packages/sights/assets/overlays/fesc20-DBLpo-52.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg b/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg index bb92973ec..2cfea1281 100644 --- a/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg +++ b/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg b/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg index a59c9c758..a5875011d 100644 --- a/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg +++ b/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg b/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg index efe19e63d..04685c5be 100644 --- a/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg +++ b/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg b/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg index 743330df3..2aad0a015 100644 --- a/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg +++ b/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg b/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg index d4d1bd465..1080308f9 100644 --- a/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg +++ b/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg b/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg index 4909e039a..11ffa4dbd 100644 --- a/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg +++ b/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-NLdqASzl.svg b/packages/sights/assets/overlays/fesc20-NLdqASzl.svg index fb29d66a7..98bedaf3c 100644 --- a/packages/sights/assets/overlays/fesc20-NLdqASzl.svg +++ b/packages/sights/assets/overlays/fesc20-NLdqASzl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg b/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg index 6c1c4b15c..f4a8ab997 100644 --- a/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg +++ b/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-P470Q-jm.svg b/packages/sights/assets/overlays/fesc20-P470Q-jm.svg index 4ac4836e9..2fbc9fa61 100644 --- a/packages/sights/assets/overlays/fesc20-P470Q-jm.svg +++ b/packages/sights/assets/overlays/fesc20-P470Q-jm.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg b/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg index b96076661..96ead3971 100644 --- a/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg +++ b/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg b/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg index 02dcaa579..11574fb43 100644 --- a/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg +++ b/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg b/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg index 461a36acb..174cd7270 100644 --- a/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg +++ b/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg b/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg index f710127da..4545e5e78 100644 --- a/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg +++ b/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg b/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg index 9aa408198..18747a5b0 100644 --- a/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg +++ b/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg b/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg index a3de2f365..82fae553b 100644 --- a/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg +++ b/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg b/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg index a2fdb87a8..1a897cfa9 100644 --- a/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg +++ b/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-dKVLig1i.svg b/packages/sights/assets/overlays/fesc20-dKVLig1i.svg index 0c75b479e..617e49709 100644 --- a/packages/sights/assets/overlays/fesc20-dKVLig1i.svg +++ b/packages/sights/assets/overlays/fesc20-dKVLig1i.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-dfICsfSV.svg b/packages/sights/assets/overlays/fesc20-dfICsfSV.svg index e80886b2f..0773bc1b5 100644 --- a/packages/sights/assets/overlays/fesc20-dfICsfSV.svg +++ b/packages/sights/assets/overlays/fesc20-dfICsfSV.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-fOt832UV.svg b/packages/sights/assets/overlays/fesc20-fOt832UV.svg index e2fb2bed7..bebce88d4 100644 --- a/packages/sights/assets/overlays/fesc20-fOt832UV.svg +++ b/packages/sights/assets/overlays/fesc20-fOt832UV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg index e2a1a4410..7934c3212 100644 --- a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg +++ b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg b/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg index aa9af6c0f..13c354e0d 100644 --- a/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg +++ b/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg b/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg index 8f50b8bf8..c5629e50f 100644 --- a/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg +++ b/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg index 0e272e665..c6f5d9858 100644 --- a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg +++ b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg b/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg index 2a27c9229..128e458e8 100644 --- a/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg +++ b/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg b/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg index 0f11cdd69..73f1e11ed 100644 --- a/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg +++ b/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg b/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg index d44107afb..2b7de0ef1 100644 --- a/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg +++ b/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150--xPZZd83.svg b/packages/sights/assets/overlays/ff150--xPZZd83.svg index 28a4e6745..f1a85dae3 100644 --- a/packages/sights/assets/overlays/ff150--xPZZd83.svg +++ b/packages/sights/assets/overlays/ff150--xPZZd83.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-18YVVN-G.svg b/packages/sights/assets/overlays/ff150-18YVVN-G.svg index 207601549..ae5a94190 100644 --- a/packages/sights/assets/overlays/ff150-18YVVN-G.svg +++ b/packages/sights/assets/overlays/ff150-18YVVN-G.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-2WUJ179s.svg b/packages/sights/assets/overlays/ff150-2WUJ179s.svg index ee88058fc..db581e74f 100644 --- a/packages/sights/assets/overlays/ff150-2WUJ179s.svg +++ b/packages/sights/assets/overlays/ff150-2WUJ179s.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-3dkU10af.svg b/packages/sights/assets/overlays/ff150-3dkU10af.svg index 975e21627..70c2519fb 100644 --- a/packages/sights/assets/overlays/ff150-3dkU10af.svg +++ b/packages/sights/assets/overlays/ff150-3dkU10af.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-3he9UOwy.svg b/packages/sights/assets/overlays/ff150-3he9UOwy.svg index 6486f289d..ffc0c20da 100644 --- a/packages/sights/assets/overlays/ff150-3he9UOwy.svg +++ b/packages/sights/assets/overlays/ff150-3he9UOwy.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-3lKZIoxw.svg b/packages/sights/assets/overlays/ff150-3lKZIoxw.svg index 2f5575c60..90b50304d 100644 --- a/packages/sights/assets/overlays/ff150-3lKZIoxw.svg +++ b/packages/sights/assets/overlays/ff150-3lKZIoxw.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg b/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg index b18c87f6e..cf216c226 100644 --- a/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg +++ b/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-7UI3m9B3.svg b/packages/sights/assets/overlays/ff150-7UI3m9B3.svg index 1f8a6612b..f3d4a5cb0 100644 --- a/packages/sights/assets/overlays/ff150-7UI3m9B3.svg +++ b/packages/sights/assets/overlays/ff150-7UI3m9B3.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-7nvlys8r.svg b/packages/sights/assets/overlays/ff150-7nvlys8r.svg index 518e446a7..eeabf42e6 100644 --- a/packages/sights/assets/overlays/ff150-7nvlys8r.svg +++ b/packages/sights/assets/overlays/ff150-7nvlys8r.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg index e4a89daac..6b066cc6c 100644 --- a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg +++ b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-FqbrFVr2.svg b/packages/sights/assets/overlays/ff150-FqbrFVr2.svg index 1ce185f1f..e0148e969 100644 --- a/packages/sights/assets/overlays/ff150-FqbrFVr2.svg +++ b/packages/sights/assets/overlays/ff150-FqbrFVr2.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-GOx2s_9L.svg b/packages/sights/assets/overlays/ff150-GOx2s_9L.svg index 1e1fa5b83..037ad9e32 100644 --- a/packages/sights/assets/overlays/ff150-GOx2s_9L.svg +++ b/packages/sights/assets/overlays/ff150-GOx2s_9L.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-KgHVkQBW.svg b/packages/sights/assets/overlays/ff150-KgHVkQBW.svg index aac2cf83d..3a8bb4dd9 100644 --- a/packages/sights/assets/overlays/ff150-KgHVkQBW.svg +++ b/packages/sights/assets/overlays/ff150-KgHVkQBW.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-OviO2DlY.svg b/packages/sights/assets/overlays/ff150-OviO2DlY.svg index 0c7d1681a..cf45ecf6e 100644 --- a/packages/sights/assets/overlays/ff150-OviO2DlY.svg +++ b/packages/sights/assets/overlays/ff150-OviO2DlY.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg b/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg index 3a417ea57..790d93d9c 100644 --- a/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg +++ b/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-V-xzfWsx.svg b/packages/sights/assets/overlays/ff150-V-xzfWsx.svg index 84ade6456..80c20dd25 100644 --- a/packages/sights/assets/overlays/ff150-V-xzfWsx.svg +++ b/packages/sights/assets/overlays/ff150-V-xzfWsx.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-_AoeFdVO.svg b/packages/sights/assets/overlays/ff150-_AoeFdVO.svg index 8f8ed94a3..b99e89a0f 100644 --- a/packages/sights/assets/overlays/ff150-_AoeFdVO.svg +++ b/packages/sights/assets/overlays/ff150-_AoeFdVO.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-_UIadfVL.svg b/packages/sights/assets/overlays/ff150-_UIadfVL.svg index 0c9a63277..ac59254b9 100644 --- a/packages/sights/assets/overlays/ff150-_UIadfVL.svg +++ b/packages/sights/assets/overlays/ff150-_UIadfVL.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-eOjyMInj.svg b/packages/sights/assets/overlays/ff150-eOjyMInj.svg index 0a77350c2..71520cfe2 100644 --- a/packages/sights/assets/overlays/ff150-eOjyMInj.svg +++ b/packages/sights/assets/overlays/ff150-eOjyMInj.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-gFp78fQO.svg b/packages/sights/assets/overlays/ff150-gFp78fQO.svg index ef4885cf2..4fce41cc6 100644 --- a/packages/sights/assets/overlays/ff150-gFp78fQO.svg +++ b/packages/sights/assets/overlays/ff150-gFp78fQO.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-g_xBOOS2.svg b/packages/sights/assets/overlays/ff150-g_xBOOS2.svg index fe69764c1..e81c036c0 100644 --- a/packages/sights/assets/overlays/ff150-g_xBOOS2.svg +++ b/packages/sights/assets/overlays/ff150-g_xBOOS2.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-k4kh7Vra.svg b/packages/sights/assets/overlays/ff150-k4kh7Vra.svg index ca7e720d2..3ad815624 100644 --- a/packages/sights/assets/overlays/ff150-k4kh7Vra.svg +++ b/packages/sights/assets/overlays/ff150-k4kh7Vra.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-nF_oFvhI.svg b/packages/sights/assets/overlays/ff150-nF_oFvhI.svg index be9db8652..afa916543 100644 --- a/packages/sights/assets/overlays/ff150-nF_oFvhI.svg +++ b/packages/sights/assets/overlays/ff150-nF_oFvhI.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-o8MiTw8u.svg b/packages/sights/assets/overlays/ff150-o8MiTw8u.svg index 479a37726..f41013ea0 100644 --- a/packages/sights/assets/overlays/ff150-o8MiTw8u.svg +++ b/packages/sights/assets/overlays/ff150-o8MiTw8u.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-ouGGtRnf.svg b/packages/sights/assets/overlays/ff150-ouGGtRnf.svg index d8d34a4bb..cc42dbbd7 100644 --- a/packages/sights/assets/overlays/ff150-ouGGtRnf.svg +++ b/packages/sights/assets/overlays/ff150-ouGGtRnf.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-phbX7Bef.svg b/packages/sights/assets/overlays/ff150-phbX7Bef.svg index a91e5c6bc..aeb420630 100644 --- a/packages/sights/assets/overlays/ff150-phbX7Bef.svg +++ b/packages/sights/assets/overlays/ff150-phbX7Bef.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-t3KBMPeD.svg b/packages/sights/assets/overlays/ff150-t3KBMPeD.svg index 9fa76e026..fcef08cdc 100644 --- a/packages/sights/assets/overlays/ff150-t3KBMPeD.svg +++ b/packages/sights/assets/overlays/ff150-t3KBMPeD.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-tT8sqplK.svg b/packages/sights/assets/overlays/ff150-tT8sqplK.svg index 5735aa870..855358f02 100644 --- a/packages/sights/assets/overlays/ff150-tT8sqplK.svg +++ b/packages/sights/assets/overlays/ff150-tT8sqplK.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-vwE3yqdh.svg b/packages/sights/assets/overlays/ff150-vwE3yqdh.svg index 5d569a630..77d2b91ba 100644 --- a/packages/sights/assets/overlays/ff150-vwE3yqdh.svg +++ b/packages/sights/assets/overlays/ff150-vwE3yqdh.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg b/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg index 436a3b376..093ac50d5 100644 --- a/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg +++ b/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-xbOhu7nK.svg b/packages/sights/assets/overlays/ff150-xbOhu7nK.svg index 076262144..3372001aa 100644 --- a/packages/sights/assets/overlays/ff150-xbOhu7nK.svg +++ b/packages/sights/assets/overlays/ff150-xbOhu7nK.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-zXbg0l3z.svg b/packages/sights/assets/overlays/ff150-zXbg0l3z.svg index 0c6c5247e..ab9183363 100644 --- a/packages/sights/assets/overlays/ff150-zXbg0l3z.svg +++ b/packages/sights/assets/overlays/ff150-zXbg0l3z.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg b/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg index e0ac7f786..7c975663e 100644 --- a/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg +++ b/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg b/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg index b2a2a6f78..e8bd0bdee 100644 --- a/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg +++ b/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg b/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg index 70e12ddab..708b2acc4 100644 --- a/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg +++ b/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg index edf44d0cd..c31942c2d 100644 --- a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg +++ b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg b/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg index e61e13369..294c7040d 100644 --- a/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg +++ b/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg b/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg index b361642c8..aa5072d5b 100644 --- a/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg +++ b/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg index dc221bb84..c320c9830 100644 --- a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg +++ b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg b/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg index b77c7563a..cd11a44f1 100644 --- a/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg +++ b/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg b/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg index 29af4abc3..f2d71e3fa 100644 --- a/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg +++ b/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg b/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg index 4d5340e2a..6a37118ba 100644 --- a/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg +++ b/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg index dd3c735b1..81ac0b7ca 100644 --- a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg +++ b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg b/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg index a68de4c8f..be4c1de3f 100644 --- a/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg +++ b/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg b/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg index 4c596aaeb..a88201149 100644 --- a/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg +++ b/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg index 0d210fcec..feced0e93 100644 --- a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg +++ b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg b/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg index ae4e271a0..abe4a5b94 100644 --- a/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg +++ b/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg b/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg index c62bd996c..747c427d2 100644 --- a/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg +++ b/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg index a03a03d46..f73e3cef5 100644 --- a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg +++ b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg b/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg index ff14bdd07..7df4fa968 100644 --- a/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg +++ b/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg b/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg index d3342513e..443cf431e 100644 --- a/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg +++ b/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg b/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg index ed42fe09a..bc3502d71 100644 --- a/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg +++ b/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg b/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg index 9ef19ce25..43f59b278 100644 --- a/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg +++ b/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg b/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg index e9c9d3a34..1a572524f 100644 --- a/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg +++ b/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg b/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg index fd8c153b5..07ec1cd7e 100644 --- a/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg +++ b/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg index 94caed547..69149f2d4 100644 --- a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-e5netaNs.svg b/packages/sights/assets/overlays/ffocus18-e5netaNs.svg index cfc4f8712..ce5780d73 100644 --- a/packages/sights/assets/overlays/ffocus18-e5netaNs.svg +++ b/packages/sights/assets/overlays/ffocus18-e5netaNs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg b/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg index 3af192aaa..3e4bee60c 100644 --- a/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg +++ b/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg b/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg index 14b63dbd1..eefc9f376 100644 --- a/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg +++ b/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg index 6a0bedc58..d0ce38c5d 100644 --- a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg +++ b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg b/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg index c4d627cbf..384a31440 100644 --- a/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg +++ b/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg index 3abcd36d1..d568289e5 100644 --- a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg +++ b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg index cfa005cad..ba5e01f52 100644 --- a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg +++ b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg b/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg index f46008496..886fb1a80 100644 --- a/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg +++ b/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg b/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg index eec063c4f..ff1266240 100644 --- a/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg +++ b/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg b/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg index bfb9f5a4e..e2279957d 100644 --- a/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg +++ b/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg b/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg index 8d2de9774..91fab3566 100644 --- a/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg +++ b/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg b/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg index a79ca3cb5..c0ba1b810 100644 --- a/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg +++ b/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg b/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg index e791b1619..82a8754c2 100644 --- a/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg +++ b/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-3dkU10af.svg b/packages/sights/assets/overlays/ftransit18-3dkU10af.svg index 6e4e95671..5cfff8cdd 100644 --- a/packages/sights/assets/overlays/ftransit18-3dkU10af.svg +++ b/packages/sights/assets/overlays/ftransit18-3dkU10af.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg index 1c26233d5..edaeac47e 100644 --- a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg +++ b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg b/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg index 9390d8193..6bdc9782f 100644 --- a/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg +++ b/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg b/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg index 1a1fcd9f9..688d016a4 100644 --- a/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg +++ b/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg b/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg index 4ba7f1b57..53c0d2bb2 100644 --- a/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg +++ b/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-6khKhof0.svg b/packages/sights/assets/overlays/ftransit18-6khKhof0.svg index 9c292c81d..618049db4 100644 --- a/packages/sights/assets/overlays/ftransit18-6khKhof0.svg +++ b/packages/sights/assets/overlays/ftransit18-6khKhof0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg b/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg index 1e039e67f..6aa6ed236 100644 --- a/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg +++ b/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg b/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg index 53312439d..d171ed14b 100644 --- a/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg +++ b/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg b/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg index faced69fc..17a455bbe 100644 --- a/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg +++ b/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg b/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg index ed7a28845..46def5208 100644 --- a/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg +++ b/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg b/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg index ad17e79b4..f17b65337 100644 --- a/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg +++ b/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg b/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg index 25aabfd04..5721e9257 100644 --- a/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg +++ b/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg index 525521e9c..b41cbcf8e 100644 --- a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg +++ b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg b/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg index f3d28b5e3..ea42bbedf 100644 --- a/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg +++ b/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg b/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg index 75baf455d..f8c36bfa9 100644 --- a/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg +++ b/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-aA2K898S.svg b/packages/sights/assets/overlays/ftransit18-aA2K898S.svg index f92a53600..a7a209e83 100644 --- a/packages/sights/assets/overlays/ftransit18-aA2K898S.svg +++ b/packages/sights/assets/overlays/ftransit18-aA2K898S.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg b/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg index df4553a0c..7b15b6171 100644 --- a/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg +++ b/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg b/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg index b6bd0e55a..bc7274036 100644 --- a/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg +++ b/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg b/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg index 7912b3e9d..dc5f45cc8 100644 --- a/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg +++ b/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg b/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg index 4872f08d0..ee9f2becf 100644 --- a/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg +++ b/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg b/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg index 1e2377af1..2901b5ae2 100644 --- a/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg +++ b/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg b/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg index e860b7826..ed0b451c8 100644 --- a/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg +++ b/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg b/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg index dffdc6919..132aa56b8 100644 --- a/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg +++ b/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg b/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg index 8ab1183c4..7ee69a76a 100644 --- a/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg +++ b/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg b/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg index 608233e5f..40acd9178 100644 --- a/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg +++ b/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg b/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg index 75f38dead..3eb215444 100644 --- a/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg +++ b/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg b/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg index 99e59049c..c5bead3cc 100644 --- a/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg +++ b/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg b/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg index 65b7f26f4..c1382f3d6 100644 --- a/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg +++ b/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg b/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg index cc618fca2..ce8dc41f1 100644 --- a/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg +++ b/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg b/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg index ed024f0e5..c6fe9cdcf 100644 --- a/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg +++ b/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-2a8VfA8m.svg b/packages/sights/assets/overlays/haccord-2a8VfA8m.svg index 3715ec149..ae945a47f 100644 --- a/packages/sights/assets/overlays/haccord-2a8VfA8m.svg +++ b/packages/sights/assets/overlays/haccord-2a8VfA8m.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg index ef343de18..b344e75a7 100644 --- a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg +++ b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-6kYUBv_e.svg b/packages/sights/assets/overlays/haccord-6kYUBv_e.svg index 5612e1028..f1fa67a32 100644 --- a/packages/sights/assets/overlays/haccord-6kYUBv_e.svg +++ b/packages/sights/assets/overlays/haccord-6kYUBv_e.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-8YjMcu0D.svg b/packages/sights/assets/overlays/haccord-8YjMcu0D.svg index afddedde4..12310e73e 100644 --- a/packages/sights/assets/overlays/haccord-8YjMcu0D.svg +++ b/packages/sights/assets/overlays/haccord-8YjMcu0D.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-DUPnw5jj.svg b/packages/sights/assets/overlays/haccord-DUPnw5jj.svg index b8fa135e0..1cd7e118a 100644 --- a/packages/sights/assets/overlays/haccord-DUPnw5jj.svg +++ b/packages/sights/assets/overlays/haccord-DUPnw5jj.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-EfRIciFr.svg b/packages/sights/assets/overlays/haccord-EfRIciFr.svg index d2049e857..f8efef5f2 100644 --- a/packages/sights/assets/overlays/haccord-EfRIciFr.svg +++ b/packages/sights/assets/overlays/haccord-EfRIciFr.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-GQcZz48C.svg b/packages/sights/assets/overlays/haccord-GQcZz48C.svg index 345885c3b..8295a2f60 100644 --- a/packages/sights/assets/overlays/haccord-GQcZz48C.svg +++ b/packages/sights/assets/overlays/haccord-GQcZz48C.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-GdWvsqrm.svg b/packages/sights/assets/overlays/haccord-GdWvsqrm.svg index 34c06f461..a35cfb93a 100644 --- a/packages/sights/assets/overlays/haccord-GdWvsqrm.svg +++ b/packages/sights/assets/overlays/haccord-GdWvsqrm.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg b/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg index 721ebe588..4cc2f4b06 100644 --- a/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg +++ b/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-Jq65fyD4.svg b/packages/sights/assets/overlays/haccord-Jq65fyD4.svg index 160c04624..dbdbb727a 100644 --- a/packages/sights/assets/overlays/haccord-Jq65fyD4.svg +++ b/packages/sights/assets/overlays/haccord-Jq65fyD4.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-KN23XXkX.svg b/packages/sights/assets/overlays/haccord-KN23XXkX.svg index de007702a..bfb446569 100644 --- a/packages/sights/assets/overlays/haccord-KN23XXkX.svg +++ b/packages/sights/assets/overlays/haccord-KN23XXkX.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-KvP-pm8L.svg b/packages/sights/assets/overlays/haccord-KvP-pm8L.svg index 8810bd8a1..a69d53d80 100644 --- a/packages/sights/assets/overlays/haccord-KvP-pm8L.svg +++ b/packages/sights/assets/overlays/haccord-KvP-pm8L.svg @@ -1 +1 @@ - \ No newline at end of file +> \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-OXYy5gET.svg b/packages/sights/assets/overlays/haccord-OXYy5gET.svg index df2d97e1f..f65536d40 100644 --- a/packages/sights/assets/overlays/haccord-OXYy5gET.svg +++ b/packages/sights/assets/overlays/haccord-OXYy5gET.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-PGr3RzzP.svg b/packages/sights/assets/overlays/haccord-PGr3RzzP.svg index 618025fb8..678bcc7d3 100644 --- a/packages/sights/assets/overlays/haccord-PGr3RzzP.svg +++ b/packages/sights/assets/overlays/haccord-PGr3RzzP.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-QKfhXU7o.svg b/packages/sights/assets/overlays/haccord-QKfhXU7o.svg index 5ce872c85..aa5494e33 100644 --- a/packages/sights/assets/overlays/haccord-QKfhXU7o.svg +++ b/packages/sights/assets/overlays/haccord-QKfhXU7o.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-Qel0qUky.svg b/packages/sights/assets/overlays/haccord-Qel0qUky.svg index 81af43ac9..aa3057ff6 100644 --- a/packages/sights/assets/overlays/haccord-Qel0qUky.svg +++ b/packages/sights/assets/overlays/haccord-Qel0qUky.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg b/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg index 28ded30ec..3bb0766c7 100644 --- a/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg +++ b/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-Z84erkMb.svg b/packages/sights/assets/overlays/haccord-Z84erkMb.svg index 4214b73a6..5329ae7c1 100644 --- a/packages/sights/assets/overlays/haccord-Z84erkMb.svg +++ b/packages/sights/assets/overlays/haccord-Z84erkMb.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-_YnTubBA.svg b/packages/sights/assets/overlays/haccord-_YnTubBA.svg index 18da659bc..d4438367f 100644 --- a/packages/sights/assets/overlays/haccord-_YnTubBA.svg +++ b/packages/sights/assets/overlays/haccord-_YnTubBA.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg b/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg index d8fcfa002..6e0254b7e 100644 --- a/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg +++ b/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-bg-RFHl_.svg b/packages/sights/assets/overlays/haccord-bg-RFHl_.svg index afc7549af..6f9ebc07c 100644 --- a/packages/sights/assets/overlays/haccord-bg-RFHl_.svg +++ b/packages/sights/assets/overlays/haccord-bg-RFHl_.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg index e58861cf1..f1b3a5426 100644 --- a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-d3VJTvYw.svg b/packages/sights/assets/overlays/haccord-d3VJTvYw.svg index 6c05646d0..c7f5dea7c 100644 --- a/packages/sights/assets/overlays/haccord-d3VJTvYw.svg +++ b/packages/sights/assets/overlays/haccord-d3VJTvYw.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg b/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg index 3eed17f79..d44a3dd81 100644 --- a/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg +++ b/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-hsCc_Nct.svg b/packages/sights/assets/overlays/haccord-hsCc_Nct.svg index 7a7db7401..f60d06f77 100644 --- a/packages/sights/assets/overlays/haccord-hsCc_Nct.svg +++ b/packages/sights/assets/overlays/haccord-hsCc_Nct.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-huAZfQJA.svg b/packages/sights/assets/overlays/haccord-huAZfQJA.svg index 5372cd4f7..c3c3e20e5 100644 --- a/packages/sights/assets/overlays/haccord-huAZfQJA.svg +++ b/packages/sights/assets/overlays/haccord-huAZfQJA.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-k6MiX2MR.svg b/packages/sights/assets/overlays/haccord-k6MiX2MR.svg index a93bde54c..a80262774 100644 --- a/packages/sights/assets/overlays/haccord-k6MiX2MR.svg +++ b/packages/sights/assets/overlays/haccord-k6MiX2MR.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-mdZ7optI.svg b/packages/sights/assets/overlays/haccord-mdZ7optI.svg index 85bb7406d..15f007ebd 100644 --- a/packages/sights/assets/overlays/haccord-mdZ7optI.svg +++ b/packages/sights/assets/overlays/haccord-mdZ7optI.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-oiY_yPTR.svg b/packages/sights/assets/overlays/haccord-oiY_yPTR.svg index e8aee6090..437cf6d63 100644 --- a/packages/sights/assets/overlays/haccord-oiY_yPTR.svg +++ b/packages/sights/assets/overlays/haccord-oiY_yPTR.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-pplCo6sV.svg b/packages/sights/assets/overlays/haccord-pplCo6sV.svg index 4bf1bece0..b7783a860 100644 --- a/packages/sights/assets/overlays/haccord-pplCo6sV.svg +++ b/packages/sights/assets/overlays/haccord-pplCo6sV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-ps7cWy6K.svg b/packages/sights/assets/overlays/haccord-ps7cWy6K.svg index 32672bc60..a99083178 100644 --- a/packages/sights/assets/overlays/haccord-ps7cWy6K.svg +++ b/packages/sights/assets/overlays/haccord-ps7cWy6K.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-sorgeRJ7.svg b/packages/sights/assets/overlays/haccord-sorgeRJ7.svg index 1a94fb134..e24b69ad1 100644 --- a/packages/sights/assets/overlays/haccord-sorgeRJ7.svg +++ b/packages/sights/assets/overlays/haccord-sorgeRJ7.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-t5sLlmfv.svg b/packages/sights/assets/overlays/haccord-t5sLlmfv.svg index 310d129b3..356f9f390 100644 --- a/packages/sights/assets/overlays/haccord-t5sLlmfv.svg +++ b/packages/sights/assets/overlays/haccord-t5sLlmfv.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-zNA0vVT0.svg b/packages/sights/assets/overlays/haccord-zNA0vVT0.svg index 48381d764..367fe53a4 100644 --- a/packages/sights/assets/overlays/haccord-zNA0vVT0.svg +++ b/packages/sights/assets/overlays/haccord-zNA0vVT0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg b/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg index 49236fbb2..c4d89ee2c 100644 --- a/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg +++ b/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-1j-oTPag.svg b/packages/sights/assets/overlays/jgc21-1j-oTPag.svg index a4c67e3fa..c6dce4a5a 100644 --- a/packages/sights/assets/overlays/jgc21-1j-oTPag.svg +++ b/packages/sights/assets/overlays/jgc21-1j-oTPag.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg b/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg index 79751795d..c63b9e6ee 100644 --- a/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg +++ b/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg b/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg index cbf0ed885..3ed85e70f 100644 --- a/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg +++ b/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg b/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg index d85e9895e..ba89cbf78 100644 --- a/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg +++ b/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-5lovhZgA.svg b/packages/sights/assets/overlays/jgc21-5lovhZgA.svg index 5aac39a8f..180cf0b33 100644 --- a/packages/sights/assets/overlays/jgc21-5lovhZgA.svg +++ b/packages/sights/assets/overlays/jgc21-5lovhZgA.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg b/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg index e208779ca..779f77ec5 100644 --- a/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg +++ b/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg b/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg index e045ae057..7fb230a4b 100644 --- a/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg +++ b/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg index 30c69a9c7..76865c06f 100644 --- a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg +++ b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg b/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg index 691fa4339..0f2d91aae 100644 --- a/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg +++ b/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-JerG7oW5.svg b/packages/sights/assets/overlays/jgc21-JerG7oW5.svg index 33a823ff9..4730c3705 100644 --- a/packages/sights/assets/overlays/jgc21-JerG7oW5.svg +++ b/packages/sights/assets/overlays/jgc21-JerG7oW5.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg b/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg index 0d3774622..fa379dbe8 100644 --- a/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg +++ b/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg b/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg index ff5271e82..2430c5218 100644 --- a/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg +++ b/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg b/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg index a4b3d8b02..5d0681f97 100644 --- a/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg +++ b/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg b/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg index 30cb05cdd..dc4dbee99 100644 --- a/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg +++ b/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg b/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg index a70e30941..416bb94b2 100644 --- a/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg +++ b/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-RE3li6rE.svg b/packages/sights/assets/overlays/jgc21-RE3li6rE.svg index 30c4884b3..b5f7eb1e6 100644 --- a/packages/sights/assets/overlays/jgc21-RE3li6rE.svg +++ b/packages/sights/assets/overlays/jgc21-RE3li6rE.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg b/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg index 5518152e5..b195ace6a 100644 --- a/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg +++ b/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg index 4847de4ab..8098c3aae 100644 --- a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg +++ b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg b/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg index 881c574f9..f4d366612 100644 --- a/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg +++ b/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg b/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg index 04f1836da..6a4d235e4 100644 --- a/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg +++ b/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg b/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg index e06440c46..e73d41681 100644 --- a/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg +++ b/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg b/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg index fd8c67d0c..8f1237d62 100644 --- a/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg +++ b/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-__JKllz9.svg b/packages/sights/assets/overlays/jgc21-__JKllz9.svg index d14c31e44..6115b513d 100644 --- a/packages/sights/assets/overlays/jgc21-__JKllz9.svg +++ b/packages/sights/assets/overlays/jgc21-__JKllz9.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg b/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg index f076b73ec..9c3958f7f 100644 --- a/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg +++ b/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-imomJ2V0.svg b/packages/sights/assets/overlays/jgc21-imomJ2V0.svg index 177bf9f7f..51df0c87f 100644 --- a/packages/sights/assets/overlays/jgc21-imomJ2V0.svg +++ b/packages/sights/assets/overlays/jgc21-imomJ2V0.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-m2dDoMup.svg b/packages/sights/assets/overlays/jgc21-m2dDoMup.svg index 6a200d6f4..e914cdff8 100644 --- a/packages/sights/assets/overlays/jgc21-m2dDoMup.svg +++ b/packages/sights/assets/overlays/jgc21-m2dDoMup.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-omlus7Ui.svg b/packages/sights/assets/overlays/jgc21-omlus7Ui.svg index 4193a018f..5278b9374 100644 --- a/packages/sights/assets/overlays/jgc21-omlus7Ui.svg +++ b/packages/sights/assets/overlays/jgc21-omlus7Ui.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg b/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg index 8e5b1b1e9..abc640f38 100644 --- a/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg +++ b/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg b/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg index 8a490b822..a86369e0c 100644 --- a/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg +++ b/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg b/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg index 9092515e6..2912ddf3b 100644 --- a/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg +++ b/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg b/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg index 4ffbe2961..c8a9100d4 100644 --- a/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg +++ b/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg b/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg index a94e64683..a2e59a71a 100644 --- a/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg +++ b/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg b/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg index 27dabc7cb..30115f62b 100644 --- a/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg +++ b/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg b/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg index 67d6fbfce..4ef09f953 100755 --- a/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg +++ b/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg b/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg index dc75f785e..df21c1892 100644 --- a/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg +++ b/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg b/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg index 7aa5afd2e..0d5a440ac 100755 --- a/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg +++ b/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg b/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg index 6b69c801c..2f21ecbc1 100755 --- a/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg +++ b/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-670P2H2V.svg b/packages/sights/assets/overlays/tsienna20-670P2H2V.svg index bd7604c51..f9dc14c8b 100755 --- a/packages/sights/assets/overlays/tsienna20-670P2H2V.svg +++ b/packages/sights/assets/overlays/tsienna20-670P2H2V.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg b/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg index d1201c13f..4aa619be7 100644 --- a/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg +++ b/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg b/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg index 569b04d46..4773b5f71 100644 --- a/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg +++ b/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg b/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg index 35a066ba9..c1794397c 100644 --- a/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg +++ b/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg b/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg index 1b58da9de..210979ca4 100644 --- a/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg +++ b/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg b/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg index a400265b5..2afba77e4 100644 --- a/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg +++ b/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg b/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg index 85716ea7a..e241e3a1d 100755 --- a/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg +++ b/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg b/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg index 3971a8c07..e00438991 100644 --- a/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg +++ b/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg b/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg index b08af34be..754828717 100644 --- a/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg +++ b/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg b/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg index 8525a6f0f..b1478a5f7 100644 --- a/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg +++ b/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg b/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg index e07171ca6..950d55430 100644 --- a/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg +++ b/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg index 5c3fcaaad..0991c4da2 100644 --- a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg +++ b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg b/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg index a92e6a82f..3fbd9c3bb 100644 --- a/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg +++ b/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg b/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg index 9141e3296..30358cfaf 100755 --- a/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg +++ b/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg b/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg index 58c423abd..f02dbfc7d 100644 --- a/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg +++ b/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg b/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg index 58dc95886..9e0cae380 100755 --- a/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg +++ b/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-cI285Gon.svg b/packages/sights/assets/overlays/tsienna20-cI285Gon.svg index a33828ce3..d35fc1c25 100644 --- a/packages/sights/assets/overlays/tsienna20-cI285Gon.svg +++ b/packages/sights/assets/overlays/tsienna20-cI285Gon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg b/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg index 51ba014d5..7731ab8eb 100644 --- a/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg +++ b/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg b/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg index b468f25f2..4cb356f51 100644 --- a/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg +++ b/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg b/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg index 5c19983a1..5c82b7a59 100644 --- a/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg +++ b/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg b/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg index 03f693e8d..5a973ee48 100644 --- a/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg +++ b/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg b/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg index 42082146d..b32a922c9 100644 --- a/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg +++ b/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg b/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg index 26ff2d09c..f42ded38e 100644 --- a/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg +++ b/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg index 87c39d89a..61b958bb7 100644 --- a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg +++ b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg b/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg index 6e2701032..e8a0b3f57 100644 --- a/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg +++ b/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg b/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg index 4e7224530..0e76a0a23 100644 --- a/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg +++ b/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg b/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg index ea19f7595..1a9976f07 100644 --- a/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg +++ b/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-front-left.svg b/packages/sights/assets/part-selectors/fesc20-front-left.svg index dce7e2960..ea68ad03c 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-front-right.svg b/packages/sights/assets/part-selectors/fesc20-front-right.svg index 6f1c7a1e2..f15756ea1 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-left.svg b/packages/sights/assets/part-selectors/fesc20-rear-left.svg index 40e392d30..4681d6a26 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-right.svg b/packages/sights/assets/part-selectors/fesc20-rear-right.svg index ec7d18532..8c234bfcb 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-left.svg b/packages/sights/assets/part-selectors/ff150-front-left.svg index aaacef8ce..e7c10991d 100644 --- a/packages/sights/assets/part-selectors/ff150-front-left.svg +++ b/packages/sights/assets/part-selectors/ff150-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-right.svg b/packages/sights/assets/part-selectors/ff150-front-right.svg index 183376869..fc9909edf 100644 --- a/packages/sights/assets/part-selectors/ff150-front-right.svg +++ b/packages/sights/assets/part-selectors/ff150-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-left.svg b/packages/sights/assets/part-selectors/ff150-rear-left.svg index 94dd4c9d0..4e151289e 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-left.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-right.svg b/packages/sights/assets/part-selectors/ff150-rear-right.svg index 57ab1d1d7..588bdef47 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-right.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-left.svg b/packages/sights/assets/part-selectors/ffocus18-front-left.svg index 012f52091..3f22519ed 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-right.svg b/packages/sights/assets/part-selectors/ffocus18-front-right.svg index b7a4afb4d..2bdf364f3 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg index 0ffa5bfae..af31b03d0 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg index 127f15d8b..b8f7271a6 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-left.svg b/packages/sights/assets/part-selectors/ftransit18-front-left.svg index 2ba67dcfa..fc99dc652 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-right.svg b/packages/sights/assets/part-selectors/ftransit18-front-right.svg index b6c0c0d97..9ea42e871 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg index a2391cc20..45cec5aab 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg index 7ef9f349b..21a19fc47 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-front-left.svg b/packages/sights/assets/part-selectors/haccord-front-left.svg index 219abda03..55bb09770 100644 --- a/packages/sights/assets/part-selectors/haccord-front-left.svg +++ b/packages/sights/assets/part-selectors/haccord-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-front-right.svg b/packages/sights/assets/part-selectors/haccord-front-right.svg index 9bc9807b6..6ce9a612a 100644 --- a/packages/sights/assets/part-selectors/haccord-front-right.svg +++ b/packages/sights/assets/part-selectors/haccord-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-left.svg b/packages/sights/assets/part-selectors/haccord-rear-left.svg index 49fb0b909..220930962 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-left.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-right.svg b/packages/sights/assets/part-selectors/haccord-rear-right.svg index 389bcd3c9..4863f3f77 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-right.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-left.svg b/packages/sights/assets/part-selectors/jgc21-front-left.svg index d81aa5c3e..81fb274ee 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-right.svg b/packages/sights/assets/part-selectors/jgc21-front-right.svg index 08974bc6c..26cc0c97e 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-left.svg b/packages/sights/assets/part-selectors/jgc21-rear-left.svg index d3c7cb00d..6af0acf3e 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-right.svg b/packages/sights/assets/part-selectors/jgc21-rear-right.svg index 820aa7e69..7d05f27af 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-front-left.svg b/packages/sights/assets/part-selectors/tsienna20-front-left.svg index 29504bc6c..e2ada474b 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-front-right.svg b/packages/sights/assets/part-selectors/tsienna20-front-right.svg index 038e51d24..3f5706b63 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-right.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg index fd031a8be..eff439dff 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg index e3a13d3bd..5a624793c 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg @@ -1 +1 @@ - + \ No newline at end of file From 1b3c9e6cf6978a71908a09d595eff69c300f94c6 Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Thu, 23 Mar 2023 08:58:34 +0300 Subject: [PATCH 02/27] fix urls --- packages/camera/src/components/Capture/hooks.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index 3cb2c14d6..4f324d919 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -212,7 +212,7 @@ export function useStartUploadAsync({ if (Platform.OS === 'web') { result = await monk.entity.image.addOne(inspectionId, data); } else { - const response = await fetch(monk.config.axiosConfig.baseURL + 'inspections/' + inspectionId + '/images',{ + const response = await fetch(monk.config.axiosConfig.baseURL + '/inspections/' + inspectionId + '/images',{ method: 'post', headers: { 'Content-Type': 'multipart/form-data', @@ -425,7 +425,7 @@ export function useUploadAdditionalDamage({ if (Platform.OS === 'web') { await monk.entity.image.addOne(inspectionId, data); } else { - await fetch(monk.config.axiosConfig.baseURL + 'inspections/' + inspectionId + '/images',{ + await fetch(monk.config.axiosConfig.baseURL + '/inspections/' + inspectionId + '/images',{ method: 'post', headers: { 'Content-Type': 'multipart/form-data', From 4fab3b3d755cadd85a1e0e9f8703bab42f0d1990 Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Thu, 23 Mar 2023 10:06:48 +0300 Subject: [PATCH 03/27] fix svgs --- packages/sights/assets/part-selectors/ftransit18-rear-left.svg | 2 +- packages/sights/assets/part-selectors/ftransit18-rear-right.svg | 2 +- packages/sights/assets/part-selectors/jgc21-rear-left.svg | 2 +- packages/sights/assets/part-selectors/jgc21-rear-right.svg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg index 45cec5aab..c65a81281 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg index 21a19fc47..7ce5d3bd8 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-left.svg b/packages/sights/assets/part-selectors/jgc21-rear-left.svg index 6af0acf3e..10900d34b 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-right.svg b/packages/sights/assets/part-selectors/jgc21-rear-right.svg index 7d05f27af..aeb2abffc 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From a01d6d4f9091e2235c398f6867e3556beefa35a4 Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Thu, 23 Mar 2023 14:03:55 +0300 Subject: [PATCH 04/27] fix comments --- .../SVGComponentMapper.native.js | 23 ++--- .../AddDamageModal/assets/RotateLeft.js | 2 + .../AddDamageModal/assets/RotateRight.js | 2 + .../AddDamageOverlay/index.native.js | 84 ------------------- .../camera/src/components/Camera/styles.js | 7 +- .../camera/src/components/Capture/capture.js | 3 - .../camera/src/components/Capture/hooks.js | 13 +-- .../camera/src/components/Sights/index.js | 7 +- .../camera/src/components/Thumbnail/index.js | 7 +- .../src/components/UploadCenter/index.js | 58 ++++++------- 10 files changed, 70 insertions(+), 136 deletions(-) delete mode 100644 packages/camera/src/components/AddDamageOverlay/index.native.js diff --git a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js b/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js index d358a9bf6..c3b379adc 100644 --- a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js +++ b/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js @@ -13,6 +13,15 @@ const jsxSpecialAttributes = { }; export default function SVGComponentMapper({ element, togglePart, isPartSelected, groupName }) { + function getAttribute(element, name) { + for (let i = 0; i < element.attributes.length; i++) { + if (element.attributes[i].name === name) { + return element.attributes[i].nodeValue; + } + } + return undefined; + } + let names = []; for (let i = 0; i < element.attributes.length; i++) { names.push(element.attributes[i].name); @@ -20,19 +29,11 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected const attributes = useMemo(() => names.reduce((prev, attr) => ({ ...prev, - [jsxSpecialAttributes[attr] ?? attr]: element.getAttribute(attr), + [jsxSpecialAttributes[attr] ?? attr]: getAttribute(element, attr), }), {}), [element]); - let elementClass; - let elementId; - for (let i = 0; i < element.attributes.length; i++) { - if (element.attributes[i].name === 'class') { - elementClass = element.attributes[i].nodeValue; - } - if (element.attributes[i].name === 'id') { - elementId = element.attributes[i].nodeValue; - } - } + const elementClass = getAttribute(element, 'class'); + const elementId = getAttribute(element, 'id'); let partKey = null; if (groupName && CAR_PARTS.includes(groupName)) { diff --git a/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js b/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js index 27376b31e..7e442ba66 100644 --- a/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js +++ b/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js @@ -1,6 +1,7 @@ import * as React from 'react'; import Svg, { Path } from 'react-native-svg'; import PropTypes from 'prop-types'; +import {Platform} from 'react-native'; export default function RotateLeft({ width, height }) { return ( @@ -11,6 +12,7 @@ export default function RotateLeft({ width, height }) { xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 21" preserveAspectRatio="xMidYMid slice" + pointerEvents= {Platform.OS === 'web' ? 'box-none' : undefined} > (innerHeight > height * 0.75 ? height * 0.75 : innerHeight), - [height, innerHeight], - ); - const effectiveInnerWidth = useMemo( - () => (innerWidth > width * 0.68 ? width * 0.68 : innerWidth), - [height, innerWidth], - ); - - return ( - <> - - - - - - ); -} - -AddDamageOverlay.propTypes = { - innerHeight: PropTypes.number, - innerWidth: PropTypes.number, -}; - -AddDamageOverlay.defaultProps = { - innerHeight: 300, - innerWidth: 450, -}; diff --git a/packages/camera/src/components/Camera/styles.js b/packages/camera/src/components/Camera/styles.js index 476451318..97dace319 100644 --- a/packages/camera/src/components/Camera/styles.js +++ b/packages/camera/src/components/Camera/styles.js @@ -1,4 +1,4 @@ -import { StyleSheet } from 'react-native'; +import { StyleSheet, Platform } from 'react-native'; export default StyleSheet.create({ container: { @@ -12,6 +12,11 @@ export default StyleSheet.create({ backgroundColor: 'rgba(0,0,0,0.75)', borderRadius: 18, color: 'white', + ...Platform.select({ + web: { + fontFamily: 'monospace' + }, + }), fontSize: 14, lineHeight: 9, marginTop: 4, diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index e8a30c829..180106313 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -45,9 +45,6 @@ const ADD_DAMAGE_HELP_EVENT_KEY = 'ADD_DAMAGE_HELP'; const styles = StyleSheet.create({ container: { flex: 1, - height: '100%', - width: '100%', - backgroundColor: 'rgba(0,0,0,0.5)', ...Platform.select({ web: { position: 'absolute', diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index 4f324d919..3cef0c6de 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -189,14 +189,16 @@ export function useStartUploadAsync({ }) { const [queue, setQueue] = useState([]); const { errorHandler } = useMonitoring(); - const [isRunning, setIsRunning] = useState(false); + let isRunning = false; + + const addElement = useCallback((element) => setQueue((prevState) => [...prevState, element]), []); const runQuery = useCallback(async () => { const { ids } = sights.state; const { dispatch } = uploads; if (!isRunning && queue.length > 0) { - setIsRunning(true); + isRunning = true; const queryParams = queue.shift(); if (queryParams) { @@ -246,7 +248,7 @@ export function useStartUploadAsync({ onWarningMessage(null); } } - setIsRunning(false); + isRunning = false; } }, [isRunning, queue, sights.state, uploads, endTour]); @@ -331,8 +333,7 @@ export function useStartUploadAsync({ } } - const currentQueue = queue.concat([{ multiPartKeys, json, file, id, picture }]); - setQueue(currentQueue); + addElement({ multiPartKeys, json, file, id, picture }); } catch (err) { dispatch({ type: Actions.uploads.UPDATE_UPLOAD, @@ -344,7 +345,7 @@ export function useStartUploadAsync({ throw err; } - }, [queue, uploads, inspectionId, sights.state, mapTasksToSights, task, onFinish, endTour]); + }, [uploads, inspectionId, sights.state, mapTasksToSights, task, onFinish, endTour]); } export function useUploadAdditionalDamage({ diff --git a/packages/camera/src/components/Sights/index.js b/packages/camera/src/components/Sights/index.js index b84dc4514..d52cf1405 100644 --- a/packages/camera/src/components/Sights/index.js +++ b/packages/camera/src/components/Sights/index.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, { useCallback, useMemo, useRef } from 'react'; import { useTranslation } from 'react-i18next'; -import { ScrollView, StyleSheet, Switch, Text, useWindowDimensions, View } from 'react-native'; +import { ScrollView, StyleSheet, Switch, Text, useWindowDimensions, View, Platform } from 'react-native'; import Actions from '../../actions'; import Thumbnail from '../Thumbnail'; @@ -19,6 +19,11 @@ const styles = StyleSheet.create({ paddingVertical: 6, alignSelf: 'center', color: 'white', + ...Platform.select({ + web: { + fontFamily: 'monospace' + }, + }), textAlign: 'center', lineHeight: 20, marginTop: 10, diff --git a/packages/camera/src/components/Thumbnail/index.js b/packages/camera/src/components/Thumbnail/index.js index 619b6cd9e..d90e4778f 100644 --- a/packages/camera/src/components/Thumbnail/index.js +++ b/packages/camera/src/components/Thumbnail/index.js @@ -1,7 +1,7 @@ import '@expo/match-media'; import PropTypes from 'prop-types'; import React, { useEffect, useMemo } from 'react'; -import { ActivityIndicator, ImageBackground, StyleSheet, Text, View } from 'react-native'; +import { ActivityIndicator, ImageBackground, StyleSheet, Text, View, Platform } from 'react-native'; import { SIDE_WIDTH } from '../Layout'; import Overlay from '../Overlay'; @@ -36,6 +36,11 @@ const styles = StyleSheet.create({ color: 'white', lineHeight: 10, fontSize: 10, + ...Platform.select({ + web: { + fontFamily: 'monospace' + }, + }), textAlign: 'center', maxWidth: '100%', paddingVertical: 2, diff --git a/packages/camera/src/components/UploadCenter/index.js b/packages/camera/src/components/UploadCenter/index.js index ee7f216b0..5b1babc16 100644 --- a/packages/camera/src/components/UploadCenter/index.js +++ b/packages/camera/src/components/UploadCenter/index.js @@ -162,35 +162,6 @@ export default function UploadCenter({ style={[styles.card, { backgroundColor: colors.background, height }]} contentContainerStyle={styles.container} > - - {displayRetakeAll ? ( - - ) : null} - - {/* content */} @@ -246,6 +217,35 @@ export default function UploadCenter({ {/* actions */} + + {displayRetakeAll ? ( + + ) : null} + + ); From 70f5985448b63f91c91103ad8143039c95360e4a Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Tue, 28 Mar 2023 19:40:29 +0300 Subject: [PATCH 05/27] Disable portrait mode for native camera (#2) --- .../src/components/Layout/index.native.js | 69 ++++++++++++++----- 1 file changed, 50 insertions(+), 19 deletions(-) diff --git a/packages/camera/src/components/Layout/index.native.js b/packages/camera/src/components/Layout/index.native.js index 888b98c38..aea64f8ae 100644 --- a/packages/camera/src/components/Layout/index.native.js +++ b/packages/camera/src/components/Layout/index.native.js @@ -1,11 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { StyleSheet, useWindowDimensions, View } from 'react-native'; +import { StyleSheet, useWindowDimensions, View, Text } from 'react-native'; +import { useTranslation } from 'react-i18next'; const SIDE = 116; export const SIDE_WIDTH = SIDE; const styles = StyleSheet.create({ + rotate: { + justifyContent: 'center', + alignItems: 'center' + }, container: { flexDirection: 'row', justifyContent: 'space-between', @@ -25,10 +30,20 @@ const styles = StyleSheet.create({ display: 'flex', justifyContent: 'center', }, + title: { + color: 'rgba(250, 250, 250, 0.87)', + textAlign: 'center', + fontWeight: '500', + lineHeight: 30, + letterSpacing: 0.15, + fontSize: 20, + marginVertical: 2, + }, }); function Layout({ backgroundColor, children, isReady, left, right }) { const { height, width } = useWindowDimensions(); + const { t } = useTranslation(); const size = StyleSheet.create({ height, width }); @@ -42,27 +57,43 @@ function Layout({ backgroundColor, children, isReady, left, right }) { styles.rightPortrait, ); - return ( - - {isReady && left} + if (width > height) { + return ( - {children} + {isReady && left} + + {children} + + {isReady && right} - {isReady && right} - - ); + ); + } else { + return ( + + + {t('layout.rotateDevice')} + + + ); + } } Layout.propTypes = { From 06bb15aa5a1b30ab2c2f2e8149ae44c8f0a576f5 Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Mon, 3 Apr 2023 12:21:12 +0300 Subject: [PATCH 06/27] [APP-1979] Fix enlarged svgs (#3) --- packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg | 2 +- packages/sights/assets/overlays/fesc20-j3H8Z415.svg | 2 +- packages/sights/assets/overlays/ff150-BmXfb-qD.svg | 2 +- packages/sights/assets/overlays/ff150-eOjyMInj.svg | 2 +- packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg | 2 +- packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg | 2 +- packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg | 2 +- packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg | 2 +- packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg | 2 +- packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg | 2 +- packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg | 2 +- packages/sights/assets/overlays/ffocus18-seOy3jwd.svg | 2 +- packages/sights/assets/overlays/ffocus18-ts3buSD1.svg | 2 +- packages/sights/assets/overlays/ftransit18-3fnjrISV.svg | 2 +- packages/sights/assets/overlays/ftransit18-TkXihCj4.svg | 2 +- packages/sights/assets/overlays/haccord-5LlCuIfL.svg | 2 +- packages/sights/assets/overlays/haccord-cXSAj2ez.svg | 2 +- packages/sights/assets/overlays/jgc21-F-PPd4qN.svg | 2 +- packages/sights/assets/overlays/jgc21-TRN9Des4.svg | 2 +- packages/sights/assets/overlays/tsienna20-TibS83Qr.svg | 2 +- packages/sights/assets/overlays/tsienna20-u57qDaN_.svg | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg index 7934c3212..5b58a1608 100644 --- a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg +++ b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg index c6f5d9858..eafde637f 100644 --- a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg +++ b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg index 6b066cc6c..e31a8b207 100644 --- a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg +++ b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-eOjyMInj.svg b/packages/sights/assets/overlays/ff150-eOjyMInj.svg index 71520cfe2..8f4a2f7ed 100644 --- a/packages/sights/assets/overlays/ff150-eOjyMInj.svg +++ b/packages/sights/assets/overlays/ff150-eOjyMInj.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg index c31942c2d..5b6c98cf0 100644 --- a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg +++ b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg index c320c9830..31c558098 100644 --- a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg +++ b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg index 81ac0b7ca..f8819ad24 100644 --- a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg +++ b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg index feced0e93..437824571 100644 --- a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg +++ b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg index f73e3cef5..d833b2ed0 100644 --- a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg +++ b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg index 69149f2d4..1a1e5aa7e 100644 --- a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg index d0ce38c5d..4e5f24f9b 100644 --- a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg +++ b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg index d568289e5..3d4fd795b 100644 --- a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg +++ b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg index ba5e01f52..cda18b25f 100644 --- a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg +++ b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg index edaeac47e..d3adec2a5 100644 --- a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg +++ b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg index b41cbcf8e..db6fab11a 100644 --- a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg +++ b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg index b344e75a7..a221a0a32 100644 --- a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg +++ b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg index f1b3a5426..3b94aba0d 100644 --- a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg index 76865c06f..38d07e553 100644 --- a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg +++ b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg index 8098c3aae..a2380700a 100644 --- a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg +++ b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg index 0991c4da2..729dbafc3 100644 --- a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg +++ b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg index 61b958bb7..2c31fe68e 100644 --- a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg +++ b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 0ec2f6aa6eca2d743c7ac67237b84c7fc00e5242 Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Thu, 6 Apr 2023 18:03:37 +0300 Subject: [PATCH 07/27] [APP-1986] Add onPictureUploaded callback for zoomed damage photos (#4) --- packages/camera/src/components/Capture/capture.js | 2 +- packages/camera/src/components/Capture/hooks.js | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index 180106313..125c23db7 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -268,7 +268,7 @@ const Capture = forwardRef(({ endTour, }; const startUploadAsync = useStartUploadAsync(startUploadAsyncParams); - const uploadAdditionalDamage = useUploadAdditionalDamage({ inspectionId }); + const uploadAdditionalDamage = useUploadAdditionalDamage({inspectionId, onPictureUploaded}); const [goPrevSight, goNextSight] = useNavigationBetweenSights({ sights }); diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index 3cef0c6de..bcc284168 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -350,6 +350,7 @@ export function useStartUploadAsync({ export function useUploadAdditionalDamage({ inspectionId, + onPictureUploaded = () => {} }) { return useCallback(async ({ picture, parts }) => { if (!inspectionId) { @@ -423,10 +424,11 @@ export function useUploadAdditionalDamage({ const data = new FormData(); data.append(multiPartKeys.json, json); data.append(multiPartKeys.image, file); + let result; if (Platform.OS === 'web') { - await monk.entity.image.addOne(inspectionId, data); + result = await monk.entity.image.addOne(inspectionId, data); } else { - await fetch(monk.config.axiosConfig.baseURL + '/inspections/' + inspectionId + '/images',{ + const response = await fetch(monk.config.axiosConfig.baseURL + '/inspections/' + inspectionId + '/images',{ method: 'post', headers: { 'Content-Type': 'multipart/form-data', @@ -434,7 +436,10 @@ export function useUploadAdditionalDamage({ }, body: data }); + result = await response.json() } + + onPictureUploaded({ result, picture, inspectionId }); } catch (err) { console.error(err); } finally { From 2ef5244904a9e79cf3a38f801e26043564806a57 Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:31:56 +0300 Subject: [PATCH 08/27] [APP-2052] Original of retaken monk picture also uploads to flicker (#5) --- packages/camera/src/components/Capture/hooks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index bcc284168..f5547da48 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -224,7 +224,7 @@ export function useStartUploadAsync({ }) result = await response.json() } - onPictureUploaded({ result, picture, inspectionId }); + onPictureUploaded({ result, picture, inspectionId, id }); // call onFinish callback when capturing the last picture if (ids[ids.length - 1] === id || endTour) { From 6a0fbb17e43326aa3620766398a921dc393a0d2b Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Tue, 23 May 2023 10:44:23 +0300 Subject: [PATCH 09/27] Merge parent repository (#6) * fix: resolve sentry warnings (MN-226) * Added dummy text for MN-139 (live doc) QA * Remove the dummy doc line for the QA * update the translation copy for permission msg if user doesn't have the permission to create a new inspection * render the UI to show the permission error in view * implemented the conditional logic to render UI with different error messages on creating a new inspection * a minor fix * update Sentry doc with the required delay before redirecting to another URL * fix auto formatting issue * remove comment from code * Updated the overlay of wheels sights * Fixed ffocus18-x_1SE7X- sight name * Reverted the changes made to the wheels sights * Added new zoomed in sights for the wheels * Added custom zoomed sights for jgc wheels * Make the documentation clear and easy on how to implement the Sentry monitoring (#465) * Added damage detection to wheels sights in demo app (#466) Co-authored-by: souyahia-monk * Fixed glitched overlay for ff150-3lKZIoxw (#469) Co-authored-by: souyahia-monk * add damage-severity and sub image parts in request payload when creating a new inspection (#471) * feat: implememnt sentry add damage metrics (MN-239) (#467) Co-authored-by: deepakglobant * Added back car coverage (#477) Co-authored-by: souyahia-monk * Release @monkvision/monkjs v3.7.0 * Added even more zoomed wheel sights (#481) Co-authored-by: souyahia-monk * enable car coverage for compliance (#485) * add translation copy for no-car compliance error message (#486) * Release @monkvision/monkjs v3.7.1 * add translation copy for compliance errors (#488) * Release @monkvision/monkjs v3.7.2 * change logic to match the compliance error code with mapped translation copy (#490) * Release @monkvision/monkjs v3.7.3 * feat: allow user to add custom tags (MN-274) (#493) Co-authored-by: deepakglobant * Release @monkvision/monkjs v3.7.4 * Remove " from ff150-3lKZIoxw.svg (#487) * fix merge * fix crashes --------- Co-authored-by: deepakglobant Co-authored-by: souyahia-monk Co-authored-by: Samy Ouyahia <103439265+souyahia-monk@users.noreply.github.com> Co-authored-by: deepakglobant <123438709+deepakglobant@users.noreply.github.com> Co-authored-by: Rohit Sharma Co-authored-by: rohitsharma120582 <86062128+rohitsharma120582@users.noreply.github.com> Co-authored-by: Thomas Peters --- package.json | 2 +- packages/camera/package.json | 8 +- .../camera/src/components/Capture/capture.js | 44 +- .../camera/src/components/Capture/hooks.js | 35 +- .../UploadCard/hooks/useSubtitle.js | 20 +- packages/camera/src/i18n/resources/en.js | 11 + packages/camera/src/i18n/resources/fr.js | 11 + packages/corejs/package.json | 2 +- packages/corejs/src/monitoring/index.tsx | 5 + packages/corejs/src/monitoring/types.ts | 10 + packages/cra-template/package.json | 2 +- packages/openapi-specs-to-ts/package.json | 2 +- .../assets/overlays/fesc20-4Wqx52oU.svg | 2 +- .../assets/overlays/fesc20-5Ts1UkPT.svg | 2 +- .../assets/overlays/fesc20-Hvswbpuo.svg | 1 + .../assets/overlays/fesc20-KdA8FE02.svg | 1 + .../assets/overlays/fesc20-TbH6Zfk_.svg | 1 + .../assets/overlays/fesc20-Tlu3sz8A.svg | 1 + .../assets/overlays/fesc20-W6XrryMO.svg | 1 + .../assets/overlays/fesc20-WIQsf_gX.svg | 2 +- .../assets/overlays/fesc20-YPcJPAZE.svg | 1 + .../assets/overlays/fesc20-b_S_-VYh.svg | 1 + .../assets/overlays/fesc20-dKVLig1i.svg | 2 +- .../assets/overlays/fesc20-raHPDUNm.svg | 1 + .../sights/assets/overlays/ff150-3I-Bjtkv.svg | 1 + .../sights/assets/overlays/ff150-3lKZIoxw.svg | 2 +- .../sights/assets/overlays/ff150-3rM9XB0Z.svg | 2 +- .../sights/assets/overlays/ff150-7nvlys8r.svg | 2 +- .../sights/assets/overlays/ff150-7vyfzrVQ.svg | 1 + .../sights/assets/overlays/ff150-FqbrFVr2.svg | 2 +- .../sights/assets/overlays/ff150-Gx0zuL4H.svg | 1 + .../sights/assets/overlays/ff150-H3MCPESJ.svg | 1 + .../sights/assets/overlays/ff150-Kx339Abo.svg | 1 + .../sights/assets/overlays/ff150-jUBEKij0.svg | 1 + .../sights/assets/overlays/ff150-nTWv3M6S.svg | 1 + .../sights/assets/overlays/ff150-ouGGtRnf.svg | 2 +- .../sights/assets/overlays/ff150-pNO26q4D.svg | 1 + .../assets/overlays/ffocus18-Cupr9bjR.svg | 1 + .../assets/overlays/ffocus18-Eo0jqD_a.svg | 1 + .../assets/overlays/ffocus18-JFX8WF9P.svg | 1 + .../assets/overlays/ffocus18-S3kgFOBb.svg | 2 +- .../assets/overlays/ffocus18-SNN4sM20.svg | 1 + .../assets/overlays/ffocus18-dvP1kb2u.svg | 1 + .../assets/overlays/ffocus18-h14N6xUZ.svg | 1 + .../assets/overlays/ffocus18-jkSlWpql.svg | 1 + .../assets/overlays/ffocus18-tufa4FoL.svg | 1 + .../assets/overlays/ffocus18-x_1SE7X-.svg | 2 +- .../assets/overlays/ftransit18-3Sbfx_KZ.svg | 2 +- .../assets/overlays/ftransit18-4NMPqEV6.svg | 2 +- .../assets/overlays/ftransit18-7qLSCnFP.svg | 1 + .../assets/overlays/ftransit18-AuCXxG5o.svg | 1 + .../assets/overlays/ftransit18-EjXu4RGC.svg | 1 + .../assets/overlays/ftransit18-RJ2D7DNz.svg | 2 +- .../assets/overlays/ftransit18-Y0vPhBVF.svg | 2 +- .../assets/overlays/ftransit18-biueFeY7.svg | 1 + .../assets/overlays/ftransit18-ewzj3qTR.svg | 1 + .../assets/overlays/ftransit18-mGSvkRHz.svg | 1 + .../assets/overlays/ftransit18-yxw9gmyL.svg | 1 + .../assets/overlays/ftransit18-zhgNZH_o.svg | 1 + .../assets/overlays/haccord-2v-2_QD5.svg | 1 + .../assets/overlays/haccord-4c2TDsRn.svg | 1 + .../assets/overlays/haccord-9fxMGSs6.svg | 1 + .../assets/overlays/haccord-GQcZz48C.svg | 2 +- .../assets/overlays/haccord-H_eRrLBl.svg | 1 + .../assets/overlays/haccord-KN23XXkX.svg | 2 +- .../assets/overlays/haccord-KvP-pm8L.svg | 2 +- .../assets/overlays/haccord-OXYy5gET.svg | 2 +- .../assets/overlays/haccord-SIywQdYc.svg | 1 + .../assets/overlays/haccord-W-Bn3bU1.svg | 2 +- .../assets/overlays/haccord-boMeNVsC.svg | 1 + .../assets/overlays/haccord-g2ABR9ES.svg | 1 + .../assets/overlays/haccord-r0uhi6dj.svg | 1 + .../sights/assets/overlays/jgc21-2bGeRS3I.svg | 1 + .../sights/assets/overlays/jgc21-3gjMwvQG.svg | 2 +- .../sights/assets/overlays/jgc21-DhGfIoS_.svg | 1 + .../sights/assets/overlays/jgc21-GmGZpI_0.svg | 1 + .../sights/assets/overlays/jgc21-M7aCKaPN.svg | 1 + .../sights/assets/overlays/jgc21-RAVpqaE4.svg | 2 +- .../sights/assets/overlays/jgc21-S8sE69on.svg | 1 + .../sights/assets/overlays/jgc21-giQgZNoE.svg | 1 + .../sights/assets/overlays/jgc21-nVbhsBaQ.svg | 1 + .../sights/assets/overlays/jgc21-s7WDTRmE.svg | 2 +- .../sights/assets/overlays/jgc21-xwYV3_Hz.svg | 1 + .../sights/assets/overlays/jgc21-z15ZdJL6.svg | 2 +- .../assets/overlays/tsienna20-2Zz6SEaI.svg | 1 + .../assets/overlays/tsienna20-65mfPdRD.svg | 2 +- .../assets/overlays/tsienna20-670P2H2V.svg | 2 +- .../assets/overlays/tsienna20-K0ThKmue.svg | 1 + .../assets/overlays/tsienna20-RP6TzN4w.svg | 1 + .../assets/overlays/tsienna20-SebsoqJm.svg | 2 +- .../assets/overlays/tsienna20-bCkFE45R.svg | 1 + .../assets/overlays/tsienna20-cI285Gon.svg | 2 +- .../assets/overlays/tsienna20-dUh-eali.svg | 1 + .../assets/overlays/tsienna20-nRXoUoCu.svg | 1 + .../assets/overlays/tsienna20-pnNf2nqG.svg | 1 + .../assets/overlays/tsienna20-uz29ILgw.svg | 1 + packages/sights/index.json | 724 ++++++++++++++++++ packages/sights/package.json | 2 +- packages/toolkit/package.json | 2 +- packages/ui/package.json | 4 +- packages/visualization/package.json | 4 +- src/i18n/resources/en.js | 5 + src/i18n/resources/fr.js | 5 + src/main.js | 2 + src/screens/InspectionCapture/index.js | 2 +- .../InspectionCapture/mapTasksToSights.js | 15 +- src/screens/InspectionCreate/index.js | 11 + .../useCreateInspection/index.js | 16 +- src/screens/Landing/index.js | 1 - website/docs/monitoring.md | 55 +- 110 files changed, 1003 insertions(+), 109 deletions(-) create mode 100644 packages/sights/assets/overlays/fesc20-Hvswbpuo.svg create mode 100644 packages/sights/assets/overlays/fesc20-KdA8FE02.svg create mode 100644 packages/sights/assets/overlays/fesc20-TbH6Zfk_.svg create mode 100644 packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg create mode 100644 packages/sights/assets/overlays/fesc20-W6XrryMO.svg create mode 100644 packages/sights/assets/overlays/fesc20-YPcJPAZE.svg create mode 100644 packages/sights/assets/overlays/fesc20-b_S_-VYh.svg create mode 100644 packages/sights/assets/overlays/fesc20-raHPDUNm.svg create mode 100644 packages/sights/assets/overlays/ff150-3I-Bjtkv.svg create mode 100644 packages/sights/assets/overlays/ff150-7vyfzrVQ.svg create mode 100644 packages/sights/assets/overlays/ff150-Gx0zuL4H.svg create mode 100644 packages/sights/assets/overlays/ff150-H3MCPESJ.svg create mode 100644 packages/sights/assets/overlays/ff150-Kx339Abo.svg create mode 100644 packages/sights/assets/overlays/ff150-jUBEKij0.svg create mode 100644 packages/sights/assets/overlays/ff150-nTWv3M6S.svg create mode 100644 packages/sights/assets/overlays/ff150-pNO26q4D.svg create mode 100644 packages/sights/assets/overlays/ffocus18-Cupr9bjR.svg create mode 100644 packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg create mode 100644 packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg create mode 100644 packages/sights/assets/overlays/ffocus18-SNN4sM20.svg create mode 100644 packages/sights/assets/overlays/ffocus18-dvP1kb2u.svg create mode 100644 packages/sights/assets/overlays/ffocus18-h14N6xUZ.svg create mode 100644 packages/sights/assets/overlays/ffocus18-jkSlWpql.svg create mode 100644 packages/sights/assets/overlays/ffocus18-tufa4FoL.svg create mode 100644 packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg create mode 100644 packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg create mode 100644 packages/sights/assets/overlays/ftransit18-EjXu4RGC.svg create mode 100644 packages/sights/assets/overlays/ftransit18-biueFeY7.svg create mode 100644 packages/sights/assets/overlays/ftransit18-ewzj3qTR.svg create mode 100644 packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg create mode 100644 packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg create mode 100644 packages/sights/assets/overlays/ftransit18-zhgNZH_o.svg create mode 100644 packages/sights/assets/overlays/haccord-2v-2_QD5.svg create mode 100644 packages/sights/assets/overlays/haccord-4c2TDsRn.svg create mode 100644 packages/sights/assets/overlays/haccord-9fxMGSs6.svg create mode 100644 packages/sights/assets/overlays/haccord-H_eRrLBl.svg create mode 100644 packages/sights/assets/overlays/haccord-SIywQdYc.svg create mode 100644 packages/sights/assets/overlays/haccord-boMeNVsC.svg create mode 100644 packages/sights/assets/overlays/haccord-g2ABR9ES.svg create mode 100644 packages/sights/assets/overlays/haccord-r0uhi6dj.svg create mode 100644 packages/sights/assets/overlays/jgc21-2bGeRS3I.svg create mode 100644 packages/sights/assets/overlays/jgc21-DhGfIoS_.svg create mode 100644 packages/sights/assets/overlays/jgc21-GmGZpI_0.svg create mode 100644 packages/sights/assets/overlays/jgc21-M7aCKaPN.svg create mode 100644 packages/sights/assets/overlays/jgc21-S8sE69on.svg create mode 100644 packages/sights/assets/overlays/jgc21-giQgZNoE.svg create mode 100644 packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg create mode 100644 packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg create mode 100644 packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg mode change 100755 => 100644 packages/sights/assets/overlays/tsienna20-65mfPdRD.svg mode change 100755 => 100644 packages/sights/assets/overlays/tsienna20-670P2H2V.svg create mode 100644 packages/sights/assets/overlays/tsienna20-K0ThKmue.svg create mode 100644 packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg create mode 100644 packages/sights/assets/overlays/tsienna20-bCkFE45R.svg create mode 100644 packages/sights/assets/overlays/tsienna20-dUh-eali.svg create mode 100644 packages/sights/assets/overlays/tsienna20-nRXoUoCu.svg create mode 100644 packages/sights/assets/overlays/tsienna20-pnNf2nqG.svg create mode 100644 packages/sights/assets/overlays/tsienna20-uz29ILgw.svg diff --git a/package.json b/package.json index 8c89b6695..1d427cb54 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "monk", - "version": "3.6.9", + "version": "3.7.4", "author": "monkvision", "license": "BSD-3-Clause-Clear", "private": true, diff --git a/packages/camera/package.json b/packages/camera/package.json index 915521d4a..68dea9ec9 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/camera", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.6.9", + "version": "3.7.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/camera/#readme", @@ -70,9 +70,9 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.6.9", - "@monkvision/sights": "3.6.9", - "@monkvision/toolkit": "3.6.9", + "@monkvision/corejs": "3.7.4", + "@monkvision/sights": "3.7.4", + "@monkvision/toolkit": "3.7.4", "expo-camera": "^12.3.0", "react": "*", "react-native": "*", diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index 125c23db7..094699f22 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -343,6 +343,12 @@ const Capture = forwardRef(({ const handleResetDamageStatus = useCallback(() => { setAddDamageStatus(AddDamageStatus.IDLE); setAddDamageParts([]); + if (captureTourTransRef && captureTourTransRef.current + && captureTourTransRef.current.addDamageTransaction) { + utils.log(['[Event] Add-Damage sentry transaction cancels']); + captureTourTransRef.current.addDamageTransaction.finish(MonitoringStatus.CANCELLED); + captureTourTransRef.current.addDamageTransaction = null; + } }, [setAddDamageStatus, setAddDamageParts]); const handlePartSelectorHelpConfirm = useCallback(() => { @@ -398,6 +404,10 @@ const Capture = forwardRef(({ * enableComplianceCheck = true and UploadCenter component is rendered */ utils.log(['[Event] Capture-Tour sentry transaction finishes']); + captureTourTransRef.current.transaction.setTag( + SentryTag.ADD_DAMAGES, + captureTourTransRef.current.totalAddDamageTransactions, + ); captureTourTransRef.current.transaction.finish(); onComplianceCheckFinish(); }, []); @@ -432,7 +442,7 @@ const Capture = forwardRef(({ SentryTransaction.PICTURE_PROCESSING, SentryOperation.CAPTURE_TOUR, ); - // set tags to identify a transation and relate with an inspection + // set tags to identify a transaction and relate with an inspection transaction.setTag(SentryTag.TASK, task); transaction.setTag(SentryTag.INSPECTION_ID, inspectionId); transaction.setTag(SentryTag.IS_SKIP, 0); @@ -443,9 +453,41 @@ const Capture = forwardRef(({ transaction, takenPictures: 0, hasRetakeCalled: false, + addDamageTransaction: null, + totalAddDamageTransactions: 0, }; }, []); + useEffect(() => { + /** + * create a new transaction with operation name 'Add Damage' to measure tour performance + */ + if (addDamageStatus === AddDamageStatus.PART_SELECTOR) { + utils.log(['[Event] Add-Damage sentry transaction starts']); + // Start the transaction + const transaction = measurePerformance( + SentryTransaction.PICTURE_PROCESSING, + SentryOperation.ADD_DAMAGE, + ); + + // set tags to identify a transaction and relate with an inspection + transaction.setTag(SentryTag.TASK, task); + transaction.setTag(SentryTag.INSPECTION_ID, inspectionId); + + // Set the transaction in reference + captureTourTransRef.current.addDamageTransaction = transaction; + captureTourTransRef.current.totalAddDamageTransactions += 1; + } else if (addDamageStatus === AddDamageStatus.IDLE) { + // Finish the transaction + if (captureTourTransRef && captureTourTransRef.current + && captureTourTransRef.current.addDamageTransaction) { + utils.log(['[Event] Add-Damage sentry transaction completed']); + captureTourTransRef.current.addDamageTransaction.finish(); + captureTourTransRef.current.addDamageTransaction = null; + } + } + }, [addDamageStatus]); + useEffect(() => { try { /** diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index f5547da48..329d8432c 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -9,28 +9,6 @@ import Actions from '../../actions'; import Constants from '../../const'; import log from '../../utils/log'; -// const COVERAGE_360_WHITELIST = [ -// // T-ROCK -// 'GHbWVnMB', 'GvCtVnoD', 'IVcF1dOP', 'LE9h1xh0', -// 'PLh198NC', 'UHZkpCuK', 'XyeyZlaU', 'vLcBGkeh', -// 'Pzgw0WGe', 'EqLDVYj3', 'jqJOb6Ov', 'j3E2UHFc', -// 'AoO-nOoM', 'B5s1CWT-', -// // AUDI A7 -// 'vxRr9chD', // Front Bumper Side Left -// 'cDe2q69X', // Front Fender Left -// 'R_f4g8MN', // Doors Left -// 'vedHBC2n', // Front Roof Left -// 'McR3TJK0', // Rear Lateral Left -// '7bTC-nGS', // Rear Fender Left -// 'hhCBI9oZ', // Rear -// 'e_QIW30o', // Rear Fender Right -// 'fDo5M0Fp', // Rear Lateral Right -// 'fDKWkHHp', // Doors Right -// '5CFsFvj7', // Front Fender Right -// 'g30kyiVH', // Front Bumper Side Right -// 'I0cOpT1e', // Front -// ]; - /** * @param current * @return {string} @@ -180,7 +158,7 @@ export function useStartUploadAsync({ sights, uploads, task, - // enableCarCoverage, + enableCarCoverage, mapTasksToSights = [], onFinish = () => {}, onPictureUploaded = () => {}, @@ -303,10 +281,9 @@ export function useStartUploadAsync({ }, compliances: { image_quality_assessment: {}, - // coverage_360: enableCarCoverage ? { sight_id: id } : undefined, - // coverage_360: COVERAGE_360_WHITELIST.includes(id) ? { - // sight_id: id, - // } : undefined, + coverage_360: enableCarCoverage ? { + sight_id: id, + } : undefined, }, tasks: tasksToMap, additional_data: { @@ -387,10 +364,6 @@ export function useUploadAdditionalDamage({ }, compliances: { image_quality_assessment: {}, - // coverage_360: enableCarCoverage ? { sight_id: id } : undefined, - // coverage_360: COVERAGE_360_WHITELIST.includes(id) ? { - // sight_id: id, - // } : undefined, }, detailed_viewpoint: { centers_on: parts, diff --git a/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js b/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js index a2bcdb858..e6d79f418 100644 --- a/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js +++ b/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js @@ -1,7 +1,18 @@ import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -const UNKNOWN_SIGHT_REASON = 'UNKNOWN_SIGHT--unknown sight'; +const validErrorCodes = [ + 'UNKNOWN_SIGHT', + 'INTERIOR_NOT_SUPPORTED', + 'NO_CAR_BODY', + 'UNKNOWN_VIEWPOINT', + 'WRONG_ANGLE', + 'WRONG_CENTER_PART', + 'MISSING_PARTS', + 'HIDDEN_PARTS', + 'TOO_ZOOMED', + 'NOT_ZOOMED_ENOUGH', +]; export default function useSubtitle({ isComplianceUnknown, @@ -40,10 +51,11 @@ export default function useSubtitle({ if (badCoverage && carCov.reasons) { carCov.reasons.forEach((reason, index) => { const first = index === 0 && !badQuality; + const errorCode = validErrorCodes.find((code) => reason.startsWith(code)); // display all reasons expect `UNKNOWN_SIGHT` - if (reason !== UNKNOWN_SIGHT_REASON) { - reasons.push(first ? t(`uploadCenter.subtitle.reasons.${reason}`) - : `${t('uploadCenter.subtitle.reasonsJoin')} ${t(`uploadCenter.subtitle.reasons.${reason}`)}`); + if (errorCode && errorCode !== 'UNKNOWN_SIGHT') { + reasons.push(first ? t(`uploadCenter.subtitle.reasons.${errorCode}`) + : `${t('uploadCenter.subtitle.reasonsJoin')} ${t(`uploadCenter.subtitle.reasons.${errorCode}`)}`); } }); } diff --git a/packages/camera/src/i18n/resources/en.js b/packages/camera/src/i18n/resources/en.js index 76c99c3a0..d4c55ec96 100644 --- a/packages/camera/src/i18n/resources/en.js +++ b/packages/camera/src/i18n/resources/en.js @@ -49,6 +49,17 @@ const en = { 'MISSING_PARTS--missing some parts': 'is missing important car parts', 'HIDDEN_PARTS--some parts not visible enough': 'has some car parts not visible enough', 'NO_CAR_BODY--no car body detected': 'doesn\'t have a clear vehicle', + 'NO_CAR_BODY--No car body was detected. Car parts prediction is `None`.': 'no car was detected', + UNKNOWN_SIGHT: 'can\'t be analysed for the car coverage', + INTERIOR_NOT_SUPPORTED: 'can\'t be analysed for the car coverage', + NO_CAR_BODY: 'does not contain a car', + UNKNOWN_VIEWPOINT: 'is taken from an unknown point of vue', + WRONG_ANGLE: 'is taken from the wrong angle', + WRONG_CENTER_PART: 'is not centered on the proper car part', + MISSING_PARTS: 'is missing some car parts', + HIDDEN_PARTS: 'contains car parts not visible enough', + TOO_ZOOMED: 'is too zoomed', + NOT_ZOOMED_ENOUGH: 'is not zoomed enough', }, }, variant: { diff --git a/packages/camera/src/i18n/resources/fr.js b/packages/camera/src/i18n/resources/fr.js index 862e7bda6..8b48631a8 100644 --- a/packages/camera/src/i18n/resources/fr.js +++ b/packages/camera/src/i18n/resources/fr.js @@ -49,6 +49,17 @@ const fr = { 'MISSING_PARTS--missing some parts': 'ne contient pas les bonnes parties de la voiture', 'HIDDEN_PARTS--some parts not visible enough': 'contient certaines parties de voiture qui ne sont pas assez visibles', 'NO_CAR_BODY--no car body detected': 'n\'a pas de véhicule clair', + 'NO_CAR_BODY--No car body was detected. Car parts prediction is `None`.': 'aucune voiture n\'a été détéctée', + UNKNOWN_SIGHT: 'ne peut pas être analysée pour la couverture de voiture', + INTERIOR_NOT_SUPPORTED: 'ne peut pas être analysée pour la couverture de voiture', + NO_CAR_BODY: 'ne contient pas de voiture', + UNKNOWN_VIEWPOINT: 'est prise depuis un point de vue non reconnu', + WRONG_ANGLE: 'est prise depuis un mauvais angle', + WRONG_CENTER_PART: 'n\'est pas centrée sur la bonne partie de voiture', + MISSING_PARTS: 'ne contient pas toutes les parties de voiture', + HIDDEN_PARTS: 'contient des parties de voiture pas assez visibles', + TOO_ZOOMED: 'est trop zoomée', + NOT_ZOOMED_ENOUGH: 'n\'est pas assez zoomée', }, }, variant: { diff --git a/packages/corejs/package.json b/packages/corejs/package.json index 2781f5eec..4102f420a 100644 --- a/packages/corejs/package.json +++ b/packages/corejs/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/corejs", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.6.9", + "version": "3.7.4", "private": false, "description": "AI-powered vehicle damage detection for JavaScript", "homepage": "https://github.com/monkvision/monkjs/packages/corejs/#readme", diff --git a/packages/corejs/src/monitoring/index.tsx b/packages/corejs/src/monitoring/index.tsx index 6dcf0f5e2..33f708e92 100644 --- a/packages/corejs/src/monitoring/index.tsx +++ b/packages/corejs/src/monitoring/index.tsx @@ -34,6 +34,7 @@ export function MonitoringProvider({ children, config }: PropsWithChildren \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg b/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg index 306ce99d4..7e070ba4f 100644 --- a/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg +++ b/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-Hvswbpuo.svg b/packages/sights/assets/overlays/fesc20-Hvswbpuo.svg new file mode 100644 index 000000000..63df029d6 --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-Hvswbpuo.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/fesc20-KdA8FE02.svg b/packages/sights/assets/overlays/fesc20-KdA8FE02.svg new file mode 100644 index 000000000..63df029d6 --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-KdA8FE02.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/fesc20-TbH6Zfk_.svg b/packages/sights/assets/overlays/fesc20-TbH6Zfk_.svg new file mode 100644 index 000000000..63df029d6 --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-TbH6Zfk_.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg b/packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg new file mode 100644 index 000000000..f1adb7b34 --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/fesc20-W6XrryMO.svg b/packages/sights/assets/overlays/fesc20-W6XrryMO.svg new file mode 100644 index 000000000..f7b1baf5a --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-W6XrryMO.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg b/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg index 174cd7270..043b8c62c 100644 --- a/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg +++ b/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-YPcJPAZE.svg b/packages/sights/assets/overlays/fesc20-YPcJPAZE.svg new file mode 100644 index 000000000..100bf0da8 --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-YPcJPAZE.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/fesc20-b_S_-VYh.svg b/packages/sights/assets/overlays/fesc20-b_S_-VYh.svg new file mode 100644 index 000000000..63df029d6 --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-b_S_-VYh.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/fesc20-dKVLig1i.svg b/packages/sights/assets/overlays/fesc20-dKVLig1i.svg index 617e49709..3e115da42 100644 --- a/packages/sights/assets/overlays/fesc20-dKVLig1i.svg +++ b/packages/sights/assets/overlays/fesc20-dKVLig1i.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-raHPDUNm.svg b/packages/sights/assets/overlays/fesc20-raHPDUNm.svg new file mode 100644 index 000000000..61e1da5ee --- /dev/null +++ b/packages/sights/assets/overlays/fesc20-raHPDUNm.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-3I-Bjtkv.svg b/packages/sights/assets/overlays/ff150-3I-Bjtkv.svg new file mode 100644 index 000000000..9da015bfa --- /dev/null +++ b/packages/sights/assets/overlays/ff150-3I-Bjtkv.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-3lKZIoxw.svg b/packages/sights/assets/overlays/ff150-3lKZIoxw.svg index 90b50304d..8f4c39fa9 100644 --- a/packages/sights/assets/overlays/ff150-3lKZIoxw.svg +++ b/packages/sights/assets/overlays/ff150-3lKZIoxw.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg b/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg index cf216c226..e1a50ec87 100644 --- a/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg +++ b/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-7nvlys8r.svg b/packages/sights/assets/overlays/ff150-7nvlys8r.svg index eeabf42e6..5d30749a7 100644 --- a/packages/sights/assets/overlays/ff150-7nvlys8r.svg +++ b/packages/sights/assets/overlays/ff150-7nvlys8r.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-7vyfzrVQ.svg b/packages/sights/assets/overlays/ff150-7vyfzrVQ.svg new file mode 100644 index 000000000..20a5f61dd --- /dev/null +++ b/packages/sights/assets/overlays/ff150-7vyfzrVQ.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-FqbrFVr2.svg b/packages/sights/assets/overlays/ff150-FqbrFVr2.svg index e0148e969..632a82f08 100644 --- a/packages/sights/assets/overlays/ff150-FqbrFVr2.svg +++ b/packages/sights/assets/overlays/ff150-FqbrFVr2.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-Gx0zuL4H.svg b/packages/sights/assets/overlays/ff150-Gx0zuL4H.svg new file mode 100644 index 000000000..9da015bfa --- /dev/null +++ b/packages/sights/assets/overlays/ff150-Gx0zuL4H.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-H3MCPESJ.svg b/packages/sights/assets/overlays/ff150-H3MCPESJ.svg new file mode 100644 index 000000000..91f04b0b9 --- /dev/null +++ b/packages/sights/assets/overlays/ff150-H3MCPESJ.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-Kx339Abo.svg b/packages/sights/assets/overlays/ff150-Kx339Abo.svg new file mode 100644 index 000000000..9da015bfa --- /dev/null +++ b/packages/sights/assets/overlays/ff150-Kx339Abo.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-jUBEKij0.svg b/packages/sights/assets/overlays/ff150-jUBEKij0.svg new file mode 100644 index 000000000..5063ea469 --- /dev/null +++ b/packages/sights/assets/overlays/ff150-jUBEKij0.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-nTWv3M6S.svg b/packages/sights/assets/overlays/ff150-nTWv3M6S.svg new file mode 100644 index 000000000..9da015bfa --- /dev/null +++ b/packages/sights/assets/overlays/ff150-nTWv3M6S.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ff150-ouGGtRnf.svg b/packages/sights/assets/overlays/ff150-ouGGtRnf.svg index cc42dbbd7..3063dc4c1 100644 --- a/packages/sights/assets/overlays/ff150-ouGGtRnf.svg +++ b/packages/sights/assets/overlays/ff150-ouGGtRnf.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-pNO26q4D.svg b/packages/sights/assets/overlays/ff150-pNO26q4D.svg new file mode 100644 index 000000000..876ef5cec --- /dev/null +++ b/packages/sights/assets/overlays/ff150-pNO26q4D.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-Cupr9bjR.svg b/packages/sights/assets/overlays/ffocus18-Cupr9bjR.svg new file mode 100644 index 000000000..55057eb4f --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-Cupr9bjR.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg b/packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg new file mode 100644 index 000000000..80104de32 --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg b/packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg new file mode 100644 index 000000000..42c2a4229 --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg b/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg index 747c427d2..4f1745b23 100644 --- a/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg +++ b/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-SNN4sM20.svg b/packages/sights/assets/overlays/ffocus18-SNN4sM20.svg new file mode 100644 index 000000000..55057eb4f --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-SNN4sM20.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-dvP1kb2u.svg b/packages/sights/assets/overlays/ffocus18-dvP1kb2u.svg new file mode 100644 index 000000000..55057eb4f --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-dvP1kb2u.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-h14N6xUZ.svg b/packages/sights/assets/overlays/ffocus18-h14N6xUZ.svg new file mode 100644 index 000000000..55057eb4f --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-h14N6xUZ.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-jkSlWpql.svg b/packages/sights/assets/overlays/ffocus18-jkSlWpql.svg new file mode 100644 index 000000000..a3911ede8 --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-jkSlWpql.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-tufa4FoL.svg b/packages/sights/assets/overlays/ffocus18-tufa4FoL.svg new file mode 100644 index 000000000..ce8e5ed71 --- /dev/null +++ b/packages/sights/assets/overlays/ffocus18-tufa4FoL.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg b/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg index ff1266240..5e6406a45 100644 --- a/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg +++ b/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg b/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg index 82a8754c2..002280335 100644 --- a/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg +++ b/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg b/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg index 6bdc9782f..9711e7f74 100644 --- a/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg +++ b/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg b/packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg new file mode 100644 index 000000000..46bd2cbd7 --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg b/packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg new file mode 100644 index 000000000..ae71f818b --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ftransit18-EjXu4RGC.svg b/packages/sights/assets/overlays/ftransit18-EjXu4RGC.svg new file mode 100644 index 000000000..46413092e --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-EjXu4RGC.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg b/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg index 5721e9257..c5dce2892 100644 --- a/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg +++ b/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg b/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg index f8c36bfa9..2ea15b0dc 100644 --- a/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg +++ b/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-biueFeY7.svg b/packages/sights/assets/overlays/ftransit18-biueFeY7.svg new file mode 100644 index 000000000..46413092e --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-biueFeY7.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ftransit18-ewzj3qTR.svg b/packages/sights/assets/overlays/ftransit18-ewzj3qTR.svg new file mode 100644 index 000000000..46413092e --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-ewzj3qTR.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg b/packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg new file mode 100644 index 000000000..5703267e2 --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg b/packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg new file mode 100644 index 000000000..3a6dbece9 --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/ftransit18-zhgNZH_o.svg b/packages/sights/assets/overlays/ftransit18-zhgNZH_o.svg new file mode 100644 index 000000000..46413092e --- /dev/null +++ b/packages/sights/assets/overlays/ftransit18-zhgNZH_o.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-2v-2_QD5.svg b/packages/sights/assets/overlays/haccord-2v-2_QD5.svg new file mode 100644 index 000000000..2ad2b92f1 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-2v-2_QD5.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-4c2TDsRn.svg b/packages/sights/assets/overlays/haccord-4c2TDsRn.svg new file mode 100644 index 000000000..a9b7308f7 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-4c2TDsRn.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-9fxMGSs6.svg b/packages/sights/assets/overlays/haccord-9fxMGSs6.svg new file mode 100644 index 000000000..db8d781c6 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-9fxMGSs6.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-GQcZz48C.svg b/packages/sights/assets/overlays/haccord-GQcZz48C.svg index 8295a2f60..08be70af2 100644 --- a/packages/sights/assets/overlays/haccord-GQcZz48C.svg +++ b/packages/sights/assets/overlays/haccord-GQcZz48C.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-H_eRrLBl.svg b/packages/sights/assets/overlays/haccord-H_eRrLBl.svg new file mode 100644 index 000000000..29da6d2e2 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-H_eRrLBl.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-KN23XXkX.svg b/packages/sights/assets/overlays/haccord-KN23XXkX.svg index bfb446569..98f4b3949 100644 --- a/packages/sights/assets/overlays/haccord-KN23XXkX.svg +++ b/packages/sights/assets/overlays/haccord-KN23XXkX.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-KvP-pm8L.svg b/packages/sights/assets/overlays/haccord-KvP-pm8L.svg index a69d53d80..a9d477f30 100644 --- a/packages/sights/assets/overlays/haccord-KvP-pm8L.svg +++ b/packages/sights/assets/overlays/haccord-KvP-pm8L.svg @@ -1 +1 @@ -> \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-OXYy5gET.svg b/packages/sights/assets/overlays/haccord-OXYy5gET.svg index f65536d40..0490e8f65 100644 --- a/packages/sights/assets/overlays/haccord-OXYy5gET.svg +++ b/packages/sights/assets/overlays/haccord-OXYy5gET.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-SIywQdYc.svg b/packages/sights/assets/overlays/haccord-SIywQdYc.svg new file mode 100644 index 000000000..a9b7308f7 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-SIywQdYc.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg b/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg index 3bb0766c7..b3bb960ca 100644 --- a/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg +++ b/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-boMeNVsC.svg b/packages/sights/assets/overlays/haccord-boMeNVsC.svg new file mode 100644 index 000000000..7cc402362 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-boMeNVsC.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-g2ABR9ES.svg b/packages/sights/assets/overlays/haccord-g2ABR9ES.svg new file mode 100644 index 000000000..a9b7308f7 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-g2ABR9ES.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/haccord-r0uhi6dj.svg b/packages/sights/assets/overlays/haccord-r0uhi6dj.svg new file mode 100644 index 000000000..a9b7308f7 --- /dev/null +++ b/packages/sights/assets/overlays/haccord-r0uhi6dj.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-2bGeRS3I.svg b/packages/sights/assets/overlays/jgc21-2bGeRS3I.svg new file mode 100644 index 000000000..530eab422 --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-2bGeRS3I.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg b/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg index ba89cbf78..e95983e66 100644 --- a/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg +++ b/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-DhGfIoS_.svg b/packages/sights/assets/overlays/jgc21-DhGfIoS_.svg new file mode 100644 index 000000000..ae6f09bcd --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-DhGfIoS_.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-GmGZpI_0.svg b/packages/sights/assets/overlays/jgc21-GmGZpI_0.svg new file mode 100644 index 000000000..ae6f09bcd --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-GmGZpI_0.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-M7aCKaPN.svg b/packages/sights/assets/overlays/jgc21-M7aCKaPN.svg new file mode 100644 index 000000000..ae6f09bcd --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-M7aCKaPN.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg b/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg index 416bb94b2..b0ccc1b80 100644 --- a/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg +++ b/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-S8sE69on.svg b/packages/sights/assets/overlays/jgc21-S8sE69on.svg new file mode 100644 index 000000000..b83b66e8a --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-S8sE69on.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-giQgZNoE.svg b/packages/sights/assets/overlays/jgc21-giQgZNoE.svg new file mode 100644 index 000000000..ae6f09bcd --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-giQgZNoE.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg b/packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg new file mode 100644 index 000000000..023fdbbe9 --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg b/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg index abc640f38..b002f4a5a 100644 --- a/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg +++ b/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg b/packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg new file mode 100644 index 000000000..528c7d8ce --- /dev/null +++ b/packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg b/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg index 2912ddf3b..7f2bbdbf7 100644 --- a/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg +++ b/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg b/packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg new file mode 100644 index 000000000..f801d8729 --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg b/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg old mode 100755 new mode 100644 index 2f21ecbc1..77afda50e --- a/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg +++ b/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-670P2H2V.svg b/packages/sights/assets/overlays/tsienna20-670P2H2V.svg old mode 100755 new mode 100644 index f9dc14c8b..38d2cbb49 --- a/packages/sights/assets/overlays/tsienna20-670P2H2V.svg +++ b/packages/sights/assets/overlays/tsienna20-670P2H2V.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-K0ThKmue.svg b/packages/sights/assets/overlays/tsienna20-K0ThKmue.svg new file mode 100644 index 000000000..153cfe829 --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-K0ThKmue.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg b/packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg new file mode 100644 index 000000000..ea05688aa --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg b/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg index b1478a5f7..47b7a0a76 100644 --- a/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg +++ b/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-bCkFE45R.svg b/packages/sights/assets/overlays/tsienna20-bCkFE45R.svg new file mode 100644 index 000000000..a02aa3200 --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-bCkFE45R.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/tsienna20-cI285Gon.svg b/packages/sights/assets/overlays/tsienna20-cI285Gon.svg index d35fc1c25..1bf4ccd61 100644 --- a/packages/sights/assets/overlays/tsienna20-cI285Gon.svg +++ b/packages/sights/assets/overlays/tsienna20-cI285Gon.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-dUh-eali.svg b/packages/sights/assets/overlays/tsienna20-dUh-eali.svg new file mode 100644 index 000000000..a02aa3200 --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-dUh-eali.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/tsienna20-nRXoUoCu.svg b/packages/sights/assets/overlays/tsienna20-nRXoUoCu.svg new file mode 100644 index 000000000..a02aa3200 --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-nRXoUoCu.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/tsienna20-pnNf2nqG.svg b/packages/sights/assets/overlays/tsienna20-pnNf2nqG.svg new file mode 100644 index 000000000..a02aa3200 --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-pnNf2nqG.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/assets/overlays/tsienna20-uz29ILgw.svg b/packages/sights/assets/overlays/tsienna20-uz29ILgw.svg new file mode 100644 index 000000000..3e26cb608 --- /dev/null +++ b/packages/sights/assets/overlays/tsienna20-uz29ILgw.svg @@ -0,0 +1 @@ + diff --git a/packages/sights/index.json b/packages/sights/index.json index 30f49c4ee..26c8a57f9 100644 --- a/packages/sights/index.json +++ b/packages/sights/index.json @@ -522,6 +522,22 @@ "overlay": "fesc20-4Wqx52oU.svg", "mirror_sight": "fesc20-5Ts1UkPT" }, + "fesc20-Tlu3sz8A": { + "id": "fesc20-Tlu3sz8A", + "label": { + "en": "Rear Lateral Low Left", + "fr": "Arrière Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Crossover", + "make": "Ford", + "model": "Escape SE 2020", + "dimensions_xyz": [2.15, 4.6, 1.67] + }, + "overlay": "fesc20-Tlu3sz8A.svg", + "mirror_sight": "fesc20-raHPDUNm" + }, "fesc20-WIQsf_gX": { "id": "fesc20-WIQsf_gX", "label": { @@ -546,6 +562,22 @@ "overlay": "fesc20-WIQsf_gX.svg", "mirror_sight": "fesc20-dKVLig1i" }, + "fesc20-YPcJPAZE": { + "id": "fesc20-YPcJPAZE", + "label": { + "en": "Front Lateral Low Left", + "fr": "Avant Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Crossover", + "make": "Ford", + "model": "Escape SE 2020", + "dimensions_xyz": [2.15, 4.6, 1.67] + }, + "overlay": "fesc20-YPcJPAZE.svg", + "mirror_sight": "fesc20-W6XrryMO" + }, "fesc20-P0oSEh8p": { "id": "fesc20-P0oSEh8p", "label": { @@ -618,6 +650,22 @@ "overlay": "fesc20-5Ts1UkPT.svg", "mirror_sight": "fesc20-4Wqx52oU" }, + "fesc20-raHPDUNm": { + "id": "fesc20-raHPDUNm", + "label": { + "en": "Rear Lateral Low Right", + "fr": "Arrière Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Crossover", + "make": "Ford", + "model": "Escape SE 2020", + "dimensions_xyz": [2.15, 4.6, 1.67] + }, + "overlay": "fesc20-raHPDUNm.svg", + "mirror_sight": "fesc20-Tlu3sz8A" + }, "fesc20-dKVLig1i": { "id": "fesc20-dKVLig1i", "label": { @@ -642,6 +690,22 @@ "overlay": "fesc20-dKVLig1i.svg", "mirror_sight": "fesc20-WIQsf_gX" }, + "fesc20-W6XrryMO": { + "id": "fesc20-W6XrryMO", + "label": { + "en": "Front Lateral Low Right", + "fr": "Avant Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Crossover", + "make": "Ford", + "model": "Escape SE 2020", + "dimensions_xyz": [2.15, 4.6, 1.67] + }, + "overlay": "fesc20-W6XrryMO.svg", + "mirror_sight": "fesc20-YPcJPAZE" + }, "fesc20-0mJeXBDf": { "id": "fesc20-0mJeXBDf", "label": { @@ -1258,6 +1322,22 @@ "overlay": "ff150-FqbrFVr2.svg", "mirror_sight": "ff150-7nvlys8r" }, + "ff150-pNO26q4D": { + "id": "ff150-pNO26q4D", + "label": { + "en": "Front Lateral Low Left", + "fr": "Avant Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Pickup", + "make": "Ford", + "model": "F-150 Super Cab XL 2014", + "dimensions_xyz": [2.48, 5.8, 1.93] + }, + "overlay": "ff150-pNO26q4D.svg", + "mirror_sight": "ff150-jUBEKij0" + }, "ff150-7nvlys8r": { "id": "ff150-7nvlys8r", "label": { @@ -1282,6 +1362,22 @@ "overlay": "ff150-7nvlys8r.svg", "mirror_sight": "ff150-FqbrFVr2" }, + "ff150-jUBEKij0": { + "id": "ff150-jUBEKij0", + "label": { + "en": "Front Lateral Low Right", + "fr": "Avant Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Pickup", + "make": "Ford", + "model": "F-150 Super Cab XL 2014", + "dimensions_xyz": [2.48, 5.8, 1.93] + }, + "overlay": "ff150-jUBEKij0.svg", + "mirror_sight": "ff150-pNO26q4D" + }, "ff150-vwE3yqdh": { "id": "ff150-vwE3yqdh", "label": { @@ -1354,6 +1450,22 @@ "overlay": "ff150-ouGGtRnf.svg", "mirror_sight": "ff150-3rM9XB0Z" }, + "ff150-7vyfzrVQ": { + "id": "ff150-7vyfzrVQ", + "label": { + "en": "Rear Lateral Low Left", + "fr": "Arrière Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Pickup", + "make": "Ford", + "model": "F-150 Super Cab XL 2014", + "dimensions_xyz": [2.48, 5.8, 1.93] + }, + "overlay": "ff150-7vyfzrVQ.svg", + "mirror_sight": "ff150-H3MCPESJ" + }, "ff150-3dkU10af": { "id": "ff150-3dkU10af", "label": { @@ -1472,6 +1584,22 @@ "overlay": "ff150-3rM9XB0Z.svg", "mirror_sight": "ff150-ouGGtRnf" }, + "ff150-H3MCPESJ": { + "id": "ff150-H3MCPESJ", + "label": { + "en": "Rear Lateral Low Right", + "fr": "Arrière Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Pickup", + "make": "Ford", + "model": "F-150 Super Cab XL 2014", + "dimensions_xyz": [2.48, 5.8, 1.93] + }, + "overlay": "ff150-H3MCPESJ.svg", + "mirror_sight": "ff150-7vyfzrVQ" + }, "ff150-phbX7Bef": { "id": "ff150-phbX7Bef", "label": { @@ -1987,6 +2115,21 @@ "template_image": "ffocus18-x_1SE7X-.opengl.png", "mirror_sight": "ffocus18-KkeGvT-F" }, + "ffocus18-Eo0jqD_a": { + "id": "ffocus18-Eo0jqD_a", + "label": { + "en": "Front Lateral Low Left", + "fr": "Avant Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "City", + "make": "Ford", + "model": "Focus", + "dimensions_xyz": [1.98, 4.42, 1.46] + }, + "mirror_sight": "ffocus18-jkSlWpql" + }, "ffocus18-yo9eBDW6": { "id": "ffocus18-yo9eBDW6", "label": { @@ -2056,6 +2199,21 @@ "template_image": "ffocus18-S3kgFOBb.opengl.png", "mirror_sight": "ffocus18-P2jFq1Ea" }, + "ffocus18-JFX8WF9P": { + "id": "ffocus18-JFX8WF9P", + "label": { + "en": "Rear Lateral Low Left", + "fr": "Arrière Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "City", + "make": "Ford", + "model": "Focus", + "dimensions_xyz": [1.98, 4.42, 1.46] + }, + "mirror_sight": "ffocus18-tufa4FoL" + }, "ffocus18-IoqRrmlA": { "id": "ffocus18-IoqRrmlA", "label": { @@ -2191,6 +2349,21 @@ "template_image": "ffocus18-P2jFq1Ea.opengl.png", "mirror_sight": "ffocus18-S3kgFOBb" }, + "ffocus18-tufa4FoL": { + "id": "ffocus18-tufa4FoL", + "label": { + "en": "Rear Lateral Low Right", + "fr": "Arrière Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "City", + "make": "Ford", + "model": "Focus", + "dimensions_xyz": [1.98, 4.42, 1.46] + }, + "mirror_sight": "ffocus18-JFX8WF9P" + }, "ffocus18-FdsQDaTW": { "id": "ffocus18-FdsQDaTW", "label": { @@ -2260,6 +2433,21 @@ "template_image": "ffocus18-KkeGvT-F.opengl.png", "mirror_sight": "ffocus18-x_1SE7X-" }, + "ffocus18-jkSlWpql": { + "id": "ffocus18-jkSlWpql", + "label": { + "en": "Front Lateral Low Right", + "fr": "Avant Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "City", + "make": "Ford", + "model": "Focus", + "dimensions_xyz": [1.98, 4.42, 1.46] + }, + "mirror_sight": "ffocus18-Eo0jqD_a" + }, "ffocus18-seOy3jwd": { "id": "ffocus18-seOy3jwd", "label": { @@ -2842,6 +3030,22 @@ "overlay": "ftransit18-Y0vPhBVF.svg", "mirror_sight": "ftransit18-4NMPqEV6" }, + "ftransit18-mGSvkRHz": { + "id": "ftransit18-mGSvkRHz", + "label": { + "en": "Front Lateral Low Left", + "fr": "Avant Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Van", + "make": "Ford", + "model": "Transit Fourgon L3H2 Trendline 2018", + "dimensions_xyz": [2.49, 6.01, 2.76] + }, + "overlay": "ftransit18-mGSvkRHz.svg", + "mirror_sight": "ftransit18-7qLSCnFP" + }, "ftransit18-4NMPqEV6": { "id": "ftransit18-4NMPqEV6", "label": { @@ -2866,6 +3070,22 @@ "overlay": "ftransit18-4NMPqEV6.svg", "mirror_sight": "ftransit18-Y0vPhBVF" }, + "ftransit18-7qLSCnFP": { + "id": "ftransit18-7qLSCnFP", + "label": { + "en": "Front Lateral Low Right", + "fr": "Avant Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Van", + "make": "Ford", + "model": "Transit Fourgon L3H2 Trendline 2018", + "dimensions_xyz": [2.49, 6.01, 2.76] + }, + "overlay": "ftransit18-7qLSCnFP.svg", + "mirror_sight": "ftransit18-mGSvkRHz" + }, "ftransit18-rsXWUN8X": { "id": "ftransit18-rsXWUN8X", "label": { @@ -2938,6 +3158,22 @@ "overlay": "ftransit18-3Sbfx_KZ.svg", "mirror_sight": "ftransit18-RJ2D7DNz" }, + "ftransit18-yxw9gmyL": { + "id": "ftransit18-yxw9gmyL", + "label": { + "en": "Rear Lateral Low Left", + "fr": "Arrière Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Van", + "make": "Ford", + "model": "Transit Fourgon L3H2 Trendline 2018", + "dimensions_xyz": [2.49, 6.01, 2.76] + }, + "overlay": "ftransit18-yxw9gmyL.svg", + "mirror_sight": "ftransit18-AuCXxG5o" + }, "ftransit18-G24AdP6r": { "id": "ftransit18-G24AdP6r", "label": { @@ -2986,6 +3222,22 @@ "overlay": "ftransit18-RJ2D7DNz.svg", "mirror_sight": "ftransit18-3Sbfx_KZ" }, + "ftransit18-AuCXxG5o": { + "id": "ftransit18-AuCXxG5o", + "label": { + "en": "Rear Lateral Low Right", + "fr": "Arrière Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Van", + "make": "Ford", + "model": "Transit Fourgon L3H2 Trendline 2018", + "dimensions_xyz": [2.49, 6.01, 2.76] + }, + "overlay": "ftransit18-AuCXxG5o.svg", + "mirror_sight": "ftransit18-yxw9gmyL" + }, "ftransit18-eztNpSRX": { "id": "ftransit18-eztNpSRX", "label": { @@ -3602,6 +3854,22 @@ "overlay": "haccord-W-Bn3bU1.svg", "mirror_sight": "haccord-OXYy5gET" }, + "haccord-H_eRrLBl": { + "id": "haccord-H_eRrLBl", + "label": { + "en": "Rear Lateral Low Left", + "fr": "Arrière Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Sedan", + "make": "Honda", + "model": "Accord Sedan Sport US spec 2018", + "dimensions_xyz": [2.14, 4.88, 1.44] + }, + "overlay": "haccord-H_eRrLBl.svg", + "mirror_sight": "haccord-9fxMGSs6" + }, "haccord-OXYy5gET": { "id": "haccord-OXYy5gET", "label": { @@ -3626,6 +3894,22 @@ "overlay": "haccord-OXYy5gET.svg", "mirror_sight": "haccord-W-Bn3bU1" }, + "haccord-9fxMGSs6": { + "id": "haccord-9fxMGSs6", + "label": { + "en": "Rear Lateral Low Right", + "fr": "Arrière Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Sedan", + "make": "Honda", + "model": "Accord Sedan Sport US spec 2018", + "dimensions_xyz": [2.14, 4.88, 1.44] + }, + "overlay": "haccord-9fxMGSs6.svg", + "mirror_sight": "haccord-H_eRrLBl" + }, "haccord-mdZ7optI": { "id": "haccord-mdZ7optI", "label": { @@ -3722,6 +4006,22 @@ "overlay": "haccord-GQcZz48C.svg", "mirror_sight": "haccord-KN23XXkX" }, + "haccord-2v-2_QD5": { + "id": "haccord-2v-2_QD5", + "label": { + "en": "Front Lateral Low Left", + "fr": "Avant Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Sedan", + "make": "Honda", + "model": "Accord Sedan Sport US spec 2018", + "dimensions_xyz": [2.14, 4.88, 1.44] + }, + "overlay": "haccord-2v-2_QD5.svg", + "mirror_sight": "haccord-boMeNVsC" + }, "haccord-KN23XXkX": { "id": "haccord-KN23XXkX", "label": { @@ -3746,6 +4046,22 @@ "overlay": "haccord-KN23XXkX.svg", "mirror_sight": "haccord-GQcZz48C" }, + "haccord-boMeNVsC": { + "id": "haccord-boMeNVsC", + "label": { + "en": "Front Lateral Low Right", + "fr": "Avant Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Sedan", + "make": "Honda", + "model": "Accord Sedan Sport US spec 2018", + "dimensions_xyz": [2.14, 4.88, 1.44] + }, + "overlay": "haccord-boMeNVsC.svg", + "mirror_sight": "haccord-2v-2_QD5" + }, "haccord-PGr3RzzP": { "id": "haccord-PGr3RzzP", "label": { @@ -4362,6 +4678,22 @@ "overlay": "jgc21-z15ZdJL6.svg", "mirror_sight": "jgc21-s7WDTRmE" }, + "jgc21-nVbhsBaQ": { + "id": "jgc21-nVbhsBaQ", + "label": { + "en": "Front Lateral Low Left", + "fr": "Avant Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Large SUV", + "make": "Jeep", + "model": "Grand Cherokee L Summit 2021", + "dimensions_xyz": [2.19, 5.18, 1.88] + }, + "overlay": "jgc21-nVbhsBaQ.svg", + "mirror_sight": "jgc21-S8sE69on" + }, "jgc21-s7WDTRmE": { "id": "jgc21-s7WDTRmE", "label": { @@ -4386,6 +4718,22 @@ "overlay": "jgc21-s7WDTRmE.svg", "mirror_sight": "jgc21-z15ZdJL6" }, + "jgc21-S8sE69on": { + "id": "jgc21-S8sE69on", + "label": { + "en": "Front Lateral Low Right", + "fr": "Avant Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Large SUV", + "make": "Jeep", + "model": "Grand Cherokee L Summit 2021", + "dimensions_xyz": [2.19, 5.18, 1.88] + }, + "overlay": "jgc21-S8sE69on.svg", + "mirror_sight": "jgc21-nVbhsBaQ" + }, "jgc21-omlus7Ui": { "id": "jgc21-omlus7Ui", "label": { @@ -4506,6 +4854,22 @@ "overlay": "jgc21-3gjMwvQG.svg", "mirror_sight": "jgc21-RAVpqaE4" }, + "jgc21-2bGeRS3I": { + "id": "jgc21-2bGeRS3I", + "label": { + "en": "Rear Lateral Low Left", + "fr": "Arrière Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Large SUV", + "make": "Jeep", + "model": "Grand Cherokee L Summit 2021", + "dimensions_xyz": [2.19, 5.18, 1.88] + }, + "overlay": "jgc21-2bGeRS3I.svg", + "mirror_sight": "jgc21-xwYV3_Hz" + }, "jgc21-RAVpqaE4": { "id": "jgc21-RAVpqaE4", "label": { @@ -4530,6 +4894,22 @@ "overlay": "jgc21-RAVpqaE4.svg", "mirror_sight": "jgc21-3gjMwvQG" }, + "jgc21-xwYV3_Hz": { + "id": "jgc21-xwYV3_Hz", + "label": { + "en": "Rear Lateral Low Right", + "fr": "Arrière Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Large SUV", + "make": "Jeep", + "model": "Grand Cherokee L Summit 2021", + "dimensions_xyz": [2.19, 5.18, 1.88] + }, + "overlay": "jgc21-xwYV3_Hz.svg", + "mirror_sight": "jgc21-2bGeRS3I" + }, "jgc21-Emzc8jJA": { "id": "jgc21-Emzc8jJA", "label": { @@ -5115,6 +5495,22 @@ "overlay": "tsienna20-65mfPdRD.svg", "mirror_sight": "tsienna20-cI285Gon" }, + "tsienna20-uz29ILgw": { + "id": "tsienna20-uz29ILgw", + "label": { + "en": "Front Lateral Low Left", + "fr": "Avant Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Minivan", + "make": "Toyota", + "model": "Sienna Limited 2020", + "dimensions_xyz": [2.43, 5.24, 1.77] + }, + "overlay": "tsienna20-uz29ILgw.svg", + "mirror_sight": "tsienna20-K0ThKmue" + }, "tsienna20-cI285Gon": { "id": "tsienna20-cI285Gon", "label": { @@ -5139,6 +5535,22 @@ "overlay": "tsienna20-cI285Gon.svg", "mirror_sight": "tsienna20-65mfPdRD" }, + "tsienna20-K0ThKmue": { + "id": "tsienna20-K0ThKmue", + "label": { + "en": "Front Lateral Low Right", + "fr": "Avant Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Minivan", + "make": "Toyota", + "model": "Sienna Limited 2020", + "dimensions_xyz": [2.43, 5.24, 1.77] + }, + "overlay": "tsienna20-K0ThKmue.svg", + "mirror_sight": "tsienna20-uz29ILgw" + }, "tsienna20-1LNxhgCR": { "id": "tsienna20-1LNxhgCR", "label": { @@ -5259,6 +5671,22 @@ "overlay": "tsienna20-670P2H2V.svg", "mirror_sight": "tsienna20-SebsoqJm" }, + "tsienna20-2Zz6SEaI": { + "id": "tsienna20-2Zz6SEaI", + "label": { + "en": "Rear Lateral Low Left", + "fr": "Arrière Gauche Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Minivan", + "make": "Toyota", + "model": "Sienna Limited 2020", + "dimensions_xyz": [2.43, 5.24, 1.77] + }, + "overlay": "tsienna20-2Zz6SEaI.svg", + "mirror_sight": "tsienna20-RP6TzN4w" + }, "tsienna20-SebsoqJm": { "id": "tsienna20-SebsoqJm", "label": { @@ -5283,6 +5711,22 @@ "overlay": "tsienna20-SebsoqJm.svg", "mirror_sight": "tsienna20-670P2H2V" }, + "tsienna20-RP6TzN4w": { + "id": "tsienna20-RP6TzN4w", + "label": { + "en": "Rear Lateral Low Right", + "fr": "Arrière Droit Latéral - vue basse" + }, + "category": "exterior", + "vehicle": { + "type": "Minivan", + "make": "Toyota", + "model": "Sienna Limited 2020", + "dimensions_xyz": [2.43, 5.24, 1.77] + }, + "overlay": "tsienna20-RP6TzN4w.svg", + "mirror_sight": "tsienna20-2Zz6SEaI" + }, "tsienna20-OxFWgEPk": { "id": "tsienna20-OxFWgEPk", "label": { @@ -7172,5 +7616,285 @@ }, "template_image": "audia7-fDo5M0Fp.opengl.png", "mirror_sight": "audia7-McR3TJK0" + }, + "fesc20-KdA8FE02": { + "id": "fesc20-KdA8FE02", + "label": { + "en": "Front Wheel Left", + "fr": "Roue Avant Gauche" + }, + "category": "exterior", + "overlay": "fesc20-KdA8FE02.svg", + "mirror_sight": "fesc20-b_S_-VYh" + }, + "fesc20-b_S_-VYh": { + "id": "fesc20-b_S_-VYh", + "label": { + "en": "Front Wheel Right", + "fr": "Roue Avant Droite" + }, + "category": "exterior", + "overlay": "fesc20-b_S_-VYh.svg", + "mirror_sight": "fesc20-KdA8FE02" + }, + "fesc20-TbH6Zfk_": { + "id": "fesc20-TbH6Zfk_", + "label": { + "en": "Rear Wheel Left", + "fr": "Roue Arrière Gauche" + }, + "category": "exterior", + "overlay": "fesc20-TbH6Zfk_.svg", + "mirror_sight": "fesc20-Hvswbpuo" + }, + "fesc20-Hvswbpuo": { + "id": "fesc20-Hvswbpuo", + "label": { + "en": "Rear Wheel Right", + "fr": "Roue Arrière Droite" + }, + "category": "exterior", + "overlay": "fesc20-Hvswbpuo.svg", + "mirror_sight": "fesc20-TbH6Zfk_" + }, + "ff150-Gx0zuL4H": { + "id": "ff150-Gx0zuL4H", + "label": { + "en": "Front Wheel Left", + "fr": "Roue Avant Gauche" + }, + "category": "exterior", + "overlay": "ff150-Gx0zuL4H.svg", + "mirror_sight": "ff150-Kx339Abo" + }, + "ff150-Kx339Abo": { + "id": "ff150-Kx339Abo", + "label": { + "en": "Front Wheel Right", + "fr": "Roue Avant Droite" + }, + "category": "exterior", + "overlay": "ff150-Kx339Abo.svg", + "mirror_sight": "ff150-Gx0zuL4H" + }, + "ff150-nTWv3M6S": { + "id": "ff150-nTWv3M6S", + "label": { + "en": "Rear Wheel Left", + "fr": "Roue Arrière Gauche" + }, + "category": "exterior", + "overlay": "ff150-nTWv3M6S.svg", + "mirror_sight": "ff150-3I-Bjtkv" + }, + "ff150-3I-Bjtkv": { + "id": "ff150-3I-Bjtkv", + "label": { + "en": "Rear Wheel Right", + "fr": "Roue Arrière Droite" + }, + "category": "exterior", + "overlay": "ff150-3I-Bjtkv.svg", + "mirror_sight": "ff150-nTWv3M6S" + }, + "ffocus18-h14N6xUZ": { + "id": "ffocus18-h14N6xUZ", + "label": { + "en": "Front Wheel Left", + "fr": "Roue Avant Gauche" + }, + "category": "exterior", + "overlay": "ffocus18-h14N6xUZ.svg", + "mirror_sight": "ffocus18-dvP1kb2u" + }, + "ffocus18-dvP1kb2u": { + "id": "ffocus18-dvP1kb2u", + "label": { + "en": "Front Wheel Right", + "fr": "Roue Avant Droite" + }, + "category": "exterior", + "overlay": "ffocus18-dvP1kb2u.svg", + "mirror_sight": "ffocus18-h14N6xUZ" + }, + "ffocus18-Cupr9bjR": { + "id": "ffocus18-Cupr9bjR", + "label": { + "en": "Rear Wheel Left", + "fr": "Roue Arrière Gauche" + }, + "category": "exterior", + "overlay": "ffocus18-Cupr9bjR.svg", + "mirror_sight": "ffocus18-SNN4sM20" + }, + "ffocus18-SNN4sM20": { + "id": "ffocus18-SNN4sM20", + "label": { + "en": "Rear Wheel Right", + "fr": "Roue Arrière Droite" + }, + "category": "exterior", + "overlay": "ffocus18-SNN4sM20.svg", + "mirror_sight": "ffocus18-Cupr9bjR" + }, + "ftransit18-EjXu4RGC": { + "id": "ftransit18-EjXu4RGC", + "label": { + "en": "Front Wheel Left", + "fr": "Roue Avant Gauche" + }, + "category": "exterior", + "overlay": "ftransit18-EjXu4RGC.svg", + "mirror_sight": "ftransit18-biueFeY7" + }, + "ftransit18-biueFeY7": { + "id": "ftransit18-biueFeY7", + "label": { + "en": "Front Wheel Right", + "fr": "Roue Avant Droite" + }, + "category": "exterior", + "overlay": "ftransit18-biueFeY7.svg", + "mirror_sight": "ftransit18-EjXu4RGC" + }, + "ftransit18-ewzj3qTR": { + "id": "ftransit18-ewzj3qTR", + "label": { + "en": "Rear Wheel Left", + "fr": "Roue Arrière Gauche" + }, + "category": "exterior", + "overlay": "ftransit18-ewzj3qTR.svg", + "mirror_sight": "ftransit18-zhgNZH_o" + }, + "ftransit18-zhgNZH_o": { + "id": "ftransit18-zhgNZH_o", + "label": { + "en": "Rear Wheel Right", + "fr": "Roue Arrière Droite" + }, + "category": "exterior", + "overlay": "ftransit18-zhgNZH_o.svg", + "mirror_sight": "ftransit18-ewzj3qTR" + }, + "haccord-4c2TDsRn": { + "id": "haccord-4c2TDsRn", + "label": { + "en": "Front Wheel Left", + "fr": "Roue Avant Gauche" + }, + "category": "exterior", + "overlay": "haccord-4c2TDsRn.svg", + "mirror_sight": "haccord-r0uhi6dj" + }, + "haccord-r0uhi6dj": { + "id": "haccord-r0uhi6dj", + "label": { + "en": "Front Wheel Right", + "fr": "Roue Avant Droite" + }, + "category": "exterior", + "overlay": "haccord-r0uhi6dj.svg", + "mirror_sight": "haccord-4c2TDsRn" + }, + "haccord-g2ABR9ES": { + "id": "haccord-g2ABR9ES", + "label": { + "en": "Rear Wheel Left", + "fr": "Roue Arrière Gauche" + }, + "category": "exterior", + "overlay": "haccord-g2ABR9ES.svg", + "mirror_sight": "haccord-SIywQdYc" + }, + "haccord-SIywQdYc": { + "id": "haccord-SIywQdYc", + "label": { + "en": "Rear Wheel Right", + "fr": "Roue Arrière Droite" + }, + "category": "exterior", + "overlay": "haccord-SIywQdYc.svg", + "mirror_sight": "haccord-g2ABR9ES" + }, + "jgc21-M7aCKaPN": { + "id": "jgc21-M7aCKaPN", + "label": { + "en": "Front Wheel Left", + "fr": "Roue Avant Gauche" + }, + "category": "exterior", + "overlay": "jgc21-M7aCKaPN.svg", + "mirror_sight": "jgc21-GmGZpI_0" + }, + "jgc21-GmGZpI_0": { + "id": "jgc21-GmGZpI_0", + "label": { + "en": "Front Wheel Right", + "fr": "Roue Avant Droite" + }, + "category": "exterior", + "overlay": "jgc21-GmGZpI_0.svg", + "mirror_sight": "jgc21-M7aCKaPN" + }, + "jgc21-giQgZNoE": { + "id": "jgc21-giQgZNoE", + "label": { + "en": "Rear Wheel Left", + "fr": "Roue Arrière Gauche" + }, + "category": "exterior", + "overlay": "jgc21-giQgZNoE.svg", + "mirror_sight": "jgc21-DhGfIoS_" + }, + "jgc21-DhGfIoS_": { + "id": "jgc21-DhGfIoS_", + "label": { + "en": "Rear Wheel Right", + "fr": "Roue Arrière Droite" + }, + "category": "exterior", + "overlay": "jgc21-DhGfIoS_.svg", + "mirror_sight": "jgc21-giQgZNoE" + }, + "tsienna20-pnNf2nqG": { + "id": "tsienna20-pnNf2nqG", + "label": { + "en": "Front Wheel Left", + "fr": "Roue Avant Gauche" + }, + "category": "exterior", + "overlay": "tsienna20-pnNf2nqG.svg", + "mirror_sight": "tsienna20-dUh-eali" + }, + "tsienna20-dUh-eali": { + "id": "tsienna20-dUh-eali", + "label": { + "en": "Front Wheel Right", + "fr": "Roue Avant Droite" + }, + "category": "exterior", + "overlay": "tsienna20-dUh-eali.svg", + "mirror_sight": "tsienna20-pnNf2nqG" + }, + "tsienna20-nRXoUoCu": { + "id": "tsienna20-nRXoUoCu", + "label": { + "en": "Rear Wheel Left", + "fr": "Roue Arrière Gauche" + }, + "category": "exterior", + "overlay": "tsienna20-nRXoUoCu.svg", + "mirror_sight": "tsienna20-bCkFE45R" + }, + "tsienna20-bCkFE45R": { + "id": "tsienna20-bCkFE45R", + "label": { + "en": "Rear Wheel Right", + "fr": "Roue Arrière Droite" + }, + "category": "exterior", + "overlay": "tsienna20-bCkFE45R.svg", + "mirror_sight": "tsienna20-nRXoUoCu" } } diff --git a/packages/sights/package.json b/packages/sights/package.json index 863403160..b0b9ceffa 100644 --- a/packages/sights/package.json +++ b/packages/sights/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/sights", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.6.9", + "version": "3.7.4", "main": "dist/index.json", "private": false, "description": "Vehicle sights assets for AI-powered damage detection", diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index e9639704f..2cb5a8f81 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/toolkit", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.6.9", + "version": "3.7.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/toolkit/#readme", diff --git a/packages/ui/package.json b/packages/ui/package.json index d974566db..4b5905118 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/ui", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.6.9", + "version": "3.7.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/ui/#readme", @@ -48,7 +48,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/toolkit": "3.6.9", + "@monkvision/toolkit": "3.7.4", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/packages/visualization/package.json b/packages/visualization/package.json index afa3c494a..fb35443d0 100644 --- a/packages/visualization/package.json +++ b/packages/visualization/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/visualization", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.6.9", + "version": "3.7.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/visualization/#readme", @@ -53,7 +53,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.6.9", + "@monkvision/corejs": "3.7.4", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/src/i18n/resources/en.js b/src/i18n/resources/en.js index 028690a42..cd7eb9939 100644 --- a/src/i18n/resources/en.js +++ b/src/i18n/resources/en.js @@ -78,6 +78,11 @@ const en = { }, }, createInspection: { + authError: { + title: 'Sorry 😞', + message: 'You do not have the permissions to create a new inspection, please use a different user or contact the administrators', + button: 'Go back to home page', + }, error: { title: 'Sorry 😞', message: 'An error occurred while creating the inspection, please try again in a minute.', diff --git a/src/i18n/resources/fr.js b/src/i18n/resources/fr.js index b530044f8..4096dd63a 100644 --- a/src/i18n/resources/fr.js +++ b/src/i18n/resources/fr.js @@ -77,6 +77,11 @@ const fr = { }, }, createInspection: { + authError: { + title: 'Désolé 😞', + message: 'Vous n\'avez pas les autorisations nécessaires pour créer une nouvelle inspection. Veuillez utiliser un autre utilisateur ou contacter les administrateurs', + button: 'Retourner à la page d\'accueil', + }, error: { title: 'Désolé 😞', message: 'Une erreur est survenue lors de la création de l\'inspection, veuillez réessayer dans un instant.', diff --git a/src/main.js b/src/main.js index 31c3deb23..ab4fade78 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,7 @@ import { registerRootComponent } from 'expo'; import Constants from 'expo-constants'; import { Platform } from 'react-native'; import * as Sentry from 'sentry-expo'; +import { name, version } from '@package/json'; import App from 'components/App'; import './i18n'; import { MonitoringProvider } from '@monkvision/corejs'; @@ -13,6 +14,7 @@ const config = { environment: Constants.manifest.extra.ENV, debug: Constants.manifest.extra.ENV !== 'production', tracesSampleRate: 0.025, + release: `${name}@${version}`, tracingOrigins: ['localhost', 'cna.dev.monk.ai', 'cna-staging.dev.monk.ai', 'cna.preview.monk.ai', 'cna.monk.ai'], }; diff --git a/src/screens/InspectionCapture/index.js b/src/screens/InspectionCapture/index.js index 51088b052..db85da1fa 100644 --- a/src/screens/InspectionCapture/index.js +++ b/src/screens/InspectionCapture/index.js @@ -174,6 +174,7 @@ export default function InspectionCapture() { setCameraLoading(false)} onWarningMessage={(message) => setShowMessage(message)} onChange={handleChange} - enableCarCoverage enableComplianceCheck={enableComplianceCheck} onComplianceCheckFinish={() => setSuccess(true)} colors={colors} diff --git a/src/screens/InspectionCapture/mapTasksToSights.js b/src/screens/InspectionCapture/mapTasksToSights.js index e9839bfe0..4ac67ed84 100644 --- a/src/screens/InspectionCapture/mapTasksToSights.js +++ b/src/screens/InspectionCapture/mapTasksToSights.js @@ -1,7 +1,7 @@ /* eslint-disable camelcase */ import monk from '@monkvision/corejs'; -const wheelsAnalysisSights = [ +const WADDSights = [ { id: 'jgc21-z15ZdJL6', wheel_name: monk.types.WheelType.WHEEL_FRONT_LEFT }, { id: 'jgc21-3gjMwvQG', wheel_name: monk.types.WheelType.WHEEL_BACK_LEFT }, { id: 'jgc21-RAVpqaE4', wheel_name: monk.types.WheelType.WHEEL_BACK_RIGHT }, @@ -46,12 +46,15 @@ const mapTasksToSights = [ image_details: { image_type: monk.types.ImageOcrType.VIN }, }, }, - ...wheelsAnalysisSights.map(({ id, wheel_name }) => ({ + ...WADDSights.map(({ id, wheel_name }) => ({ id, - task: { - name: monk.types.TaskName.WHEEL_ANALYSIS, - image_details: { wheel_name }, - }, + tasks: [ + monk.types.TaskName.DAMAGE_DETECTION, + { + name: monk.types.TaskName.WHEEL_ANALYSIS, + image_details: { wheel_name }, + }, + ], payload: {}, })), ]; diff --git a/src/screens/InspectionCreate/index.js b/src/screens/InspectionCreate/index.js index b1e68bdbe..644d78f3f 100644 --- a/src/screens/InspectionCreate/index.js +++ b/src/screens/InspectionCreate/index.js @@ -161,6 +161,17 @@ export default function InspectionCreate() { } if (createInspection.state.error) { + if (createInspection.state.error?.response?.status === 401) { + return ( + + {t('createInspection.authError.title')} + + {t('createInspection.authError.message')} + + + + ); + } return ( {t('createInspection.error.title')} diff --git a/src/screens/InspectionCreate/useCreateInspection/index.js b/src/screens/InspectionCreate/useCreateInspection/index.js index 3723d6f11..d35bded0e 100644 --- a/src/screens/InspectionCreate/useCreateInspection/index.js +++ b/src/screens/InspectionCreate/useCreateInspection/index.js @@ -12,12 +12,22 @@ export default function useCreateInspection(vehicle) { const axiosRequest = useCallback(async () => { const taskOptions = { status: monk.types.ProgressStatusUpdate.NOT_STARTED }; const tasks = { - wheelAnalysis: { ...taskOptions, useLongshots: true }, - damageDetection: taskOptions, + wheelAnalysis: { + ...taskOptions, + useLongshots: true, + }, + damageDetection: { + ...taskOptions, + generate_subimages_parts: {}, + }, ...(vehicle?.vin ? {} : { imagesOcr: taskOptions }), }; - return monk.entity.inspection.createOne({ tasks, vehicle }); + return monk.entity.inspection.createOne({ + tasks, + vehicle, + damage_severity: { output_format: 'toyota' }, + }); }, []); const handleRequestSuccess = useCallback(({ entities, result }) => { diff --git a/src/screens/Landing/index.js b/src/screens/Landing/index.js index 36d40451e..0b9344076 100644 --- a/src/screens/Landing/index.js +++ b/src/screens/Landing/index.js @@ -69,7 +69,6 @@ export default function Landing() { [inspection?.tasks], ); - // NOTE(Ilyass):We update the ocr once the vin got changed manually, // so that the user can generate the pdf const { startUpdateOneTask } = useUpdateOneTask(inspectionId, monk.types.TaskName.IMAGES_OCR); diff --git a/website/docs/monitoring.md b/website/docs/monitoring.md index cc0857ec8..403d7ce00 100644 --- a/website/docs/monitoring.md +++ b/website/docs/monitoring.md @@ -8,13 +8,13 @@ slug: /monitoring ## Modules overview -The monitoring module provides different methods to monitor errors and measure metrics in the application. +The monitoring module uses different methods to monitor errors and measure metrics in the application. ## Implementation Guild -To implement `Monk` monitoring in an application, the entire application must be wrapped with a `MonitoringProvider`. +To set up `Monk` monitoring in an application, the entire application must be wrapped with a `MonitoringProvider`. -``` javascript +```javascript @@ -22,17 +22,32 @@ To implement `Monk` monitoring in an application, the entire application must be The configuration options are listed below : -## MonitoringConfig +### Monitoring Config -| **Config option** | **Required** | **Type** | **Description** | -|--------------------------|--------------|-----------------------------|----------------------------------------------| -| `dsn` | ✓ | string | DSN key for sentry.io application | -| `environment` | ✓ | string | The current environment of your application | -| `debug` | ✓ | boolean | Enable debug functionality in the SDK itself | -| `tracesSampleRate` | ✓ | number | Sample rate to determine trace sampling | -| `tracingOrigins` | ✓ | string[] | Array of all the origin to browser trace | +| **Config option** | **Required** | **Type** | **Description** | +| ------------------ | ------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dsn` | ✓ | string | DSN (Data Source Name) key for sentry.io application. A DSN tells a Sentry SDK where to send events so the events are associated with the correct project. | +| `environment` | ✓ | string | The current environment of your application , such as _development_, _testing_, _staging_, or _production_. Environments help you better filter issues and transactions among other uses. | +| `debug` | ✓ | boolean | Enable debug functionality in the SDK itself. If debug is enabled SDK will attempt to print out useful debugging information in browser's console if something goes wrong with sending the event. | +| `tracesSampleRate` | ✓ | number | Sample rate to determine trace sampling. The default is 1.0 which means that 100% of error events are sent. | +| `tracingOrigins` | ✓ | string[] | Array of all the origin to browser trace | +| `customTags` | | { [tag: string]: string } | Add custom tags in all transactions for better tracking | -Once configured, user just has to use custom hooks ```useMonitoring()``` which exposes the ```setMonitoringUser, setMonitoringTag, errorHandler, measurePerformance and setMeasurement``` functions which are used for setting current user in monitoring, error handling, measuring performance of functionality and setting custom measurements in the application. +### Note + +User requires to set a delay before redirecting to another URL after the successful completion of Capture Tour. It will make sure that the transaction of "Capture Tour" is finished properly and data is successfully logged to Sentry. + +```javascript +await new Promise((resolve) => { + setTimeout(resolve, 1000); +}); +``` + +--- + +## API + +The monitoring module uses custom hooks `useMonitoring()` which exposes the `setMonitoringUser, setMonitoringTag, errorHandler, measurePerformance and setMeasurement` functions which are used for setting current user in monitoring, error handling, measuring performance of functionality and setting custom measurements in the application. The details of these functions are listed below : @@ -68,14 +83,14 @@ const capture = measurePerformance(name: string, op: string, data?: { [key: stri Where name is the module name for which we want to measure performance. Operation is the functionality of the module and data is optional field that needed to be send to the transaction. It will return a object which contains different functions to use in current transaction. Here are the functions which will be return as an object. -## SentryTransactionObject +### SentryTransactionObject -| **Config option** | **Params** | **Description** | -|--------------------------|--------------------------------------------------------------|----------------------------------------------------------------------------------------------| -| `setTag` | name: string, value: string | Set tag in a transaction instance | -| `startSpan` | op: string, data: { [key: string]: number | string } | null | Create a span in a transaction instance to measure the performance for a sub event | -| `finishSpan` | op: string | Finish a running span in a transaction instance and complete the measurement for a sub event | -| `finish` | status: string | Finish a running transaction instance and complete the measurement for a main event | +| **Config option** | **Params** | **Description** | +| ----------------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `setTag` | name: string, value: string | Set tag in a transaction instance | +| `startSpan` | op: string, data: { [key: string]: number \| string } \| null | Create a span in a transaction instance to measure the performance for a sub event | +| `finishSpan` | op: string | Finish a running span in a transaction instance and complete the measurement for a sub event | +| `finish` | status: string | Finish a running transaction instance and complete the measurement for a main event | User can set tags, create new span and finish span & transaction at the end to send measured data to sentry. `capture.finish('Ok')` @@ -83,7 +98,7 @@ User can set tags, create new span and finish span & transaction at the end to s ```typescript const capture = setMeasurement(transactionName, name, value, unit); -capture() +capture(); ``` Where transactionName will be the name of transaction for which user wants to add measurements, name is the module name for which we want to measure data, value will be the value of the measurements in number and unit will be used as unit for the current measurement. From 237ef112f87bdd55c416dafd9170c1aab6e86cc8 Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Thu, 22 Jun 2023 08:37:17 +0300 Subject: [PATCH 10/27] Fix linter issues --- .../camera/src/components/Capture/capture.js | 2 +- .../camera/src/components/Capture/hooks.js | 35 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index 094699f22..dc9c81b00 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -268,7 +268,7 @@ const Capture = forwardRef(({ endTour, }; const startUploadAsync = useStartUploadAsync(startUploadAsyncParams); - const uploadAdditionalDamage = useUploadAdditionalDamage({inspectionId, onPictureUploaded}); + const uploadAdditionalDamage = useUploadAdditionalDamage({ inspectionId, onPictureUploaded }); const [goPrevSight, goNextSight] = useNavigationBetweenSights({ sights }); diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index 329d8432c..1a4d96f73 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -192,15 +192,15 @@ export function useStartUploadAsync({ if (Platform.OS === 'web') { result = await monk.entity.image.addOne(inspectionId, data); } else { - const response = await fetch(monk.config.axiosConfig.baseURL + '/inspections/' + inspectionId + '/images',{ + const response = await fetch(`${monk.config.axiosConfig.baseURL}/inspections/${inspectionId}/images`, { method: 'post', headers: { 'Content-Type': 'multipart/form-data', - 'Authorization': monk.config.accessToken + Authorization: monk.config.accessToken, }, - body: data - }) - result = await response.json() + body: data, + }); + result = await response.json(); } onPictureUploaded({ result, picture, inspectionId, id }); @@ -296,7 +296,7 @@ export function useStartUploadAsync({ let file; if (Platform.OS === 'web') { const res = await axios.get(picture.uri, { responseType: 'blob' }); - fileBits = [res.data]; + const fileBits = [res.data]; file = await new File( fileBits, multiPartKeys.filename, @@ -306,8 +306,8 @@ export function useStartUploadAsync({ file = { uri: picture.uri, type: multiPartKeys.type, - name: multiPartKeys.filename - } + name: multiPartKeys.filename, + }; } addElement({ multiPartKeys, json, file, id, picture }); @@ -327,7 +327,7 @@ export function useStartUploadAsync({ export function useUploadAdditionalDamage({ inspectionId, - onPictureUploaded = () => {} + onPictureUploaded = () => {}, }) { return useCallback(async ({ picture, parts }) => { if (!inspectionId) { @@ -335,7 +335,6 @@ export function useUploadAdditionalDamage({ } try { - let fileType; let filename; let fileKey; @@ -345,7 +344,7 @@ export function useUploadAdditionalDamage({ fileKey = 'image'; } else { const fileExtension = picture.uri.split(/[#?]/)[0].split('.').pop().trim(); - fileType = 'image/' + fileExtension; + fileType = `image/${fileExtension}`; filename = `close-up-${Date.now()}-${inspectionId}.${fileType}`; fileKey = filename; } @@ -379,7 +378,7 @@ export function useUploadAdditionalDamage({ let file; if (Platform.OS === 'web') { const res = await axios.get(picture.uri, { responseType: 'blob' }); - fileBits = [res.data]; + const fileBits = [res.data]; file = await new File( fileBits, multiPartKeys.filename, @@ -389,8 +388,8 @@ export function useUploadAdditionalDamage({ file = { uri: picture.uri, type: multiPartKeys.type, - name: multiPartKeys.filename - } + name: multiPartKeys.filename, + }; } try { @@ -401,15 +400,15 @@ export function useUploadAdditionalDamage({ if (Platform.OS === 'web') { result = await monk.entity.image.addOne(inspectionId, data); } else { - const response = await fetch(monk.config.axiosConfig.baseURL + '/inspections/' + inspectionId + '/images',{ + const response = await fetch(`${monk.config.axiosConfig.baseURL}/inspections/${inspectionId}/images`, { method: 'post', headers: { 'Content-Type': 'multipart/form-data', - 'Authorization': monk.config.accessToken + Authorization: monk.config.accessToken, }, - body: data + body: data, }); - result = await response.json() + result = await response.json(); } onPictureUploaded({ result, picture, inspectionId }); From ebf8f236768ab8520877e804b897b9934daa220c Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Tue, 27 Jun 2023 17:44:18 +0300 Subject: [PATCH 11/27] Fix lint issues and some new native errors --- .../AddDamageModal/AddDamageHelpModal.js | 2 +- .../components/AddDamageModal/PartSelector.js | 4 +- .../SVGComponentMapper.native.js | 129 ---------------- .../AddDamageModal/assets/RotateLeft.js | 4 +- .../AddDamageModal/assets/RotateRight.js | 4 +- .../AddDamageModal/hooks/useXMLParser.js | 3 +- .../src/components/AddDamageModal/index.js | 2 +- .../svgComponentMapper/index.native.js | 139 ++++++++++++++++++ .../index.web.js} | 2 +- .../src/components/Camera/index.native.js | 16 +- .../camera/src/components/Camera/styles.js | 2 +- .../camera/src/components/Capture/capture.js | 29 +++- .../src/components/Layout/index.native.js | 29 ++-- .../camera/src/components/Sights/index.js | 2 +- .../camera/src/components/Thumbnail/index.js | 2 +- 15 files changed, 198 insertions(+), 171 deletions(-) delete mode 100644 packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js create mode 100644 packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js rename packages/camera/src/components/AddDamageModal/{SVGComponentMapper.web.js => svgComponentMapper/index.web.js} (95%) diff --git a/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js b/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js index bb9e285be..2fcecebab 100644 --- a/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js +++ b/packages/camera/src/components/AddDamageModal/AddDamageHelpModal.js @@ -14,7 +14,7 @@ const styles = StyleSheet.create({ padding: 20, paddingBottom: 5, maxWidth: 400, - maxHeight: 235 + maxHeight: 235, }, header: { alignSelf: 'stretch', diff --git a/packages/camera/src/components/AddDamageModal/PartSelector.js b/packages/camera/src/components/AddDamageModal/PartSelector.js index 7f064118f..03340a528 100644 --- a/packages/camera/src/components/AddDamageModal/PartSelector.js +++ b/packages/camera/src/components/AddDamageModal/PartSelector.js @@ -1,9 +1,9 @@ import React, { useMemo } from 'react'; -import { StyleSheet, useWindowDimensions, View } from 'react-native'; +import { StyleSheet, useWindowDimensions, View, Platform } from 'react-native'; import PropTypes from 'prop-types'; import { useWireframe, useXMLParser } from './hooks'; -import SVGComponentMapper from './SVGComponentMapper'; +import SVGComponentMapper from './svgComponentMapper'; const PART_SELECTOR_CONTAINER_WIDTH = 420; const PART_SELECTOR_CONTAINER_HEIGHT_DIMENSION = [ diff --git a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js b/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js deleted file mode 100644 index c3b379adc..000000000 --- a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.native.js +++ /dev/null @@ -1,129 +0,0 @@ -/* eslint-disable react/no-array-index-key */ -import React, { useMemo } from 'react'; -import PropTypes from 'prop-types'; - -import Svg, { Path, G, } from "react-native-svg"; -import CAR_PARTS from './hooks/carParts'; - -const SELECTED_FILL_COLOR = '#ADE0FFB3'; -const UNSELECTED_FILL_COLOR = 'none'; - -const jsxSpecialAttributes = { - class: 'className', -}; - -export default function SVGComponentMapper({ element, togglePart, isPartSelected, groupName }) { - function getAttribute(element, name) { - for (let i = 0; i < element.attributes.length; i++) { - if (element.attributes[i].name === name) { - return element.attributes[i].nodeValue; - } - } - return undefined; - } - - let names = []; - for (let i = 0; i < element.attributes.length; i++) { - names.push(element.attributes[i].name); - } - - const attributes = useMemo(() => names.reduce((prev, attr) => ({ - ...prev, - [jsxSpecialAttributes[attr] ?? attr]: getAttribute(element, attr), - }), {}), [element]); - - const elementClass = getAttribute(element, 'class'); - const elementId = getAttribute(element, 'id'); - - let partKey = null; - if (groupName && CAR_PARTS.includes(groupName)) { - partKey = groupName; - } - if (elementClass && elementClass.includes('selectable') && CAR_PARTS.includes(elementId)) { - partKey = elementId; - } - - const color = isPartSelected(partKey) ? SELECTED_FILL_COLOR : UNSELECTED_FILL_COLOR; - const onPress = () => { - togglePart(partKey); - }; - - let elementChildren; - elementChildren = []; - if (element.childNodes) { - for (let i = 0; i < element.childNodes.length; i++) { - elementChildren.push(element.childNodes[i]); - } - } - const children = useMemo(() => [...elementChildren], [element]); - const passThroughGroupName = useMemo( - () => { - if (element.tagName === 'g') { - return elementId; - } else { - return null; - } - }, - [element], - ); - - if (element.tagName === 'svg') { - return ( - - {children.map((child, id) => ( - - ))} - - - ); - } else if (element.tagName === 'path') { - return ( - - {children.map((child, id) => ( - - ))} - - - ); - } else if (element.tagName === 'g') { - return ( - - {children.map((child, id) => ( - - ))} - - - ); - } else { - return null; - } -} - -SVGComponentMapper.propTypes = { - element: PropTypes.any.isRequired, - groupName: PropTypes.string, - isPartSelected: PropTypes.func.isRequired, - togglePart: PropTypes.func.isRequired, -}; - -SVGComponentMapper.defaultProps = { - groupName: undefined, -}; diff --git a/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js b/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js index 7e442ba66..f5007b4b1 100644 --- a/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js +++ b/packages/camera/src/components/AddDamageModal/assets/RotateLeft.js @@ -1,7 +1,7 @@ import * as React from 'react'; import Svg, { Path } from 'react-native-svg'; import PropTypes from 'prop-types'; -import {Platform} from 'react-native'; +import { Platform } from 'react-native'; export default function RotateLeft({ width, height }) { return ( @@ -12,7 +12,7 @@ export default function RotateLeft({ width, height }) { xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 21" preserveAspectRatio="xMidYMid slice" - pointerEvents= {Platform.OS === 'web' ? 'box-none' : undefined} + pointerEvents={Platform.OS === 'web' ? 'box-none' : undefined} > new DOMParser().parseFromString(xml, 'text/xml'), [xml]); diff --git a/packages/camera/src/components/AddDamageModal/index.js b/packages/camera/src/components/AddDamageModal/index.js index a53ac4cef..f58720719 100644 --- a/packages/camera/src/components/AddDamageModal/index.js +++ b/packages/camera/src/components/AddDamageModal/index.js @@ -19,7 +19,7 @@ const styles = StyleSheet.create({ borderRadius: 10, padding: CONTAINER_PADDING, paddingBottom: 5, - maxHeight: 400 + maxHeight: 400, }, header: { alignSelf: 'stretch', diff --git a/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js new file mode 100644 index 000000000..803d2e549 --- /dev/null +++ b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js @@ -0,0 +1,139 @@ +/* eslint-disable react/no-array-index-key */ +import React, { useMemo } from 'react'; +import PropTypes from 'prop-types'; + +import Svg, { Path, G } from 'react-native-svg'; +import CAR_PARTS from '../hooks/carParts'; + +const SELECTED_FILL_COLOR = '#ADE0FFB3'; +const UNSELECTED_FILL_COLOR = 'none'; + +const jsxSpecialAttributes = { + class: 'className', +}; + +export default function SVGComponentMapper({ element, togglePart, isPartSelected, groupName }) { + function getAttribute(attributeElement, name) { + for (let i = 0; i < attributeElement.attributes.length; i = i + 1) { + if (attributeElement.attributes[i].name === name) { + return attributeElement.attributes[i].nodeValue; + } + } + return undefined; + } + + // console.error("SVGComponentMapper enter with element == ", element) + // console.error("SVGComponentMapper enter with element.attributes.length == ", element.attributes.length) + const names = []; + for (let i = 0; i < element.attributes.length; i = i + 1) { + console.error("SVGComponentMapper enter with element.attributes[",i,"].name == ",element.attributes[i].name) + names.push(element.attributes[i].name); + } + + // console.error("SVGComponentMapper names == ",names) + + const attributes = useMemo(() => names.reduce((prev, attr) => ({ + ...prev, + [jsxSpecialAttributes[attr] ?? attr]: getAttribute(element, attr), + }), {}), [element]); + + const elementClass = getAttribute(element, 'class'); + const elementId = getAttribute(element, 'id'); + console.error("SVGComponentMapper elementClass = ",elementClass) + let partKey = null; + if (groupName && CAR_PARTS.includes(groupName)) { + partKey = groupName; + } + if (elementClass && elementClass.includes('selectable') && CAR_PARTS.includes(elementId)) { + partKey = elementId; + } + + console.error("SVGComponentMapper partKey = ",partKey) + + const color = isPartSelected(partKey) ? SELECTED_FILL_COLOR : UNSELECTED_FILL_COLOR; + const onPress = () => { + togglePart(partKey); + }; + + const elementChildren = []; + if (element.childNodes) { + for (let i = 0; i < element.childNodes.length; i = i + 1) { + elementChildren.push(element.childNodes[i]); + } + } + + // console.error("SVGComponentMapper elementChildren = ",elementChildren) + // console.error("SVGComponentMapper brefore children") + // console.error("SVGComponentMapper brefore children = ", [...elementChildren]) + const children = useMemo(() => [...elementChildren], [element]); + // console.error("SVGComponentMapper children = ", children) + const passThroughGroupName = useMemo( + () => { + if (element.tagName === 'g') { + return elementId; + } + return null; + }, + [element], + ); + + console.error("SVGComponentMapper after passThroughGroupName") + if (element.tagName === 'svg') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } if (element.tagName === 'path') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } if (element.tagName === 'g') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } + return null; +} + +SVGComponentMapper.propTypes = { + element: PropTypes.any.isRequired, + groupName: PropTypes.string, + isPartSelected: PropTypes.func.isRequired, + togglePart: PropTypes.func.isRequired, +}; + +SVGComponentMapper.defaultProps = { + groupName: undefined, +}; diff --git a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.web.js b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.web.js similarity index 95% rename from packages/camera/src/components/AddDamageModal/SVGComponentMapper.web.js rename to packages/camera/src/components/AddDamageModal/svgComponentMapper/index.web.js index dd0821dce..a2db4f26e 100644 --- a/packages/camera/src/components/AddDamageModal/SVGComponentMapper.web.js +++ b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.web.js @@ -2,7 +2,7 @@ import React, { useMemo } from 'react'; import PropTypes from 'prop-types'; -import useCustomSVGAttributes from './hooks/useCustomSVGAttributes'; +import useCustomSVGAttributes from '../hooks/useCustomSVGAttributes'; const jsxSpecialAttributes = { class: 'className', diff --git a/packages/camera/src/components/Camera/index.native.js b/packages/camera/src/components/Camera/index.native.js index 694d730d6..2290332bc 100644 --- a/packages/camera/src/components/Camera/index.native.js +++ b/packages/camera/src/components/Camera/index.native.js @@ -25,17 +25,17 @@ function Camera({ const [cameraRef, setCameraRef] = useState(null); useImperativeHandle(ref, () => ({ - async takePictureAsync(options) { - return await cameraRef?.takePictureAsync(options); + async takePictureAsync(options) { + return cameraRef?.takePictureAsync(options); }, resumePreview() { - cameraRef?.resumePreview() + cameraRef?.resumePreview(); }, pausePreview() { - cameraRef?.pausePreview() - } + cameraRef?.pausePreview(); + }, })); - + const { height: windowHeight, width: windowWidth } = useWindowDimensions(); const size = getSize(ratio, { windowHeight, windowWidth }); @@ -46,8 +46,8 @@ function Camera({ if (permissions.granted && permissions.status === PermissionStatus.GRANTED) { return ( { - setCameraRef(ref) ; + ref={(reference) => { + setCameraRef(reference); }} ratio={ratio} onMountError={handleError} diff --git a/packages/camera/src/components/Camera/styles.js b/packages/camera/src/components/Camera/styles.js index 97dace319..756984178 100644 --- a/packages/camera/src/components/Camera/styles.js +++ b/packages/camera/src/components/Camera/styles.js @@ -14,7 +14,7 @@ export default StyleSheet.create({ color: 'white', ...Platform.select({ web: { - fontFamily: 'monospace' + fontFamily: 'monospace', }, }), fontSize: 14, diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index aae675dab..64e3ed815 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -66,14 +66,24 @@ const styles = StyleSheet.create({ backgroundColor: 'rgba(0,0,0,0.5)', }, overlayContainer: { - position: 'fixed', display: 'flex', justifyContent: 'center', alignItems: 'center', - width: '100vw', - height: '95vh', - top: '2.5vh', zIndex: 99, + ...Platform.select({ + web: { + position: 'fixed', + height: '95vh', + width: '100vw', + top: '2.5vh', + }, + native: { + position: 'static', + height: '95%', + width: '100%', + top: '2.5%', + }, + }) }, addDamageOverlay: { fontSize: 14, @@ -339,6 +349,7 @@ const Capture = forwardRef(({ }, [api, onReady, states]); const handleAddDamagePressed = useCallback(() => { + console.error("handleAddDamagePressed entered") if (lastAddDamageHelpTimestamp) { setAddDamageStatus(AddDamageStatus.PART_SELECTOR); } else { @@ -358,6 +369,7 @@ const Capture = forwardRef(({ }, [setAddDamageStatus, setAddDamageParts]); const handlePartSelectorHelpConfirm = useCallback(() => { + console.error("handlePartSelectorHelpConfirm entered") fireAddDamageHelpEvent(); setAddDamageStatus(AddDamageStatus.PART_SELECTOR); }, [setAddDamageStatus, fireAddDamageHelpEvent]); @@ -473,6 +485,7 @@ const Capture = forwardRef(({ /** * create a new transaction with operation name 'Add Damage' to measure tour performance */ + console.error("AddDamageStatus.PART_SELECTOR fired") if (addDamageStatus === AddDamageStatus.PART_SELECTOR) { utils.log(['[Event] Add-Damage sentry transaction starts']); // Start the transaction @@ -634,6 +647,7 @@ const Capture = forwardRef(({ /> ); } + console.error("addDamageStatus = ", addDamageStatus) return ( - {[AddDamageStatus.HELP, AddDamageStatus.PART_SELECTOR].includes(addDamageStatus) ? ( + { + + [AddDamageStatus.HELP, AddDamageStatus.PART_SELECTOR].includes(addDamageStatus) ? ( {addDamageStatus === AddDamageStatus.HELP ? ( ) : null} - ) : null} + ) : null + } {closeEarlyModalState.show ? ( {isReady && right} ); - } else { - return ( - - - {t('layout.rotateDevice')} - - - ); } + return ( + + + {t('layout.rotateDevice')} + + + ); } Layout.propTypes = { diff --git a/packages/camera/src/components/Sights/index.js b/packages/camera/src/components/Sights/index.js index d52cf1405..234a337d0 100644 --- a/packages/camera/src/components/Sights/index.js +++ b/packages/camera/src/components/Sights/index.js @@ -21,7 +21,7 @@ const styles = StyleSheet.create({ color: 'white', ...Platform.select({ web: { - fontFamily: 'monospace' + fontFamily: 'monospace', }, }), textAlign: 'center', diff --git a/packages/camera/src/components/Thumbnail/index.js b/packages/camera/src/components/Thumbnail/index.js index caafa670a..faa37b5d9 100644 --- a/packages/camera/src/components/Thumbnail/index.js +++ b/packages/camera/src/components/Thumbnail/index.js @@ -38,7 +38,7 @@ const styles = StyleSheet.create({ fontSize: 10, ...Platform.select({ web: { - fontFamily: 'monospace' + fontFamily: 'monospace', }, }), textAlign: 'center', From 9d2384fb6f77adb387c500a533f9c848dc608ab3 Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Tue, 27 Jun 2023 17:49:49 +0300 Subject: [PATCH 12/27] remove console logs --- .../svgComponentMapper/index.native.js | 15 --------------- packages/camera/src/components/Capture/capture.js | 4 ---- 2 files changed, 19 deletions(-) diff --git a/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js index 803d2e549..ca7fc9c31 100644 --- a/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js +++ b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js @@ -21,17 +21,11 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected } return undefined; } - - // console.error("SVGComponentMapper enter with element == ", element) - // console.error("SVGComponentMapper enter with element.attributes.length == ", element.attributes.length) const names = []; for (let i = 0; i < element.attributes.length; i = i + 1) { - console.error("SVGComponentMapper enter with element.attributes[",i,"].name == ",element.attributes[i].name) names.push(element.attributes[i].name); } - // console.error("SVGComponentMapper names == ",names) - const attributes = useMemo(() => names.reduce((prev, attr) => ({ ...prev, [jsxSpecialAttributes[attr] ?? attr]: getAttribute(element, attr), @@ -39,7 +33,6 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected const elementClass = getAttribute(element, 'class'); const elementId = getAttribute(element, 'id'); - console.error("SVGComponentMapper elementClass = ",elementClass) let partKey = null; if (groupName && CAR_PARTS.includes(groupName)) { partKey = groupName; @@ -48,8 +41,6 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected partKey = elementId; } - console.error("SVGComponentMapper partKey = ",partKey) - const color = isPartSelected(partKey) ? SELECTED_FILL_COLOR : UNSELECTED_FILL_COLOR; const onPress = () => { togglePart(partKey); @@ -61,12 +52,7 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected elementChildren.push(element.childNodes[i]); } } - - // console.error("SVGComponentMapper elementChildren = ",elementChildren) - // console.error("SVGComponentMapper brefore children") - // console.error("SVGComponentMapper brefore children = ", [...elementChildren]) const children = useMemo(() => [...elementChildren], [element]); - // console.error("SVGComponentMapper children = ", children) const passThroughGroupName = useMemo( () => { if (element.tagName === 'g') { @@ -77,7 +63,6 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected [element], ); - console.error("SVGComponentMapper after passThroughGroupName") if (element.tagName === 'svg') { return ( diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index 64e3ed815..0e4be9480 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -349,7 +349,6 @@ const Capture = forwardRef(({ }, [api, onReady, states]); const handleAddDamagePressed = useCallback(() => { - console.error("handleAddDamagePressed entered") if (lastAddDamageHelpTimestamp) { setAddDamageStatus(AddDamageStatus.PART_SELECTOR); } else { @@ -369,7 +368,6 @@ const Capture = forwardRef(({ }, [setAddDamageStatus, setAddDamageParts]); const handlePartSelectorHelpConfirm = useCallback(() => { - console.error("handlePartSelectorHelpConfirm entered") fireAddDamageHelpEvent(); setAddDamageStatus(AddDamageStatus.PART_SELECTOR); }, [setAddDamageStatus, fireAddDamageHelpEvent]); @@ -485,7 +483,6 @@ const Capture = forwardRef(({ /** * create a new transaction with operation name 'Add Damage' to measure tour performance */ - console.error("AddDamageStatus.PART_SELECTOR fired") if (addDamageStatus === AddDamageStatus.PART_SELECTOR) { utils.log(['[Event] Add-Damage sentry transaction starts']); // Start the transaction @@ -647,7 +644,6 @@ const Capture = forwardRef(({ /> ); } - console.error("addDamageStatus = ", addDamageStatus) return ( Date: Wed, 5 Jul 2023 13:08:20 +0300 Subject: [PATCH 13/27] Fix linter issues and native svg implementation (#7) --- .../svgComponentMapper/{index.web.js => index.js} | 0 .../AddDamageModal/svgComponentMapper/index.native.js | 6 +++--- packages/camera/src/components/Capture/capture.js | 3 +-- packages/camera/src/components/Overlay/index.native.js | 4 ++-- packages/sights/assets/overlays/fesc20-0mJeXBDf.svg | 2 +- packages/sights/assets/overlays/fesc20-26n47kaO.svg | 2 +- packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg | 2 +- packages/sights/assets/overlays/fesc20-4Wqx52oU.svg | 2 +- packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg | 2 +- packages/sights/assets/overlays/fesc20-6GPUkfYn.svg | 2 +- packages/sights/assets/overlays/fesc20-CEGtqHkk.svg | 2 +- packages/sights/assets/overlays/fesc20-DBLpo-52.svg | 2 +- packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg | 2 +- packages/sights/assets/overlays/fesc20-GdIxD-_N.svg | 2 +- packages/sights/assets/overlays/fesc20-H1dfdfvH.svg | 2 +- packages/sights/assets/overlays/fesc20-HYz5ziHi.svg | 2 +- packages/sights/assets/overlays/fesc20-LTe3X2bg.svg | 2 +- packages/sights/assets/overlays/fesc20-LZc7p2kK.svg | 2 +- packages/sights/assets/overlays/fesc20-NLdqASzl.svg | 2 +- packages/sights/assets/overlays/fesc20-P0oSEh8p.svg | 2 +- packages/sights/assets/overlays/fesc20-P470Q-jm.svg | 2 +- packages/sights/assets/overlays/fesc20-T4dIGLgy.svg | 2 +- packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg | 2 +- packages/sights/assets/overlays/fesc20-UjtbRtJS.svg | 2 +- packages/sights/assets/overlays/fesc20-W6XrryMO.svg | 2 +- packages/sights/assets/overlays/fesc20-WIQsf_gX.svg | 2 +- packages/sights/assets/overlays/fesc20-WMUaKDp1.svg | 2 +- packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg | 2 +- packages/sights/assets/overlays/fesc20-X8k7UFGf.svg | 2 +- packages/sights/assets/overlays/fesc20-YPcJPAZE.svg | 2 +- packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg | 2 +- packages/sights/assets/overlays/fesc20-dKVLig1i.svg | 2 +- packages/sights/assets/overlays/fesc20-dfICsfSV.svg | 2 +- packages/sights/assets/overlays/fesc20-fOt832UV.svg | 2 +- packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg | 2 +- packages/sights/assets/overlays/fesc20-hp3Tk53x.svg | 2 +- packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg | 2 +- packages/sights/assets/overlays/fesc20-j3H8Z415.svg | 2 +- packages/sights/assets/overlays/fesc20-r_UeXQRO.svg | 2 +- packages/sights/assets/overlays/fesc20-raHPDUNm.svg | 2 +- packages/sights/assets/overlays/fesc20-xBFiEy-_.svg | 2 +- packages/sights/assets/overlays/fesc20-xDFQNR3C.svg | 2 +- packages/sights/assets/overlays/ff150--xPZZd83.svg | 2 +- packages/sights/assets/overlays/ff150-18YVVN-G.svg | 2 +- packages/sights/assets/overlays/ff150-2WUJ179s.svg | 2 +- packages/sights/assets/overlays/ff150-3dkU10af.svg | 2 +- packages/sights/assets/overlays/ff150-3he9UOwy.svg | 2 +- packages/sights/assets/overlays/ff150-3rM9XB0Z.svg | 2 +- packages/sights/assets/overlays/ff150-7UI3m9B3.svg | 2 +- packages/sights/assets/overlays/ff150-7nvlys8r.svg | 2 +- packages/sights/assets/overlays/ff150-7vyfzrVQ.svg | 2 +- packages/sights/assets/overlays/ff150-BmXfb-qD.svg | 2 +- packages/sights/assets/overlays/ff150-FqbrFVr2.svg | 2 +- packages/sights/assets/overlays/ff150-GOx2s_9L.svg | 2 +- packages/sights/assets/overlays/ff150-H3MCPESJ.svg | 2 +- packages/sights/assets/overlays/ff150-KgHVkQBW.svg | 2 +- packages/sights/assets/overlays/ff150-OviO2DlY.svg | 2 +- packages/sights/assets/overlays/ff150-Ttsc7q6V.svg | 2 +- packages/sights/assets/overlays/ff150-V-xzfWsx.svg | 2 +- packages/sights/assets/overlays/ff150-_AoeFdVO.svg | 2 +- packages/sights/assets/overlays/ff150-_UIadfVL.svg | 2 +- packages/sights/assets/overlays/ff150-eOjyMInj.svg | 2 +- packages/sights/assets/overlays/ff150-gFp78fQO.svg | 2 +- packages/sights/assets/overlays/ff150-g_xBOOS2.svg | 2 +- packages/sights/assets/overlays/ff150-jUBEKij0.svg | 2 +- packages/sights/assets/overlays/ff150-k4kh7Vra.svg | 2 +- packages/sights/assets/overlays/ff150-nF_oFvhI.svg | 2 +- packages/sights/assets/overlays/ff150-o8MiTw8u.svg | 2 +- packages/sights/assets/overlays/ff150-ouGGtRnf.svg | 2 +- packages/sights/assets/overlays/ff150-pNO26q4D.svg | 2 +- packages/sights/assets/overlays/ff150-phbX7Bef.svg | 2 +- packages/sights/assets/overlays/ff150-t3KBMPeD.svg | 2 +- packages/sights/assets/overlays/ff150-tT8sqplK.svg | 2 +- packages/sights/assets/overlays/ff150-vwE3yqdh.svg | 2 +- packages/sights/assets/overlays/ff150-wO_fJ3DL.svg | 2 +- packages/sights/assets/overlays/ff150-xbOhu7nK.svg | 2 +- packages/sights/assets/overlays/ff150-zXbg0l3z.svg | 2 +- packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg | 2 +- packages/sights/assets/overlays/ffocus18-43ljK5xC.svg | 2 +- packages/sights/assets/overlays/ffocus18-6FX31ty1.svg | 2 +- packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg | 2 +- packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg | 2 +- packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg | 2 +- packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg | 2 +- packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg | 2 +- packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg | 2 +- packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg | 2 +- packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg | 2 +- packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg | 2 +- packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg | 2 +- packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg | 2 +- packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg | 2 +- packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg | 2 +- packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg | 2 +- packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg | 2 +- packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg | 2 +- packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg | 2 +- packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg | 2 +- packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg | 2 +- packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg | 2 +- packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg | 2 +- packages/sights/assets/overlays/ffocus18-cPUyM28L.svg | 2 +- packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg | 2 +- packages/sights/assets/overlays/ffocus18-e5netaNs.svg | 2 +- packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg | 2 +- packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg | 2 +- packages/sights/assets/overlays/ffocus18-jkSlWpql.svg | 2 +- packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg | 2 +- packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg | 2 +- packages/sights/assets/overlays/ffocus18-seOy3jwd.svg | 2 +- packages/sights/assets/overlays/ffocus18-ts3buSD1.svg | 2 +- packages/sights/assets/overlays/ffocus18-tufa4FoL.svg | 2 +- packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg | 2 +- packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg | 2 +- packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg | 2 +- packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg | 2 +- packages/sights/assets/overlays/ftransit18--w_ir_yH.svg | 2 +- packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg | 2 +- packages/sights/assets/overlays/ftransit18-3dkU10af.svg | 2 +- packages/sights/assets/overlays/ftransit18-3fnjrISV.svg | 2 +- packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg | 2 +- packages/sights/assets/overlays/ftransit18-5SiNC94w.svg | 2 +- packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg | 2 +- packages/sights/assets/overlays/ftransit18-6khKhof0.svg | 2 +- packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg | 2 +- packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg | 2 +- packages/sights/assets/overlays/ftransit18-E7DAv47J.svg | 2 +- packages/sights/assets/overlays/ftransit18-FFP5b34o.svg | 2 +- packages/sights/assets/overlays/ftransit18-G24AdP6r.svg | 2 +- packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg | 2 +- packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg | 2 +- packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg | 2 +- packages/sights/assets/overlays/ftransit18-TkXihCj4.svg | 2 +- packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg | 2 +- packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg | 2 +- packages/sights/assets/overlays/ftransit18-aA2K898S.svg | 2 +- packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg | 2 +- packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg | 2 +- packages/sights/assets/overlays/ftransit18-eztNpSRX.svg | 2 +- packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg | 2 +- packages/sights/assets/overlays/ftransit18-ffghVsNz.svg | 2 +- packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg | 2 +- packages/sights/assets/overlays/ftransit18-klUp8BS4.svg | 2 +- packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg | 2 +- packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg | 2 +- packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg | 2 +- packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg | 2 +- packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg | 2 +- packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg | 2 +- packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg | 2 +- packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg | 2 +- packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg | 2 +- packages/sights/assets/overlays/haccord-2a8VfA8m.svg | 2 +- packages/sights/assets/overlays/haccord-2v-2_QD5.svg | 2 +- packages/sights/assets/overlays/haccord-5LlCuIfL.svg | 2 +- packages/sights/assets/overlays/haccord-6kYUBv_e.svg | 2 +- packages/sights/assets/overlays/haccord-8YjMcu0D.svg | 2 +- packages/sights/assets/overlays/haccord-9fxMGSs6.svg | 2 +- packages/sights/assets/overlays/haccord-DUPnw5jj.svg | 2 +- packages/sights/assets/overlays/haccord-EfRIciFr.svg | 2 +- packages/sights/assets/overlays/haccord-GQcZz48C.svg | 2 +- packages/sights/assets/overlays/haccord-GdWvsqrm.svg | 2 +- packages/sights/assets/overlays/haccord-Gtt0JNQl.svg | 2 +- packages/sights/assets/overlays/haccord-H_eRrLBl.svg | 2 +- packages/sights/assets/overlays/haccord-Jq65fyD4.svg | 2 +- packages/sights/assets/overlays/haccord-KN23XXkX.svg | 2 +- packages/sights/assets/overlays/haccord-KvP-pm8L.svg | 2 +- packages/sights/assets/overlays/haccord-OXYy5gET.svg | 2 +- packages/sights/assets/overlays/haccord-PGr3RzzP.svg | 2 +- packages/sights/assets/overlays/haccord-QKfhXU7o.svg | 2 +- packages/sights/assets/overlays/haccord-Qel0qUky.svg | 2 +- packages/sights/assets/overlays/haccord-W-Bn3bU1.svg | 2 +- packages/sights/assets/overlays/haccord-Z84erkMb.svg | 2 +- packages/sights/assets/overlays/haccord-_YnTubBA.svg | 2 +- packages/sights/assets/overlays/haccord-bSAv3Hrj.svg | 2 +- packages/sights/assets/overlays/haccord-bg-RFHl_.svg | 2 +- packages/sights/assets/overlays/haccord-boMeNVsC.svg | 2 +- packages/sights/assets/overlays/haccord-cXSAj2ez.svg | 2 +- packages/sights/assets/overlays/haccord-d3VJTvYw.svg | 2 +- packages/sights/assets/overlays/haccord-d_u3qyQ-.svg | 2 +- packages/sights/assets/overlays/haccord-hsCc_Nct.svg | 2 +- packages/sights/assets/overlays/haccord-huAZfQJA.svg | 2 +- packages/sights/assets/overlays/haccord-k6MiX2MR.svg | 2 +- packages/sights/assets/overlays/haccord-mdZ7optI.svg | 2 +- packages/sights/assets/overlays/haccord-oiY_yPTR.svg | 2 +- packages/sights/assets/overlays/haccord-pplCo6sV.svg | 2 +- packages/sights/assets/overlays/haccord-ps7cWy6K.svg | 2 +- packages/sights/assets/overlays/haccord-sorgeRJ7.svg | 2 +- packages/sights/assets/overlays/haccord-t5sLlmfv.svg | 2 +- packages/sights/assets/overlays/haccord-zNA0vVT0.svg | 2 +- packages/sights/assets/overlays/jgc21-0QM-q8k5.svg | 2 +- packages/sights/assets/overlays/jgc21-1j-oTPag.svg | 2 +- packages/sights/assets/overlays/jgc21-2_5eHL-F.svg | 2 +- packages/sights/assets/overlays/jgc21-2bGeRS3I.svg | 2 +- packages/sights/assets/overlays/jgc21-3JJvM7_B.svg | 2 +- packages/sights/assets/overlays/jgc21-3gjMwvQG.svg | 2 +- packages/sights/assets/overlays/jgc21-5lovhZgA.svg | 2 +- packages/sights/assets/overlays/jgc21-ESc0HCzy.svg | 2 +- packages/sights/assets/overlays/jgc21-Emzc8jJA.svg | 2 +- packages/sights/assets/overlays/jgc21-F-PPd4qN.svg | 2 +- packages/sights/assets/overlays/jgc21-J1Ezdyar.svg | 2 +- packages/sights/assets/overlays/jgc21-JerG7oW5.svg | 2 +- packages/sights/assets/overlays/jgc21-KyUUVU2P.svg | 2 +- packages/sights/assets/overlays/jgc21-QIkcNhc_.svg | 2 +- packages/sights/assets/overlays/jgc21-QIvfeg0X.svg | 2 +- packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg | 2 +- packages/sights/assets/overlays/jgc21-RAVpqaE4.svg | 2 +- packages/sights/assets/overlays/jgc21-RE3li6rE.svg | 2 +- packages/sights/assets/overlays/jgc21-S8sE69on.svg | 2 +- packages/sights/assets/overlays/jgc21-TEoi50Ff.svg | 2 +- packages/sights/assets/overlays/jgc21-TRN9Des4.svg | 2 +- packages/sights/assets/overlays/jgc21-TyJPUs8E.svg | 2 +- packages/sights/assets/overlays/jgc21-VHq_6BM-.svg | 2 +- packages/sights/assets/overlays/jgc21-XXh8GWm8.svg | 2 +- packages/sights/assets/overlays/jgc21-ZubJ48-U.svg | 2 +- packages/sights/assets/overlays/jgc21-__JKllz9.svg | 2 +- packages/sights/assets/overlays/jgc21-ezXzTRkj.svg | 2 +- packages/sights/assets/overlays/jgc21-imomJ2V0.svg | 2 +- packages/sights/assets/overlays/jgc21-m2dDoMup.svg | 2 +- packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg | 2 +- packages/sights/assets/overlays/jgc21-omlus7Ui.svg | 2 +- packages/sights/assets/overlays/jgc21-s7WDTRmE.svg | 2 +- packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg | 2 +- packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg | 2 +- packages/sights/assets/overlays/jgc21-z15ZdJL6.svg | 2 +- packages/sights/assets/overlays/jgc21-zCrDwYWE.svg | 2 +- packages/sights/assets/overlays/jgc21-zkvFMHnS.svg | 2 +- packages/sights/assets/overlays/tsienna20--a2RmRcs.svg | 2 +- packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg | 2 +- packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg | 2 +- packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg | 2 +- packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg | 2 +- packages/sights/assets/overlays/tsienna20-65mfPdRD.svg | 2 +- packages/sights/assets/overlays/tsienna20-670P2H2V.svg | 2 +- packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg | 2 +- packages/sights/assets/overlays/tsienna20-HykkFbXf.svg | 2 +- packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg | 2 +- packages/sights/assets/overlays/tsienna20-K0ThKmue.svg | 2 +- packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg | 2 +- packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg | 2 +- packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg | 2 +- packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg | 2 +- packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg | 2 +- packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg | 2 +- packages/sights/assets/overlays/tsienna20-SebsoqJm.svg | 2 +- packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg | 2 +- packages/sights/assets/overlays/tsienna20-TibS83Qr.svg | 2 +- packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg | 2 +- packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg | 2 +- packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg | 2 +- packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg | 2 +- packages/sights/assets/overlays/tsienna20-cI285Gon.svg | 2 +- packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg | 2 +- packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg | 2 +- packages/sights/assets/overlays/tsienna20-is1tpnqR.svg | 2 +- packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg | 2 +- packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg | 2 +- packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg | 2 +- packages/sights/assets/overlays/tsienna20-u57qDaN_.svg | 2 +- packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg | 2 +- packages/sights/assets/overlays/tsienna20-uz29ILgw.svg | 2 +- packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg | 2 +- packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg | 2 +- packages/sights/assets/part-selectors/fesc20-front-left.svg | 2 +- .../sights/assets/part-selectors/fesc20-front-right.svg | 2 +- packages/sights/assets/part-selectors/fesc20-rear-left.svg | 2 +- packages/sights/assets/part-selectors/fesc20-rear-right.svg | 2 +- packages/sights/assets/part-selectors/ff150-front-left.svg | 2 +- packages/sights/assets/part-selectors/ff150-front-right.svg | 2 +- packages/sights/assets/part-selectors/ff150-rear-left.svg | 2 +- packages/sights/assets/part-selectors/ff150-rear-right.svg | 2 +- .../sights/assets/part-selectors/ffocus18-front-left.svg | 2 +- .../sights/assets/part-selectors/ffocus18-front-right.svg | 2 +- .../sights/assets/part-selectors/ffocus18-rear-left.svg | 2 +- .../sights/assets/part-selectors/ffocus18-rear-right.svg | 2 +- .../sights/assets/part-selectors/ftransit18-front-left.svg | 2 +- .../sights/assets/part-selectors/ftransit18-front-right.svg | 2 +- .../sights/assets/part-selectors/ftransit18-rear-left.svg | 2 +- .../sights/assets/part-selectors/ftransit18-rear-right.svg | 2 +- .../sights/assets/part-selectors/haccord-front-left.svg | 2 +- .../sights/assets/part-selectors/haccord-front-right.svg | 2 +- packages/sights/assets/part-selectors/haccord-rear-left.svg | 2 +- .../sights/assets/part-selectors/haccord-rear-right.svg | 2 +- packages/sights/assets/part-selectors/jgc21-front-left.svg | 2 +- packages/sights/assets/part-selectors/jgc21-front-right.svg | 2 +- packages/sights/assets/part-selectors/jgc21-rear-left.svg | 2 +- packages/sights/assets/part-selectors/jgc21-rear-right.svg | 2 +- .../sights/assets/part-selectors/tsienna20-front-left.svg | 2 +- .../sights/assets/part-selectors/tsienna20-front-right.svg | 2 +- .../sights/assets/part-selectors/tsienna20-rear-left.svg | 2 +- .../sights/assets/part-selectors/tsienna20-rear-right.svg | 2 +- 291 files changed, 293 insertions(+), 294 deletions(-) rename packages/camera/src/components/AddDamageModal/svgComponentMapper/{index.web.js => index.js} (100%) diff --git a/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.web.js b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.js similarity index 100% rename from packages/camera/src/components/AddDamageModal/svgComponentMapper/index.web.js rename to packages/camera/src/components/AddDamageModal/svgComponentMapper/index.js diff --git a/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js index ca7fc9c31..8008e734f 100644 --- a/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js +++ b/packages/camera/src/components/AddDamageModal/svgComponentMapper/index.native.js @@ -14,7 +14,7 @@ const jsxSpecialAttributes = { export default function SVGComponentMapper({ element, togglePart, isPartSelected, groupName }) { function getAttribute(attributeElement, name) { - for (let i = 0; i < attributeElement.attributes.length; i = i + 1) { + for (let i = 0; i < attributeElement.attributes.length; i += 1) { if (attributeElement.attributes[i].name === name) { return attributeElement.attributes[i].nodeValue; } @@ -22,7 +22,7 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected return undefined; } const names = []; - for (let i = 0; i < element.attributes.length; i = i + 1) { + for (let i = 0; i < element.attributes.length; i += 1) { names.push(element.attributes[i].name); } @@ -48,7 +48,7 @@ export default function SVGComponentMapper({ element, togglePart, isPartSelected const elementChildren = []; if (element.childNodes) { - for (let i = 0; i < element.childNodes.length; i = i + 1) { + for (let i = 0; i < element.childNodes.length; i += 1) { elementChildren.push(element.childNodes[i]); } } diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index 0e4be9480..facadccc9 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -83,7 +83,7 @@ const styles = StyleSheet.create({ width: '100%', top: '2.5%', }, - }) + }), }, addDamageOverlay: { fontSize: 14, @@ -679,7 +679,6 @@ const Capture = forwardRef(({ { - [AddDamageStatus.HELP, AddDamageStatus.PART_SELECTOR].includes(addDamageStatus) ? ( {addDamageStatus === AddDamageStatus.HELP ? ( diff --git a/packages/camera/src/components/Overlay/index.native.js b/packages/camera/src/components/Overlay/index.native.js index 1c6cb31d9..232a276e0 100644 --- a/packages/camera/src/components/Overlay/index.native.js +++ b/packages/camera/src/components/Overlay/index.native.js @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { SvgXml } from 'react-native-svg'; +import { SvgCss } from 'react-native-svg'; export default function Overlay({ label, svg, ...passThoughProps }) { return ( - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-26n47kaO.svg b/packages/sights/assets/overlays/fesc20-26n47kaO.svg index f1af82f36..dc997a3fe 100644 --- a/packages/sights/assets/overlays/fesc20-26n47kaO.svg +++ b/packages/sights/assets/overlays/fesc20-26n47kaO.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg b/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg index 85c4f1ce4..e7bf64733 100644 --- a/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg +++ b/packages/sights/assets/overlays/fesc20-2bLRuhEQ.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg b/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg index 653744e01..45f4027c4 100644 --- a/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg +++ b/packages/sights/assets/overlays/fesc20-4Wqx52oU.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg b/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg index 7e070ba4f..961307d97 100644 --- a/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg +++ b/packages/sights/assets/overlays/fesc20-5Ts1UkPT.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg b/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg index c32c4a26f..f70164c9f 100644 --- a/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg +++ b/packages/sights/assets/overlays/fesc20-6GPUkfYn.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg b/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg index bab68b568..b7c792cc1 100644 --- a/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg +++ b/packages/sights/assets/overlays/fesc20-CEGtqHkk.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-DBLpo-52.svg b/packages/sights/assets/overlays/fesc20-DBLpo-52.svg index 0c5d70321..62d5ee031 100644 --- a/packages/sights/assets/overlays/fesc20-DBLpo-52.svg +++ b/packages/sights/assets/overlays/fesc20-DBLpo-52.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg b/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg index 2cfea1281..bb92973ec 100644 --- a/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg +++ b/packages/sights/assets/overlays/fesc20-EJ0tXYBW.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg b/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg index a5875011d..a59c9c758 100644 --- a/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg +++ b/packages/sights/assets/overlays/fesc20-GdIxD-_N.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg b/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg index 04685c5be..efe19e63d 100644 --- a/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg +++ b/packages/sights/assets/overlays/fesc20-H1dfdfvH.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg b/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg index 2aad0a015..743330df3 100644 --- a/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg +++ b/packages/sights/assets/overlays/fesc20-HYz5ziHi.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg b/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg index 1080308f9..d4d1bd465 100644 --- a/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg +++ b/packages/sights/assets/overlays/fesc20-LTe3X2bg.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg b/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg index 11ffa4dbd..4909e039a 100644 --- a/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg +++ b/packages/sights/assets/overlays/fesc20-LZc7p2kK.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-NLdqASzl.svg b/packages/sights/assets/overlays/fesc20-NLdqASzl.svg index 98bedaf3c..fb29d66a7 100644 --- a/packages/sights/assets/overlays/fesc20-NLdqASzl.svg +++ b/packages/sights/assets/overlays/fesc20-NLdqASzl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg b/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg index f4a8ab997..6c1c4b15c 100644 --- a/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg +++ b/packages/sights/assets/overlays/fesc20-P0oSEh8p.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-P470Q-jm.svg b/packages/sights/assets/overlays/fesc20-P470Q-jm.svg index 2fbc9fa61..4ac4836e9 100644 --- a/packages/sights/assets/overlays/fesc20-P470Q-jm.svg +++ b/packages/sights/assets/overlays/fesc20-P470Q-jm.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg b/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg index 96ead3971..b96076661 100644 --- a/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg +++ b/packages/sights/assets/overlays/fesc20-T4dIGLgy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg b/packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg index f1adb7b34..da52f8d3d 100644 --- a/packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg +++ b/packages/sights/assets/overlays/fesc20-Tlu3sz8A.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg b/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg index 11574fb43..02dcaa579 100644 --- a/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg +++ b/packages/sights/assets/overlays/fesc20-UjtbRtJS.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-W6XrryMO.svg b/packages/sights/assets/overlays/fesc20-W6XrryMO.svg index f7b1baf5a..e6342ccde 100644 --- a/packages/sights/assets/overlays/fesc20-W6XrryMO.svg +++ b/packages/sights/assets/overlays/fesc20-W6XrryMO.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg b/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg index 043b8c62c..f344db1d2 100644 --- a/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg +++ b/packages/sights/assets/overlays/fesc20-WIQsf_gX.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg b/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg index 4545e5e78..f710127da 100644 --- a/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg +++ b/packages/sights/assets/overlays/fesc20-WMUaKDp1.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg b/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg index 18747a5b0..9aa408198 100644 --- a/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg +++ b/packages/sights/assets/overlays/fesc20-Wzdtgqqz.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg b/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg index 82fae553b..a3de2f365 100644 --- a/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg +++ b/packages/sights/assets/overlays/fesc20-X8k7UFGf.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-YPcJPAZE.svg b/packages/sights/assets/overlays/fesc20-YPcJPAZE.svg index 100bf0da8..9e29cd5c0 100644 --- a/packages/sights/assets/overlays/fesc20-YPcJPAZE.svg +++ b/packages/sights/assets/overlays/fesc20-YPcJPAZE.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg b/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg index 1a897cfa9..a2fdb87a8 100644 --- a/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg +++ b/packages/sights/assets/overlays/fesc20-bD8CBhYZ.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-dKVLig1i.svg b/packages/sights/assets/overlays/fesc20-dKVLig1i.svg index 3e115da42..f9df4ffab 100644 --- a/packages/sights/assets/overlays/fesc20-dKVLig1i.svg +++ b/packages/sights/assets/overlays/fesc20-dKVLig1i.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-dfICsfSV.svg b/packages/sights/assets/overlays/fesc20-dfICsfSV.svg index 0773bc1b5..e80886b2f 100644 --- a/packages/sights/assets/overlays/fesc20-dfICsfSV.svg +++ b/packages/sights/assets/overlays/fesc20-dfICsfSV.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-fOt832UV.svg b/packages/sights/assets/overlays/fesc20-fOt832UV.svg index bebce88d4..e2fb2bed7 100644 --- a/packages/sights/assets/overlays/fesc20-fOt832UV.svg +++ b/packages/sights/assets/overlays/fesc20-fOt832UV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg index 5b58a1608..e2a1a4410 100644 --- a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg +++ b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg b/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg index 13c354e0d..aa9af6c0f 100644 --- a/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg +++ b/packages/sights/assets/overlays/fesc20-hp3Tk53x.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg b/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg index c5629e50f..8f50b8bf8 100644 --- a/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg +++ b/packages/sights/assets/overlays/fesc20-iUN0g_Zn.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg index 3552f0f39..7f6542bf9 100644 --- a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg +++ b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg b/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg index 128e458e8..2a27c9229 100644 --- a/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg +++ b/packages/sights/assets/overlays/fesc20-r_UeXQRO.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/fesc20-raHPDUNm.svg b/packages/sights/assets/overlays/fesc20-raHPDUNm.svg index 61e1da5ee..15d43aef0 100644 --- a/packages/sights/assets/overlays/fesc20-raHPDUNm.svg +++ b/packages/sights/assets/overlays/fesc20-raHPDUNm.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg b/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg index 73f1e11ed..0f11cdd69 100644 --- a/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg +++ b/packages/sights/assets/overlays/fesc20-xBFiEy-_.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg b/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg index 2b7de0ef1..d44107afb 100644 --- a/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg +++ b/packages/sights/assets/overlays/fesc20-xDFQNR3C.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150--xPZZd83.svg b/packages/sights/assets/overlays/ff150--xPZZd83.svg index f1a85dae3..28a4e6745 100644 --- a/packages/sights/assets/overlays/ff150--xPZZd83.svg +++ b/packages/sights/assets/overlays/ff150--xPZZd83.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-18YVVN-G.svg b/packages/sights/assets/overlays/ff150-18YVVN-G.svg index ae5a94190..207601549 100644 --- a/packages/sights/assets/overlays/ff150-18YVVN-G.svg +++ b/packages/sights/assets/overlays/ff150-18YVVN-G.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-2WUJ179s.svg b/packages/sights/assets/overlays/ff150-2WUJ179s.svg index db581e74f..ee88058fc 100644 --- a/packages/sights/assets/overlays/ff150-2WUJ179s.svg +++ b/packages/sights/assets/overlays/ff150-2WUJ179s.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-3dkU10af.svg b/packages/sights/assets/overlays/ff150-3dkU10af.svg index 70c2519fb..975e21627 100644 --- a/packages/sights/assets/overlays/ff150-3dkU10af.svg +++ b/packages/sights/assets/overlays/ff150-3dkU10af.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-3he9UOwy.svg b/packages/sights/assets/overlays/ff150-3he9UOwy.svg index ffc0c20da..6486f289d 100644 --- a/packages/sights/assets/overlays/ff150-3he9UOwy.svg +++ b/packages/sights/assets/overlays/ff150-3he9UOwy.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg b/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg index e1a50ec87..bd6bd348e 100644 --- a/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg +++ b/packages/sights/assets/overlays/ff150-3rM9XB0Z.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-7UI3m9B3.svg b/packages/sights/assets/overlays/ff150-7UI3m9B3.svg index f3d4a5cb0..1f8a6612b 100644 --- a/packages/sights/assets/overlays/ff150-7UI3m9B3.svg +++ b/packages/sights/assets/overlays/ff150-7UI3m9B3.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-7nvlys8r.svg b/packages/sights/assets/overlays/ff150-7nvlys8r.svg index 5d30749a7..2c11efed2 100644 --- a/packages/sights/assets/overlays/ff150-7nvlys8r.svg +++ b/packages/sights/assets/overlays/ff150-7nvlys8r.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-7vyfzrVQ.svg b/packages/sights/assets/overlays/ff150-7vyfzrVQ.svg index 20a5f61dd..f8ba29bbf 100644 --- a/packages/sights/assets/overlays/ff150-7vyfzrVQ.svg +++ b/packages/sights/assets/overlays/ff150-7vyfzrVQ.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg index e31a8b207..e4a89daac 100644 --- a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg +++ b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-FqbrFVr2.svg b/packages/sights/assets/overlays/ff150-FqbrFVr2.svg index 632a82f08..84b73bf7e 100644 --- a/packages/sights/assets/overlays/ff150-FqbrFVr2.svg +++ b/packages/sights/assets/overlays/ff150-FqbrFVr2.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-GOx2s_9L.svg b/packages/sights/assets/overlays/ff150-GOx2s_9L.svg index 037ad9e32..1e1fa5b83 100644 --- a/packages/sights/assets/overlays/ff150-GOx2s_9L.svg +++ b/packages/sights/assets/overlays/ff150-GOx2s_9L.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-H3MCPESJ.svg b/packages/sights/assets/overlays/ff150-H3MCPESJ.svg index 91f04b0b9..94830e6a6 100644 --- a/packages/sights/assets/overlays/ff150-H3MCPESJ.svg +++ b/packages/sights/assets/overlays/ff150-H3MCPESJ.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-KgHVkQBW.svg b/packages/sights/assets/overlays/ff150-KgHVkQBW.svg index 3a8bb4dd9..aac2cf83d 100644 --- a/packages/sights/assets/overlays/ff150-KgHVkQBW.svg +++ b/packages/sights/assets/overlays/ff150-KgHVkQBW.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-OviO2DlY.svg b/packages/sights/assets/overlays/ff150-OviO2DlY.svg index cf45ecf6e..0c7d1681a 100644 --- a/packages/sights/assets/overlays/ff150-OviO2DlY.svg +++ b/packages/sights/assets/overlays/ff150-OviO2DlY.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg b/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg index 790d93d9c..3a417ea57 100644 --- a/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg +++ b/packages/sights/assets/overlays/ff150-Ttsc7q6V.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-V-xzfWsx.svg b/packages/sights/assets/overlays/ff150-V-xzfWsx.svg index 80c20dd25..84ade6456 100644 --- a/packages/sights/assets/overlays/ff150-V-xzfWsx.svg +++ b/packages/sights/assets/overlays/ff150-V-xzfWsx.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-_AoeFdVO.svg b/packages/sights/assets/overlays/ff150-_AoeFdVO.svg index b99e89a0f..8f8ed94a3 100644 --- a/packages/sights/assets/overlays/ff150-_AoeFdVO.svg +++ b/packages/sights/assets/overlays/ff150-_AoeFdVO.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-_UIadfVL.svg b/packages/sights/assets/overlays/ff150-_UIadfVL.svg index ac59254b9..0c9a63277 100644 --- a/packages/sights/assets/overlays/ff150-_UIadfVL.svg +++ b/packages/sights/assets/overlays/ff150-_UIadfVL.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-eOjyMInj.svg b/packages/sights/assets/overlays/ff150-eOjyMInj.svg index 8f4a2f7ed..0a77350c2 100644 --- a/packages/sights/assets/overlays/ff150-eOjyMInj.svg +++ b/packages/sights/assets/overlays/ff150-eOjyMInj.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-gFp78fQO.svg b/packages/sights/assets/overlays/ff150-gFp78fQO.svg index 4fce41cc6..ef4885cf2 100644 --- a/packages/sights/assets/overlays/ff150-gFp78fQO.svg +++ b/packages/sights/assets/overlays/ff150-gFp78fQO.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-g_xBOOS2.svg b/packages/sights/assets/overlays/ff150-g_xBOOS2.svg index e81c036c0..fe69764c1 100644 --- a/packages/sights/assets/overlays/ff150-g_xBOOS2.svg +++ b/packages/sights/assets/overlays/ff150-g_xBOOS2.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-jUBEKij0.svg b/packages/sights/assets/overlays/ff150-jUBEKij0.svg index 5063ea469..df4e27f19 100644 --- a/packages/sights/assets/overlays/ff150-jUBEKij0.svg +++ b/packages/sights/assets/overlays/ff150-jUBEKij0.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-k4kh7Vra.svg b/packages/sights/assets/overlays/ff150-k4kh7Vra.svg index 3ad815624..ca7e720d2 100644 --- a/packages/sights/assets/overlays/ff150-k4kh7Vra.svg +++ b/packages/sights/assets/overlays/ff150-k4kh7Vra.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-nF_oFvhI.svg b/packages/sights/assets/overlays/ff150-nF_oFvhI.svg index afa916543..be9db8652 100644 --- a/packages/sights/assets/overlays/ff150-nF_oFvhI.svg +++ b/packages/sights/assets/overlays/ff150-nF_oFvhI.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-o8MiTw8u.svg b/packages/sights/assets/overlays/ff150-o8MiTw8u.svg index f41013ea0..479a37726 100644 --- a/packages/sights/assets/overlays/ff150-o8MiTw8u.svg +++ b/packages/sights/assets/overlays/ff150-o8MiTw8u.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-ouGGtRnf.svg b/packages/sights/assets/overlays/ff150-ouGGtRnf.svg index 3063dc4c1..6d74a08ff 100644 --- a/packages/sights/assets/overlays/ff150-ouGGtRnf.svg +++ b/packages/sights/assets/overlays/ff150-ouGGtRnf.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-pNO26q4D.svg b/packages/sights/assets/overlays/ff150-pNO26q4D.svg index 876ef5cec..aa7d9a371 100644 --- a/packages/sights/assets/overlays/ff150-pNO26q4D.svg +++ b/packages/sights/assets/overlays/ff150-pNO26q4D.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-phbX7Bef.svg b/packages/sights/assets/overlays/ff150-phbX7Bef.svg index aeb420630..a91e5c6bc 100644 --- a/packages/sights/assets/overlays/ff150-phbX7Bef.svg +++ b/packages/sights/assets/overlays/ff150-phbX7Bef.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-t3KBMPeD.svg b/packages/sights/assets/overlays/ff150-t3KBMPeD.svg index fcef08cdc..9fa76e026 100644 --- a/packages/sights/assets/overlays/ff150-t3KBMPeD.svg +++ b/packages/sights/assets/overlays/ff150-t3KBMPeD.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-tT8sqplK.svg b/packages/sights/assets/overlays/ff150-tT8sqplK.svg index 855358f02..5735aa870 100644 --- a/packages/sights/assets/overlays/ff150-tT8sqplK.svg +++ b/packages/sights/assets/overlays/ff150-tT8sqplK.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-vwE3yqdh.svg b/packages/sights/assets/overlays/ff150-vwE3yqdh.svg index 77d2b91ba..5d569a630 100644 --- a/packages/sights/assets/overlays/ff150-vwE3yqdh.svg +++ b/packages/sights/assets/overlays/ff150-vwE3yqdh.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg b/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg index 093ac50d5..436a3b376 100644 --- a/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg +++ b/packages/sights/assets/overlays/ff150-wO_fJ3DL.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-xbOhu7nK.svg b/packages/sights/assets/overlays/ff150-xbOhu7nK.svg index 3372001aa..076262144 100644 --- a/packages/sights/assets/overlays/ff150-xbOhu7nK.svg +++ b/packages/sights/assets/overlays/ff150-xbOhu7nK.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ff150-zXbg0l3z.svg b/packages/sights/assets/overlays/ff150-zXbg0l3z.svg index ab9183363..0c6c5247e 100644 --- a/packages/sights/assets/overlays/ff150-zXbg0l3z.svg +++ b/packages/sights/assets/overlays/ff150-zXbg0l3z.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg b/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg index 7c975663e..e0ac7f786 100644 --- a/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg +++ b/packages/sights/assets/overlays/ffocus18-3TiCVAaN.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg b/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg index e8bd0bdee..b2a2a6f78 100644 --- a/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg +++ b/packages/sights/assets/overlays/ffocus18-43ljK5xC.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg b/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg index 708b2acc4..70e12ddab 100644 --- a/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg +++ b/packages/sights/assets/overlays/ffocus18-6FX31ty1.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg index 5b6c98cf0..edf44d0cd 100644 --- a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg +++ b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg b/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg index 294c7040d..e61e13369 100644 --- a/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg +++ b/packages/sights/assets/overlays/ffocus18-9MeSIqp7.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg b/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg index aa5072d5b..b361642c8 100644 --- a/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg +++ b/packages/sights/assets/overlays/ffocus18-D_QaaCTd.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg b/packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg index 80104de32..55c4f4099 100644 --- a/packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg +++ b/packages/sights/assets/overlays/ffocus18-Eo0jqD_a.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg index 31c558098..dc221bb84 100644 --- a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg +++ b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg b/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg index cd11a44f1..b77c7563a 100644 --- a/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg +++ b/packages/sights/assets/overlays/ffocus18-GgOSpLl6.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg b/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg index f2d71e3fa..29af4abc3 100644 --- a/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg +++ b/packages/sights/assets/overlays/ffocus18-GiTxaJUq.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg b/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg index 6a37118ba..4d5340e2a 100644 --- a/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg +++ b/packages/sights/assets/overlays/ffocus18-IoqRrmlA.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg b/packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg index 42c2a4229..ec099c936 100644 --- a/packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg +++ b/packages/sights/assets/overlays/ffocus18-JFX8WF9P.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg index f8819ad24..dd3c735b1 100644 --- a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg +++ b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg b/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg index be4c1de3f..a68de4c8f 100644 --- a/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg +++ b/packages/sights/assets/overlays/ffocus18-L2UM_68Q.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg b/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg index a88201149..4c596aaeb 100644 --- a/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg +++ b/packages/sights/assets/overlays/ffocus18-L_oZ0LyK.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg index 437824571..0d210fcec 100644 --- a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg +++ b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg b/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg index abe4a5b94..ae4e271a0 100644 --- a/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg +++ b/packages/sights/assets/overlays/ffocus18-QKfhXU7o.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg b/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg index 4f1745b23..9b2a2730c 100644 --- a/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg +++ b/packages/sights/assets/overlays/ffocus18-S3kgFOBb.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg index d833b2ed0..a03a03d46 100644 --- a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg +++ b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg b/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg index 7df4fa968..ff14bdd07 100644 --- a/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg +++ b/packages/sights/assets/overlays/ffocus18-UBB7HoxF.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg b/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg index 443cf431e..d3342513e 100644 --- a/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg +++ b/packages/sights/assets/overlays/ffocus18-Wo8PkcLF.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg b/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg index bc3502d71..ed42fe09a 100644 --- a/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg +++ b/packages/sights/assets/overlays/ffocus18-X2LDjCvr.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg b/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg index 43f59b278..9ef19ce25 100644 --- a/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg +++ b/packages/sights/assets/overlays/ffocus18-XlfgjQb9.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg b/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg index 1a572524f..e9c9d3a34 100644 --- a/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg +++ b/packages/sights/assets/overlays/ffocus18-ZXKOomlv.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg b/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg index 07ec1cd7e..fd8c153b5 100644 --- a/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg +++ b/packages/sights/assets/overlays/ffocus18-cPUyM28L.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg index 1a1e5aa7e..94caed547 100644 --- a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-e5netaNs.svg b/packages/sights/assets/overlays/ffocus18-e5netaNs.svg index ce5780d73..cfc4f8712 100644 --- a/packages/sights/assets/overlays/ffocus18-e5netaNs.svg +++ b/packages/sights/assets/overlays/ffocus18-e5netaNs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg b/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg index 3e4bee60c..3af192aaa 100644 --- a/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg +++ b/packages/sights/assets/overlays/ffocus18-iQvwc6wa.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg b/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg index eefc9f376..14b63dbd1 100644 --- a/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg +++ b/packages/sights/assets/overlays/ffocus18-jWOq2CNN.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-jkSlWpql.svg b/packages/sights/assets/overlays/ffocus18-jkSlWpql.svg index a3911ede8..077640ba9 100644 --- a/packages/sights/assets/overlays/ffocus18-jkSlWpql.svg +++ b/packages/sights/assets/overlays/ffocus18-jkSlWpql.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg index 4e5f24f9b..6a0bedc58 100644 --- a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg +++ b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg b/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg index 384a31440..c4d627cbf 100644 --- a/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg +++ b/packages/sights/assets/overlays/ffocus18-p6mBZGcW.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg index 3d4fd795b..3abcd36d1 100644 --- a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg +++ b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg index cda18b25f..cfa005cad 100644 --- a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg +++ b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-tufa4FoL.svg b/packages/sights/assets/overlays/ffocus18-tufa4FoL.svg index ce8e5ed71..d3eeedd39 100644 --- a/packages/sights/assets/overlays/ffocus18-tufa4FoL.svg +++ b/packages/sights/assets/overlays/ffocus18-tufa4FoL.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg b/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg index 886fb1a80..f46008496 100644 --- a/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg +++ b/packages/sights/assets/overlays/ffocus18-vFR9PKjB.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg b/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg index 5e6406a45..17f3a8afe 100644 --- a/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg +++ b/packages/sights/assets/overlays/ffocus18-x_1SE7X-.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg b/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg index e2279957d..bfb9f5a4e 100644 --- a/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg +++ b/packages/sights/assets/overlays/ffocus18-yo9eBDW6.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg b/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg index 91fab3566..8d2de9774 100644 --- a/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg +++ b/packages/sights/assets/overlays/ffocus18-zgLKB-Do.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg b/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg index c0ba1b810..a79ca3cb5 100644 --- a/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg +++ b/packages/sights/assets/overlays/ftransit18--w_ir_yH.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg b/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg index 002280335..9f4de428a 100644 --- a/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg +++ b/packages/sights/assets/overlays/ftransit18-3Sbfx_KZ.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-3dkU10af.svg b/packages/sights/assets/overlays/ftransit18-3dkU10af.svg index 5cfff8cdd..6e4e95671 100644 --- a/packages/sights/assets/overlays/ftransit18-3dkU10af.svg +++ b/packages/sights/assets/overlays/ftransit18-3dkU10af.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg index d3adec2a5..1c26233d5 100644 --- a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg +++ b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg b/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg index 9711e7f74..8e3918b41 100644 --- a/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg +++ b/packages/sights/assets/overlays/ftransit18-4NMPqEV6.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg b/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg index 688d016a4..1a1fcd9f9 100644 --- a/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg +++ b/packages/sights/assets/overlays/ftransit18-5SiNC94w.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg b/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg index 53c0d2bb2..4ba7f1b57 100644 --- a/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg +++ b/packages/sights/assets/overlays/ftransit18-6X8IAjy0.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-6khKhof0.svg b/packages/sights/assets/overlays/ftransit18-6khKhof0.svg index 618049db4..9c292c81d 100644 --- a/packages/sights/assets/overlays/ftransit18-6khKhof0.svg +++ b/packages/sights/assets/overlays/ftransit18-6khKhof0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg b/packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg index 46bd2cbd7..c0d90aec8 100644 --- a/packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg +++ b/packages/sights/assets/overlays/ftransit18-7qLSCnFP.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg b/packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg index ae71f818b..79534078a 100644 --- a/packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg +++ b/packages/sights/assets/overlays/ftransit18-AuCXxG5o.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg b/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg index 6aa6ed236..1e039e67f 100644 --- a/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg +++ b/packages/sights/assets/overlays/ftransit18-E7DAv47J.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg b/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg index d171ed14b..53312439d 100644 --- a/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg +++ b/packages/sights/assets/overlays/ftransit18-FFP5b34o.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg b/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg index 17a455bbe..faced69fc 100644 --- a/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg +++ b/packages/sights/assets/overlays/ftransit18-G24AdP6r.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg b/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg index 46def5208..ed7a28845 100644 --- a/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg +++ b/packages/sights/assets/overlays/ftransit18-IIVI_pnX.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg b/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg index f17b65337..ad17e79b4 100644 --- a/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg +++ b/packages/sights/assets/overlays/ftransit18-NwBMLo3Z.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg b/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg index c5dce2892..83e4c6fed 100644 --- a/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg +++ b/packages/sights/assets/overlays/ftransit18-RJ2D7DNz.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg index db6fab11a..525521e9c 100644 --- a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg +++ b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg b/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg index ea42bbedf..f3d28b5e3 100644 --- a/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg +++ b/packages/sights/assets/overlays/ftransit18-UNAZWJ-r.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg b/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg index 2ea15b0dc..6a588879b 100644 --- a/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg +++ b/packages/sights/assets/overlays/ftransit18-Y0vPhBVF.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-aA2K898S.svg b/packages/sights/assets/overlays/ftransit18-aA2K898S.svg index a7a209e83..f92a53600 100644 --- a/packages/sights/assets/overlays/ftransit18-aA2K898S.svg +++ b/packages/sights/assets/overlays/ftransit18-aA2K898S.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg b/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg index 7b15b6171..df4553a0c 100644 --- a/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg +++ b/packages/sights/assets/overlays/ftransit18-cf0e-pcB.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg b/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg index bc7274036..b6bd0e55a 100644 --- a/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg +++ b/packages/sights/assets/overlays/ftransit18-eXJDDYmE.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg b/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg index dc5f45cc8..7912b3e9d 100644 --- a/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg +++ b/packages/sights/assets/overlays/ftransit18-eztNpSRX.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg b/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg index ee9f2becf..4872f08d0 100644 --- a/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg +++ b/packages/sights/assets/overlays/ftransit18-f2W6pHaR.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg b/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg index 2901b5ae2..1e2377af1 100644 --- a/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg +++ b/packages/sights/assets/overlays/ftransit18-ffghVsNz.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg b/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg index ed0b451c8..e860b7826 100644 --- a/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg +++ b/packages/sights/assets/overlays/ftransit18-iu1Vj2Oa.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg b/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg index 132aa56b8..dffdc6919 100644 --- a/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg +++ b/packages/sights/assets/overlays/ftransit18-klUp8BS4.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg b/packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg index 5703267e2..2c3134174 100644 --- a/packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg +++ b/packages/sights/assets/overlays/ftransit18-mGSvkRHz.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg b/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg index 7ee69a76a..8ab1183c4 100644 --- a/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg +++ b/packages/sights/assets/overlays/ftransit18-pd2Q_O9P.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg b/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg index 40acd9178..608233e5f 100644 --- a/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg +++ b/packages/sights/assets/overlays/ftransit18-qmLP7A-b.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg b/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg index 3eb215444..75f38dead 100644 --- a/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg +++ b/packages/sights/assets/overlays/ftransit18-rsXWUN8X.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg b/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg index c5bead3cc..99e59049c 100644 --- a/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg +++ b/packages/sights/assets/overlays/ftransit18-sLAPXyG8.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg b/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg index c1382f3d6..65b7f26f4 100644 --- a/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg +++ b/packages/sights/assets/overlays/ftransit18-wyXf7MTv.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg b/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg index ce8dc41f1..cc618fca2 100644 --- a/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg +++ b/packages/sights/assets/overlays/ftransit18-xyp1rU0h.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg b/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg index c6fe9cdcf..ed024f0e5 100644 --- a/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg +++ b/packages/sights/assets/overlays/ftransit18-y_wTc7ED.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg b/packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg index 3a6dbece9..8084b79f9 100644 --- a/packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg +++ b/packages/sights/assets/overlays/ftransit18-yxw9gmyL.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-2a8VfA8m.svg b/packages/sights/assets/overlays/haccord-2a8VfA8m.svg index ae945a47f..3715ec149 100644 --- a/packages/sights/assets/overlays/haccord-2a8VfA8m.svg +++ b/packages/sights/assets/overlays/haccord-2a8VfA8m.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-2v-2_QD5.svg b/packages/sights/assets/overlays/haccord-2v-2_QD5.svg index 2ad2b92f1..02be8419a 100644 --- a/packages/sights/assets/overlays/haccord-2v-2_QD5.svg +++ b/packages/sights/assets/overlays/haccord-2v-2_QD5.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg index a221a0a32..ef343de18 100644 --- a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg +++ b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-6kYUBv_e.svg b/packages/sights/assets/overlays/haccord-6kYUBv_e.svg index f1fa67a32..5612e1028 100644 --- a/packages/sights/assets/overlays/haccord-6kYUBv_e.svg +++ b/packages/sights/assets/overlays/haccord-6kYUBv_e.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-8YjMcu0D.svg b/packages/sights/assets/overlays/haccord-8YjMcu0D.svg index 12310e73e..afddedde4 100644 --- a/packages/sights/assets/overlays/haccord-8YjMcu0D.svg +++ b/packages/sights/assets/overlays/haccord-8YjMcu0D.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-9fxMGSs6.svg b/packages/sights/assets/overlays/haccord-9fxMGSs6.svg index db8d781c6..54b3230e5 100644 --- a/packages/sights/assets/overlays/haccord-9fxMGSs6.svg +++ b/packages/sights/assets/overlays/haccord-9fxMGSs6.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-DUPnw5jj.svg b/packages/sights/assets/overlays/haccord-DUPnw5jj.svg index 1cd7e118a..b8fa135e0 100644 --- a/packages/sights/assets/overlays/haccord-DUPnw5jj.svg +++ b/packages/sights/assets/overlays/haccord-DUPnw5jj.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-EfRIciFr.svg b/packages/sights/assets/overlays/haccord-EfRIciFr.svg index f8efef5f2..d2049e857 100644 --- a/packages/sights/assets/overlays/haccord-EfRIciFr.svg +++ b/packages/sights/assets/overlays/haccord-EfRIciFr.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-GQcZz48C.svg b/packages/sights/assets/overlays/haccord-GQcZz48C.svg index 08be70af2..5f42e9f01 100644 --- a/packages/sights/assets/overlays/haccord-GQcZz48C.svg +++ b/packages/sights/assets/overlays/haccord-GQcZz48C.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-GdWvsqrm.svg b/packages/sights/assets/overlays/haccord-GdWvsqrm.svg index a35cfb93a..34c06f461 100644 --- a/packages/sights/assets/overlays/haccord-GdWvsqrm.svg +++ b/packages/sights/assets/overlays/haccord-GdWvsqrm.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg b/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg index 4cc2f4b06..721ebe588 100644 --- a/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg +++ b/packages/sights/assets/overlays/haccord-Gtt0JNQl.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-H_eRrLBl.svg b/packages/sights/assets/overlays/haccord-H_eRrLBl.svg index 29da6d2e2..92a11ed48 100644 --- a/packages/sights/assets/overlays/haccord-H_eRrLBl.svg +++ b/packages/sights/assets/overlays/haccord-H_eRrLBl.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-Jq65fyD4.svg b/packages/sights/assets/overlays/haccord-Jq65fyD4.svg index dbdbb727a..160c04624 100644 --- a/packages/sights/assets/overlays/haccord-Jq65fyD4.svg +++ b/packages/sights/assets/overlays/haccord-Jq65fyD4.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-KN23XXkX.svg b/packages/sights/assets/overlays/haccord-KN23XXkX.svg index 98f4b3949..0c9a23619 100644 --- a/packages/sights/assets/overlays/haccord-KN23XXkX.svg +++ b/packages/sights/assets/overlays/haccord-KN23XXkX.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-KvP-pm8L.svg b/packages/sights/assets/overlays/haccord-KvP-pm8L.svg index a9d477f30..8810bd8a1 100644 --- a/packages/sights/assets/overlays/haccord-KvP-pm8L.svg +++ b/packages/sights/assets/overlays/haccord-KvP-pm8L.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-OXYy5gET.svg b/packages/sights/assets/overlays/haccord-OXYy5gET.svg index 0490e8f65..f435d42ed 100644 --- a/packages/sights/assets/overlays/haccord-OXYy5gET.svg +++ b/packages/sights/assets/overlays/haccord-OXYy5gET.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-PGr3RzzP.svg b/packages/sights/assets/overlays/haccord-PGr3RzzP.svg index 678bcc7d3..618025fb8 100644 --- a/packages/sights/assets/overlays/haccord-PGr3RzzP.svg +++ b/packages/sights/assets/overlays/haccord-PGr3RzzP.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-QKfhXU7o.svg b/packages/sights/assets/overlays/haccord-QKfhXU7o.svg index aa5494e33..5ce872c85 100644 --- a/packages/sights/assets/overlays/haccord-QKfhXU7o.svg +++ b/packages/sights/assets/overlays/haccord-QKfhXU7o.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-Qel0qUky.svg b/packages/sights/assets/overlays/haccord-Qel0qUky.svg index aa3057ff6..81af43ac9 100644 --- a/packages/sights/assets/overlays/haccord-Qel0qUky.svg +++ b/packages/sights/assets/overlays/haccord-Qel0qUky.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg b/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg index b3bb960ca..eeccf98e7 100644 --- a/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg +++ b/packages/sights/assets/overlays/haccord-W-Bn3bU1.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-Z84erkMb.svg b/packages/sights/assets/overlays/haccord-Z84erkMb.svg index 5329ae7c1..4214b73a6 100644 --- a/packages/sights/assets/overlays/haccord-Z84erkMb.svg +++ b/packages/sights/assets/overlays/haccord-Z84erkMb.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-_YnTubBA.svg b/packages/sights/assets/overlays/haccord-_YnTubBA.svg index d4438367f..18da659bc 100644 --- a/packages/sights/assets/overlays/haccord-_YnTubBA.svg +++ b/packages/sights/assets/overlays/haccord-_YnTubBA.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg b/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg index 6e0254b7e..d8fcfa002 100644 --- a/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg +++ b/packages/sights/assets/overlays/haccord-bSAv3Hrj.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-bg-RFHl_.svg b/packages/sights/assets/overlays/haccord-bg-RFHl_.svg index 6f9ebc07c..afc7549af 100644 --- a/packages/sights/assets/overlays/haccord-bg-RFHl_.svg +++ b/packages/sights/assets/overlays/haccord-bg-RFHl_.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-boMeNVsC.svg b/packages/sights/assets/overlays/haccord-boMeNVsC.svg index 7cc402362..ac8d08b4c 100644 --- a/packages/sights/assets/overlays/haccord-boMeNVsC.svg +++ b/packages/sights/assets/overlays/haccord-boMeNVsC.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg index 3b94aba0d..e58861cf1 100644 --- a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-d3VJTvYw.svg b/packages/sights/assets/overlays/haccord-d3VJTvYw.svg index c7f5dea7c..6c05646d0 100644 --- a/packages/sights/assets/overlays/haccord-d3VJTvYw.svg +++ b/packages/sights/assets/overlays/haccord-d3VJTvYw.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg b/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg index d44a3dd81..3eed17f79 100644 --- a/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg +++ b/packages/sights/assets/overlays/haccord-d_u3qyQ-.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-hsCc_Nct.svg b/packages/sights/assets/overlays/haccord-hsCc_Nct.svg index f60d06f77..7a7db7401 100644 --- a/packages/sights/assets/overlays/haccord-hsCc_Nct.svg +++ b/packages/sights/assets/overlays/haccord-hsCc_Nct.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-huAZfQJA.svg b/packages/sights/assets/overlays/haccord-huAZfQJA.svg index c3c3e20e5..5372cd4f7 100644 --- a/packages/sights/assets/overlays/haccord-huAZfQJA.svg +++ b/packages/sights/assets/overlays/haccord-huAZfQJA.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-k6MiX2MR.svg b/packages/sights/assets/overlays/haccord-k6MiX2MR.svg index a80262774..a93bde54c 100644 --- a/packages/sights/assets/overlays/haccord-k6MiX2MR.svg +++ b/packages/sights/assets/overlays/haccord-k6MiX2MR.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-mdZ7optI.svg b/packages/sights/assets/overlays/haccord-mdZ7optI.svg index 15f007ebd..85bb7406d 100644 --- a/packages/sights/assets/overlays/haccord-mdZ7optI.svg +++ b/packages/sights/assets/overlays/haccord-mdZ7optI.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-oiY_yPTR.svg b/packages/sights/assets/overlays/haccord-oiY_yPTR.svg index 437cf6d63..e8aee6090 100644 --- a/packages/sights/assets/overlays/haccord-oiY_yPTR.svg +++ b/packages/sights/assets/overlays/haccord-oiY_yPTR.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-pplCo6sV.svg b/packages/sights/assets/overlays/haccord-pplCo6sV.svg index b7783a860..4bf1bece0 100644 --- a/packages/sights/assets/overlays/haccord-pplCo6sV.svg +++ b/packages/sights/assets/overlays/haccord-pplCo6sV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-ps7cWy6K.svg b/packages/sights/assets/overlays/haccord-ps7cWy6K.svg index a99083178..32672bc60 100644 --- a/packages/sights/assets/overlays/haccord-ps7cWy6K.svg +++ b/packages/sights/assets/overlays/haccord-ps7cWy6K.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-sorgeRJ7.svg b/packages/sights/assets/overlays/haccord-sorgeRJ7.svg index e24b69ad1..1a94fb134 100644 --- a/packages/sights/assets/overlays/haccord-sorgeRJ7.svg +++ b/packages/sights/assets/overlays/haccord-sorgeRJ7.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/haccord-t5sLlmfv.svg b/packages/sights/assets/overlays/haccord-t5sLlmfv.svg index 356f9f390..310d129b3 100644 --- a/packages/sights/assets/overlays/haccord-t5sLlmfv.svg +++ b/packages/sights/assets/overlays/haccord-t5sLlmfv.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-zNA0vVT0.svg b/packages/sights/assets/overlays/haccord-zNA0vVT0.svg index 367fe53a4..48381d764 100644 --- a/packages/sights/assets/overlays/haccord-zNA0vVT0.svg +++ b/packages/sights/assets/overlays/haccord-zNA0vVT0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg b/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg index c4d89ee2c..49236fbb2 100644 --- a/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg +++ b/packages/sights/assets/overlays/jgc21-0QM-q8k5.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-1j-oTPag.svg b/packages/sights/assets/overlays/jgc21-1j-oTPag.svg index c6dce4a5a..a4c67e3fa 100644 --- a/packages/sights/assets/overlays/jgc21-1j-oTPag.svg +++ b/packages/sights/assets/overlays/jgc21-1j-oTPag.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg b/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg index c63b9e6ee..79751795d 100644 --- a/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg +++ b/packages/sights/assets/overlays/jgc21-2_5eHL-F.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-2bGeRS3I.svg b/packages/sights/assets/overlays/jgc21-2bGeRS3I.svg index 530eab422..97afb10c3 100644 --- a/packages/sights/assets/overlays/jgc21-2bGeRS3I.svg +++ b/packages/sights/assets/overlays/jgc21-2bGeRS3I.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg b/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg index 3ed85e70f..cbf0ed885 100644 --- a/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg +++ b/packages/sights/assets/overlays/jgc21-3JJvM7_B.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg b/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg index e95983e66..691f660b3 100644 --- a/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg +++ b/packages/sights/assets/overlays/jgc21-3gjMwvQG.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-5lovhZgA.svg b/packages/sights/assets/overlays/jgc21-5lovhZgA.svg index 180cf0b33..5aac39a8f 100644 --- a/packages/sights/assets/overlays/jgc21-5lovhZgA.svg +++ b/packages/sights/assets/overlays/jgc21-5lovhZgA.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg b/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg index 779f77ec5..e208779ca 100644 --- a/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg +++ b/packages/sights/assets/overlays/jgc21-ESc0HCzy.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg b/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg index 7fb230a4b..e045ae057 100644 --- a/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg +++ b/packages/sights/assets/overlays/jgc21-Emzc8jJA.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg index 38d07e553..30c69a9c7 100644 --- a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg +++ b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg b/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg index 0f2d91aae..691fa4339 100644 --- a/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg +++ b/packages/sights/assets/overlays/jgc21-J1Ezdyar.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-JerG7oW5.svg b/packages/sights/assets/overlays/jgc21-JerG7oW5.svg index 4730c3705..33a823ff9 100644 --- a/packages/sights/assets/overlays/jgc21-JerG7oW5.svg +++ b/packages/sights/assets/overlays/jgc21-JerG7oW5.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg b/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg index fa379dbe8..0d3774622 100644 --- a/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg +++ b/packages/sights/assets/overlays/jgc21-KyUUVU2P.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg b/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg index 2430c5218..ff5271e82 100644 --- a/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg +++ b/packages/sights/assets/overlays/jgc21-QIkcNhc_.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg b/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg index 5d0681f97..a4b3d8b02 100644 --- a/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg +++ b/packages/sights/assets/overlays/jgc21-QIvfeg0X.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg b/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg index dc4dbee99..30cb05cdd 100644 --- a/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg +++ b/packages/sights/assets/overlays/jgc21-QwNQX0Cr.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg b/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg index b0ccc1b80..61c8f34f1 100644 --- a/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg +++ b/packages/sights/assets/overlays/jgc21-RAVpqaE4.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-RE3li6rE.svg b/packages/sights/assets/overlays/jgc21-RE3li6rE.svg index b5f7eb1e6..30c4884b3 100644 --- a/packages/sights/assets/overlays/jgc21-RE3li6rE.svg +++ b/packages/sights/assets/overlays/jgc21-RE3li6rE.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-S8sE69on.svg b/packages/sights/assets/overlays/jgc21-S8sE69on.svg index b83b66e8a..2a9747bda 100644 --- a/packages/sights/assets/overlays/jgc21-S8sE69on.svg +++ b/packages/sights/assets/overlays/jgc21-S8sE69on.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg b/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg index b195ace6a..5518152e5 100644 --- a/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg +++ b/packages/sights/assets/overlays/jgc21-TEoi50Ff.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg index a2380700a..4847de4ab 100644 --- a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg +++ b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg b/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg index f4d366612..881c574f9 100644 --- a/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg +++ b/packages/sights/assets/overlays/jgc21-TyJPUs8E.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg b/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg index 6a4d235e4..04f1836da 100644 --- a/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg +++ b/packages/sights/assets/overlays/jgc21-VHq_6BM-.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg b/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg index e73d41681..e06440c46 100644 --- a/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg +++ b/packages/sights/assets/overlays/jgc21-XXh8GWm8.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg b/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg index 8f1237d62..fd8c67d0c 100644 --- a/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg +++ b/packages/sights/assets/overlays/jgc21-ZubJ48-U.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-__JKllz9.svg b/packages/sights/assets/overlays/jgc21-__JKllz9.svg index 6115b513d..d14c31e44 100644 --- a/packages/sights/assets/overlays/jgc21-__JKllz9.svg +++ b/packages/sights/assets/overlays/jgc21-__JKllz9.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg b/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg index 9c3958f7f..f076b73ec 100644 --- a/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg +++ b/packages/sights/assets/overlays/jgc21-ezXzTRkj.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-imomJ2V0.svg b/packages/sights/assets/overlays/jgc21-imomJ2V0.svg index 51df0c87f..177bf9f7f 100644 --- a/packages/sights/assets/overlays/jgc21-imomJ2V0.svg +++ b/packages/sights/assets/overlays/jgc21-imomJ2V0.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-m2dDoMup.svg b/packages/sights/assets/overlays/jgc21-m2dDoMup.svg index e914cdff8..6a200d6f4 100644 --- a/packages/sights/assets/overlays/jgc21-m2dDoMup.svg +++ b/packages/sights/assets/overlays/jgc21-m2dDoMup.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg b/packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg index 023fdbbe9..4fad4931a 100644 --- a/packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg +++ b/packages/sights/assets/overlays/jgc21-nVbhsBaQ.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-omlus7Ui.svg b/packages/sights/assets/overlays/jgc21-omlus7Ui.svg index 5278b9374..4193a018f 100644 --- a/packages/sights/assets/overlays/jgc21-omlus7Ui.svg +++ b/packages/sights/assets/overlays/jgc21-omlus7Ui.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg b/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg index b002f4a5a..7f2ba3f3d 100644 --- a/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg +++ b/packages/sights/assets/overlays/jgc21-s7WDTRmE.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg b/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg index a86369e0c..8a490b822 100644 --- a/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg +++ b/packages/sights/assets/overlays/jgc21-tbF2Ax8v.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg b/packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg index 528c7d8ce..047c323f0 100644 --- a/packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg +++ b/packages/sights/assets/overlays/jgc21-xwYV3_Hz.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg b/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg index 7f2bbdbf7..7ae4ab61a 100644 --- a/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg +++ b/packages/sights/assets/overlays/jgc21-z15ZdJL6.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg b/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg index c8a9100d4..4ffbe2961 100644 --- a/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg +++ b/packages/sights/assets/overlays/jgc21-zCrDwYWE.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg b/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg index a2e59a71a..a94e64683 100644 --- a/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg +++ b/packages/sights/assets/overlays/jgc21-zkvFMHnS.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg b/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg index 30115f62b..27dabc7cb 100644 --- a/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg +++ b/packages/sights/assets/overlays/tsienna20--a2RmRcs.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg b/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg index 4ef09f953..67d6fbfce 100755 --- a/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg +++ b/packages/sights/assets/overlays/tsienna20-1LNxhgCR.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg b/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg index df21c1892..dc75f785e 100644 --- a/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg +++ b/packages/sights/assets/overlays/tsienna20-1n_z8bYy.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg b/packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg index f801d8729..e623c0735 100644 --- a/packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg +++ b/packages/sights/assets/overlays/tsienna20-2Zz6SEaI.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg b/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg index 0d5a440ac..7aa5afd2e 100755 --- a/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg +++ b/packages/sights/assets/overlays/tsienna20-4ihRwDkS.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg b/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg index 77afda50e..14e2418ec 100644 --- a/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg +++ b/packages/sights/assets/overlays/tsienna20-65mfPdRD.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-670P2H2V.svg b/packages/sights/assets/overlays/tsienna20-670P2H2V.svg index 38d2cbb49..e8092ed83 100644 --- a/packages/sights/assets/overlays/tsienna20-670P2H2V.svg +++ b/packages/sights/assets/overlays/tsienna20-670P2H2V.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg b/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg index 4aa619be7..d1201c13f 100644 --- a/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg +++ b/packages/sights/assets/overlays/tsienna20-D6pPBrXx.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg b/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg index 4773b5f71..569b04d46 100644 --- a/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg +++ b/packages/sights/assets/overlays/tsienna20-HykkFbXf.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg b/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg index c1794397c..35a066ba9 100644 --- a/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg +++ b/packages/sights/assets/overlays/tsienna20-Ia0SGJ6z.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-K0ThKmue.svg b/packages/sights/assets/overlays/tsienna20-K0ThKmue.svg index 153cfe829..920e81534 100644 --- a/packages/sights/assets/overlays/tsienna20-K0ThKmue.svg +++ b/packages/sights/assets/overlays/tsienna20-K0ThKmue.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg b/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg index 210979ca4..1b58da9de 100644 --- a/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg +++ b/packages/sights/assets/overlays/tsienna20-KHB_Cd9k.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg b/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg index 2afba77e4..a400265b5 100644 --- a/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg +++ b/packages/sights/assets/overlays/tsienna20-MPCqHzeH.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg b/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg index e241e3a1d..85716ea7a 100755 --- a/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg +++ b/packages/sights/assets/overlays/tsienna20-OxFWgEPk.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg b/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg index e00438991..3971a8c07 100644 --- a/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg +++ b/packages/sights/assets/overlays/tsienna20-QIMXlb0L.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg b/packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg index ea05688aa..d2b2e1622 100644 --- a/packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg +++ b/packages/sights/assets/overlays/tsienna20-RP6TzN4w.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg b/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg index 754828717..b08af34be 100644 --- a/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg +++ b/packages/sights/assets/overlays/tsienna20-Rw0Gtt7O.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg b/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg index 47b7a0a76..4b973d72d 100644 --- a/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg +++ b/packages/sights/assets/overlays/tsienna20-SebsoqJm.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg b/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg index 950d55430..e07171ca6 100644 --- a/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg +++ b/packages/sights/assets/overlays/tsienna20-TI4TVvT9.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg index 729dbafc3..5c3fcaaad 100644 --- a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg +++ b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg b/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg index 3fbd9c3bb..a92e6a82f 100644 --- a/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg +++ b/packages/sights/assets/overlays/tsienna20-U_FqYq-a.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg b/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg index 30358cfaf..9141e3296 100755 --- a/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg +++ b/packages/sights/assets/overlays/tsienna20-V2jVo2wV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg b/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg index f02dbfc7d..58c423abd 100644 --- a/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg +++ b/packages/sights/assets/overlays/tsienna20-YwrRNr9n.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg b/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg index 9e0cae380..58dc95886 100755 --- a/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg +++ b/packages/sights/assets/overlays/tsienna20-ZlRQXL-j.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-cI285Gon.svg b/packages/sights/assets/overlays/tsienna20-cI285Gon.svg index 1bf4ccd61..c66e8ffa2 100644 --- a/packages/sights/assets/overlays/tsienna20-cI285Gon.svg +++ b/packages/sights/assets/overlays/tsienna20-cI285Gon.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg b/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg index 7731ab8eb..51ba014d5 100644 --- a/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg +++ b/packages/sights/assets/overlays/tsienna20-g2uWI1l8.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg b/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg index 4cb356f51..b468f25f2 100644 --- a/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg +++ b/packages/sights/assets/overlays/tsienna20-gkvZE2c7.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg b/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg index 5c82b7a59..5c19983a1 100644 --- a/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg +++ b/packages/sights/assets/overlays/tsienna20-is1tpnqR.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg b/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg index 5a973ee48..03f693e8d 100644 --- a/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg +++ b/packages/sights/assets/overlays/tsienna20-jY3cR5vy.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg b/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg index b32a922c9..42082146d 100644 --- a/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg +++ b/packages/sights/assets/overlays/tsienna20-ouPvuX-j.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg b/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg index f42ded38e..26ff2d09c 100644 --- a/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg +++ b/packages/sights/assets/overlays/tsienna20-qA3aAUUq.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg index 2c31fe68e..87c39d89a 100644 --- a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg +++ b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg b/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg index e8a0b3f57..6e2701032 100644 --- a/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg +++ b/packages/sights/assets/overlays/tsienna20-uIHdpQ9y.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-uz29ILgw.svg b/packages/sights/assets/overlays/tsienna20-uz29ILgw.svg index 3e26cb608..29815fd86 100644 --- a/packages/sights/assets/overlays/tsienna20-uz29ILgw.svg +++ b/packages/sights/assets/overlays/tsienna20-uz29ILgw.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg b/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg index 0e76a0a23..4e7224530 100644 --- a/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg +++ b/packages/sights/assets/overlays/tsienna20-wlbzVAxz.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg b/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg index 1a9976f07..ea19f7595 100644 --- a/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg +++ b/packages/sights/assets/overlays/tsienna20-xtDcn3GS.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/fesc20-front-left.svg b/packages/sights/assets/part-selectors/fesc20-front-left.svg index ea68ad03c..dce7e2960 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/fesc20-front-right.svg b/packages/sights/assets/part-selectors/fesc20-front-right.svg index f15756ea1..6f1c7a1e2 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-left.svg b/packages/sights/assets/part-selectors/fesc20-rear-left.svg index 4681d6a26..40e392d30 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-right.svg b/packages/sights/assets/part-selectors/fesc20-rear-right.svg index 8c234bfcb..ec7d18532 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-left.svg b/packages/sights/assets/part-selectors/ff150-front-left.svg index e7c10991d..aaacef8ce 100644 --- a/packages/sights/assets/part-selectors/ff150-front-left.svg +++ b/packages/sights/assets/part-selectors/ff150-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-right.svg b/packages/sights/assets/part-selectors/ff150-front-right.svg index fc9909edf..183376869 100644 --- a/packages/sights/assets/part-selectors/ff150-front-right.svg +++ b/packages/sights/assets/part-selectors/ff150-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-left.svg b/packages/sights/assets/part-selectors/ff150-rear-left.svg index 4e151289e..94dd4c9d0 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-left.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-right.svg b/packages/sights/assets/part-selectors/ff150-rear-right.svg index 588bdef47..57ab1d1d7 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-right.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-left.svg b/packages/sights/assets/part-selectors/ffocus18-front-left.svg index 3f22519ed..012f52091 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-right.svg b/packages/sights/assets/part-selectors/ffocus18-front-right.svg index 2bdf364f3..b7a4afb4d 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg index af31b03d0..0ffa5bfae 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg index b8f7271a6..127f15d8b 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-left.svg b/packages/sights/assets/part-selectors/ftransit18-front-left.svg index fc99dc652..2ba67dcfa 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-right.svg b/packages/sights/assets/part-selectors/ftransit18-front-right.svg index 9ea42e871..b6c0c0d97 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg index c65a81281..a2391cc20 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg index 7ce5d3bd8..7ef9f349b 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/haccord-front-left.svg b/packages/sights/assets/part-selectors/haccord-front-left.svg index 55bb09770..219abda03 100644 --- a/packages/sights/assets/part-selectors/haccord-front-left.svg +++ b/packages/sights/assets/part-selectors/haccord-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-front-right.svg b/packages/sights/assets/part-selectors/haccord-front-right.svg index 6ce9a612a..9bc9807b6 100644 --- a/packages/sights/assets/part-selectors/haccord-front-right.svg +++ b/packages/sights/assets/part-selectors/haccord-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-left.svg b/packages/sights/assets/part-selectors/haccord-rear-left.svg index 220930962..49fb0b909 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-left.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-right.svg b/packages/sights/assets/part-selectors/haccord-rear-right.svg index 4863f3f77..389bcd3c9 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-right.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-left.svg b/packages/sights/assets/part-selectors/jgc21-front-left.svg index 81fb274ee..d81aa5c3e 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-right.svg b/packages/sights/assets/part-selectors/jgc21-front-right.svg index 26cc0c97e..08974bc6c 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-left.svg b/packages/sights/assets/part-selectors/jgc21-rear-left.svg index 10900d34b..d3c7cb00d 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-right.svg b/packages/sights/assets/part-selectors/jgc21-rear-right.svg index aeb2abffc..820aa7e69 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-front-left.svg b/packages/sights/assets/part-selectors/tsienna20-front-left.svg index e2ada474b..29504bc6c 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/tsienna20-front-right.svg b/packages/sights/assets/part-selectors/tsienna20-front-right.svg index 3f5706b63..038e51d24 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg index eff439dff..fd031a8be 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg index 5a624793c..e3a13d3bd 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + From 8f5fd12ed965fb8c6aeb3061d2d0c9035527ab8f Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Wed, 5 Jul 2023 15:19:21 +0300 Subject: [PATCH 14/27] fix enlarged overlays --- packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg | 2 +- packages/sights/assets/overlays/fesc20-j3H8Z415.svg | 2 +- packages/sights/assets/overlays/ff150-BmXfb-qD.svg | 2 +- packages/sights/assets/overlays/ff150-eOjyMInj.svg | 2 +- packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg | 2 +- packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg | 2 +- packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg | 2 +- packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg | 2 +- packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg | 2 +- packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg | 2 +- packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg | 2 +- packages/sights/assets/overlays/ffocus18-seOy3jwd.svg | 2 +- packages/sights/assets/overlays/ffocus18-ts3buSD1.svg | 2 +- packages/sights/assets/overlays/ftransit18-3fnjrISV.svg | 2 +- packages/sights/assets/overlays/ftransit18-TkXihCj4.svg | 2 +- packages/sights/assets/overlays/haccord-5LlCuIfL.svg | 2 +- packages/sights/assets/overlays/haccord-cXSAj2ez.svg | 2 +- packages/sights/assets/overlays/jgc21-F-PPd4qN.svg | 2 +- packages/sights/assets/overlays/jgc21-TRN9Des4.svg | 2 +- packages/sights/assets/overlays/tsienna20-TibS83Qr.svg | 2 +- packages/sights/assets/overlays/tsienna20-u57qDaN_.svg | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg index e2a1a4410..8a0c195d8 100644 --- a/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg +++ b/packages/sights/assets/overlays/fesc20-gg1Xyrpu.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg index 7f6542bf9..b1ed89a87 100644 --- a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg +++ b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg index e4a89daac..f0ef9c360 100644 --- a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg +++ b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-eOjyMInj.svg b/packages/sights/assets/overlays/ff150-eOjyMInj.svg index 0a77350c2..b713f73ab 100644 --- a/packages/sights/assets/overlays/ff150-eOjyMInj.svg +++ b/packages/sights/assets/overlays/ff150-eOjyMInj.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg index edf44d0cd..e659031c1 100644 --- a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg +++ b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg index dc221bb84..383ea5975 100644 --- a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg +++ b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg index dd3c735b1..d1a821dd8 100644 --- a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg +++ b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg index 0d210fcec..00cbe55d5 100644 --- a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg +++ b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg index a03a03d46..552fc570e 100644 --- a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg +++ b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg index 94caed547..689220f98 100644 --- a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg index 6a0bedc58..5a37e9b14 100644 --- a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg +++ b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg index 3abcd36d1..03264831f 100644 --- a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg +++ b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg index cfa005cad..1b1f58d60 100644 --- a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg +++ b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg index 1c26233d5..badc54992 100644 --- a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg +++ b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg index 525521e9c..22cc3a4fa 100644 --- a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg +++ b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg index ef343de18..28c31ee42 100644 --- a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg +++ b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg index e58861cf1..95bcd02a3 100644 --- a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg index 30c69a9c7..80877d6a9 100644 --- a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg +++ b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg index 4847de4ab..c7277a71a 100644 --- a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg +++ b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg index 5c3fcaaad..bf1ecd2f8 100644 --- a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg +++ b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg index 87c39d89a..bd178c36c 100644 --- a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg +++ b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 2421b4dd31b7a2a449a823bcdc10322462a6b1ac Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Mon, 24 Jul 2023 09:38:33 +0300 Subject: [PATCH 15/27] Fix part selector svgs --- packages/sights/assets/part-selectors/fesc20-front-left.svg | 2 +- packages/sights/assets/part-selectors/fesc20-front-right.svg | 2 +- packages/sights/assets/part-selectors/fesc20-rear-left.svg | 2 +- packages/sights/assets/part-selectors/fesc20-rear-right.svg | 2 +- packages/sights/assets/part-selectors/ff150-front-left.svg | 2 +- packages/sights/assets/part-selectors/ff150-front-right.svg | 2 +- packages/sights/assets/part-selectors/ff150-rear-left.svg | 2 +- packages/sights/assets/part-selectors/ff150-rear-right.svg | 2 +- packages/sights/assets/part-selectors/ffocus18-front-left.svg | 2 +- packages/sights/assets/part-selectors/ffocus18-front-right.svg | 2 +- packages/sights/assets/part-selectors/ffocus18-rear-left.svg | 2 +- packages/sights/assets/part-selectors/ffocus18-rear-right.svg | 2 +- packages/sights/assets/part-selectors/ftransit18-front-left.svg | 2 +- .../sights/assets/part-selectors/ftransit18-front-right.svg | 2 +- packages/sights/assets/part-selectors/ftransit18-rear-left.svg | 2 +- packages/sights/assets/part-selectors/ftransit18-rear-right.svg | 2 +- packages/sights/assets/part-selectors/haccord-front-left.svg | 2 +- packages/sights/assets/part-selectors/haccord-front-right.svg | 2 +- packages/sights/assets/part-selectors/haccord-rear-left.svg | 2 +- packages/sights/assets/part-selectors/haccord-rear-right.svg | 2 +- packages/sights/assets/part-selectors/jgc21-front-left.svg | 2 +- packages/sights/assets/part-selectors/jgc21-front-right.svg | 2 +- packages/sights/assets/part-selectors/jgc21-rear-left.svg | 2 +- packages/sights/assets/part-selectors/jgc21-rear-right.svg | 2 +- packages/sights/assets/part-selectors/tsienna20-front-left.svg | 2 +- packages/sights/assets/part-selectors/tsienna20-front-right.svg | 2 +- packages/sights/assets/part-selectors/tsienna20-rear-left.svg | 2 +- packages/sights/assets/part-selectors/tsienna20-rear-right.svg | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/sights/assets/part-selectors/fesc20-front-left.svg b/packages/sights/assets/part-selectors/fesc20-front-left.svg index dce7e2960..ea68ad03c 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-front-right.svg b/packages/sights/assets/part-selectors/fesc20-front-right.svg index 6f1c7a1e2..f15756ea1 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-left.svg b/packages/sights/assets/part-selectors/fesc20-rear-left.svg index 40e392d30..4681d6a26 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-right.svg b/packages/sights/assets/part-selectors/fesc20-rear-right.svg index ec7d18532..8c234bfcb 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-left.svg b/packages/sights/assets/part-selectors/ff150-front-left.svg index aaacef8ce..e7c10991d 100644 --- a/packages/sights/assets/part-selectors/ff150-front-left.svg +++ b/packages/sights/assets/part-selectors/ff150-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-right.svg b/packages/sights/assets/part-selectors/ff150-front-right.svg index 183376869..fc9909edf 100644 --- a/packages/sights/assets/part-selectors/ff150-front-right.svg +++ b/packages/sights/assets/part-selectors/ff150-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-left.svg b/packages/sights/assets/part-selectors/ff150-rear-left.svg index 94dd4c9d0..4e151289e 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-left.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-right.svg b/packages/sights/assets/part-selectors/ff150-rear-right.svg index 57ab1d1d7..588bdef47 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-right.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-left.svg b/packages/sights/assets/part-selectors/ffocus18-front-left.svg index 012f52091..3f22519ed 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-right.svg b/packages/sights/assets/part-selectors/ffocus18-front-right.svg index b7a4afb4d..2bdf364f3 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg index 0ffa5bfae..af31b03d0 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg index 127f15d8b..b8f7271a6 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-left.svg b/packages/sights/assets/part-selectors/ftransit18-front-left.svg index 2ba67dcfa..fc99dc652 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-right.svg b/packages/sights/assets/part-selectors/ftransit18-front-right.svg index b6c0c0d97..9ea42e871 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg index a2391cc20..c65a81281 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg index 7ef9f349b..7ce5d3bd8 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-front-left.svg b/packages/sights/assets/part-selectors/haccord-front-left.svg index 219abda03..55bb09770 100644 --- a/packages/sights/assets/part-selectors/haccord-front-left.svg +++ b/packages/sights/assets/part-selectors/haccord-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-front-right.svg b/packages/sights/assets/part-selectors/haccord-front-right.svg index 9bc9807b6..6ce9a612a 100644 --- a/packages/sights/assets/part-selectors/haccord-front-right.svg +++ b/packages/sights/assets/part-selectors/haccord-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-left.svg b/packages/sights/assets/part-selectors/haccord-rear-left.svg index 49fb0b909..220930962 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-left.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-right.svg b/packages/sights/assets/part-selectors/haccord-rear-right.svg index 389bcd3c9..4863f3f77 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-right.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-left.svg b/packages/sights/assets/part-selectors/jgc21-front-left.svg index d81aa5c3e..81fb274ee 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-right.svg b/packages/sights/assets/part-selectors/jgc21-front-right.svg index 08974bc6c..26cc0c97e 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-left.svg b/packages/sights/assets/part-selectors/jgc21-rear-left.svg index d3c7cb00d..10900d34b 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-right.svg b/packages/sights/assets/part-selectors/jgc21-rear-right.svg index 820aa7e69..aeb2abffc 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-front-left.svg b/packages/sights/assets/part-selectors/tsienna20-front-left.svg index 29504bc6c..e2ada474b 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-front-right.svg b/packages/sights/assets/part-selectors/tsienna20-front-right.svg index 038e51d24..3f5706b63 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-right.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg index fd031a8be..eff439dff 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg index e3a13d3bd..5a624793c 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg @@ -1 +1 @@ - + \ No newline at end of file From bdeffa56fde19c25ad0e1993938a04671bdfa892 Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Wed, 2 Aug 2023 17:10:57 +0300 Subject: [PATCH 16/27] [APP-2231] Fix visibility of fullscreen button for mobile (#8) --- packages/camera/src/components/Controls/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/camera/src/components/Controls/index.js b/packages/camera/src/components/Controls/index.js index e7c5f63bb..a4a3a549c 100644 --- a/packages/camera/src/components/Controls/index.js +++ b/packages/camera/src/components/Controls/index.js @@ -1,7 +1,6 @@ import React, { createElement, useCallback, useMemo, useEffect } from 'react'; import PropTypes from 'prop-types'; import { Platform, StyleSheet, TouchableOpacity, useWindowDimensions, View } from 'react-native'; -import { isIOS } from 'react-device-detect'; import AddDamageButton from './AddDamageButton'; import CloseEarlyButton from './CloseEarlyButton'; @@ -362,10 +361,9 @@ Controls.getFullScreenButtonProps = (isFullscreen) => ({ shadowColor: '#181829', shadowOpacity: 0.5, shadowOffset: { width: 0, height: 0 }, - visibility: isIOS ? 'hidden' : 'visible', ...Platform.select({ - native: { shadowRadius: 2 }, - default: { shadowRadius: '2px 2px' }, + native: { shadowRadius: 2, opacity: 0 }, + default: { shadowRadius: '2px 2px', visibility: 'visible' }, }), }, }); From 31be45dfa6f50b8d99adbd2d157545c680174110 Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Thu, 3 Aug 2023 15:24:55 +0300 Subject: [PATCH 17/27] Fix enlarged SVGs and damage part selector (#9) --- .../components/AddDamageModal/PartSelector.js | 36 +++++++++++++++++-- .../src/components/Overlay/index.native.js | 16 ++++++++- .../assets/overlays/fesc20-gg1Xyrpu.svg | 2 +- .../assets/overlays/fesc20-j3H8Z415.svg | 2 +- .../sights/assets/overlays/ff150-BmXfb-qD.svg | 2 +- .../sights/assets/overlays/ff150-eOjyMInj.svg | 2 +- .../assets/overlays/ffocus18-8WjvbtMD.svg | 2 +- .../assets/overlays/ffocus18-FdsQDaTW.svg | 2 +- .../assets/overlays/ffocus18-KkeGvT-F.svg | 2 +- .../assets/overlays/ffocus18-P2jFq1Ea.svg | 2 +- .../assets/overlays/ffocus18-U3Bcfc2Q.svg | 2 +- .../assets/overlays/ffocus18-cXSAj2ez.svg | 2 +- .../assets/overlays/ffocus18-lRDlWiwR.svg | 2 +- .../assets/overlays/ffocus18-seOy3jwd.svg | 2 +- .../assets/overlays/ffocus18-ts3buSD1.svg | 2 +- .../assets/overlays/ftransit18-3fnjrISV.svg | 2 +- .../assets/overlays/ftransit18-TkXihCj4.svg | 2 +- .../assets/overlays/haccord-5LlCuIfL.svg | 2 +- .../assets/overlays/haccord-cXSAj2ez.svg | 2 +- .../sights/assets/overlays/jgc21-F-PPd4qN.svg | 2 +- .../sights/assets/overlays/jgc21-TRN9Des4.svg | 2 +- .../assets/overlays/tsienna20-TibS83Qr.svg | 2 +- .../assets/overlays/tsienna20-u57qDaN_.svg | 2 +- .../part-selectors/fesc20-front-left.svg | 2 +- .../part-selectors/fesc20-front-right.svg | 2 +- .../part-selectors/fesc20-rear-left.svg | 2 +- .../part-selectors/fesc20-rear-right.svg | 2 +- .../part-selectors/ff150-front-left.svg | 2 +- .../part-selectors/ff150-front-right.svg | 2 +- .../assets/part-selectors/ff150-rear-left.svg | 2 +- .../part-selectors/ff150-rear-right.svg | 2 +- .../part-selectors/ffocus18-front-left.svg | 2 +- .../part-selectors/ffocus18-front-right.svg | 2 +- .../part-selectors/ffocus18-rear-left.svg | 2 +- .../part-selectors/ffocus18-rear-right.svg | 2 +- .../part-selectors/ftransit18-front-left.svg | 2 +- .../part-selectors/ftransit18-front-right.svg | 2 +- .../part-selectors/ftransit18-rear-left.svg | 2 +- .../part-selectors/ftransit18-rear-right.svg | 2 +- .../part-selectors/haccord-front-left.svg | 2 +- .../part-selectors/haccord-front-right.svg | 2 +- .../part-selectors/haccord-rear-left.svg | 2 +- .../part-selectors/haccord-rear-right.svg | 2 +- .../part-selectors/jgc21-front-left.svg | 2 +- .../part-selectors/jgc21-front-right.svg | 2 +- .../assets/part-selectors/jgc21-rear-left.svg | 2 +- .../part-selectors/jgc21-rear-right.svg | 2 +- .../part-selectors/tsienna20-front-left.svg | 2 +- .../part-selectors/tsienna20-front-right.svg | 2 +- .../part-selectors/tsienna20-rear-left.svg | 2 +- .../part-selectors/tsienna20-rear-right.svg | 2 +- 51 files changed, 98 insertions(+), 52 deletions(-) diff --git a/packages/camera/src/components/AddDamageModal/PartSelector.js b/packages/camera/src/components/AddDamageModal/PartSelector.js index 03340a528..5126bd41b 100644 --- a/packages/camera/src/components/AddDamageModal/PartSelector.js +++ b/packages/camera/src/components/AddDamageModal/PartSelector.js @@ -22,7 +22,39 @@ const styles = StyleSheet.create({ export default function PartSelector({ orientation, togglePart, isPartSelected, vehicleType }) { const { height } = useWindowDimensions(); - const wireframeXML = useWireframe({ orientation, vehicleType }); + let wireframeXML = useWireframe({ orientation, vehicleType }); + if (Platform.OS !== 'web') { + const svgStyles = wireframeXML.substring(wireframeXML.indexOf('')); + const elements = svgStyles.split('.'); + const styleDict = {}; + let classNames = []; + elements.forEach((element) => { + if (element.includes('{')) { + const style = element.substring(element.indexOf('{') + 1, element.indexOf('}')); + classNames.push(element.substring(0, element.indexOf('{')).replace(/[,.]/g, '')); + classNames.forEach((name) => { + const prev = styleDict[name] ? `${styleDict[name]};` : ''; + styleDict[name] = `${prev}${style};`; + }); + classNames = []; + } else { + classNames.push(element.replace(/[,.]/g, '')); + } + }); + + Object.keys(styleDict).forEach((key) => { + const newValue = styleDict[key].split(';').filter((value) => value.length !== 0).map((element) => { + const separatorIndex = element.indexOf(':'); + const value = element.substring(separatorIndex + 1, element.length); + const name = element.substring(0, separatorIndex); + return `${name} = "${value}"`; + }).reduce( + (accumulator, currentValue) => `${accumulator} ${currentValue}`, + '', + ); + wireframeXML = wireframeXML.replaceAll(`${key}"`, `${key}" ${newValue}`); + }); + } const doc = useXMLParser(wireframeXML); const containerHeight = useMemo( @@ -36,7 +68,7 @@ export default function PartSelector({ orientation, togglePart, isPartSelected, if (Platform.OS === 'web') { svg = doc.children[0]; } else { - svg = doc.childNodes[1]; + svg = doc.childNodes[1] ?? doc.childNodes[0]; } if (svg.tagName !== 'svg') { throw new Error('Invalid part selector SVG format: expected tag as the first children of XML document'); diff --git a/packages/camera/src/components/Overlay/index.native.js b/packages/camera/src/components/Overlay/index.native.js index 232a276e0..1ef960ba6 100644 --- a/packages/camera/src/components/Overlay/index.native.js +++ b/packages/camera/src/components/Overlay/index.native.js @@ -3,9 +3,23 @@ import PropTypes from 'prop-types'; import { SvgCss } from 'react-native-svg'; export default function Overlay({ label, svg, ...passThoughProps }) { + let newSVG = svg; + if (!svg.includes('viewBox')) { + const widthParam = 'width="'; + const widthStart = svg.indexOf(widthParam) + widthParam.length; + const widthEnd = widthStart + svg.substring(widthStart).indexOf('"'); + const width = svg.substring(widthStart, widthEnd); + + const heighParam = 'height="'; + const heightStart = svg.indexOf(heighParam) + heighParam.length; + const heightEnd = heightStart + svg.substring(heightStart).indexOf('"'); + const height = svg.substring(heightStart, heightEnd); + + newSVG = svg.replace(svg.substring(svg.indexOf(widthParam), heightEnd + 1), `x="0" y="0" viewBox="0 0 ${width} ${height}"`); + } return ( \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg index b1ed89a87..7f6542bf9 100644 --- a/packages/sights/assets/overlays/fesc20-j3H8Z415.svg +++ b/packages/sights/assets/overlays/fesc20-j3H8Z415.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg index f0ef9c360..e4a89daac 100644 --- a/packages/sights/assets/overlays/ff150-BmXfb-qD.svg +++ b/packages/sights/assets/overlays/ff150-BmXfb-qD.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ff150-eOjyMInj.svg b/packages/sights/assets/overlays/ff150-eOjyMInj.svg index b713f73ab..0a77350c2 100644 --- a/packages/sights/assets/overlays/ff150-eOjyMInj.svg +++ b/packages/sights/assets/overlays/ff150-eOjyMInj.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg index e659031c1..edf44d0cd 100644 --- a/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg +++ b/packages/sights/assets/overlays/ffocus18-8WjvbtMD.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg index 383ea5975..dc221bb84 100644 --- a/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg +++ b/packages/sights/assets/overlays/ffocus18-FdsQDaTW.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg index d1a821dd8..dd3c735b1 100644 --- a/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg +++ b/packages/sights/assets/overlays/ffocus18-KkeGvT-F.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg index 00cbe55d5..0d210fcec 100644 --- a/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg +++ b/packages/sights/assets/overlays/ffocus18-P2jFq1Ea.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg index 552fc570e..a03a03d46 100644 --- a/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg +++ b/packages/sights/assets/overlays/ffocus18-U3Bcfc2Q.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg index 689220f98..94caed547 100644 --- a/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/ffocus18-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg index 5a37e9b14..6a0bedc58 100644 --- a/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg +++ b/packages/sights/assets/overlays/ffocus18-lRDlWiwR.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg index 03264831f..3abcd36d1 100644 --- a/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg +++ b/packages/sights/assets/overlays/ffocus18-seOy3jwd.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg index 1b1f58d60..cfa005cad 100644 --- a/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg +++ b/packages/sights/assets/overlays/ffocus18-ts3buSD1.svg @@ -1 +1 @@ - + diff --git a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg index badc54992..1c26233d5 100644 --- a/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg +++ b/packages/sights/assets/overlays/ftransit18-3fnjrISV.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg index 22cc3a4fa..525521e9c 100644 --- a/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg +++ b/packages/sights/assets/overlays/ftransit18-TkXihCj4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg index 28c31ee42..ef343de18 100644 --- a/packages/sights/assets/overlays/haccord-5LlCuIfL.svg +++ b/packages/sights/assets/overlays/haccord-5LlCuIfL.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg index 95bcd02a3..e58861cf1 100644 --- a/packages/sights/assets/overlays/haccord-cXSAj2ez.svg +++ b/packages/sights/assets/overlays/haccord-cXSAj2ez.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg index 80877d6a9..30c69a9c7 100644 --- a/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg +++ b/packages/sights/assets/overlays/jgc21-F-PPd4qN.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg index c7277a71a..4847de4ab 100644 --- a/packages/sights/assets/overlays/jgc21-TRN9Des4.svg +++ b/packages/sights/assets/overlays/jgc21-TRN9Des4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg index bf1ecd2f8..5c3fcaaad 100644 --- a/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg +++ b/packages/sights/assets/overlays/tsienna20-TibS83Qr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg index bd178c36c..87c39d89a 100644 --- a/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg +++ b/packages/sights/assets/overlays/tsienna20-u57qDaN_.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-front-left.svg b/packages/sights/assets/part-selectors/fesc20-front-left.svg index ea68ad03c..dce7e2960 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/fesc20-front-right.svg b/packages/sights/assets/part-selectors/fesc20-front-right.svg index f15756ea1..6f1c7a1e2 100644 --- a/packages/sights/assets/part-selectors/fesc20-front-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-left.svg b/packages/sights/assets/part-selectors/fesc20-rear-left.svg index 4681d6a26..40e392d30 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-left.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/fesc20-rear-right.svg b/packages/sights/assets/part-selectors/fesc20-rear-right.svg index 8c234bfcb..ec7d18532 100644 --- a/packages/sights/assets/part-selectors/fesc20-rear-right.svg +++ b/packages/sights/assets/part-selectors/fesc20-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-left.svg b/packages/sights/assets/part-selectors/ff150-front-left.svg index e7c10991d..aaacef8ce 100644 --- a/packages/sights/assets/part-selectors/ff150-front-left.svg +++ b/packages/sights/assets/part-selectors/ff150-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-front-right.svg b/packages/sights/assets/part-selectors/ff150-front-right.svg index fc9909edf..183376869 100644 --- a/packages/sights/assets/part-selectors/ff150-front-right.svg +++ b/packages/sights/assets/part-selectors/ff150-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-left.svg b/packages/sights/assets/part-selectors/ff150-rear-left.svg index 4e151289e..94dd4c9d0 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-left.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ff150-rear-right.svg b/packages/sights/assets/part-selectors/ff150-rear-right.svg index 588bdef47..57ab1d1d7 100644 --- a/packages/sights/assets/part-selectors/ff150-rear-right.svg +++ b/packages/sights/assets/part-selectors/ff150-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-left.svg b/packages/sights/assets/part-selectors/ffocus18-front-left.svg index 3f22519ed..012f52091 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-front-right.svg b/packages/sights/assets/part-selectors/ffocus18-front-right.svg index 2bdf364f3..b7a4afb4d 100644 --- a/packages/sights/assets/part-selectors/ffocus18-front-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg index af31b03d0..0ffa5bfae 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg index b8f7271a6..127f15d8b 100644 --- a/packages/sights/assets/part-selectors/ffocus18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ffocus18-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-left.svg b/packages/sights/assets/part-selectors/ftransit18-front-left.svg index fc99dc652..2ba67dcfa 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-front-right.svg b/packages/sights/assets/part-selectors/ftransit18-front-right.svg index 9ea42e871..b6c0c0d97 100644 --- a/packages/sights/assets/part-selectors/ftransit18-front-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg index c65a81281..a2391cc20 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-left.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg index 7ce5d3bd8..7ef9f349b 100644 --- a/packages/sights/assets/part-selectors/ftransit18-rear-right.svg +++ b/packages/sights/assets/part-selectors/ftransit18-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/haccord-front-left.svg b/packages/sights/assets/part-selectors/haccord-front-left.svg index 55bb09770..219abda03 100644 --- a/packages/sights/assets/part-selectors/haccord-front-left.svg +++ b/packages/sights/assets/part-selectors/haccord-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-front-right.svg b/packages/sights/assets/part-selectors/haccord-front-right.svg index 6ce9a612a..9bc9807b6 100644 --- a/packages/sights/assets/part-selectors/haccord-front-right.svg +++ b/packages/sights/assets/part-selectors/haccord-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-left.svg b/packages/sights/assets/part-selectors/haccord-rear-left.svg index 220930962..49fb0b909 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-left.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/haccord-rear-right.svg b/packages/sights/assets/part-selectors/haccord-rear-right.svg index 4863f3f77..389bcd3c9 100644 --- a/packages/sights/assets/part-selectors/haccord-rear-right.svg +++ b/packages/sights/assets/part-selectors/haccord-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-left.svg b/packages/sights/assets/part-selectors/jgc21-front-left.svg index 81fb274ee..d81aa5c3e 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-front-right.svg b/packages/sights/assets/part-selectors/jgc21-front-right.svg index 26cc0c97e..08974bc6c 100644 --- a/packages/sights/assets/part-selectors/jgc21-front-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-left.svg b/packages/sights/assets/part-selectors/jgc21-rear-left.svg index 10900d34b..d3c7cb00d 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-left.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/jgc21-rear-right.svg b/packages/sights/assets/part-selectors/jgc21-rear-right.svg index aeb2abffc..820aa7e69 100644 --- a/packages/sights/assets/part-selectors/jgc21-rear-right.svg +++ b/packages/sights/assets/part-selectors/jgc21-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/sights/assets/part-selectors/tsienna20-front-left.svg b/packages/sights/assets/part-selectors/tsienna20-front-left.svg index e2ada474b..29504bc6c 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/tsienna20-front-right.svg b/packages/sights/assets/part-selectors/tsienna20-front-right.svg index 3f5706b63..038e51d24 100644 --- a/packages/sights/assets/part-selectors/tsienna20-front-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-front-right.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg index eff439dff..fd031a8be 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-left.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg index 5a624793c..e3a13d3bd 100644 --- a/packages/sights/assets/part-selectors/tsienna20-rear-right.svg +++ b/packages/sights/assets/part-selectors/tsienna20-rear-right.svg @@ -1 +1 @@ - \ No newline at end of file + From 9c630c0eee51fd5021143993eb45af36760dbe7e Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Thu, 10 Aug 2023 12:36:01 +0300 Subject: [PATCH 18/27] Fix native issues in new functionality (#11) --- .../components/AddDamageModal/PartSelector.js | 6 +- .../CarView360/CarView360Handles.js | 5 +- .../hooks/useCustomSVGAttributes.js | 5 +- .../src/components/CarView360/index.js | 47 ++++- .../index.js} | 4 +- .../svgElementMapper/index.native.js | 167 ++++++++++++++++++ .../DamageReport/DamageManipulator.js | 17 +- .../components/DamageReport/DamageReport.js | 17 +- .../DamageReport/Overview/DamageCounts.js | 7 +- .../components/DamageReport/Overview/index.js | 14 +- .../DamageReport/UpdateDamageModal.js | 28 ++- .../DamageReport/UpdateDamagePopUp/index.js | 34 +++- .../DamageReport/hooks/usePdfReport.js | 3 +- .../src/components/Gallery/index.js | 8 +- yarn.lock | 22 +-- 15 files changed, 332 insertions(+), 52 deletions(-) rename packages/inspection-report/src/components/CarView360/{SVGElementMapper.js => svgElementMapper/index.js} (95%) create mode 100644 packages/inspection-report/src/components/CarView360/svgElementMapper/index.native.js diff --git a/packages/camera/src/components/AddDamageModal/PartSelector.js b/packages/camera/src/components/AddDamageModal/PartSelector.js index 15c0c054b..fa68ca7a0 100644 --- a/packages/camera/src/components/AddDamageModal/PartSelector.js +++ b/packages/camera/src/components/AddDamageModal/PartSelector.js @@ -1,7 +1,7 @@ import { CarView360 } from '@monkvision/inspection-report'; import PropTypes from 'prop-types'; import React, { useCallback, useMemo } from 'react'; -import { useWindowDimensions } from 'react-native'; +import { useWindowDimensions, Platform } from 'react-native'; const PART_SELECTOR_CONTAINER_WIDTH = 420; const PART_SELECTOR_CONTAINER_HEIGHT_DIMENSION = [ @@ -10,9 +10,9 @@ const PART_SELECTOR_CONTAINER_HEIGHT_DIMENSION = [ { screenHeightSpan: [310, 99999], partSelectorHeight: 235 }, ]; -const selectedPartAttributes = { +const selectedPartAttributes = (Platform.OS === 'web') ? { style: { fill: '#ADE0FFB3' }, -}; +} : { fill: '#ADE0FFB3' }; export default function PartSelector({ orientation, togglePart, isPartSelected, vehicleType }) { const { height } = useWindowDimensions(); diff --git a/packages/inspection-report/src/components/CarView360/CarView360Handles.js b/packages/inspection-report/src/components/CarView360/CarView360Handles.js index 95a6fca7f..261904e41 100644 --- a/packages/inspection-report/src/components/CarView360/CarView360Handles.js +++ b/packages/inspection-report/src/components/CarView360/CarView360Handles.js @@ -35,7 +35,10 @@ const styles = StyleSheet.create({ cursor: 'pointer', }, selectedDot: { - transform: { scale: 1.5 }, + ...Platform.select({ + web: { transform: { scale: 1.5 } }, + native: { transform: [{ scale: 1.5 }] }, + }), backgroundColor: '#FFFFFF', }, }); diff --git a/packages/inspection-report/src/components/CarView360/hooks/useCustomSVGAttributes.js b/packages/inspection-report/src/components/CarView360/hooks/useCustomSVGAttributes.js index 069605493..af684e298 100644 --- a/packages/inspection-report/src/components/CarView360/hooks/useCustomSVGAttributes.js +++ b/packages/inspection-report/src/components/CarView360/hooks/useCustomSVGAttributes.js @@ -1,4 +1,5 @@ import { useMemo } from 'react'; +import { Platform } from 'react-native'; import { CarParts } from '../../../resources'; import { getPillDamage, isPricingPill } from './common'; @@ -53,7 +54,7 @@ function getCustomPillChildAttributes({ damages, groupId, elementClass, onPressP const onClick = () => onPressPill(part); return { - pointerEvents: 'all', + pointerEvents: Platform.OS === 'web' ? 'all' : 'box-only', style: styles.pillChild, onClick, }; @@ -107,7 +108,7 @@ export default function useCustomSVGAttributes({ const onClick = () => onPressPart(part); return { - pointerEvents: 'all', + pointerEvents: Platform.OS === 'web' ? 'all' : 'box-only', onClick, ...partAttributes, }; diff --git a/packages/inspection-report/src/components/CarView360/index.js b/packages/inspection-report/src/components/CarView360/index.js index 78cad12d5..60ad5810c 100644 --- a/packages/inspection-report/src/components/CarView360/index.js +++ b/packages/inspection-report/src/components/CarView360/index.js @@ -1,11 +1,11 @@ import PropTypes from 'prop-types'; import React, { useMemo } from 'react'; -import { StyleSheet, View } from 'react-native'; +import { StyleSheet, View, Platform } from 'react-native'; import { CarOrientation, RepairOperation, VehicleType } from '../../resources'; import { useOrientation, ORIENTATION_MODE } from '../../hooks'; import { useCarView360Wireframe, useXMLParser } from './hooks'; -import SVGElementMapper from './SVGElementMapper'; +import SVGElementMapper from './svgElementMapper'; const styles = StyleSheet.create({ container: { @@ -26,13 +26,50 @@ export default function CarView360({ onPressPart, onPressPill, }) { - const wireframeXML = useCarView360Wireframe({ orientation, vehicleType }); + let wireframeXML = useCarView360Wireframe({ orientation, vehicleType }); + if (Platform.OS !== 'web') { + const svgStyles = wireframeXML.substring(wireframeXML.indexOf('')); + const elements = svgStyles.split('.'); + const styleDict = {}; + let classNames = []; + elements.forEach((element) => { + if (element.includes('{')) { + const style = element.substring(element.indexOf('{') + 1, element.indexOf('}')); + classNames.push(element.substring(0, element.indexOf('{')).replace(/[,.]/g, '')); + classNames.forEach((name) => { + const prev = styleDict[name] ? `${styleDict[name]};` : ''; + styleDict[name] = `${prev}${style};`; + }); + classNames = []; + } else { + classNames.push(element.replace(/[,.]/g, '')); + } + }); + + Object.keys(styleDict).forEach((key) => { + const newValue = styleDict[key].split(';').filter((value) => value.length !== 0).map((element) => { + const separatorIndex = element.indexOf(':'); + const value = element.substring(separatorIndex + 1, element.length); + const name = element.substring(0, separatorIndex); + return `${name} = "${value}"`; + }).reduce( + (accumulator, currentValue) => `${accumulator} ${currentValue}`, + '', + ); + wireframeXML = wireframeXML.replaceAll(`class="${key}`, `${newValue} class="${key}`); + }); + } const windowOrientation = useOrientation(); const doc = useXMLParser(wireframeXML); const svgElement = useMemo(() => { - const svg = doc.children[0]; + let svg; + if (Platform.OS === 'web') { + svg = doc.children[0]; + } else { + svg = doc.childNodes[1] ?? doc.childNodes[0]; + } if (svg.tagName !== 'svg') { - throw new Error('Invalid Part View 360 SVG: expected tag as the first children of XML document.'); + throw new Error('Invalid part selector SVG format: expected tag as the first children of XML document'); } return svg; }, [doc]); diff --git a/packages/inspection-report/src/components/CarView360/SVGElementMapper.js b/packages/inspection-report/src/components/CarView360/svgElementMapper/index.js similarity index 95% rename from packages/inspection-report/src/components/CarView360/SVGElementMapper.js rename to packages/inspection-report/src/components/CarView360/svgElementMapper/index.js index 372db4fc0..b375b96d7 100644 --- a/packages/inspection-report/src/components/CarView360/SVGElementMapper.js +++ b/packages/inspection-report/src/components/CarView360/svgElementMapper/index.js @@ -1,9 +1,9 @@ /* eslint-disable react/no-array-index-key */ import PropTypes from 'prop-types'; import React, { useMemo } from 'react'; -import { CommonPropTypes } from '../../resources'; +import { CommonPropTypes } from '../../../resources'; -import { useCustomSVGAttributes, useInnerHTML, useJSXSpecialAttributes } from './hooks'; +import { useCustomSVGAttributes, useInnerHTML, useJSXSpecialAttributes } from '../hooks'; export default function SVGElementMapper({ element, diff --git a/packages/inspection-report/src/components/CarView360/svgElementMapper/index.native.js b/packages/inspection-report/src/components/CarView360/svgElementMapper/index.native.js new file mode 100644 index 000000000..9934b3d2f --- /dev/null +++ b/packages/inspection-report/src/components/CarView360/svgElementMapper/index.native.js @@ -0,0 +1,167 @@ +/* eslint-disable react/no-array-index-key */ +import React, { useMemo } from 'react'; +import PropTypes from 'prop-types'; +import Svg, { Path, G, Circle, Text } from 'react-native-svg'; + +import { CommonPropTypes } from '../../../resources'; +import CAR_PARTS from '../../../resources/carParts'; +import { useCustomSVGAttributes, useInnerHTML } from '../hooks'; +import { getPillDamage } from '../hooks/common'; + +const jsxSpecialAttributes = { + class: 'className', +}; + +export default function SVGElementMapper({ + element, + damages, + groupId, + getPartAttributes, + onPressPart, + onPressPill, +}) { + function getAttribute(attributeElement, name) { + for (let i = 0; i < attributeElement.attributes.length; i += 1) { + if (attributeElement.attributes[i].name === name) { + return attributeElement.attributes[i].nodeValue; + } + } + return undefined; + } + const names = []; + for (let i = 0; i < element.attributes.length; i += 1) { + names.push(element.attributes[i].name); + } + + const attributes = useMemo(() => names.reduce((prev, attr) => ({ + ...prev, + [jsxSpecialAttributes[attr] ?? attr]: getAttribute(element, attr), + }), {}), [element]); + + const elementClass = getAttribute(element, 'class'); + const elementId = getAttribute(element, 'id'); + let partKey = null; + if (groupId && CAR_PARTS.includes(groupId)) { + partKey = groupId; + } + if (elementClass && elementClass.includes('selectable') && CAR_PARTS.includes(elementId)) { + partKey = elementId; + } + + const customAttributes = useCustomSVGAttributes({ + element, + groupId, + damages, + getPartAttributes, + onPressPart, + onPressPill, + }); + const innerHTML = useInnerHTML({ element, damages, groupId }); + const { part } = getPillDamage({ damages, pillId: groupId }); + const isPill = elementClass?.includes('damage-pill'); + + const onPress = () => { + if (isPill) { + onPressPill(part); + } else { + onPressPart(partKey); + } + }; + const elementChildren = []; + if (element.childNodes) { + for (let i = 0; i < element.childNodes.length; i += 1) { + elementChildren.push(element.childNodes[i]); + } + } + const children = useMemo(() => [...elementChildren], [element]); + const passThroughGroupId = useMemo( + () => { + if (element.tagName === 'g') { + return elementId; + } + return null; + }, + [element], + ); + + if (element.tagName === 'svg') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } if (element.tagName === 'path') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } if (element.tagName === 'g') { + return ( + + {children.map((child, id) => ( + + ))} + + + ); + } if (element.tagName === 'circle') { + return ( + + ); + } if (element.tagName === 'text') { + return ( + + {innerHTML} + + ); + } + return null; +} + +SVGElementMapper.propTypes = { + damages: PropTypes.arrayOf(CommonPropTypes.damage), + element: PropTypes.any.isRequired, + getPartAttributes: PropTypes.func, + groupId: PropTypes.string, + onPressPart: PropTypes.func, + onPressPill: PropTypes.func, +}; + +SVGElementMapper.defaultProps = { + damages: [], + getPartAttributes: () => {}, + groupId: null, + onPressPart: () => {}, + onPressPill: () => {}, +}; diff --git a/packages/inspection-report/src/components/DamageReport/DamageManipulator.js b/packages/inspection-report/src/components/DamageReport/DamageManipulator.js index 156ede748..f6fcded03 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageManipulator.js +++ b/packages/inspection-report/src/components/DamageReport/DamageManipulator.js @@ -3,7 +3,7 @@ import Slider from '@react-native-community/slider'; import PropTypes from 'prop-types'; import React, { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { StyleSheet, Text, TouchableOpacity, View, Platform } from 'react-native'; import { IconSeverity, SeveritiesWithIcon } from '../../assets'; import { CommonPropTypes, DamageMode, DisplayMode, Severity, RepairOperation } from '../../resources'; import { TextButton, SwitchButton } from '../common'; @@ -223,7 +223,10 @@ export default function DamageManipulator({ {isEditable ? ( ) : ( - - {editedDamage?.pricing ?? 0} - € - + + + {editedDamage?.pricing ?? 0} + € + + )} ) diff --git a/packages/inspection-report/src/components/DamageReport/DamageReport.js b/packages/inspection-report/src/components/DamageReport/DamageReport.js index 6ececabf3..cf9141fe5 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageReport.js +++ b/packages/inspection-report/src/components/DamageReport/DamageReport.js @@ -1,6 +1,6 @@ import { Loader } from '@monkvision/ui'; import PropTypes from 'prop-types'; -import React, { useMemo, useState } from 'react'; +import React, { useMemo, useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; @@ -104,6 +104,7 @@ export default function DamageReport({ generatePdf, pdfOptions, onStartNewInspection, + onPdfPressed, }) { const { t } = useTranslation(); const [currentTab, setCurrentTab] = useState(Tabs.OVERVIEW); @@ -141,6 +142,7 @@ export default function DamageReport({ }); const { + reportUrl, pdfStatus, requestPdf, handleDownload, @@ -152,6 +154,11 @@ export default function DamageReport({ clientName: pdfOptions?.clientName, }); + const handlePDFDownload = useCallback(() => { + handleDownload(); + onPdfPressed(reportUrl); + }); + const { confirmModal, handleHideConfirmModal, @@ -181,7 +188,7 @@ export default function DamageReport({ {t('damageReport.title')} )} @@ -254,7 +261,7 @@ export default function DamageReport({ part={editedDamagePart} damage={editedDamage} damageMode={damageMode} - imageCount={editedDamageImages.length} + imageCount={(editedDamageImages ?? []).length} onDismiss={handlePopUpDismiss} onShowGallery={handleShowGallery} onConfirm={handleSaveDamage} @@ -290,6 +297,7 @@ DamageReport.propTypes = { damageMode: CommonPropTypes.damageMode, generatePdf: PropTypes.bool, inspectionId: PropTypes.string.isRequired, + onPdfPressed: PropTypes.func, onStartNewInspection: PropTypes.func, pdfOptions: PropTypes.shape({ clientName: PropTypes.string.isRequired, @@ -302,6 +310,7 @@ DamageReport.defaultProps = { damageMode: DamageMode.ALL, generatePdf: false, onStartNewInspection: () => {}, + onPdfPressed: () => {}, pdfOptions: undefined, vehicleType: VehicleType.CUV, }; diff --git a/packages/inspection-report/src/components/DamageReport/Overview/DamageCounts.js b/packages/inspection-report/src/components/DamageReport/Overview/DamageCounts.js index ce5aa5b77..5c7c7fe9f 100644 --- a/packages/inspection-report/src/components/DamageReport/Overview/DamageCounts.js +++ b/packages/inspection-report/src/components/DamageReport/Overview/DamageCounts.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { StyleSheet, Text, View } from 'react-native'; +import { StyleSheet, Text, View, Platform } from 'react-native'; import { IconSeverityNone, SeveritiesWithIcon } from '../../../assets'; import { CommonPropTypes, DamageMode } from '../../../resources'; @@ -31,7 +31,10 @@ const styles = StyleSheet.create({ paddingLeft: 10, }, severityCount: { - fontWeight: 'medium', + ...Platform.select({ + web: { fontWeight: 'medium' }, + native: { fontWeight: 'normal' }, + }), fontSize: 12, color: '#FFFFFF', }, diff --git a/packages/inspection-report/src/components/DamageReport/Overview/index.js b/packages/inspection-report/src/components/DamageReport/Overview/index.js index fd77e6edd..f05d357e6 100644 --- a/packages/inspection-report/src/components/DamageReport/Overview/index.js +++ b/packages/inspection-report/src/components/DamageReport/Overview/index.js @@ -25,6 +25,11 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', }, + overviewViewContainer: { + paddingVertical: 20, + alignItems: 'center', + justifyContent: 'space-evenly', + }, buttonsContainer: { marginTop: 20, alignSelf: 'stretch', @@ -67,7 +72,7 @@ export default function Overview({ pdfHandles: { pdfStatus, handleDownload }, onStartNewInspection, }) { - const { width } = useWindowDimensions(); + const { width, height } = useWindowDimensions(); const { orientation, rotateLeft, @@ -101,7 +106,12 @@ export default function Overview({ - + ( // eslint-disable-next-line react/no-array-index-key - + { setViewMode(isToggled ? DisplayMode.FULL : DisplayMode.MINIMAL); }, []); const scrollIn = useCallback(() => { - const toValue = viewMode === DisplayMode.FULL ? topLimitY : bottomLimitY / 1.8; + const toValue = viewMode === DisplayMode.FULL ? topLimitY : bottomLimitY / (Platform.OS === 'web' ? 1.8 : 3.5); Animated.timing(pan, { toValue: { x: 0, y: toValue }, duration: 200, @@ -160,7 +164,9 @@ export default function UpdateDamagePopUp({ pan.setValue({ x: 0, y: bottomLimitY }); } else { Animated.event( - [null, { moveX: pan.x, moveY: pan.y }], + [{ moveX: pan.x, moveY: pan.y }, { nativeEvent: { + contentOffset: { y: pan.y, x: pan.x }, + } }], { useNativeDriver: Platform.OS !== 'web' }, )(event, gestureStat); } @@ -172,7 +178,7 @@ export default function UpdateDamagePopUp({ ).current; const topOffset = useMemo( - () => (viewMode === DisplayMode.FULL ? topLimitY : bottomLimitY / 1.8), + () => (viewMode === DisplayMode.FULL ? topLimitY : bottomLimitY / (Platform.OS === 'web' ? 1.8 : 3.5)), [viewMode, bottomLimitY], ); @@ -194,10 +200,20 @@ export default function UpdateDamagePopUp({ - + diff --git a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js index 520cca0cf..f801665ec 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js @@ -96,9 +96,10 @@ export default function usePdfReport({ download(reportUrl, inspectionId).catch((err) => { console.error('Error while downloading the PDF :', err); }); - }, [reportUrl, inspectionId]); + }, [pdfStatus, reportUrl, inspectionId]); return { + reportUrl, pdfStatus, requestPdf, handleDownload, diff --git a/packages/inspection-report/src/components/Gallery/index.js b/packages/inspection-report/src/components/Gallery/index.js index a2b329872..bb0bc383c 100644 --- a/packages/inspection-report/src/components/Gallery/index.js +++ b/packages/inspection-report/src/components/Gallery/index.js @@ -1,6 +1,6 @@ import React, { useCallback, useState } from 'react'; import PropTypes from 'prop-types'; -import { Modal, StyleSheet, View, Pressable, Text, ImageBackground } from 'react-native'; +import { Modal, StyleSheet, View, Pressable, Text, ImageBackground, Platform } from 'react-native'; import { MaterialIcons } from '@expo/vector-icons'; import { useTranslation } from 'react-i18next'; @@ -52,6 +52,9 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', zIndex: 99, + ...Platform.select({ + native: { paddingTop: 50 }, + }), }, title: { fontSize: 24, @@ -65,6 +68,9 @@ const styles = StyleSheet.create({ top: 20, right: 20, zIndex: 999, + ...Platform.select({ + native: { paddingTop: 50 }, + }), }, }); diff --git a/yarn.lock b/yarn.lock index 38300b31c..6f2aeda39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7399,17 +7399,10 @@ expo-image-loader@~3.1.0: resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-3.1.1.tgz#f88d94e66c5a102f15d858973c03b92e10662575" integrity sha512-ZX4Bh3K4CCX1aZflnmbOgFNLS+c0/GUys4wdvqxO+4A4KU1NNb3jE7RVa/OFYNPDcGhEw20c1QjyE/WsVURJpg== -expo-image-loader@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-3.2.0.tgz#d98b021660edef7243f7c5ec011b8d0545626d41" - integrity sha512-LU3Q2prn64/HxdToDmxgMIRXS1ZvD9Q3iCxRVTZn1fPQNNDciIQFE5okaa74Ogx20DFHs90r6WoUd7w9Af1OGQ== - -expo-image-manipulator@^10.2.1: - version "10.4.0" - resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-10.4.0.tgz#23570d9ca1625b9cb2583f2808172dfa088cea56" - integrity sha512-10L6eEbGGmgkZnt6bS+TkPAEuhkWa3AAlXeozLK7fKg24AUZj33FQuqc59i7ka3qMVEnsIc5bABcjimHEA4/Hg== - dependencies: - expo-image-loader "~3.2.0" +expo-image-loader@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-4.1.1.tgz#efadbb17de1861106864820194900f336dd641b6" + integrity sha512-ciEHVokU0f6w0eTxdRxLCio6tskMsjxWIoV92+/ZD37qePUJYMfEphPhu1sruyvMBNR8/j5iyOvPFVGTfO8oxA== expo-image-manipulator@~10.2.0: version "10.2.1" @@ -7418,6 +7411,13 @@ expo-image-manipulator@~10.2.0: dependencies: expo-image-loader "~3.1.0" +expo-image-manipulator@~11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-11.1.1.tgz#bb54df80e98abc9798876e3f70596a5b880168c9" + integrity sha512-W9LfJK/IL7EhhkkC1JQnEX/1S9B09rcGasJiQjXc2s1bEsrQnqXvXEv7shUW8b/L8rE+ynf+XvvDE+YIDL7oFg== + dependencies: + expo-image-loader "~4.1.0" + expo-json-utils@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/expo-json-utils/-/expo-json-utils-0.2.1.tgz#a8d15181e361f3fc782d5241ce381851bab4465b" From 72ffd18fe5ea5ba8604df82ddbb9038a92de4d51 Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Thu, 17 Aug 2023 17:14:46 +0300 Subject: [PATCH 19/27] [APP-2249] scroll for photos doesn't work for some pages in Monk (#12) --- .../src/components/Gallery/index.js | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/packages/inspection-report/src/components/Gallery/index.js b/packages/inspection-report/src/components/Gallery/index.js index bb0bc383c..5b4a1e71a 100644 --- a/packages/inspection-report/src/components/Gallery/index.js +++ b/packages/inspection-report/src/components/Gallery/index.js @@ -1,6 +1,6 @@ import React, { useCallback, useState } from 'react'; import PropTypes from 'prop-types'; -import { Modal, StyleSheet, View, Pressable, Text, ImageBackground, Platform } from 'react-native'; +import { Modal, StyleSheet, View, Pressable, Text, ImageBackground, Platform, ScrollView } from 'react-native'; import { MaterialIcons } from '@expo/vector-icons'; import { useTranslation } from 'react-i18next'; @@ -10,7 +10,11 @@ const styles = StyleSheet.create({ container: { alignContent: 'flex-start', flex: 1, - flexDirection: 'row', + ...Platform.select({ + web: { + flexDirection: 'row', + }, + }), flexWrap: 'wrap', justifyContent: 'center', paddingVertical: 15, @@ -88,14 +92,34 @@ function Gallery({ pictures }) { setFocusedPhoto(null); }, []); + const renderList = useCallback(() => { + if (Platform.OS === 'web') { + return ( + pictures.map((image, index) => ( + // eslint-disable-next-line react/no-array-index-key + + + + )) + ); + } + return ( + + { + pictures.map((image, index) => ( + // eslint-disable-next-line react/no-array-index-key + + + + )) + } + + ); + }, [pictures]); + return ( - {pictures.length > 0 ? pictures.map((image, index) => ( - // eslint-disable-next-line react/no-array-index-key - - - - )) : ({t('gallery.empty')})} + {pictures.length > 0 ? renderList() : ({t('gallery.empty')})} Date: Wed, 23 Aug 2023 16:41:53 +0300 Subject: [PATCH 20/27] Fix Damage Manipulator UI (#13) --- .../CarView360/CarView360Handles.js | 2 +- .../components/DamageReport/Overview/index.js | 2 +- .../DamageReport/UpdateDamagePopUp/index.js | 72 ++++++++++++------- 3 files changed, 48 insertions(+), 28 deletions(-) diff --git a/packages/inspection-report/src/components/CarView360/CarView360Handles.js b/packages/inspection-report/src/components/CarView360/CarView360Handles.js index 261904e41..57e5c5312 100644 --- a/packages/inspection-report/src/components/CarView360/CarView360Handles.js +++ b/packages/inspection-report/src/components/CarView360/CarView360Handles.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { StyleSheet, TouchableOpacity, View } from 'react-native'; +import { StyleSheet, TouchableOpacity, View, Platform } from 'react-native'; import { IconChevronLeft, IconChevronRight } from '../../assets'; import { CarOrientation, CommonPropTypes } from '../../resources'; diff --git a/packages/inspection-report/src/components/DamageReport/Overview/index.js b/packages/inspection-report/src/components/DamageReport/Overview/index.js index f05d357e6..e5be66994 100644 --- a/packages/inspection-report/src/components/DamageReport/Overview/index.js +++ b/packages/inspection-report/src/components/DamageReport/Overview/index.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { ActivityIndicator, StyleSheet, Text, TouchableOpacity, useWindowDimensions, View } from 'react-native'; +import { ActivityIndicator, StyleSheet, Text, TouchableOpacity, useWindowDimensions, View, Platform } from 'react-native'; import { CarOrientation, CommonPropTypes, DamageMode, VehicleType } from '../../../resources'; import CarView360 from '../../CarView360'; diff --git a/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js b/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js index 7900bf39e..97f207a11 100644 --- a/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js +++ b/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js @@ -7,7 +7,9 @@ import { PanResponder, StyleSheet, TouchableWithoutFeedback, - useWindowDimensions, Platform, + useWindowDimensions, + Platform, + ScrollView, } from 'react-native'; import { useTranslation } from 'react-i18next'; import { useOrientation } from '../../../hooks'; @@ -36,12 +38,15 @@ const styles = StyleSheet.create({ borderTopLeftRadius: 24, borderTopRightRadius: 24, paddingTop: 6, - paddingBottom: 6, + ...Platform.select({ + web: { paddingBottom: 6 }, + native: { paddingBottom: 100 }, + }), paddingLeft: 16, paddingRight: 16, ...Platform.select({ - web: { top: 650, }, - native: { top: 200, }, + web: { top: 650 }, + native: { top: 50 }, }), }, horizontalBarContent: { @@ -111,7 +116,7 @@ export default function UpdateDamagePopUp({ const [viewMode, setViewMode] = useState(null); const [gestureState, setGestureState] = useState({}); const pan = useRef(new Animated.ValueXY({ x: 0, y: bottomLimitY })).current; - const topLimitY = Platform.OS === 'web' ? 145 : -30; + const topLimitY = Platform.OS === 'web' ? 145 : 0; const handleToggleDamage = useCallback((isToggled) => { setViewMode(isToggled ? DisplayMode.FULL : DisplayMode.MINIMAL); @@ -164,9 +169,11 @@ export default function UpdateDamagePopUp({ pan.setValue({ x: 0, y: bottomLimitY }); } else { Animated.event( - [{ moveX: pan.x, moveY: pan.y }, { nativeEvent: { - contentOffset: { y: pan.y, x: pan.x }, - } }], + [{ moveX: pan.x, moveY: pan.y }, { + nativeEvent: { + contentOffset: { y: pan.y, x: pan.x }, + }, + }], { useNativeDriver: Platform.OS !== 'web' }, )(event, gestureStat); } @@ -194,6 +201,31 @@ export default function UpdateDamagePopUp({ setViewMode(displayMode); }, [displayMode]); + const getDamageManipulator = useCallback(() => ( + + + {t(`damageReport.parts.${part}`)} + + + + + ), [topOffset, + imageCount, + damage, + damageMode, + viewMode, + isEditable, + onShowGallery, + handleConfirm, + handleToggleDamage]); + return ( @@ -217,21 +249,9 @@ export default function UpdateDamagePopUp({ > - - - - {t(`damageReport.parts.${part}`)} - - - - + { + Platform.OS === 'web' ? getDamageManipulator() : {getDamageManipulator()} + } ); @@ -254,9 +274,9 @@ UpdateDamagePopUp.defaultProps = { damageMode: DamageMode.ALL, isEditable: true, imageCount: 0, - onConfirm: () => {}, - onDismiss: () => {}, - onShowGallery: () => {}, + onConfirm: () => { }, + onDismiss: () => { }, + onShowGallery: () => { }, part: '', style: {}, }; From 6722b88184bd68fb269d7cdecb322fa2579e154d Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Wed, 6 Sep 2023 11:52:17 +0300 Subject: [PATCH 21/27] Merge parent main (#14) --- app.config.js | 2 +- eas.json | 10 +-- package.json | 2 +- packages/camera/package.json | 10 +-- .../camera/src/components/Capture/capture.js | 28 ++++++++- .../camera/src/components/Capture/hooks.js | 20 ++++-- packages/corejs/package.json | 2 +- packages/cra-template/package.json | 2 +- packages/inspection-report/package.json | 2 +- .../src/assets/IconSeverityMedium.js | 21 +------ .../CarView360/hooks/useInnerHTML.js | 5 +- .../DamageReport/DamageManipulator.js | 14 ++--- .../components/DamageReport/DamageReport.js | 61 ++++++++++++------- .../DamageReport/UpdateDamageModal.js | 37 ++++++----- .../DamageReport/UpdateDamagePopUp/index.js | 2 +- .../DamageReport/hooks/usePdfReport.js | 4 ++ .../src/components/DamageReport/index.js | 5 +- .../src/components/Gallery/index.js | 2 +- packages/inspection-report/src/hooks/index.js | 1 + .../src/hooks/useCurrency.js | 52 ++++++++++++++++ .../src/i18n/resources/en.js | 2 +- .../src/i18n/resources/fr.js | 2 +- packages/openapi-specs-to-ts/package.json | 2 +- packages/sights/package.json | 2 +- packages/toolkit/package.json | 2 +- packages/ui/package.json | 4 +- packages/visualization/package.json | 4 +- src/hooks/useSignIn/index.js | 25 +++++--- src/screens/InspectionCapture/index.js | 7 +++ src/screens/InspectionReport/index.js | 2 + src/screens/Landing/VehicleType/index.js | 2 +- website/docs/js/api/components/Capture.md | 7 +++ 32 files changed, 232 insertions(+), 111 deletions(-) create mode 100644 packages/inspection-report/src/hooks/useCurrency.js diff --git a/app.config.js b/app.config.js index 6478b4345..0251e5ea3 100644 --- a/app.config.js +++ b/app.config.js @@ -269,6 +269,6 @@ export default { palette, }, ...app, - ...eas.build.preview.env, + ...eas.build.development.env, }, }; diff --git a/eas.json b/eas.json index d0c2d2968..c64f64215 100644 --- a/eas.json +++ b/eas.json @@ -9,7 +9,7 @@ "AUTH_AUDIENCE": "https://api.monk.ai/v1/", "AUTH_CLIENT_ID": "ixIWggNGVrA5FUFxCzHJJfiSdJ9mHXto", "AUTH_DOMAIN": "idp.monk.ai", - "SENTRY_DSN": "https://28d672df7c81eb082ddbae7919503585@o4505568095109120.ingest.sentry.io/4505622355312640", + "SENTRY_DSN": "https://db38973466bcef38767064fd025e20c6@o4505669501648896.ingest.sentry.io/4505673881092096", "PDF_REPORT_CUSTOMER": "monk_QSBtYXJ0aW5pLiBTaGFrZW4sIG5vdCBzdGlycmVkLgo=", "PDF_REPORT_CLIENT_NAME": "Monk" } @@ -24,7 +24,7 @@ "AUTH_AUDIENCE": "https://api.monk.ai/v1/", "AUTH_CLIENT_ID": "soZ7P2c6b9I5jarQoRrhh87x9TpOSaGn", "AUTH_DOMAIN": "idp.preview.monk.ai", - "SENTRY_DSN": "https://28d672df7c81eb082ddbae7919503585@o4505568095109120.ingest.sentry.io/4505622355312640", + "SENTRY_DSN": "https://db38973466bcef38767064fd025e20c6@o4505669501648896.ingest.sentry.io/4505673881092096", "PDF_REPORT_CUSTOMER": "monk_QSBtYXJ0aW5pLiBTaGFrZW4sIG5vdCBzdGlycmVkLgo=", "PDF_REPORT_CLIENT_NAME": "Monk" } @@ -39,7 +39,7 @@ "AUTH_AUDIENCE": "https://api.monk.ai/v1/", "AUTH_CLIENT_ID": "DAeZWqeeOfgItYBcQzFeFwSrlvmUdN7L", "AUTH_DOMAIN": "idp.staging.monk.ai", - "SENTRY_DSN": "https://28d672df7c81eb082ddbae7919503585@o4505568095109120.ingest.sentry.io/4505622355312640", + "SENTRY_DSN": "https://db38973466bcef38767064fd025e20c6@o4505669501648896.ingest.sentry.io/4505673881092096", "PDF_REPORT_CUSTOMER": "monk_QSBtYXJ0aW5pLiBTaGFrZW4sIG5vdCBzdGlycmVkLgo=", "PDF_REPORT_CLIENT_NAME": "Monk" } @@ -54,7 +54,7 @@ "AUTH_AUDIENCE": "https://api.monk.ai/v1/", "AUTH_CLIENT_ID": "DAeZWqeeOfgItYBcQzFeFwSrlvmUdN7L", "AUTH_DOMAIN": "idp.staging.monk.ai", - "SENTRY_DSN": "https://28d672df7c81eb082ddbae7919503585@o4505568095109120.ingest.sentry.io/4505622355312640", + "SENTRY_DSN": "https://db38973466bcef38767064fd025e20c6@o4505669501648896.ingest.sentry.io/4505673881092096", "PDF_REPORT_CUSTOMER": "monk_QSBtYXJ0aW5pLiBTaGFrZW4sIG5vdCBzdGlycmVkLgo=", "PDF_REPORT_CLIENT_NAME": "Monk" } @@ -69,7 +69,7 @@ "AUTH_AUDIENCE": "https://api.monk.ai/v1/", "AUTH_CLIENT_ID": "ZH7GK6zgjyVDiHN0A6kY98PBWVeJfKvX", "AUTH_DOMAIN": "idp.dev.monk.ai", - "SENTRY_DSN": "https://28d672df7c81eb082ddbae7919503585@o4505568095109120.ingest.sentry.io/4505622355312640", + "SENTRY_DSN": "https://db38973466bcef38767064fd025e20c6@o4505669501648896.ingest.sentry.io/4505673881092096", "PDF_REPORT_CUSTOMER": "monk_QSBtYXJ0aW5pLiBTaGFrZW4sIG5vdCBzdGlycmVkLgo=", "PDF_REPORT_CLIENT_NAME": "Monk" } diff --git a/package.json b/package.json index 660811cb1..a54e2bf45 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "monk", - "version": "3.8.0", + "version": "3.8.1", "author": "monkvision", "license": "BSD-3-Clause-Clear", "private": true, diff --git a/packages/camera/package.json b/packages/camera/package.json index c82dbf8cf..5bcc5c2b2 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/camera", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.0", + "version": "3.8.1", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/camera/#readme", @@ -70,10 +70,10 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.8.0", - "@monkvision/inspection-report": "3.8.0", - "@monkvision/sights": "3.8.0", - "@monkvision/toolkit": "3.8.0", + "@monkvision/corejs": "3.8.1", + "@monkvision/inspection-report": "3.8.1", + "@monkvision/sights": "3.8.1", + "@monkvision/toolkit": "3.8.1", "expo-camera": "^12.3.0", "react": "*", "react-native": "*", diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index facadccc9..f63d75652 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -137,6 +137,7 @@ const Capture = forwardRef(({ onPictureUploaded, onPictureTaken, onWarningMessage, + onCaptureClose, onReady, onStartUploadPicture, onFinishUploadPicture, @@ -169,6 +170,7 @@ const Capture = forwardRef(({ }, }); const [endTour, setEndTour] = useState(false); + const [isTourClosed, setIsTourClosed] = useState(false); const { height, width } = useWindowDimensions(); const { errorHandler, measurePerformance } = useMonitoring(); @@ -284,7 +286,7 @@ const Capture = forwardRef(({ endTour, }; const startUploadAsync = useStartUploadAsync(startUploadAsyncParams); - const uploadAdditionalDamage = useUploadAdditionalDamage({ inspectionId, onPictureUploaded }); + const uploadAdditionalDamage = useUploadAdditionalDamage({ inspectionId, addDamageParts, onPictureUploaded }); const [goPrevSight, goNextSight] = useNavigationBetweenSights({ sights }); @@ -384,7 +386,8 @@ const Capture = forwardRef(({ // finish 'capture tour' transaction unsuccessfully utils.log(['[Event] Capture-Tour sentry transaction cancels']); captureTourTransRef.current.transaction.finish(MonitoringStatus.CANCELLED); - setEndTour(true); + setIsTourClosed(true); + onCaptureClose(); }, [setEndTour]); const handleCloseEarlyClick = useCallback(({ confirm, confirmationMessage }) => { @@ -479,6 +482,25 @@ const Capture = forwardRef(({ }; }, []); + useEffect(() => { + const id = sights.state.current.id; + const status = uploads.state[id].status; + const picture = uploads.state[id].picture; + const uploadCount = uploads.state[id].uploadCount; + if (isTourClosed) { + if (status === 'idle' && !picture && uploadCount >= 1) { + // Retake the pic for a particular sight ID and tour is already closed + setEndTour(false); + } else if (status === 'fulfilled' && picture && uploadCount >= 1) { + // If you take a pic from capture-phase and tour is already closed + setEndTour(true); + } else if (status === 'idle' && !picture && !uploadCount) { + // If you close the tour by clicking on close button + setEndTour(true); + } + } + }, [sights.state, uploads.state, isTourClosed]); + useEffect(() => { /** * create a new transaction with operation name 'Add Damage' to measure tour performance @@ -813,6 +835,7 @@ Capture.propTypes = { offline: PropTypes.objectOf(PropTypes.any), onCameraPermissionError: PropTypes.func, onCameraPermissionSuccess: PropTypes.func, + onCaptureClose: PropTypes.func, onCaptureTourFinish: PropTypes.func, onCaptureTourStart: PropTypes.func, onChange: PropTypes.func, @@ -928,6 +951,7 @@ Capture.defaultProps = { onPictureTaken: () => {}, onCameraPermissionError: () => {}, onCameraPermissionSuccess: () => {}, + onCaptureClose: () => {}, onCaptureTourFinish: () => {}, onCaptureTourStart: () => {}, onChange: () => {}, diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index 1a4d96f73..62622f4fa 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -5,6 +5,7 @@ import { manipulateAsync, SaveFormat } from 'expo-image-manipulator'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { Platform } from 'react-native'; +import { useTranslation } from 'react-i18next'; import Actions from '../../actions'; import Constants from '../../const'; import log from '../../utils/log'; @@ -325,10 +326,9 @@ export function useStartUploadAsync({ }, [uploads, inspectionId, sights.state, mapTasksToSights, task, onFinish, endTour]); } -export function useUploadAdditionalDamage({ - inspectionId, - onPictureUploaded = () => {}, -}) { +export function useUploadAdditionalDamage({ inspectionId, addDamageParts, onPictureUploaded = () => {}, }) { + const { t, i18n } = useTranslation(); + return useCallback(async ({ picture, parts }) => { if (!inspectionId) { throw Error(`Please provide a valid "inspectionId". Got ${inspectionId}.`); @@ -356,6 +356,15 @@ export function useUploadAdditionalDamage({ filename, }; + const part = addDamageParts[0]; + const resources = Object.keys(i18n.options.resources); + const metadata = { + category: 'exterior', + label: resources.reduce((accumulator, lng) => { + accumulator[lng] = t(`partSelector.parts.${part}`, { lng }); + return accumulator; + }, {}), + }; const json = JSON.stringify({ acquisition: { strategy: 'upload_multipart_form_keys', @@ -370,6 +379,7 @@ export function useUploadAdditionalDamage({ tasks: ['damage_detection'], image_type: 'close_up', additional_data: { + ...metadata, overlay: undefined, createdAt: new Date(), }, @@ -422,7 +432,7 @@ export function useUploadAdditionalDamage({ throw err; } - }, [inspectionId]); + }, [inspectionId, addDamageParts]); } /** diff --git a/packages/corejs/package.json b/packages/corejs/package.json index ab93946fd..bb91b1d54 100644 --- a/packages/corejs/package.json +++ b/packages/corejs/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/corejs", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.0", + "version": "3.8.1", "private": false, "description": "AI-powered vehicle damage detection for JavaScript", "homepage": "https://github.com/monkvision/monkjs/packages/corejs/#readme", diff --git a/packages/cra-template/package.json b/packages/cra-template/package.json index dc1009ce1..0688da7bf 100644 --- a/packages/cra-template/package.json +++ b/packages/cra-template/package.json @@ -3,7 +3,7 @@ "author": "monkvision", "license": "BSD-3-Clause-Clear", "description": "Monk's create react-app template for internal or new projects.", - "version": "3.8.0", + "version": "3.8.1", "private": false, "homepage": "https://github.com/monkvision/monkjs/packages/cra-template/#readme", "repository": { diff --git a/packages/inspection-report/package.json b/packages/inspection-report/package.json index ecc88ef2b..6380c9c49 100644 --- a/packages/inspection-report/package.json +++ b/packages/inspection-report/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/inspection-report", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.0", + "version": "3.8.1", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/inspection-report/#readme", diff --git a/packages/inspection-report/src/assets/IconSeverityMedium.js b/packages/inspection-report/src/assets/IconSeverityMedium.js index 20a76ac8d..f54473437 100644 --- a/packages/inspection-report/src/assets/IconSeverityMedium.js +++ b/packages/inspection-report/src/assets/IconSeverityMedium.js @@ -10,25 +10,8 @@ export default function IconSeverityMedium(props) { fill="none" {...props} > - - - - - - + + ); } diff --git a/packages/inspection-report/src/components/CarView360/hooks/useInnerHTML.js b/packages/inspection-report/src/components/CarView360/hooks/useInnerHTML.js index 35536108e..558bc97fd 100644 --- a/packages/inspection-report/src/components/CarView360/hooks/useInnerHTML.js +++ b/packages/inspection-report/src/components/CarView360/hooks/useInnerHTML.js @@ -1,8 +1,11 @@ import { useMemo } from 'react'; import { getPillDamage } from './common'; import { RepairOperation } from '../../../resources'; +import { useCurrency } from '../../../hooks'; export default function useInnerHTML({ element, damages, groupId }) { + const { formateValue } = useCurrency(); + return useMemo(() => { if (element.tagName === 'style' && !!element.innerHTML) { return element.innerHTML; @@ -12,7 +15,7 @@ export default function useInnerHTML({ element, damages, groupId }) { if (elementClass && elementClass.includes('damage-pill-text')) { const { damage } = getPillDamage({ damages, pillId: groupId }); if (damage?.pricing) { - return `${damage.pricing}€`; + return formateValue(damage.pricing); } if (damage?.repairOperation === RepairOperation.REPLACE) { return `🔄`; diff --git a/packages/inspection-report/src/components/DamageReport/DamageManipulator.js b/packages/inspection-report/src/components/DamageReport/DamageManipulator.js index f6fcded03..c9f4c8fbe 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageManipulator.js +++ b/packages/inspection-report/src/components/DamageReport/DamageManipulator.js @@ -7,6 +7,7 @@ import { StyleSheet, Text, TouchableOpacity, View, Platform } from 'react-native import { IconSeverity, SeveritiesWithIcon } from '../../assets'; import { CommonPropTypes, DamageMode, DisplayMode, Severity, RepairOperation } from '../../resources'; import { TextButton, SwitchButton } from '../common'; +import { useCurrency } from '../../hooks'; const styles = StyleSheet.create({ container: { @@ -95,6 +96,7 @@ export default function DamageManipulator({ isEditable, }) { const { t } = useTranslation(); + const { formateValue } = useCurrency(); const [isReplaced, setReplaced] = useState(damage?.repairOperation === RepairOperation.REPLACE); const [hasDamage, setHasDamage] = useState(!!damage); const [editedDamage, setEditedDamage] = useState(damage); @@ -153,7 +155,7 @@ export default function DamageManipulator({ { ([DamageMode.SEVERITY, DamageMode.ALL].includes(damageMode) - && displayMode === DisplayMode.FULL) && ( + && displayMode === DisplayMode.FULL) && ( {t('damageManipulator.severity')} - {isEditable ? ( + {(isEditable && !isReplaced) ? ( {Object.values(SeveritiesWithIcon).map((severity) => ( {t('damageManipulator.repairCost')} - {isEditable ? ( + {isEditable && !isReplaced ? ( - {editedDamage?.pricing ?? 0} - € + {formateValue(editedDamage?.pricing ?? 0)} ) : ( - {editedDamage?.pricing ?? 0} - € + {formateValue(editedDamage?.pricing ?? 0)} )} diff --git a/packages/inspection-report/src/components/DamageReport/DamageReport.js b/packages/inspection-report/src/components/DamageReport/DamageReport.js index cf9141fe5..1a4204809 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageReport.js +++ b/packages/inspection-report/src/components/DamageReport/DamageReport.js @@ -1,6 +1,6 @@ import { Loader } from '@monkvision/ui'; import PropTypes from 'prop-types'; -import React, { useMemo, useState, useCallback } from 'react'; +import React, { useEffect, useMemo, useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; @@ -14,6 +14,7 @@ import TabButton from './TabButton'; import TabGroup from './TabGroup'; import UpdateDamageModal from './UpdateDamageModal'; import UpdateDamagePopUp from './UpdateDamagePopUp'; +import { useCurrency } from '../../hooks'; const styles = StyleSheet.create({ container: { @@ -50,7 +51,7 @@ const styles = StyleSheet.create({ }, tabContent: { flex: 1, - overflowY: 'scroll', + overflowY: 'auto', }, text: { color: '#fafafa', @@ -101,14 +102,20 @@ export default function DamageReport({ inspectionId, vehicleType, damageMode, + currencyCharacter, generatePdf, pdfOptions, onStartNewInspection, onPdfPressed, }) { const { t } = useTranslation(); + const { updateCurrency } = useCurrency(); const [currentTab, setCurrentTab] = useState(Tabs.OVERVIEW); + useEffect(() => { + updateCurrency(currencyCharacter); + }, [currencyCharacter]); + const { isLoading, isError, @@ -182,6 +189,12 @@ export default function DamageReport({ } }, [pdfStatus]); + useEffect(() => { + if (pdfStatus === PdfStatus.ERROR) { + setIsEditable(true); + } + }, [pdfStatus]) + return ( @@ -196,17 +209,17 @@ export default function DamageReport({ {isLoading && ( - - - + + + )} {!isLoading && isError && ( - - {t('damageReport.error.message')} - - {t('damageReport.error.retry')} - - + + {t('damageReport.error.message')} + + {t('damageReport.error.retry')} + + )} {!isLoading && !isError && ( <> @@ -270,18 +283,18 @@ export default function DamageReport({ ) } { - isModalVisible && ( - - ) - } + isModalVisible && ( + + ) + } {confirmModal && ( {}, diff --git a/packages/inspection-report/src/components/DamageReport/UpdateDamageModal.js b/packages/inspection-report/src/components/DamageReport/UpdateDamageModal.js index cae17052a..aea0cc9c7 100644 --- a/packages/inspection-report/src/components/DamageReport/UpdateDamageModal.js +++ b/packages/inspection-report/src/components/DamageReport/UpdateDamageModal.js @@ -107,7 +107,7 @@ const styles = StyleSheet.create({ ...Platform.select({ web: { maxWidth: '500px' }, }), - overflowY: 'scroll', + overflowY: 'auto', paddingHorizontal: 20, }, }); @@ -120,42 +120,41 @@ function UpdateDamageModal({ part, damageMode, damage, onConfirm, onDismiss, ima const pan = useRef(new Animated.ValueXY({ x: 0, y: 0 })).current; const [fullScreenPhoto, setFullScreenPhoto] = useState(null); - const onPanResponderRelease = useCallback((event, gs) => { - setGestureState({ dx: gs.dx }); - if (gs.dx === 0 && images[currentPhotoIndex]) { - setFullScreenPhoto(images[currentPhotoIndex]); - } - }, [currentPhotoIndex, images]); - const panResponder = useRef( PanResponder.create({ onStartShouldSetPanResponder: () => true, onStartShouldSetPanResponderCapture: () => true, onMoveShouldSetPanResponder: () => true, onMoveShouldSetPanResponderCapture: () => true, - onPanResponderMove: (event, gs) => { - setGestureState({ x: gs.dx }); - }, - onPanResponderRelease, + onPanResponderMove: (event, gs) => setGestureState({ x: gs.dx }), + onPanResponderRelease: (event, gs) => setGestureState({ dx: gs.dx }), }), ).current; const handleClosePreview = useCallback(() => setFullScreenPhoto(null), []); useEffect(() => { - if (gestureState.dx < 0 && currentPhotoIndex < images.length - 1) { - setCurrentPhotoIndex(currentPhotoIndex + 1); - } else if (gestureState.dx > 0 && currentPhotoIndex > 0) { - setCurrentPhotoIndex(currentPhotoIndex - 1); - } - if ( (gestureState.x < 0 && currentPhotoIndex < images.length - 1) || (gestureState.x > 0 && currentPhotoIndex > 0) ) { pan.setValue({ x: -((currentPhotoIndex * width) - gestureState.x), y: 0 }); } - }, [gestureState]); + }, [gestureState.x]); + + useEffect(() => { + let newCurrentPhotoIndex = currentPhotoIndex; + if (gestureState.dx < 0 && currentPhotoIndex < images.length - 1) { + newCurrentPhotoIndex = currentPhotoIndex + 1; + } else if (gestureState.dx > 0 && currentPhotoIndex > 0) { + newCurrentPhotoIndex = currentPhotoIndex - 1; + } + + setCurrentPhotoIndex(newCurrentPhotoIndex); + if (gestureState.dx === 0 && images[newCurrentPhotoIndex]) { + setFullScreenPhoto(images[newCurrentPhotoIndex]); + } + }, [gestureState.dx]); useEffect(() => { Animated.timing(pan, { diff --git a/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js b/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js index 97f207a11..13591ebc3 100644 --- a/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js +++ b/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js @@ -68,7 +68,7 @@ const styles = StyleSheet.create({ web: { maxWidth: '500px' }, }), position: 'relative', - overflowY: 'scroll', + overflowY: 'auto', }, content: { display: 'flex', diff --git a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js index f801665ec..c2fc5ab76 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js @@ -65,6 +65,10 @@ export default function usePdfReport({ console.error('Error while trying to fetch the PDF download URL :', err); setPdfStatus(PdfStatus.ERROR); } + + setTimeout(() => { + setPdfStatus(PdfStatus.NOT_REQUESTED); + }, 5000); }), [inspectionId], ); diff --git a/packages/inspection-report/src/components/DamageReport/index.js b/packages/inspection-report/src/components/DamageReport/index.js index 147efe7dd..74c0a63bb 100644 --- a/packages/inspection-report/src/components/DamageReport/index.js +++ b/packages/inspection-report/src/components/DamageReport/index.js @@ -3,11 +3,14 @@ import { I18nextProvider } from 'react-i18next'; import i18n from '../../i18n'; import DamageReport from './DamageReport'; +import { CurrencyProvider } from './../../hooks'; function DamageReportHOC(props) { return ( - + + + ); } diff --git a/packages/inspection-report/src/components/Gallery/index.js b/packages/inspection-report/src/components/Gallery/index.js index 5b4a1e71a..de9cb6ac6 100644 --- a/packages/inspection-report/src/components/Gallery/index.js +++ b/packages/inspection-report/src/components/Gallery/index.js @@ -18,7 +18,7 @@ const styles = StyleSheet.create({ flexWrap: 'wrap', justifyContent: 'center', paddingVertical: 15, - overflowY: 'scroll', + overflowY: 'auto', }, messageContainer: { alignItems: 'center', diff --git a/packages/inspection-report/src/hooks/index.js b/packages/inspection-report/src/hooks/index.js index 4b9f3cb4f..2081e04a0 100644 --- a/packages/inspection-report/src/hooks/index.js +++ b/packages/inspection-report/src/hooks/index.js @@ -1,2 +1,3 @@ // eslint-disable-next-line import/prefer-default-export export { default as useOrientation, ORIENTATION_MODE } from './useOrientation'; +export * from './useCurrency'; diff --git a/packages/inspection-report/src/hooks/useCurrency.js b/packages/inspection-report/src/hooks/useCurrency.js new file mode 100644 index 000000000..681b355e6 --- /dev/null +++ b/packages/inspection-report/src/hooks/useCurrency.js @@ -0,0 +1,52 @@ +import React, { createContext, useCallback, useContext, useMemo, useState } from 'react'; + +const signAheadCurrencies = ['$', '£']; + +/** + * Currency context which will create wrapper for currency manipulation. +*/ +export const Context = createContext({ + formateValue: (value) => { }, + updateCurrency: () => { } +}); + +/** + * Currency wrapper used to abstract currency functionality. + * + * @return {React.ReactNode} +*/ +export function CurrencyProvider({ children }) { + const [currency, setCurrency] = useState('€'); + + /** + * Format the value with currency symbol + * + * @param value Value to be formatted + * @return {string} formatted value + */ + const formateValue = useCallback((value) => { + if (signAheadCurrencies.includes(currency)) { + return `${currency}${value}`; + } else { + return `${value}${currency}`; + } + }, [currency]); + + const currencyContextValue = useMemo(() => + ({ updateCurrency: setCurrency, formateValue }), + [currency] + ); + + return ( + + {children} + + ); +} + +/** + * Custom hook which will provide currency context which will expose all the functionality. +*/ +export function useCurrency() { + return useContext(Context); +} diff --git a/packages/inspection-report/src/i18n/resources/en.js b/packages/inspection-report/src/i18n/resources/en.js index e49cd750e..e1da53c38 100644 --- a/packages/inspection-report/src/i18n/resources/en.js +++ b/packages/inspection-report/src/i18n/resources/en.js @@ -30,7 +30,7 @@ const en = { pdfStatus: { generating: 'Your PDF report is being generated...', ready: 'Your PDF report is ready', - error: 'An error occurred during the generation of your PDF report', + error: 'An error occurred during the generation of your PDF report. Please try again.', }, modals: { validate: { diff --git a/packages/inspection-report/src/i18n/resources/fr.js b/packages/inspection-report/src/i18n/resources/fr.js index 4f12e83ec..24e1e381b 100644 --- a/packages/inspection-report/src/i18n/resources/fr.js +++ b/packages/inspection-report/src/i18n/resources/fr.js @@ -30,7 +30,7 @@ const fr = { pdfStatus: { generating: 'Génération du rapport PDF en cours...', ready: 'Le rapport PDF est prêt', - error: 'Une erreur est survenue lors de la génération du rapport PDF', + error: 'Une erreur s\'est produite lors de la génération de votre rapport PDF. Veuillez réessayer.', }, modals: { validate: { diff --git a/packages/openapi-specs-to-ts/package.json b/packages/openapi-specs-to-ts/package.json index 197a2c60e..be7c05840 100644 --- a/packages/openapi-specs-to-ts/package.json +++ b/packages/openapi-specs-to-ts/package.json @@ -1,6 +1,6 @@ { "name": "@monkvision/openapi-specs-to-ts", - "version": "3.8.0", + "version": "3.8.1", "description": "A Node script that automatically creates TypeScript type definitions based on the JSON Schema defined in an openapi specification file.", "main": "dist/index.js", "scripts": { diff --git a/packages/sights/package.json b/packages/sights/package.json index ad641ce0c..38d1d6f25 100644 --- a/packages/sights/package.json +++ b/packages/sights/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/sights", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.0", + "version": "3.8.1", "main": "dist/index.json", "private": false, "description": "Vehicle sights assets for AI-powered damage detection", diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index 8878d93f0..e1588df6b 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/toolkit", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.0", + "version": "3.8.1", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/toolkit/#readme", diff --git a/packages/ui/package.json b/packages/ui/package.json index 2682a3d85..ca026a9ff 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/ui", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.0", + "version": "3.8.1", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/ui/#readme", @@ -48,7 +48,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/toolkit": "3.8.0", + "@monkvision/toolkit": "3.8.1", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/packages/visualization/package.json b/packages/visualization/package.json index 7f79d03e5..4ba90e5c0 100644 --- a/packages/visualization/package.json +++ b/packages/visualization/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/visualization", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.0", + "version": "3.8.1", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/visualization/#readme", @@ -53,7 +53,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.8.0", + "@monkvision/corejs": "3.8.1", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/src/hooks/useSignIn/index.js b/src/hooks/useSignIn/index.js index cdfb3b24e..4fe983ea5 100644 --- a/src/hooks/useSignIn/index.js +++ b/src/hooks/useSignIn/index.js @@ -4,7 +4,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; import jwt_decode from 'jwt-decode'; import discoveries from 'config/discoveries'; -import { makeRedirectUri, ResponseType, useAuthRequest } from 'expo-auth-session'; +import { makeRedirectUri, Prompt, ResponseType, revokeAsync, useAuthRequest } from 'expo-auth-session'; import * as WebBrowser from 'expo-web-browser'; import { useCallback, useEffect, useState } from 'react'; import { Platform } from 'react-native'; @@ -27,12 +27,22 @@ const scopes = ['openid', 'email', 'profile', 'read:current_user', 'update:curre export const ASYNC_STORAGE_AUTH_KEY = '@auth_Storage'; -export function dispatchSignOut(dispatch) { - dispatch(authSlice.actions.update({ - accessToken: null, - isLoading: false, - isSignedOut: true, - })); +export async function dispatchSignOut(dispatch) { + const revokeResponse = await revokeAsync( + { + clientId: monk.config.authConfig.clientId, + token: monk.config?.accessToken, + }, + discoveries + ); + + if (revokeResponse) { + dispatch(authSlice.actions.update({ + accessToken: null, + isLoading: false, + isSignedOut: true, + })); + } } export function onAuthenticationSuccess(authentication, dispatch) { @@ -61,6 +71,7 @@ export default function useSignIn(callbacks = {}) { clientId: monk.config.authConfig.clientId, scopes, redirectUri, + prompt: Prompt.Login, extraParams: { audience: monk.config.authConfig.audience, }, diff --git a/src/screens/InspectionCapture/index.js b/src/screens/InspectionCapture/index.js index 2b3a85c86..65356b3c6 100644 --- a/src/screens/InspectionCapture/index.js +++ b/src/screens/InspectionCapture/index.js @@ -143,6 +143,12 @@ export default function InspectionCapture() { } }, [success, isFocused]); + const handleCaptureClose = useCallback(() => { + if (!enableComplianceCheck) { + navigation.navigate(names.LANDING, { inspectionId }); + } + }, [enableComplianceCheck, inspectionId]); + const captureRef = useRef(); const controls = [ @@ -195,6 +201,7 @@ export default function InspectionCapture() { onStartUploadPicture={() => setCameraLoading(true)} onFinishUploadPicture={() => setCameraLoading(false)} onWarningMessage={(message) => setShowMessage(message)} + onCaptureClose={handleCaptureClose} onChange={handleChange} enableComplianceCheck={enableComplianceCheck} onCaptureTourFinish={handleCaptureTourFinish} diff --git a/src/screens/InspectionReport/index.js b/src/screens/InspectionReport/index.js index 921937fc2..76d5f4c6b 100644 --- a/src/screens/InspectionReport/index.js +++ b/src/screens/InspectionReport/index.js @@ -6,6 +6,7 @@ import { useRoute, useNavigation } from '@react-navigation/native'; import * as names from 'screens/names'; const damageMode = DamageMode.ALL; +const currencyCharacter = '€'; export default function InspectionReport() { const route = useRoute(); @@ -20,6 +21,7 @@ export default function InspectionReport() { onSelect(key)} - style={[styles.vehicleTypeChip, { backgroundColor: composeColor(key) }]} + style={[styles.vehicleTypeChip, { backgroundColor: composeColor(key), paddingHorizontal: key === selected ? 0 : 11 }]} mode="outlined" disabled={loading} > diff --git a/website/docs/js/api/components/Capture.md b/website/docs/js/api/components/Capture.md index 3388e6096..2a4ecef3e 100644 --- a/website/docs/js/api/components/Capture.md +++ b/website/docs/js/api/components/Capture.md @@ -256,6 +256,13 @@ const handleOnUploadsChange = () => console.log('Uploads has been changed'); const handleOnWarningMessage = () => console.log('Warning messages'); ``` +## onCaptureClose +`PropTypes.func` + +```js +const handleOnCaptureClose = () => console.log('Capture Closed'); +``` + ## onSettingsChange `PropTypes.func` From d4a697cdff52c6f9a99ca9f83f17f33312ca50aa Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Thu, 21 Sep 2023 09:53:00 +0300 Subject: [PATCH 22/27] Fix Damage Manipulator UI (#15) --- .../components/DamageReport/DamageManipulator.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/inspection-report/src/components/DamageReport/DamageManipulator.js b/packages/inspection-report/src/components/DamageReport/DamageManipulator.js index c9f4c8fbe..2dbb3e692 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageManipulator.js +++ b/packages/inspection-report/src/components/DamageReport/DamageManipulator.js @@ -159,9 +159,13 @@ export default function DamageManipulator({ - + {t('damageManipulator.damages')} {t(`damageManipulator.${isReplaced ? 'replaced' : 'notReplaced'}`)} @@ -227,7 +231,7 @@ export default function DamageManipulator({ ) : ( - + {formateValue(editedDamage?.pricing ?? 0)} From bff5bd3baca9bbfb73018ab654d645dd8b76d0db Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Tue, 10 Oct 2023 12:57:50 +0300 Subject: [PATCH 23/27] Merge parent (#16) --- package.json | 2 +- packages/camera/package.json | 10 +- .../src/components/AddDamageModal/index.js | 1 + .../src/components/AddDamageOverlay/index.js | 83 +++---- .../camera/src/components/Capture/capture.js | 18 +- .../camera/src/components/Capture/hooks.js | 2 +- .../camera/src/components/Controls/hooks.js | 7 +- .../camera/src/components/Controls/index.js | 4 + .../UploadCenter/hooks/useHandlers.js | 1 + packages/corejs/package.json | 2 +- packages/corejs/src/monitoring/types.ts | 9 +- packages/cra-template/package.json | 2 +- packages/inspection-report/package.json | 2 +- .../src/components/DamageReport/Accordion.js | 65 ++++++ .../components/DamageReport/DamageReport.js | 205 ++++++++++++------ .../DamageReport/UpdateDamagePopUp/index.js | 12 +- .../hooks/useDamageReportStateHandlers.js | 17 +- .../DamageReport/hooks/usePdfReport.js | 4 + .../hooks/useProcessInspection.js | 16 +- .../src/components/DamageReport/index.js | 2 +- .../src/components/Gallery/Thumbnail.js | 10 +- .../src/components/Gallery/index.js | 43 +++- packages/inspection-report/src/hooks/index.js | 1 + .../src/hooks/useCurrency.js | 11 +- .../src/hooks/useDesktopMode.js | 10 + .../src/i18n/resources/en.js | 4 + .../src/i18n/resources/fr.js | 4 + packages/openapi-specs-to-ts/package.json | 2 +- packages/sights/package.json | 2 +- packages/toolkit/package.json | 2 +- packages/ui/package.json | 4 +- packages/visualization/package.json | 4 +- scripts/index.js | 2 +- src/components/ErrorModal/index.js | 39 ++++ src/components/ErrorModal/styles.js | 41 ++++ src/i18n/resources/en.js | 6 + src/i18n/resources/fr.js | 6 + src/screens/InspectionCapture/index.js | 20 ++ src/screens/InspectionCreate/index.js | 5 +- .../useCreateInspection/index.js | 10 +- src/screens/InspectionVehicleUpdate/index.js | 4 +- src/screens/Landing/SignOut/index.js | 1 - 42 files changed, 511 insertions(+), 184 deletions(-) create mode 100644 packages/inspection-report/src/components/DamageReport/Accordion.js create mode 100644 packages/inspection-report/src/hooks/useDesktopMode.js create mode 100644 src/components/ErrorModal/index.js create mode 100644 src/components/ErrorModal/styles.js diff --git a/package.json b/package.json index a54e2bf45..d83f545c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "monk", - "version": "3.8.1", + "version": "3.8.3", "author": "monkvision", "license": "BSD-3-Clause-Clear", "private": true, diff --git a/packages/camera/package.json b/packages/camera/package.json index 5bcc5c2b2..a7f14a975 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/camera", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.1", + "version": "3.8.3", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/camera/#readme", @@ -70,10 +70,10 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.8.1", - "@monkvision/inspection-report": "3.8.1", - "@monkvision/sights": "3.8.1", - "@monkvision/toolkit": "3.8.1", + "@monkvision/corejs": "3.8.3", + "@monkvision/inspection-report": "3.8.3", + "@monkvision/sights": "3.8.3", + "@monkvision/toolkit": "3.8.3", "expo-camera": "^12.3.0", "react": "*", "react-native": "*", diff --git a/packages/camera/src/components/AddDamageModal/index.js b/packages/camera/src/components/AddDamageModal/index.js index 3225f3447..628929875 100644 --- a/packages/camera/src/components/AddDamageModal/index.js +++ b/packages/camera/src/components/AddDamageModal/index.js @@ -42,6 +42,7 @@ const styles = StyleSheet.create({ marginBottom: 5, display: 'flex', flexDirection: 'row', + justifyContent: 'space-between', }, footer: { display: 'flex', diff --git a/packages/camera/src/components/AddDamageOverlay/index.js b/packages/camera/src/components/AddDamageOverlay/index.js index 46d6fa181..bf74ae81d 100644 --- a/packages/camera/src/components/AddDamageOverlay/index.js +++ b/packages/camera/src/components/AddDamageOverlay/index.js @@ -1,75 +1,46 @@ import PropTypes from 'prop-types'; import React, { useMemo } from 'react'; -import { StyleSheet, useWindowDimensions, View } from 'react-native'; +import { StyleSheet, useWindowDimensions, View, Platform } from 'react-native'; const styles = StyleSheet.create({ - container: { - position: 'absolute', - top: 0, - bottom: 0, - right: 0, - left: 0, - }, overlay: { - position: 'absolute', - backgroundColor: '#00000080', + ...Platform.select({ + web: { + position: 'fixed' + }, + native: { + position: 'static' + } + }), + margin: 'auto', + left: 0, + right: 0, + bottom: 0, + top: 0, + boxShadow: '0 0 0 100pc #00000080', }, }); export default function AddDamageOverlay({ innerWidth, innerHeight }) { const { width, height } = useWindowDimensions(); const effectiveInnerHeight = useMemo( - () => (innerHeight > height * 0.75 ? height * 0.75 : innerHeight), + () => (innerHeight > height * 0.75 ? innerHeight : height * 0.75), [height, innerHeight], ); const effectiveInnerWidth = useMemo( - () => (innerWidth > width * 0.68 ? width * 0.68 : innerWidth), - [height, innerWidth], + () => (innerWidth > width * 0.68 ? innerWidth : width * 0.68), + [width, innerWidth], ); return ( - <> - - - - - + ); } @@ -80,5 +51,5 @@ AddDamageOverlay.propTypes = { AddDamageOverlay.defaultProps = { innerHeight: 300, - innerWidth: 450, + innerWidth: 400, }; diff --git a/packages/camera/src/components/Capture/capture.js b/packages/camera/src/components/Capture/capture.js index f63d75652..6648dba7c 100644 --- a/packages/camera/src/components/Capture/capture.js +++ b/packages/camera/src/components/Capture/capture.js @@ -1,4 +1,4 @@ -import { MonitoringStatus, SentryOperation, SentryTag, SentryTransaction, useMonitoring } from '@monkvision/corejs'; +import { MonitoringStatus, SentryImageTypes, SentryOperation, SentryTag, SentryTransaction, useMonitoring } from '@monkvision/corejs'; import { utils } from '@monkvision/toolkit'; import PropTypes from 'prop-types'; import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'; @@ -160,6 +160,7 @@ const Capture = forwardRef(({ }, combinedRefs) => { // STATES // const [isReady, setReady] = useState(false); + const [isRetake, setRetake] = useState(false); const [addDamageStatus, setAddDamageStatus] = useState(AddDamageStatus.IDLE); const [addDamageParts, setAddDamageParts] = useState([]); const [closeEarlyModalState, setCloseEarlyModalState] = useState({ @@ -286,7 +287,9 @@ const Capture = forwardRef(({ endTour, }; const startUploadAsync = useStartUploadAsync(startUploadAsyncParams); - const uploadAdditionalDamage = useUploadAdditionalDamage({ inspectionId, addDamageParts, onPictureUploaded }); + const uploadAdditionalDamage = useUploadAdditionalDamage({ + inspectionId, addDamageParts, onPictureUploaded, + }); const [goPrevSight, goNextSight] = useNavigationBetweenSights({ sights }); @@ -323,7 +326,8 @@ const Capture = forwardRef(({ const windowDimensions = useWindowDimensions(); const tourHasFinished = useMemo( - () => Object.values(uploads.state).every(({ status, uploadCount }) => (status === 'rejected' || status === 'fulfilled') && uploadCount >= 1), + () => Object.values(uploads.state) + .every(({ status, uploadCount }) => (status === 'rejected' || status === 'fulfilled') && uploadCount >= 1), [uploads.state], ); const overlaySize = useMemo( @@ -437,6 +441,7 @@ const Capture = forwardRef(({ }, []); const onRetakeAll = useCallback(() => { + setRetake(true); captureTourTransRef.current.hasRetakeCalled = true; captureTourTransRef.current.transaction.setTag(SentryTag.IS_RETAKE, 1); }, []); @@ -449,7 +454,7 @@ const Capture = forwardRef(({ if (!captureTourTransRef.current.hasRetakeCalled) { const { transaction } = captureTourTransRef.current; const percentOfNonCompliancePics = ((100 * retakesNeeded) / states.sights.state.ids.length); - transaction.setTag(SentryTag.RETAKEN_PICTURES, retakesNeeded); + transaction.setTag(SentryTag.NON_COMPLIANCE_PICS, retakesNeeded); transaction.setTag(SentryTag.PERCENT_OF_NON_COMPLIANCE_PICS, percentOfNonCompliancePics); } }, []); @@ -472,7 +477,6 @@ const Capture = forwardRef(({ transaction.setTag(SentryTag.IS_SKIP, 0); transaction.setTag(SentryTag.IS_RETAKE, 0); transaction.setTag(SentryTag.TAKEN_PICTURES, 0); - transaction.setTag(SentryTag.RETAKEN_PICTURES, 0); captureTourTransRef.current = { transaction, takenPictures: 0, @@ -510,11 +514,12 @@ const Capture = forwardRef(({ // Start the transaction const transaction = measurePerformance( SentryTransaction.PICTURE_PROCESSING, - SentryOperation.ADD_DAMAGE, + SentryOperation.CAPTURE_SIGHT, ); // set tags to identify a transaction and relate with an inspection transaction.setTag(SentryTag.TASK, task); + transaction.setTag(SentryTag.IMAGE_TYPE, SentryImageTypes.ZOOM); transaction.setTag(SentryTag.INSPECTION_ID, inspectionId); // Set the transaction in reference @@ -591,6 +596,7 @@ const Capture = forwardRef(({ containerStyle={controlsContainerStyle} elements={controls} loading={loading} + isRetake={isRetake} state={states} onCloseEarly={handleCloseEarlyClick} onAddDamagePressed={handleAddDamagePressed} diff --git a/packages/camera/src/components/Capture/hooks.js b/packages/camera/src/components/Capture/hooks.js index 62622f4fa..be19234db 100644 --- a/packages/camera/src/components/Capture/hooks.js +++ b/packages/camera/src/components/Capture/hooks.js @@ -326,7 +326,7 @@ export function useStartUploadAsync({ }, [uploads, inspectionId, sights.state, mapTasksToSights, task, onFinish, endTour]); } -export function useUploadAdditionalDamage({ inspectionId, addDamageParts, onPictureUploaded = () => {}, }) { +export function useUploadAdditionalDamage({ inspectionId, addDamageParts, onPictureUploaded = () => {} }) { const { t, i18n } = useTranslation(); return useCallback(async ({ picture, parts }) => { diff --git a/packages/camera/src/components/Controls/hooks.js b/packages/camera/src/components/Controls/hooks.js index 65f8e9212..147fde577 100644 --- a/packages/camera/src/components/Controls/hooks.js +++ b/packages/camera/src/components/Controls/hooks.js @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { Platform } from 'react-native'; -import { useMonitoring, SentryTransaction, SentryOperation, SentrySpan, SentryTag } from '@monkvision/corejs'; +import { useMonitoring, SentryImageTypes, SentryTransaction, SentryOperation, SentrySpan, SentryTag } from '@monkvision/corejs'; import Actions from '../../actions'; import log from '../../utils/log'; @@ -12,6 +12,7 @@ const useHandlers = ({ stream, onResetAddDamageStatus, onPictureTaken, + isRetake, }) => { const { measurePerformance } = useMonitoring(); const capture = useCallback(async (controlledState, api, event, addDamageParts) => { @@ -62,6 +63,10 @@ const useHandlers = ({ */ transaction.setTag(SentryTag.TASK, task); transaction.setTag(SentryTag.SIGHT_ID, current.id); + transaction.setTag( + SentryTag.IMAGE_TYPE, + isRetake ? SentryImageTypes.RETAKE : SentryImageTypes.CAPTURE, + ); transaction.setTag(SentryTag.INSPECTION_ID, inspectionId); // add a process to queue diff --git a/packages/camera/src/components/Controls/index.js b/packages/camera/src/components/Controls/index.js index a4a3a549c..69b2a130b 100644 --- a/packages/camera/src/components/Controls/index.js +++ b/packages/camera/src/components/Controls/index.js @@ -48,6 +48,7 @@ export default function Controls({ containerStyle, elements, loading, + isRetake, state, hideAddDamage, onAddDamagePressed, @@ -70,6 +71,7 @@ export default function Controls({ stream: api.camera.current?.stream, onResetAddDamageStatus, onPictureTaken, + isRetake, }); const isAddDamageButtonAndDisabled = useCallback( @@ -205,6 +207,7 @@ Controls.propTypes = { ])), hideAddDamage: PropTypes.bool, isPortraitModeVinLayoutView: PropTypes.bool, + isRetake: PropTypes.bool, loading: PropTypes.bool, onAddDamagePressed: PropTypes.func, onAddDamageUploadPicture: PropTypes.func, @@ -239,6 +242,7 @@ Controls.defaultProps = { elements: [], hideAddDamage: false, loading: false, + isRetake: false, state: {}, onCloseEarly: () => {}, onPictureTaken: () => {}, diff --git a/packages/camera/src/components/UploadCenter/hooks/useHandlers.js b/packages/camera/src/components/UploadCenter/hooks/useHandlers.js index 81a99e462..2a0a7c327 100644 --- a/packages/camera/src/components/UploadCenter/hooks/useHandlers.js +++ b/packages/camera/src/components/UploadCenter/hooks/useHandlers.js @@ -53,6 +53,7 @@ export default function useHandlers({ compliance.dispatch({ type: Actions.compliance.UPDATE_COMPLIANCE, payload: compliancePayload }); uploads.dispatch({ type: Actions.uploads.UPDATE_UPLOAD, payload: uploadsPayload }); sights.dispatch({ type: Actions.sights.SET_CURRENT_SIGHT, payload: { id } }); + onRetakeAll(); }, [compliance, sights, uploads]); const handleReUpload = useCallback(async (id, picture, language) => { diff --git a/packages/corejs/package.json b/packages/corejs/package.json index bb91b1d54..3e499cca5 100644 --- a/packages/corejs/package.json +++ b/packages/corejs/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/corejs", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.1", + "version": "3.8.3", "private": false, "description": "AI-powered vehicle damage detection for JavaScript", "homepage": "https://github.com/monkvision/monkjs/packages/corejs/#readme", diff --git a/packages/corejs/src/monitoring/types.ts b/packages/corejs/src/monitoring/types.ts index 35ae7905a..478692965 100644 --- a/packages/corejs/src/monitoring/types.ts +++ b/packages/corejs/src/monitoring/types.ts @@ -140,7 +140,14 @@ export enum SentryTag { IS_SKIP = 'isSkip', IS_RETAKE = 'isRetake', TAKEN_PICTURES = 'takenPictures', - RETAKEN_PICTURES = 'retakenPictures', ADD_DAMAGES = 'addDamages', + NON_COMPLIANCE_PICS = 'nonCompliancePics', PERCENT_OF_NON_COMPLIANCE_PICS = 'percentOfNonCompliancePics', + IMAGE_TYPE = 'imageType', +} + +export enum SentryImageTypes { + CAPTURE = 'capture', + ZOOM = 'zoom', + RETAKE = 'retake', } diff --git a/packages/cra-template/package.json b/packages/cra-template/package.json index 0688da7bf..0631ba7f5 100644 --- a/packages/cra-template/package.json +++ b/packages/cra-template/package.json @@ -3,7 +3,7 @@ "author": "monkvision", "license": "BSD-3-Clause-Clear", "description": "Monk's create react-app template for internal or new projects.", - "version": "3.8.1", + "version": "3.8.3", "private": false, "homepage": "https://github.com/monkvision/monkjs/packages/cra-template/#readme", "repository": { diff --git a/packages/inspection-report/package.json b/packages/inspection-report/package.json index 6380c9c49..7731ff7e1 100644 --- a/packages/inspection-report/package.json +++ b/packages/inspection-report/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/inspection-report", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.1", + "version": "3.8.3", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/inspection-report/#readme", diff --git a/packages/inspection-report/src/components/DamageReport/Accordion.js b/packages/inspection-report/src/components/DamageReport/Accordion.js new file mode 100644 index 000000000..12926729b --- /dev/null +++ b/packages/inspection-report/src/components/DamageReport/Accordion.js @@ -0,0 +1,65 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { StyleSheet, Text, TouchableOpacity, View, Platform } from 'react-native'; +import { IconButton } from '../common'; + +const styles = StyleSheet.create({ + container: { + border: '1px solid #a29e9e', + borderRadius: 8, + }, + header: { + alignItems: 'center', + display: 'flex', + flexDirection: 'row', + justifyContent: 'space-between', + ...Platform.select({ + web: { + padding: '10px' + }, + native: { + pospaddingition: 10 + } + }) + }, + title: { + color: '#fafafa', + fontSize: 18, + }, +}); + +function Accordion({ title, isCollapsed, children, onPress }) { + return ( + + + + {title} + + + + { + !isCollapsed && children + } + + ); +} + +Accordion.propTypes = { + children: PropTypes.element, + isCollapsed: PropTypes.bool, + onPress: PropTypes.func, + title: PropTypes.string, +}; + +Accordion.defaultProps = { + title: '', + isCollapsed: false, + children: null, + onPress: () => { }, +}; + +export default Accordion; diff --git a/packages/inspection-report/src/components/DamageReport/DamageReport.js b/packages/inspection-report/src/components/DamageReport/DamageReport.js index 1a4204809..e5ba07f1d 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageReport.js +++ b/packages/inspection-report/src/components/DamageReport/DamageReport.js @@ -2,7 +2,7 @@ import { Loader } from '@monkvision/ui'; import PropTypes from 'prop-types'; import React, { useEffect, useMemo, useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; -import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { StyleSheet, Text, TouchableOpacity, View, Platform } from 'react-native'; import { CommonPropTypes, DamageMode, VehicleType } from '../../resources'; import { IconButton } from '../common'; @@ -12,9 +12,10 @@ import { PdfStatus, useConfirmModals, useDamageReportStateHandlers, useFetchInsp import Overview from './Overview'; import TabButton from './TabButton'; import TabGroup from './TabGroup'; +import Accordion from './Accordion'; import UpdateDamageModal from './UpdateDamageModal'; import UpdateDamagePopUp from './UpdateDamagePopUp'; -import { useCurrency } from '../../hooks'; +import { useCurrency, useDesktopMode } from '../../hooks'; const styles = StyleSheet.create({ container: { @@ -53,6 +54,14 @@ const styles = StyleSheet.create({ flex: 1, overflowY: 'auto', }, + tabDesktopContent: { + display: 'flex', + flexDirection: 'row', + }, + tabDesktopInnerContainer: { + width: '50%', + paddingHorizontal: 15, + }, text: { color: '#fafafa', fontSize: 18, @@ -91,6 +100,22 @@ const styles = StyleSheet.create({ fontSize: 22, color: '#ffffff', }, + partsImageWrapper: { + border: '1px solid #a29e9e', + borderRadius: 8, + marginTop: 15, + }, + galleryWrapper: { + ...Platform.select({ + web: { + maxHeight: '39vh', + }, + native: { + maxHeight: '39%' + } + }), + overflowY: 'auto', + }, }); const Tabs = { @@ -110,7 +135,9 @@ export default function DamageReport({ }) { const { t } = useTranslation(); const { updateCurrency } = useCurrency(); + const isDesktopMode = useDesktopMode(); const [currentTab, setCurrentTab] = useState(Tabs.OVERVIEW); + const [showPictures, setShowPictures] = useState(true); useEffect(() => { updateCurrency(currencyCharacter); @@ -129,6 +156,8 @@ export default function DamageReport({ const { state: { editedDamage, + editedPartDamageImages, + editedZoomedDamageImages, editedDamagePart, editedDamageImages, isPopUpVisible, @@ -193,7 +222,15 @@ export default function DamageReport({ if (pdfStatus === PdfStatus.ERROR) { setIsEditable(true); } - }, [pdfStatus]) + }, [pdfStatus]); + + useEffect(() => { + if (isPopUpVisible) { + setShowPictures(false); + } else { + setShowPictures(true); + } + }, [isPopUpVisible]); return ( @@ -222,66 +259,96 @@ export default function DamageReport({ )} {!isLoading && !isError && ( - <> - - - setCurrentTab(Tabs.OVERVIEW)} - position="left" - /> - setCurrentTab(Tabs.GALLERY)} - position="right" - /> - - - - {currentTab === Tabs.OVERVIEW && !isInspectionReady && ( - - + <> + { + !isDesktopMode + && ( + + + setCurrentTab(Tabs.OVERVIEW)} + position="left" + /> + setCurrentTab(Tabs.GALLERY)} + position="right" + /> + - )} - {currentTab === Tabs.OVERVIEW && isInspectionReady && ( - - )} - {currentTab === Tabs.GALLERY && ( - - )} - - + ) + } + + {currentTab === Tabs.OVERVIEW && !isInspectionReady && ( + + + + )} + {currentTab === Tabs.OVERVIEW && isInspectionReady && ( + + )} + {currentTab === Tabs.GALLERY && ( + + )} + { + isDesktopMode && ( + + setShowPictures(!showPictures)}> + + + + + { + isPopUpVisible && ( + + + {t('damageReport.partsPictures')} + + + + {t('damageReport.zoomedPicturesOfThePart')} + + + + ) + } + + ) + } + + )} { - isPopUpVisible && ( - - ) - } + isPopUpVisible && ( + + ) + } { isModalVisible && ( ) } - {confirmModal && ( - - )} + { + confirmModal && ( + + ) + } ); } @@ -324,8 +393,8 @@ DamageReport.defaultProps = { currencyCharacter: '€', damageMode: DamageMode.ALL, generatePdf: false, - onStartNewInspection: () => {}, - onPdfPressed: () => {}, + onStartNewInspection: () => { }, + onPdfPressed: () => { }, pdfOptions: undefined, vehicleType: VehicleType.CUV, }; diff --git a/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js b/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js index 13591ebc3..bd08fd984 100644 --- a/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js +++ b/packages/inspection-report/src/components/DamageReport/UpdateDamagePopUp/index.js @@ -12,7 +12,7 @@ import { ScrollView, } from 'react-native'; import { useTranslation } from 'react-i18next'; -import { useOrientation } from '../../../hooks'; +import { useOrientation, useDesktopMode } from '../../../hooks'; import { CommonPropTypes, DamageMode, DisplayMode } from '../../../resources'; import ImageButton from './ImageButton'; @@ -21,7 +21,6 @@ import DamageManipulator from '../DamageManipulator'; const styles = StyleSheet.create({ container: { position: 'absolute', - width: '100%', height: '100%', }, touchable: { @@ -111,6 +110,7 @@ export default function UpdateDamagePopUp({ }) { const { t } = useTranslation(); const windowOrientation = useOrientation(); + const isDesktopMode = useDesktopMode(); const { height: bottomLimitY } = useWindowDimensions(); const [displayMode] = useState(damage ? DisplayMode.FULL : DisplayMode.MINIMAL); const [viewMode, setViewMode] = useState(null); @@ -205,7 +205,11 @@ export default function UpdateDamagePopUp({ {t(`damageReport.parts.${part}`)} - + { + !isDesktopMode && ( + + ) + } + diff --git a/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js b/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js index d78113112..7e5616cd7 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js @@ -10,6 +10,8 @@ export default function useDamageReportStateHandlers({ const [editedDamage, setEditedDamage] = useState(undefined); const [editedDamagePart, setEditedDamagePart] = useState(undefined); const [editedDamageImages, setEditedDamageImages] = useState(undefined); + const [editedPartDamageImages, setEditedPartDamageImages] = useState(undefined); + const [editedZoomedDamageImages, setEditedZoomedDamageImages] = useState(undefined); const [isPopUpVisible, setIsPopUpVisible] = useState(false); const [isModalVisible, setIsModalVisible] = useState(false); const [isEditable, setIsEditable] = useState(true); @@ -18,6 +20,8 @@ export default function useDamageReportStateHandlers({ editedDamage, editedDamagePart, editedDamageImages, + editedPartDamageImages, + editedZoomedDamageImages, isPopUpVisible, isModalVisible, isEditable, @@ -25,6 +29,8 @@ export default function useDamageReportStateHandlers({ editedDamage, editedDamagePart, editedDamageImages, + editedPartDamageImages, + editedZoomedDamageImages, isPopUpVisible, isModalVisible, isEditable, @@ -40,6 +46,8 @@ export default function useDamageReportStateHandlers({ setEditedDamage(undefined); setEditedDamagePart(undefined); setEditedDamageImages(undefined); + setEditedPartDamageImages(undefined); + setEditedZoomedDamageImages(undefined); }, []); const handlePopUpDismiss = useCallback(() => { @@ -63,6 +71,8 @@ export default function useDamageReportStateHandlers({ if (!damage || !damage?.pricing) { setEditedDamagePart(partName); setEditedDamageImages([]); + setEditedPartDamageImages([]); + setEditedZoomedDamageImages([]); setIsPopUpVisible(true); } } @@ -73,9 +83,14 @@ export default function useDamageReportStateHandlers({ if (!damage) { throw new Error(`Unable to find damage with corresponding pill part "${partName}"`); } + const { images } = damage; + const partDamageImages = images.filter((img) => img.base_image_type === 'beauty_shot'); + const zoomedDamageImages = images.filter((img) => img.base_image_type === 'close_up'); setEditedDamage(damage); setEditedDamagePart(partName); - setEditedDamageImages(damage.images); + setEditedDamageImages(images); + setEditedPartDamageImages(partDamageImages); + setEditedZoomedDamageImages(zoomedDamageImages); setIsPopUpVisible(true); }, [damages]); diff --git a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js index c2fc5ab76..c69a9cf1f 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js @@ -64,6 +64,10 @@ export default function usePdfReport({ if (!status || status !== 422) { console.error('Error while trying to fetch the PDF download URL :', err); setPdfStatus(PdfStatus.ERROR); + + setTimeout(() => { + setPdfStatus(PdfStatus.NOT_REQUESTED); + }, 5000); } setTimeout(() => { diff --git a/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js b/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js index 5352e3b9f..3b0f27e33 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js @@ -3,8 +3,6 @@ import monk from '@monkvision/corejs'; import { RepairOperation, Severity } from '../../../resources'; -const MAX_RELATED_IMAGES = 5; - function getRepairOperation(repairType) { switch (repairType) { case true: @@ -35,7 +33,13 @@ function getPictures(inspection) { width: image.width, height: image.height, mimetype: image.mimetype, + image_type: image.image_type, url: image.path, + rendered_outputs: image.rendered_outputs.map((damagedImage) => ({ + isRendered: true, + label: image.additional_data?.label ?? undefined, + url: damagedImage.path, + })), label: image.additional_data?.label ?? undefined, })); } @@ -46,8 +50,12 @@ function getDamages(inspection) { part: severityResult.label, images: inspection.parts?.find( (inspectionPart) => (inspectionPart.id === severityResult.related_item_id), - )?.related_images?.slice(0, MAX_RELATED_IMAGES)?.map( - (relatedImage) => ({ url: relatedImage.path }), + )?.related_images?.map( + (relatedImage) => ({ + base_image_type: relatedImage.base_image_type, + object_type: relatedImage.object_type, + url: relatedImage.path, + }), ) ?? [], severity: getSeverity(severityResult.value.custom_severity.level), pricing: severityResult.value.custom_severity.pricing ?? 0, diff --git a/packages/inspection-report/src/components/DamageReport/index.js b/packages/inspection-report/src/components/DamageReport/index.js index 74c0a63bb..437d0d05c 100644 --- a/packages/inspection-report/src/components/DamageReport/index.js +++ b/packages/inspection-report/src/components/DamageReport/index.js @@ -3,7 +3,7 @@ import { I18nextProvider } from 'react-i18next'; import i18n from '../../i18n'; import DamageReport from './DamageReport'; -import { CurrencyProvider } from './../../hooks'; +import { CurrencyProvider } from '../../hooks'; function DamageReportHOC(props) { return ( diff --git a/packages/inspection-report/src/components/Gallery/Thumbnail.js b/packages/inspection-report/src/components/Gallery/Thumbnail.js index 5a637691f..ea8015327 100644 --- a/packages/inspection-report/src/components/Gallery/Thumbnail.js +++ b/packages/inspection-report/src/components/Gallery/Thumbnail.js @@ -26,7 +26,7 @@ const responsiveImageSizes = [ ]; function Thumbnail({ image, click }) { - const { i18n } = useTranslation(); + const { i18n, t } = useTranslation(); const { width } = useWindowDimensions(); const label = useMemo(() => (image.label ? image.label[i18n.language] : ''), [i18n]); @@ -57,7 +57,11 @@ function Thumbnail({ image, click }) { /> ) } - {label} + + {label} + {' '} + {image?.isRendered && t('gallery.renderedOutput')} + ); @@ -66,6 +70,7 @@ function Thumbnail({ image, click }) { Thumbnail.propTypes = { click: PropTypes.func, image: PropTypes.shape({ + isRendered: PropTypes.bool, label: PropTypes.shape({ en: PropTypes.string, fr: PropTypes.string, @@ -82,6 +87,7 @@ Thumbnail.defaultProps = { fr: '', }, url: '', + isRendered: false, }, }; diff --git a/packages/inspection-report/src/components/Gallery/index.js b/packages/inspection-report/src/components/Gallery/index.js index de9cb6ac6..de6e8449f 100644 --- a/packages/inspection-report/src/components/Gallery/index.js +++ b/packages/inspection-report/src/components/Gallery/index.js @@ -5,6 +5,7 @@ import { MaterialIcons } from '@expo/vector-icons'; import { useTranslation } from 'react-i18next'; import Thumbnail from './Thumbnail'; +import { useDesktopMode } from '../../hooks'; const styles = StyleSheet.create({ container: { @@ -80,6 +81,7 @@ const styles = StyleSheet.create({ function Gallery({ pictures }) { const { i18n, t } = useTranslation(); + const isDesktopMode = useDesktopMode(); const [focusedPhoto, setFocusedPhoto] = useState(null); const handleOnImageClick = useCallback((focusedImage) => { @@ -97,9 +99,20 @@ function Gallery({ pictures }) { return ( pictures.map((image, index) => ( // eslint-disable-next-line react/no-array-index-key - - - + + + + + { + isDesktopMode && image?.rendered_outputs && image?.rendered_outputs.length > 0 + && image.rendered_outputs.map((innerImage, innerIndex) => ( + // eslint-disable-next-line react/no-array-index-key + + + + )) + } + )) ); } @@ -108,9 +121,20 @@ function Gallery({ pictures }) { { pictures.map((image, index) => ( // eslint-disable-next-line react/no-array-index-key - - - + + + + + { + isDesktopMode && image?.rendered_outputs && image?.rendered_outputs.length > 0 + && image.rendered_outputs.map((innerImage, innerIndex) => ( + // eslint-disable-next-line react/no-array-index-key + + + + )) + } + )) } @@ -118,7 +142,12 @@ function Gallery({ pictures }) { }, [pictures]); return ( - + {pictures.length > 0 ? renderList() : ({t('gallery.empty')})} { }, - updateCurrency: () => { } + updateCurrency: () => { }, }); /** @@ -27,14 +27,13 @@ export function CurrencyProvider({ children }) { const formateValue = useCallback((value) => { if (signAheadCurrencies.includes(currency)) { return `${currency}${value}`; - } else { - return `${value}${currency}`; } + return `${value}${currency}`; }, [currency]); - const currencyContextValue = useMemo(() => - ({ updateCurrency: setCurrency, formateValue }), - [currency] + const currencyContextValue = useMemo( + () => ({ updateCurrency: setCurrency, formateValue }), + [currency], ); return ( diff --git a/packages/inspection-report/src/hooks/useDesktopMode.js b/packages/inspection-report/src/hooks/useDesktopMode.js new file mode 100644 index 000000000..c01f0f1e6 --- /dev/null +++ b/packages/inspection-report/src/hooks/useDesktopMode.js @@ -0,0 +1,10 @@ +import { useMemo } from 'react'; +import { useWindowDimensions } from 'react-native'; + +const DESKTOP_BREAKPOINT_PX = 950; + +export default function useDesktopMode() { + const { width } = useWindowDimensions(); + + return useMemo(() => (width >= DESKTOP_BREAKPOINT_PX), [width]); +} diff --git a/packages/inspection-report/src/i18n/resources/en.js b/packages/inspection-report/src/i18n/resources/en.js index e1da53c38..a211c29bc 100644 --- a/packages/inspection-report/src/i18n/resources/en.js +++ b/packages/inspection-report/src/i18n/resources/en.js @@ -49,9 +49,13 @@ const en = { cancel: 'Cancel', }, }, + pictures: 'Pictures', + partsPictures: 'Parts Pictures', + zoomedPicturesOfThePart: 'Zoomed pictures of the part', }, gallery: { empty: 'This inspection does not have any photo yet.', + renderedOutput: '(rendered output)', }, damageManipulator: { damages: 'Damages', diff --git a/packages/inspection-report/src/i18n/resources/fr.js b/packages/inspection-report/src/i18n/resources/fr.js index 24e1e381b..4dfa8bbcd 100644 --- a/packages/inspection-report/src/i18n/resources/fr.js +++ b/packages/inspection-report/src/i18n/resources/fr.js @@ -49,9 +49,13 @@ const fr = { cancel: 'Annuler', }, }, + pictures: 'Images', + partsPictures: 'Images de la partie de voiture', + zoomedPicturesOfThePart: 'Images zoomées de la partie de voiture', }, gallery: { empty: 'Cette inspection n\'a pas encore de photo.', + renderedOutput: '(rendu d\'image)', }, damageManipulator: { damages: 'Dégâts', diff --git a/packages/openapi-specs-to-ts/package.json b/packages/openapi-specs-to-ts/package.json index be7c05840..8a97568b4 100644 --- a/packages/openapi-specs-to-ts/package.json +++ b/packages/openapi-specs-to-ts/package.json @@ -1,6 +1,6 @@ { "name": "@monkvision/openapi-specs-to-ts", - "version": "3.8.1", + "version": "3.8.3", "description": "A Node script that automatically creates TypeScript type definitions based on the JSON Schema defined in an openapi specification file.", "main": "dist/index.js", "scripts": { diff --git a/packages/sights/package.json b/packages/sights/package.json index 38d1d6f25..1564f825e 100644 --- a/packages/sights/package.json +++ b/packages/sights/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/sights", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.1", + "version": "3.8.3", "main": "dist/index.json", "private": false, "description": "Vehicle sights assets for AI-powered damage detection", diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index e1588df6b..51574a5cd 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/toolkit", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.1", + "version": "3.8.3", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/toolkit/#readme", diff --git a/packages/ui/package.json b/packages/ui/package.json index ca026a9ff..0641d54f2 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/ui", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.1", + "version": "3.8.3", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/ui/#readme", @@ -48,7 +48,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/toolkit": "3.8.1", + "@monkvision/toolkit": "3.8.3", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/packages/visualization/package.json b/packages/visualization/package.json index 4ba90e5c0..de209efc9 100644 --- a/packages/visualization/package.json +++ b/packages/visualization/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/visualization", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.1", + "version": "3.8.3", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/visualization/#readme", @@ -53,7 +53,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.8.1", + "@monkvision/corejs": "3.8.3", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/scripts/index.js b/scripts/index.js index 448612caf..ad68e3101 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -29,7 +29,7 @@ async function getTransactions(clusterEnd, projectId) { return axios.request({ method: 'get', headers: { Authorization: `Bearer ${process.env.TOKEN}` }, - url: `${sentryEndPoint}/api/0/organizations/${organizations}/eventsv2/?field=id&field=transaction.op&field=transaction.status&field=task&field=inspectionId&field=timestamp&field=retakenPictures&field=takenPictures&field=percentOfNonCompliancePics&statsPeriod=${statsPeriod}&per_page=${recordPerPage}&query=${query}&referrer=api.discover.query-table&cursor=0:${clusterEnd}:0&project=${projectId}&environment=${process.env.ENVIRONMENT}`, + url: `${sentryEndPoint}/api/0/organizations/${organizations}/events/?field=id&field=transaction.op&field=transaction.status&field=task&field=inspectionId&field=timestamp&field=retakenPictures&field=takenPictures&field=percentOfNonCompliancePics&statsPeriod=${statsPeriod}&per_page=${recordPerPage}&query=${query}&referrer=api.discover.query-table&cursor=0:${clusterEnd}:0&project=${projectId}&environment=${process.env.ENVIRONMENT}`, }); } diff --git a/src/components/ErrorModal/index.js b/src/components/ErrorModal/index.js new file mode 100644 index 000000000..8c9ed2c25 --- /dev/null +++ b/src/components/ErrorModal/index.js @@ -0,0 +1,39 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { Text, TouchableOpacity, useWindowDimensions, View } from 'react-native'; +import { useTheme } from 'react-native-paper'; + +import styles from './styles'; + +export default function ErrorModal({ texts, onPress }) { + const { colors } = useTheme(); + const { width } = useWindowDimensions(); + + return ( + + + {texts.message} + + + {texts.label} + + + + + ); +} + +ErrorModal.propTypes = { + onPress: PropTypes.func, + texts: PropTypes.shape({ + label: PropTypes.string.isRequired, + message: PropTypes.string.isRequired, + }).isRequired, +}; + +ErrorModal.defaultProps = { + onPress: () => {}, +}; diff --git a/src/components/ErrorModal/styles.js b/src/components/ErrorModal/styles.js new file mode 100644 index 000000000..2245cca1b --- /dev/null +++ b/src/components/ErrorModal/styles.js @@ -0,0 +1,41 @@ +import { StyleSheet } from 'react-native'; + +export default StyleSheet.create({ + container: { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + alignItems: 'center', + justifyContent: 'center', + zIndex: 999, + backgroundColor: '#000000BE', + }, + errorPopup: { + padding: 25, + paddingBottom: 10, + borderRadius: 15, + flexDirection: 'column', + backgroundColor: '#232429', + }, + errorMessage: { + color: '#ffffff', + fontSize: 16, + }, + errorButtonsContainer: { + marginTop: 25, + alignSelf: 'stretch', + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'row', + }, + errorButton: { + padding: 10, + borderRadius: 4, + }, + errorButtonText: { + color: '#ffffff', + fontSize: 16, + }, +}); diff --git a/src/i18n/resources/en.js b/src/i18n/resources/en.js index cd7eb9939..99a2f1a98 100644 --- a/src/i18n/resources/en.js +++ b/src/i18n/resources/en.js @@ -127,6 +127,12 @@ const en = { on: 'On', off: 'Off', }, + skipRetake: { + error: { + message: 'Sorry, we couldn\'t finish the inspection', + label: 'Start New Inspection', + }, + }, custom: '+', }, }, diff --git a/src/i18n/resources/fr.js b/src/i18n/resources/fr.js index 4096dd63a..a72b21c02 100644 --- a/src/i18n/resources/fr.js +++ b/src/i18n/resources/fr.js @@ -126,6 +126,12 @@ const fr = { on: 'Activer', off: 'Désactiver', }, + skipRetake: { + error: { + message: 'Désolé, nous n\'avons pas pu terminer l\'inspection', + label: 'Commencer une nouvelle inspection', + }, + }, custom: '+', }, }, diff --git a/src/screens/InspectionCapture/index.js b/src/screens/InspectionCapture/index.js index 65356b3c6..79049d272 100644 --- a/src/screens/InspectionCapture/index.js +++ b/src/screens/InspectionCapture/index.js @@ -10,6 +10,7 @@ import monk, { useMonitoring } from '@monkvision/corejs'; import { utils } from '@monkvision/toolkit'; import * as names from 'screens/names'; +import ErrorModal from 'components/ErrorModal'; import mapTasksToSights from './mapTasksToSights'; import styles from './styles'; import useSnackbar from '../../hooks/useSnackbar'; @@ -30,6 +31,7 @@ export default function InspectionCapture() { const [isFocused, setFocused] = useState(false); const [success, setSuccess] = useState(false); const [cameraLoading, setCameraLoading] = useState(false); + const [errorModal, setErrorModal] = useState(null); const { setShowMessage, Notice } = useSnackbar(); const { isFullscreen, requestFullscreen } = useFullscreen(); @@ -89,6 +91,18 @@ export default function InspectionCapture() { }).then(({ entities, result }) => { dispatch(monk.actions.gotOneTask({ entities, result, inspectionId })); resolve(name); + }).catch((err) => { + errorHandler(err); + setErrorModal({ + texts: { + message: t('capture.skipRetake.error.message'), + label: t('capture.skipRetake.error.label'), + }, + onPress: () => { + setErrorModal(null); + navigation.navigate(names.LANDING); + }, + }); }); })); @@ -212,6 +226,12 @@ export default function InspectionCapture() { overlayPathStyles={{ strokeWidth: 2 }} /> + {errorModal && ( + + )} ); } diff --git a/src/screens/InspectionCreate/index.js b/src/screens/InspectionCreate/index.js index d7e1237de..7e8eeb8c0 100644 --- a/src/screens/InspectionCreate/index.js +++ b/src/screens/InspectionCreate/index.js @@ -70,7 +70,6 @@ export default function InspectionCreate() { utils.log(['[Click] Inspection task chosen: ', selected]); const response = await createInspection.start(selected); if (response !== null) { - // TODO: Add Monitoring code for setTag in MN-182 setInspectionId(response.result); } } @@ -108,9 +107,7 @@ export default function InspectionCreate() { useEffect(() => { if (isAuthenticated) { - axios.get(`https://${ExpoConstants.manifest.extra.AUTH_DOMAIN}/userinfo?access_token=${accessToken}`).then(() => { - // TODO: Add Monitoring code for setTag and setUser in MN-182 - }); + axios.get(`https://${ExpoConstants.manifest.extra.AUTH_DOMAIN}/userinfo?access_token=${accessToken}`).then(() => { }); } }, [isAuthenticated]); diff --git a/src/screens/InspectionCreate/useCreateInspection/index.js b/src/screens/InspectionCreate/useCreateInspection/index.js index 5ea88edc3..4188daa0b 100644 --- a/src/screens/InspectionCreate/useCreateInspection/index.js +++ b/src/screens/InspectionCreate/useCreateInspection/index.js @@ -19,6 +19,12 @@ export default function useCreateInspection(vehicle) { damageDetection: { ...taskOptions, generate_subimages_parts: {}, + generate_subimages_damages: {}, + damage_score_threshold: 0.3, + generate_visual_output: { + generate_parts: true, + generate_damages: true + }, }, }; @@ -26,12 +32,14 @@ export default function useCreateInspection(vehicle) { tasks, vehicle, damage_severity: { output_format: 'toyota' }, + additionalData: { + damage_detection_version: "v2", + }, }); }, []); const handleRequestSuccess = useCallback(({ entities, result }) => { setInspectionId(result); - // TODO: Add Monitoring code for setTag in MN-182 utils.log(['[Event] Starting inspection', result]); dispatch(monk.actions.gotOneInspection({ entities, result })); }, [dispatch]); diff --git a/src/screens/InspectionVehicleUpdate/index.js b/src/screens/InspectionVehicleUpdate/index.js index ee5da470c..a3fa844fd 100644 --- a/src/screens/InspectionVehicleUpdate/index.js +++ b/src/screens/InspectionVehicleUpdate/index.js @@ -72,9 +72,7 @@ export default function InspectionVehicleUpdate() { useEffect(() => { if (isAuthenticated) { - axios.get(`https://${ExpoConstants.manifest.extra.AUTH_DOMAIN}/userinfo?access_token=${accessToken}`).then(() => { - // TODO: Add Monitoring code for setUser in MN-182 - }); + axios.get(`https://${ExpoConstants.manifest.extra.AUTH_DOMAIN}/userinfo?access_token=${accessToken}`).then(() => { }); } }, [isAuthenticated]); diff --git a/src/screens/Landing/SignOut/index.js b/src/screens/Landing/SignOut/index.js index 7a1d746ca..e1d27d0eb 100644 --- a/src/screens/Landing/SignOut/index.js +++ b/src/screens/Landing/SignOut/index.js @@ -16,7 +16,6 @@ export default function SignOut({ onSuccess }) { const signOut = () => { utils.log(['[Click]', 'Sign-out user']); - // TODO: Add Monitoring code for setUser in MN-182 AsyncStorage.removeItem(ASYNC_STORAGE_AUTH_KEY) .catch((err) => { errorHandler(err); From b042ebe9499f7082361e28343afbfdfa912155d2 Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Fri, 13 Oct 2023 11:44:46 +0300 Subject: [PATCH 24/27] Merge parent (#17) --- package.json | 2 +- packages/camera/package.json | 10 +- .../UploadCard/hooks/useSubtitle.js | 13 +- .../src/components/UploadCenter/index.js | 14 +- .../src/components/DamageReport/Accordion.js | 4 +- .../components/DamageReport/DamageReport.js | 20 ++- .../DamageReport/UpdateDamagePopUp/index.js | 4 +- .../hooks/useDamageReportStateHandlers.js | 12 +- .../DamageReport/hooks/useFetchInspection.js | 2 + .../hooks/useProcessInspection.js | 19 ++- .../src/components/Gallery/Thumbnail.js | 6 +- .../src/components/Gallery/index.js | 158 ++++++++++++++++-- .../src/hooks/useCurrency.js | 11 +- .../src/i18n/resources/en.js | 4 +- .../src/i18n/resources/fr.js | 4 +- packages/openapi-specs-to-ts/package.json | 2 +- packages/sights/package.json | 2 +- packages/toolkit/package.json | 2 +- packages/ui/package.json | 4 +- packages/visualization/package.json | 4 +- src/screens/InspectionCapture/index.js | 2 +- .../useCreateInspection/index.js | 17 +- 22 files changed, 249 insertions(+), 67 deletions(-) diff --git a/package.json b/package.json index d83f545c5..a67706be3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "monk", - "version": "3.8.3", + "version": "3.8.4", "author": "monkvision", "license": "BSD-3-Clause-Clear", "private": true, diff --git a/packages/camera/package.json b/packages/camera/package.json index a7f14a975..89b5ef4e6 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/camera", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.3", + "version": "3.8.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/camera/#readme", @@ -70,10 +70,10 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.8.3", - "@monkvision/inspection-report": "3.8.3", - "@monkvision/sights": "3.8.3", - "@monkvision/toolkit": "3.8.3", + "@monkvision/corejs": "3.8.4", + "@monkvision/inspection-report": "3.8.4", + "@monkvision/sights": "3.8.4", + "@monkvision/toolkit": "3.8.4", "expo-camera": "^12.3.0", "react": "*", "react-native": "*", diff --git a/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js b/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js index e6d79f418..b32e7da69 100644 --- a/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js +++ b/packages/camera/src/components/UploadCenter/UploadCard/hooks/useSubtitle.js @@ -10,8 +10,8 @@ const validErrorCodes = [ 'WRONG_CENTER_PART', 'MISSING_PARTS', 'HIDDEN_PARTS', - 'TOO_ZOOMED', - 'NOT_ZOOMED_ENOUGH', + // 'TOO_ZOOMED', + // 'NOT_ZOOMED_ENOUGH', ]; export default function useSubtitle({ @@ -42,9 +42,12 @@ export default function useSubtitle({ if (badQuality && iqa.reasons) { iqa.reasons.forEach((reason, index) => { - const first = index === 0; - reasons.push(first ? t(`uploadCenter.subtitle.reasons.${reason}`) - : `${t('uploadCenter.subtitle.reasonsJoin')} ${t(`uploadCenter.subtitle.reasons.${reason}`)}`); + const errorCode = validErrorCodes.find((code) => reason.startsWith(code)); + if (errorCode && errorCode !== 'UNKNOWN_SIGHT') { + const first = index === 0; + reasons.push(first ? t(`uploadCenter.subtitle.reasons.${reason}`) + : `${t('uploadCenter.subtitle.reasonsJoin')} ${t(`uploadCenter.subtitle.reasons.${reason}`)}`); + } }); } diff --git a/packages/camera/src/components/UploadCenter/index.js b/packages/camera/src/components/UploadCenter/index.js index 5b1babc16..1cee3efa9 100644 --- a/packages/camera/src/components/UploadCenter/index.js +++ b/packages/camera/src/components/UploadCenter/index.js @@ -118,8 +118,8 @@ export default function UploadCenter({ const displayRetakeAll = useMemo( () => Object.values(uploads.state).some((u) => !!u.error) || Object.values(compliance.state) .some((c) => ['rejected', 'unsatisfied'].includes(c.status) - || c?.result?.data?.compliances?.image_quality_assessment?.is_compliant === false - || c?.result?.data?.compliances?.zoom_level?.is_compliant === false), + || c?.result?.data?.compliances?.image_quality_assessment?.is_compliant === false), + // || c?.result?.data?.compliances?.zoom_level?.is_compliant === false), [compliance, uploads], ); @@ -141,11 +141,11 @@ export default function UploadCenter({ reasons: value?.result?.data?.compliances?.image_quality_assessment?.reasons, status: value?.result?.data?.compliances?.image_quality_assessment?.status, }, - zoom_level: { - isCompliant: value?.result?.data?.compliances?.zoom_level?.is_compliant, - reasons: value?.result?.data?.compliances?.zoom_level?.reasons, - status: value?.result?.data?.compliances?.zoom_level?.status, - }, + // zoom_level: { + // isCompliant: value?.result?.data?.compliances?.zoom_level?.is_compliant, + // reasons: value?.result?.data?.compliances?.zoom_level?.reasons, + // status: value?.result?.data?.compliances?.zoom_level?.status, + // }, }, })), }), [ids, compliance.state]); diff --git a/packages/inspection-report/src/components/DamageReport/Accordion.js b/packages/inspection-report/src/components/DamageReport/Accordion.js index 12926729b..030dbbb3a 100644 --- a/packages/inspection-report/src/components/DamageReport/Accordion.js +++ b/packages/inspection-report/src/components/DamageReport/Accordion.js @@ -49,10 +49,10 @@ function Accordion({ title, isCollapsed, children, onPress }) { } Accordion.propTypes = { - children: PropTypes.element, + title: PropTypes.string, isCollapsed: PropTypes.bool, + children: PropTypes.element, onPress: PropTypes.func, - title: PropTypes.string, }; Accordion.defaultProps = { diff --git a/packages/inspection-report/src/components/DamageReport/DamageReport.js b/packages/inspection-report/src/components/DamageReport/DamageReport.js index e5ba07f1d..2a58f5db0 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageReport.js +++ b/packages/inspection-report/src/components/DamageReport/DamageReport.js @@ -71,7 +71,10 @@ const styles = StyleSheet.create({ right: 0, }, title: { - fontSize: 20, + fontSize: 22, + }, + subTitle: { + fontSize: 14, }, button: { marginLeft: 20, @@ -115,6 +118,7 @@ const styles = StyleSheet.create({ } }), overflowY: 'auto', + paddingBottom: 15 }, }); @@ -148,6 +152,7 @@ export default function DamageReport({ isError, retry, isInspectionReady, + vinNumber, pictures, damages, setDamages, @@ -175,6 +180,7 @@ export default function DamageReport({ inspectionId, damages, setDamages, + pictures, }); const { @@ -235,7 +241,17 @@ export default function DamageReport({ return ( - {t('damageReport.title')} + + {t('damageReport.title')} + { + isDesktopMode && ( + <> + {t('damageReport.inspection')} : {inspectionId} + {t('damageReport.vinNumber')} : {vinNumber} + + ) + } + { setViewMode(isToggled ? DisplayMode.FULL : DisplayMode.MINIMAL); diff --git a/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js b/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js index 7e5616cd7..b319536c7 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/useDamageReportStateHandlers.js @@ -6,6 +6,7 @@ export default function useDamageReportStateHandlers({ inspectionId, damages, setDamages, + pictures, }) { const [editedDamage, setEditedDamage] = useState(undefined); const [editedDamagePart, setEditedDamagePart] = useState(undefined); @@ -84,8 +85,15 @@ export default function useDamageReportStateHandlers({ throw new Error(`Unable to find damage with corresponding pill part "${partName}"`); } const { images } = damage; - const partDamageImages = images.filter((img) => img.base_image_type === 'beauty_shot'); - const zoomedDamageImages = images.filter((img) => img.base_image_type === 'close_up'); + const damagedPartImage = pictures.find(img => img.id === damage?.images[0]?.id)?.rendered_outputs?.map(img => ({ + id: img.id + '1', + url: img.url, + })) ?? []; + const partDamageImages = images.filter(img => img.base_image_type === "beauty_shot").map((img, index) => ({ + ...img, + rendered_outputs: index === 0 ? pictures.find(pic => pic.id === img?.id)?.rendered_outputs : [] + })); + const zoomedDamageImages = images.filter(img => img.base_image_type === "close_up"); setEditedDamage(damage); setEditedDamagePart(partName); setEditedDamageImages(images); diff --git a/packages/inspection-report/src/components/DamageReport/hooks/useFetchInspection.js b/packages/inspection-report/src/components/DamageReport/hooks/useFetchInspection.js index 85f6f647b..6ed9e6a50 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/useFetchInspection.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/useFetchInspection.js @@ -16,6 +16,7 @@ export default function useFetchInspection({ processInspection, resetState, isInspectionReady, + vinNumber, pictures, damages, setDamages, @@ -59,6 +60,7 @@ export default function useFetchInspection({ isError, retry, isInspectionReady, + vinNumber, pictures, damages, setDamages, diff --git a/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js b/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js index 3b0f27e33..44b0f2f5d 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/useProcessInspection.js @@ -35,11 +35,16 @@ function getPictures(inspection) { mimetype: image.mimetype, image_type: image.image_type, url: image.path, - rendered_outputs: image.rendered_outputs.map((damagedImage) => ({ - isRendered: true, - label: image.additional_data?.label ?? undefined, - url: damagedImage.path, - })), + rendered_outputs: image.rendered_outputs + .filter((damage) => damage?.additional_data?.description === 'rendering of detected damages') + .map((damagedImage) => { + return { + id: image.id, + isRendered: true, + label: image.additional_data?.label ?? undefined, + url: damagedImage.path, + } + }), label: image.additional_data?.label ?? undefined, })); } @@ -52,6 +57,7 @@ function getDamages(inspection) { (inspectionPart) => (inspectionPart.id === severityResult.related_item_id), )?.related_images?.map( (relatedImage) => ({ + id: relatedImage.base_image_id, base_image_type: relatedImage.base_image_type, object_type: relatedImage.object_type, url: relatedImage.path, @@ -67,6 +73,7 @@ function getDamages(inspection) { export default function useProcessInspection() { const [isInspectionReady, setIsInspectionReady] = useState(false); + const [vinNumber, setVinNumber] = useState(''); const [pictures, setPictures] = useState([]); const [damages, setDamages] = useState([]); @@ -84,12 +91,14 @@ export default function useProcessInspection() { ); setPictures(getPictures(axiosResponse.data)); setDamages(getDamages(axiosResponse.data)); + setVinNumber(axiosResponse.data?.vehicle?.vin); }, []); return { processInspection, resetState, isInspectionReady, + vinNumber, pictures, damages, setDamages, diff --git a/packages/inspection-report/src/components/Gallery/Thumbnail.js b/packages/inspection-report/src/components/Gallery/Thumbnail.js index ea8015327..866ea4246 100644 --- a/packages/inspection-report/src/components/Gallery/Thumbnail.js +++ b/packages/inspection-report/src/components/Gallery/Thumbnail.js @@ -58,9 +58,7 @@ function Thumbnail({ image, click }) { ) } - {label} - {' '} - {image?.isRendered && t('gallery.renderedOutput')} + {label} {image?.isRendered && t('gallery.withDamages')} @@ -70,12 +68,12 @@ function Thumbnail({ image, click }) { Thumbnail.propTypes = { click: PropTypes.func, image: PropTypes.shape({ - isRendered: PropTypes.bool, label: PropTypes.shape({ en: PropTypes.string, fr: PropTypes.string, }), url: PropTypes.string, + isRendered: PropTypes.bool, }), }; diff --git a/packages/inspection-report/src/components/Gallery/index.js b/packages/inspection-report/src/components/Gallery/index.js index de6e8449f..7c2753f8a 100644 --- a/packages/inspection-report/src/components/Gallery/index.js +++ b/packages/inspection-report/src/components/Gallery/index.js @@ -1,6 +1,18 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; import PropTypes from 'prop-types'; -import { Modal, StyleSheet, View, Pressable, Text, ImageBackground, Platform, ScrollView } from 'react-native'; +import { + Animated, + Easing, + Modal, + PanResponder, + Platform, + Pressable, + StyleSheet, + Text, + useWindowDimensions, + View, + ScrollView +} from 'react-native'; import { MaterialIcons } from '@expo/vector-icons'; import { useTranslation } from 'react-i18next'; @@ -77,12 +89,25 @@ const styles = StyleSheet.create({ native: { paddingTop: 50 }, }), }, + partsImageWrapper: { + borderColor: '#a29e9e', + borderRadius: 8, + borderWidth: 1, + flexDirection: 'row', + margin: 5, + paddingTop: 10, + } }); function Gallery({ pictures }) { const { i18n, t } = useTranslation(); const isDesktopMode = useDesktopMode(); const [focusedPhoto, setFocusedPhoto] = useState(null); + const [isZoomed, setIsZoomed] = useState(false); + const { width, height } = useWindowDimensions(); + const [gestureState, setGestureState] = useState({}); + const scale = useRef(new Animated.Value(1)).current; + const transform = useRef(new Animated.ValueXY({ x: 0, y: 0 })).current; const handleOnImageClick = useCallback((focusedImage) => { if (focusedImage.url) { @@ -91,15 +116,115 @@ function Gallery({ pictures }) { }, [focusedPhoto]); const handleUnfocusPhoto = useCallback(() => { + scale.setValue(1); setFocusedPhoto(null); - }, []); + }, [scale]); + + const panResponder = useRef( + PanResponder.create({ + onStartShouldSetPanResponder: () => true, + onStartShouldSetPanResponderCapture: () => true, + onMoveShouldSetPanResponder: () => true, + onMoveShouldSetPanResponderCapture: () => true, + onPanResponderMove: () => true, + onPanResponderRelease: (event, gestureStat) => setGestureState({ dx: gestureStat.x0, dy: gestureStat.y0 }), + }), + ).current; + + useEffect(() => { + if (isDesktopMode && gestureState.dx && gestureState.dy) { + setIsZoomed(!isZoomed); + + Animated.timing(scale, { + duration: 200, + easing: Easing.ease, + toValue: isZoomed ? 1 : 2, + useNativeDriver: Platform.OS !== 'web', + }).start(); + + let x = 0; + let y = 0; + let { dx, dy } = gestureState; + + if (isZoomed) { + x = 0; + y = 0; + } else { + x = (width / 2) - dx; + y = (height / 2) - dy; + + // x > 0 will check whether we clicked on left side of image or not + if ((dx < x && x > 0) || (dx > x && x < 0)) { + x = x / 2; + } + // y > 0 will check whether we clicked on top side of image or not + if ((dy < y && y > 0) || (dy > y && y < 0)) { + y = y / 2; + } + } + + Animated.timing(transform, { + toValue: { x, y }, + duration: 200, + useNativeDriver: Platform.OS !== 'web', + }).start(); + } + }, [gestureState]); + + useEffect(() => { + if (focusedPhoto && Platform.OS === 'web') { + const handleKeyboardChange = (event) => { + if (event.defaultPrevented) { + return; // Do nothing if the event was already processed + } + + const currentPictureIndex = pictures.findIndex(pic => pic.id === focusedPhoto.id); + switch (event.key) { + case "ArrowLeft": + if ((focusedPhoto?.isRendered && currentPictureIndex >= 0) || currentPictureIndex - 1 >= 0) { + if (focusedPhoto.isRendered) { + setFocusedPhoto(pictures[currentPictureIndex]); + } else { + setFocusedPhoto( + pictures[currentPictureIndex - 1]?.rendered_outputs?.length > 0 ? + pictures[currentPictureIndex - 1]?.rendered_outputs[0] : pictures[currentPictureIndex] + ); + } + } + break; + case "ArrowRight": + if ((!focusedPhoto?.isRendered && currentPictureIndex < pictures.length) || currentPictureIndex + 1 < pictures.length) { + if (focusedPhoto.isRendered) { + setFocusedPhoto(pictures[currentPictureIndex + 1]); + } else { + setFocusedPhoto( + pictures[currentPictureIndex]?.rendered_outputs?.length > 0 ? + pictures[currentPictureIndex]?.rendered_outputs[0] : pictures[currentPictureIndex + 1] + ); + } + } + break; + default: + return; // Quit when this doesn't handle the key event. + } + + // Cancel the default action to avoid it being handled twice + event.preventDefault(); + }; + + window.addEventListener('keydown', handleKeyboardChange); + return () => { + window.removeEventListener('keydown', handleKeyboardChange); + }; + } + }, [pictures, focusedPhoto]); const renderList = useCallback(() => { if (Platform.OS === 'web') { return ( pictures.map((image, index) => ( // eslint-disable-next-line react/no-array-index-key - + @@ -112,16 +237,16 @@ function Gallery({ pictures }) { )) } - + )) - ); + ) } return ( { pictures.map((image, index) => ( // eslint-disable-next-line react/no-array-index-key - + @@ -134,7 +259,7 @@ function Gallery({ pictures }) { )) } - + )) } @@ -157,10 +282,12 @@ function Gallery({ pictures }) { > - {(focusedPhoto?.label) ? focusedPhoto.label[i18n.language] : ''} + + {(focusedPhoto?.label) ? focusedPhoto.label[i18n.language] : ''} {focusedPhoto?.isRendered && t('gallery.withDamages')} + setFocusedPhoto(null)} + onPress={handleUnfocusPhoto} style={styles.closeBtn} > - + diff --git a/packages/inspection-report/src/hooks/useCurrency.js b/packages/inspection-report/src/hooks/useCurrency.js index decf4d838..681b355e6 100644 --- a/packages/inspection-report/src/hooks/useCurrency.js +++ b/packages/inspection-report/src/hooks/useCurrency.js @@ -7,7 +7,7 @@ const signAheadCurrencies = ['$', '£']; */ export const Context = createContext({ formateValue: (value) => { }, - updateCurrency: () => { }, + updateCurrency: () => { } }); /** @@ -27,13 +27,14 @@ export function CurrencyProvider({ children }) { const formateValue = useCallback((value) => { if (signAheadCurrencies.includes(currency)) { return `${currency}${value}`; + } else { + return `${value}${currency}`; } - return `${value}${currency}`; }, [currency]); - const currencyContextValue = useMemo( - () => ({ updateCurrency: setCurrency, formateValue }), - [currency], + const currencyContextValue = useMemo(() => + ({ updateCurrency: setCurrency, formateValue }), + [currency] ); return ( diff --git a/packages/inspection-report/src/i18n/resources/en.js b/packages/inspection-report/src/i18n/resources/en.js index a211c29bc..6f20f0564 100644 --- a/packages/inspection-report/src/i18n/resources/en.js +++ b/packages/inspection-report/src/i18n/resources/en.js @@ -26,6 +26,8 @@ const en = { notReady: 'Inspection still in progress...', validate: 'Validate', newInspection: 'New Inspection', + inspection: 'Inspection ID', + vinNumber: 'VIN', download: 'Download Report', pdfStatus: { generating: 'Your PDF report is being generated...', @@ -55,7 +57,7 @@ const en = { }, gallery: { empty: 'This inspection does not have any photo yet.', - renderedOutput: '(rendered output)', + withDamages: '(with damages)' }, damageManipulator: { damages: 'Damages', diff --git a/packages/inspection-report/src/i18n/resources/fr.js b/packages/inspection-report/src/i18n/resources/fr.js index 4dfa8bbcd..10fc40d86 100644 --- a/packages/inspection-report/src/i18n/resources/fr.js +++ b/packages/inspection-report/src/i18n/resources/fr.js @@ -26,6 +26,8 @@ const fr = { notReady: 'Inspection en cours...', validate: 'Valider', newInspection: 'Nouvelle inspection', + inspection: 'Inspection ID', + vinNumber: 'VIN', download: 'Télécharger le rapport', pdfStatus: { generating: 'Génération du rapport PDF en cours...', @@ -55,7 +57,7 @@ const fr = { }, gallery: { empty: 'Cette inspection n\'a pas encore de photo.', - renderedOutput: '(rendu d\'image)', + withDamages: '(avec dommages)' }, damageManipulator: { damages: 'Dégâts', diff --git a/packages/openapi-specs-to-ts/package.json b/packages/openapi-specs-to-ts/package.json index 8a97568b4..dd6b66fa1 100644 --- a/packages/openapi-specs-to-ts/package.json +++ b/packages/openapi-specs-to-ts/package.json @@ -1,6 +1,6 @@ { "name": "@monkvision/openapi-specs-to-ts", - "version": "3.8.3", + "version": "3.8.4", "description": "A Node script that automatically creates TypeScript type definitions based on the JSON Schema defined in an openapi specification file.", "main": "dist/index.js", "scripts": { diff --git a/packages/sights/package.json b/packages/sights/package.json index 1564f825e..f4db3a635 100644 --- a/packages/sights/package.json +++ b/packages/sights/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/sights", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.3", + "version": "3.8.4", "main": "dist/index.json", "private": false, "description": "Vehicle sights assets for AI-powered damage detection", diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index 51574a5cd..f55326712 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/toolkit", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.3", + "version": "3.8.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/toolkit/#readme", diff --git a/packages/ui/package.json b/packages/ui/package.json index 0641d54f2..22ac7e7be 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/ui", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.3", + "version": "3.8.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/ui/#readme", @@ -48,7 +48,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/toolkit": "3.8.3", + "@monkvision/toolkit": "3.8.4", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/packages/visualization/package.json b/packages/visualization/package.json index de209efc9..c22b6bb7c 100644 --- a/packages/visualization/package.json +++ b/packages/visualization/package.json @@ -2,7 +2,7 @@ "name": "@monkvision/visualization", "author": "monkvision", "license": "BSD-3-Clause-Clear", - "version": "3.8.3", + "version": "3.8.4", "private": false, "description": "AI-powered vehicle damage detection for React Native", "homepage": "https://github.com/monkvision/monkjs/packages/visualization/#readme", @@ -53,7 +53,7 @@ "release-it": "*" }, "peerDependencies": { - "@monkvision/corejs": "3.8.3", + "@monkvision/corejs": "3.8.4", "react": "*", "react-native": "*", "react-native-svg": "*" diff --git a/src/screens/InspectionCapture/index.js b/src/screens/InspectionCapture/index.js index 79049d272..cd3791daa 100644 --- a/src/screens/InspectionCapture/index.js +++ b/src/screens/InspectionCapture/index.js @@ -16,7 +16,7 @@ import styles from './styles'; import useSnackbar from '../../hooks/useSnackbar'; import useFullscreen from './useFullscreen'; -const enableComplianceCheck = false; +const enableComplianceCheck = true; export default function InspectionCapture() { const route = useRoute(); diff --git a/src/screens/InspectionCreate/useCreateInspection/index.js b/src/screens/InspectionCreate/useCreateInspection/index.js index 4188daa0b..b4996cc03 100644 --- a/src/screens/InspectionCreate/useCreateInspection/index.js +++ b/src/screens/InspectionCreate/useCreateInspection/index.js @@ -18,13 +18,15 @@ export default function useCreateInspection(vehicle) { }, damageDetection: { ...taskOptions, - generate_subimages_parts: {}, - generate_subimages_damages: {}, - damage_score_threshold: 0.3, - generate_visual_output: { - generate_parts: true, - generate_damages: true + generate_subimages_parts: { + generate_tight: false, }, + // generate_subimages_damages: {}, + damage_score_threshold: 0.3, + // generate_visual_output: { + // generate_parts: true, + // generate_damages: true, + // }, }, }; @@ -33,7 +35,8 @@ export default function useCreateInspection(vehicle) { vehicle, damage_severity: { output_format: 'toyota' }, additionalData: { - damage_detection_version: "v2", + damage_detection_version: 'v2', + use_dynamic_crops: true, }, }); }, []); From 755c62229e42c7b82af8df29e76e1fb137646581 Mon Sep 17 00:00:00 2001 From: Ksenia Buntova Date: Tue, 7 Nov 2023 15:30:28 +0300 Subject: [PATCH 25/27] fix merge --- .../src/components/DamageReport/DamageReport.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/inspection-report/src/components/DamageReport/DamageReport.js b/packages/inspection-report/src/components/DamageReport/DamageReport.js index 88af235f8..bbac6cb0b 100644 --- a/packages/inspection-report/src/components/DamageReport/DamageReport.js +++ b/packages/inspection-report/src/components/DamageReport/DamageReport.js @@ -1,6 +1,6 @@ import { Loader } from '@monkvision/ui'; import PropTypes from 'prop-types'; -import React, { useEffect, useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { StyleSheet, Text, TouchableOpacity, View, Platform } from 'react-native'; @@ -389,7 +389,7 @@ export default function DamageReport({ part={editedDamagePart} damage={editedDamage} damageMode={damageMode} - imageCount={(editedDamageImages ?? []).length} + imageCount={(editedPartDamageImages ?? []).length} onDismiss={handlePopUpDismiss} onShowGallery={handleShowGallery} onConfirm={handleSaveDamage} From c13f99b1259f1691ffad8b807014ba288e0bd38c Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Mon, 20 Nov 2023 08:46:07 +0300 Subject: [PATCH 26/27] Fix infinit PDF loading (#18) --- .../src/components/DamageReport/hooks/usePdfReport.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js index c69a9cf1f..09d30fe03 100644 --- a/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js +++ b/packages/inspection-report/src/components/DamageReport/hooks/usePdfReport.js @@ -69,10 +69,6 @@ export default function usePdfReport({ setPdfStatus(PdfStatus.NOT_REQUESTED); }, 5000); } - - setTimeout(() => { - setPdfStatus(PdfStatus.NOT_REQUESTED); - }, 5000); }), [inspectionId], ); From 3e13b127d93f3265d4791b41e99ac6a04a06660a Mon Sep 17 00:00:00 2001 From: ksenia_buntova <50693668+KseniaBuntova@users.noreply.github.com> Date: Fri, 24 Nov 2023 15:35:44 +0300 Subject: [PATCH 27/27] [APP-2343] Fix Gallery (#19) --- packages/inspection-report/src/components/Gallery/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/inspection-report/src/components/Gallery/index.js b/packages/inspection-report/src/components/Gallery/index.js index be1bc812d..f306cff07 100644 --- a/packages/inspection-report/src/components/Gallery/index.js +++ b/packages/inspection-report/src/components/Gallery/index.js @@ -22,11 +22,11 @@ import { useDesktopMode } from './../../hooks'; const styles = StyleSheet.create({ container: { alignContent: 'flex-start', - flex: 1, ...Platform.select({ web: { flexDirection: 'row', - }, + flex: 1, + } }), flexWrap: 'wrap', justifyContent: 'center',