diff --git a/libs/it-wallet/package.json b/libs/it-wallet/package.json index 08f58363..2fa70a8c 100644 --- a/libs/it-wallet/package.json +++ b/libs/it-wallet/package.json @@ -26,7 +26,9 @@ "zod": "catalog:", "@pagopa/io-react-native-crypto": "^1.2.3", "@pagopa/io-react-native-jwt": "2.1.0", - "@types/color": "^4.2.0" + "@types/color": "^4.2.0", + "react-native-barcode-builder": "^2.0.0", + "react-native-svg": "catalog:" }, "peerDependencies": { "react": "^19.1.0", diff --git a/libs/it-wallet/src/assets/img/cards/bonus.png b/libs/it-wallet/src/assets/img/cards/bonus.png new file mode 100644 index 00000000..d069646c Binary files /dev/null and b/libs/it-wallet/src/assets/img/cards/bonus.png differ diff --git a/libs/it-wallet/src/assets/img/cards/bonus@2x.png b/libs/it-wallet/src/assets/img/cards/bonus@2x.png new file mode 100644 index 00000000..d5ab3acc Binary files /dev/null and b/libs/it-wallet/src/assets/img/cards/bonus@2x.png differ diff --git a/libs/it-wallet/src/assets/img/cards/bonus@3x.png b/libs/it-wallet/src/assets/img/cards/bonus@3x.png new file mode 100644 index 00000000..11584df6 Binary files /dev/null and b/libs/it-wallet/src/assets/img/cards/bonus@3x.png differ diff --git a/libs/it-wallet/src/assets/img/credential/bonus_pari.png b/libs/it-wallet/src/assets/img/credential/bonus_pari.png new file mode 100644 index 00000000..03cf3943 Binary files /dev/null and b/libs/it-wallet/src/assets/img/credential/bonus_pari.png differ diff --git a/libs/it-wallet/src/lib/components/ItwBarcodeCard.tsx b/libs/it-wallet/src/lib/components/ItwBarcodeCard.tsx new file mode 100644 index 00000000..2682e0fb --- /dev/null +++ b/libs/it-wallet/src/lib/components/ItwBarcodeCard.tsx @@ -0,0 +1,29 @@ +import { H4, IOColors, VSpacer } from '@pagopa/io-app-design-system'; +import { StyleSheet, View } from 'react-native'; +import Barcode from 'react-native-barcode-builder'; + +type ItwBarcodeCardProps = { + value: string; +}; + +export const ItwBarcodeCard = ({ value }: ItwBarcodeCardProps) => ( + + + + +

{value}

+
+); + +const styles = StyleSheet.create({ + container: { + borderColor: IOColors['grey-100'], + borderWidth: 1, + padding: 5, + borderRadius: 8 + }, + label: { + alignSelf: 'center', + textAlign: 'center' + } +}); diff --git a/libs/it-wallet/src/lib/components/credential/CardBackground.tsx b/libs/it-wallet/src/lib/components/credential/CardBackground.tsx index c2454235..c1d18125 100644 --- a/libs/it-wallet/src/lib/components/credential/CardBackground.tsx +++ b/libs/it-wallet/src/lib/components/credential/CardBackground.tsx @@ -104,5 +104,6 @@ const credentialCardBackgrounds: { } = { [wellKnownCredential.PID]: require('../../../assets/img/cards/pid.png'), [wellKnownCredential.DRIVING_LICENSE]: require('../../../assets/img/cards/mdl.png'), - [wellKnownCredential.DISABILITY_CARD]: require('../../../assets/img/cards/disabilityCard.png') + [wellKnownCredential.DISABILITY_CARD]: require('../../../assets/img/cards/disabilityCard.png'), + [wellKnownCredential.BONUS_PARI]: require('../../../assets/img/cards/bonus.png') }; diff --git a/libs/it-wallet/src/lib/components/credential/ItwSkeumorphicCard/CardBackground.tsx b/libs/it-wallet/src/lib/components/credential/ItwSkeumorphicCard/CardBackground.tsx index 7258e5c1..2d852b5e 100644 --- a/libs/it-wallet/src/lib/components/credential/ItwSkeumorphicCard/CardBackground.tsx +++ b/libs/it-wallet/src/lib/components/credential/ItwSkeumorphicCard/CardBackground.tsx @@ -41,6 +41,10 @@ const assetsMap: Record = { [wellKnownCredential.DISABILITY_CARD]: { front: require('../../../../assets/img/credential/dc_front.png'), back: require('../../../../assets/img/credential/dc_back.png') + }, + [wellKnownCredential.BONUS_PARI]: { + front: require('../../../../assets/img/cards/bonus.png'), + back: require('../../../../assets/img/cards/bonus.png') } }; diff --git a/libs/it-wallet/src/lib/components/credential/OnboardingModuleCredential.tsx b/libs/it-wallet/src/lib/components/credential/OnboardingModuleCredential.tsx index 51c27873..69e49d81 100644 --- a/libs/it-wallet/src/lib/components/credential/OnboardingModuleCredential.tsx +++ b/libs/it-wallet/src/lib/components/credential/OnboardingModuleCredential.tsx @@ -17,7 +17,8 @@ type Props = { const credentialIconByType: Record = { [wellKnownCredential.DRIVING_LICENSE]: 'car', [wellKnownCredential.PID]: 'fingerprint', - [wellKnownCredential.DISABILITY_CARD]: 'accessibility' + [wellKnownCredential.DISABILITY_CARD]: 'accessibility', + [wellKnownCredential.BONUS_PARI]: 'bonus' }; /** diff --git a/libs/it-wallet/src/lib/components/presentation/ItwPresentationClaimsSection.tsx b/libs/it-wallet/src/lib/components/presentation/ItwPresentationClaimsSection.tsx index 6fee3090..6ad9956b 100644 --- a/libs/it-wallet/src/lib/components/presentation/ItwPresentationClaimsSection.tsx +++ b/libs/it-wallet/src/lib/components/presentation/ItwPresentationClaimsSection.tsx @@ -72,7 +72,11 @@ export const ItwPresentationClaimsSection = ({ const claims = Object.entries(parsedClaims); const filteredClaims = useMemo( - () => claims.filter(([id]) => id !== WellKnownClaim.link_qr_code), + () => + claims.filter( + ([id]) => + id !== WellKnownClaim.link_qr_code && id !== WellKnownClaim.barcode + ), [claims] ); diff --git a/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsHeader.tsx b/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsHeader.tsx index 9020bfd1..230823ae 100644 --- a/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsHeader.tsx +++ b/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsHeader.tsx @@ -28,7 +28,8 @@ type ItwPresentationDetailsHeaderProps = { */ const credentialsWithSkeumorphicCard: ReadonlyArray = [ wellKnownCredential.DRIVING_LICENSE, - wellKnownCredential.DISABILITY_CARD + wellKnownCredential.DISABILITY_CARD, + wellKnownCredential.BONUS_PARI ]; /** @@ -75,7 +76,7 @@ const ItwPresentationDetailsHeader = ({ ); - }, [credential, backgroundColor, textColor, isExperimental, parsedClaims]); + }, [credential, parsedClaims, backgroundColor, textColor, isExperimental]); return ( diff --git a/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsScreenBase.tsx b/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsScreenBase.tsx index c929e3e0..a2b10563 100644 --- a/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsScreenBase.tsx +++ b/libs/it-wallet/src/lib/components/presentation/ItwPresentationDetailsScreenBase.tsx @@ -49,7 +49,8 @@ const ItwPresentationDetailsScreenBase = ({ supportRequest: true, enableDiscreteTransition: true, animatedRef: animatedScrollViewRef, - ...headerProps + ...headerProps, + variant: 'neutral' }); const actions: IOScrollViewActions | undefined = ctaProps diff --git a/libs/it-wallet/src/lib/screens/presentation/ItwPresentationCredentialDetailScreen.tsx b/libs/it-wallet/src/lib/screens/presentation/ItwPresentationCredentialDetailScreen.tsx index 5da301eb..3c53a0f9 100644 --- a/libs/it-wallet/src/lib/screens/presentation/ItwPresentationCredentialDetailScreen.tsx +++ b/libs/it-wallet/src/lib/screens/presentation/ItwPresentationCredentialDetailScreen.tsx @@ -27,6 +27,7 @@ import { setProximityStatusStopped } from '../../store/proximity'; import { parseClaimsToRecord } from '../../utils/claims'; +import { WellKnownClaim } from '../../utils/itwClaimsUtils'; import { wellKnownCredential } from '../../utils/credentials'; import { getCredentialStatus } from '../../utils/itwCredentialStatusUtils'; import { CredentialFormat, StoredCredential } from '../../utils/itwTypesUtils'; @@ -49,6 +50,7 @@ import { useDebugInfo } from '@io-eudiw-app/debug-info'; import { MainNavigatorParamsList } from '../../navigation/main/MainStackNavigator'; +import { ItwBarcodeCard } from '../../components/ItwBarcodeCard'; export type ItwPresentationCredentialDetailNavigationParams = { credentialType: string; @@ -191,13 +193,21 @@ const ItwPresentationCredentialDetail = ({ } return undefined; - }, [credential.credentialType, t, dispatch, QrCodeModal]); + }, [QrCodeModal, credential.credentialType, dispatch, t]); const parsedClaims = useMemo( () => parseClaimsToRecord(credential.parsedCredential), [credential.parsedCredential] ); + const barcodeClaim = useMemo( + () => + Object.entries(parsedClaims).find( + ([id]) => id === WellKnownClaim.barcode + )?.[1], + [parsedClaims] + ); + if (status === 'unknown') { return ; } @@ -215,6 +225,10 @@ const ItwPresentationCredentialDetail = ({ + {barcodeClaim?.parsed?.value && + typeof barcodeClaim.parsed.value === 'string' && ( + + )} ; +/** + * Schema to validate a barcode claim value (e.g. discount code for PARI_BONUS) + */ +const barcodeSchema = z.string().transform(str => ({ + value: str, + type: claimType.barcode +})); + export const verificationScheme = z .object({ assurance_level: z.object({ @@ -301,7 +310,8 @@ export const claimScheme = z.union([ numberSchema, emptyStringSchema, verificationScheme, - stringSchema + stringSchema, + barcodeSchema ]) ) ]); diff --git a/libs/it-wallet/src/lib/utils/credentials.ts b/libs/it-wallet/src/lib/utils/credentials.ts index 8751a480..0d6fb57b 100644 --- a/libs/it-wallet/src/lib/utils/credentials.ts +++ b/libs/it-wallet/src/lib/utils/credentials.ts @@ -3,7 +3,11 @@ import { ItwCredentialStatus, ItwJwtCredentialStatus } from '../types'; import { ParsedDcql } from './itwTypesUtils'; import { CredentialType } from './itwMocksUtils'; -export type CredentialsKeys = 'DRIVING_LICENSE' | 'PID' | 'DISABILITY_CARD'; +export type CredentialsKeys = + | 'DRIVING_LICENSE' + | 'PID' + | 'DISABILITY_CARD' + | 'BONUS_PARI'; /** * Map which, for each wallet available credential, stores its corresponding @@ -13,7 +17,8 @@ export type CredentialsKeys = 'DRIVING_LICENSE' | 'PID' | 'DISABILITY_CARD'; export const wellKnownCredential = { DRIVING_LICENSE: 'org.iso.18013.5.1.mDL', PID: 'urn:eudi:pid:it:1', - DISABILITY_CARD: 'urn:eu.europa.ec.eudi:edc:1' + DISABILITY_CARD: 'urn:eu.europa.ec.eudi:edc:1', + BONUS_PARI: 'urn:pagopa:pari-bonus:1' } as const satisfies Record; /** @@ -33,7 +38,8 @@ export const wellKnownCredentialConfigurationIDs: Record< > = { DRIVING_LICENSE: 'org.iso.18013.5.1.mDL', PID: 'dc_sd_jwt_PersonIdentificationData', - DISABILITY_CARD: 'dc_sd_jwt_EuropeanDisabilityCard' + DISABILITY_CARD: 'dc_sd_jwt_EuropeanDisabilityCard', + BONUS_PARI: 'dc_sd_jwt_PariBonus' }; /** @@ -82,6 +88,8 @@ export const getCredentialNameByType = (type?: string): string => { return t(['credentials.names.pid'], { ns: 'wallet' }); case wellKnownCredential.DISABILITY_CARD: return t(['credentials.names.disabilityCard'], { ns: 'wallet' }); + case wellKnownCredential.BONUS_PARI: + return t(['credentials.names.bonusPari'], { ns: 'wallet' }); default: return t(['credentials.names.unknown'], { ns: 'wallet' }); } diff --git a/libs/it-wallet/src/lib/utils/itwClaimsUtils.ts b/libs/it-wallet/src/lib/utils/itwClaimsUtils.ts index 61b76c0d..da4eaa68 100644 --- a/libs/it-wallet/src/lib/utils/itwClaimsUtils.ts +++ b/libs/it-wallet/src/lib/utils/itwClaimsUtils.ts @@ -55,6 +55,9 @@ export enum WellKnownClaim { /** * Claims that contains the document number, if applicable for the credential */ + + fiscal_code = 'fiscal_code', + document_number = 'document_number', /** * Claim that contains the first name, if applicable for the credential @@ -75,7 +78,11 @@ export enum WellKnownClaim { /** * Claim that contains signature usual mark */ - signature_usual_mark = 'signature_usual_mark' + signature_usual_mark = 'signature_usual_mark', + /** + * Claim that contains the barcode + */ + barcode = 'barcode' } /** diff --git a/libs/it-wallet/src/lib/utils/itwCredentialStatusUtils.ts b/libs/it-wallet/src/lib/utils/itwCredentialStatusUtils.ts index 3b37cdc4..c9e7f773 100644 --- a/libs/it-wallet/src/lib/utils/itwCredentialStatusUtils.ts +++ b/libs/it-wallet/src/lib/utils/itwCredentialStatusUtils.ts @@ -79,7 +79,9 @@ export const getCredentialStatus = ( const credentialTypesByVct: { [vct: string]: CredentialType } = { [wellKnownCredential.PID]: CredentialType.PID, [wellKnownCredential.DRIVING_LICENSE]: CredentialType.DRIVING_LICENSE, - [wellKnownCredential.DISABILITY_CARD]: CredentialType.EUROPEAN_DISABILITY_CARD + [wellKnownCredential.DISABILITY_CARD]: + CredentialType.EUROPEAN_DISABILITY_CARD, + [wellKnownCredential.BONUS_PARI]: CredentialType.BONUS_PARI }; /** diff --git a/libs/it-wallet/src/lib/utils/itwCredentialUtils.ts b/libs/it-wallet/src/lib/utils/itwCredentialUtils.ts index 653151ac..ce713c83 100644 --- a/libs/it-wallet/src/lib/utils/itwCredentialUtils.ts +++ b/libs/it-wallet/src/lib/utils/itwCredentialUtils.ts @@ -65,6 +65,9 @@ const itwGetCredentialNameByCredentialType = (): Record => ({ }), [wellKnownCredential.PID]: t('credentials.names.pid', { ns: 'wallet' + }), + [wellKnownCredential.BONUS_PARI]: t('credentials.names.bonusPari', { + ns: 'wallet' }) }); diff --git a/libs/it-wallet/src/lib/utils/itwMocksUtils.ts b/libs/it-wallet/src/lib/utils/itwMocksUtils.ts index 9a1cc18c..c95e8f10 100644 --- a/libs/it-wallet/src/lib/utils/itwMocksUtils.ts +++ b/libs/it-wallet/src/lib/utils/itwMocksUtils.ts @@ -21,7 +21,8 @@ export enum CredentialType { PID = 'PersonIdentificationData', EDUCATION_DEGREE = 'education_degree', EDUCATION_ENROLLMENT = 'education_enrollment', - RESIDENCY = 'residency' + RESIDENCY = 'residency', + BONUS_PARI = 'bonus_pari' } export const ItwStoredCredentialsMocks = { diff --git a/libs/it-wallet/src/lib/utils/itwStyleUtils.ts b/libs/it-wallet/src/lib/utils/itwStyleUtils.ts index 8592b01f..e20b2dc5 100644 --- a/libs/it-wallet/src/lib/utils/itwStyleUtils.ts +++ b/libs/it-wallet/src/lib/utils/itwStyleUtils.ts @@ -42,6 +42,11 @@ export const useThemeColorByCredentialType = ( backgroundColor: '#315B76', textColor: '#17406F' }; + case wellKnownCredential.BONUS_PARI: + return { + backgroundColor: '#7AC1FA', + textColor: '#000000' + }; } }, [credentialType, theme, withL3Design]); diff --git a/libs/it-wallet/src/locales/it/wallet.json b/libs/it-wallet/src/locales/it/wallet.json index ab1c6b95..331233c2 100644 --- a/libs/it-wallet/src/locales/it/wallet.json +++ b/libs/it-wallet/src/locales/it/wallet.json @@ -10,6 +10,7 @@ "mdl": "Patente di guida", "pid": "IT-Wallet ID", "disabilityCard": "Carta Europea della Disabilità", + "bonusPari": "Bonus Elettrodomestici", "unknown": "Credenziale Sconosciuta" }, "status": { @@ -240,6 +241,11 @@ }, "authSource": "PagoPa S.p.A." }, + "bonusPari": { + "barcode": { + "copyButton": "Copia codice sconto" + } + }, "proximity": { "showQr": { "title": "Show QR", diff --git a/patches/PATCHES.md b/patches/PATCHES.md index 58d0f852..bb58459f 100644 --- a/patches/PATCHES.md +++ b/patches/PATCHES.md @@ -46,3 +46,20 @@ This patch fixes the touch issue on SVG buttons. It's caused by SVG stealing tou - This should be removed once the patch gets applied to the design system library. +### react-native-barcode-builder__svg.patch + +Created on: **25/05/2026** + +#### Reason + +- The `@react-native-community/art` library is deprecated and causes build/compatibility issues in newer React Native environments. +- This patch replaces `@react-native-community/art` (Surface, Shape) with `react-native-svg` (Svg, Path) for rendering barcodes. +- It refactors the component to use dedicated `renderSvg`, `renderBars`, and `renderBar` methods, binding them in the constructor. +- The SVG `d` path commands in `drawRect` are also normalized to use spaces instead of commas for better SVG compatibility. + +### How to remove in the future: + +- Remove the patch once the upstream `react-native-barcode-builder` package migrates to `react-native-svg` (or resolves the `@react-native-community/art` deprecation) and the version used in the project is updated. +- Remove the patch file from the `patches/` directory. +- Remove this entry from `patches.md`. + diff --git a/patches/react-native-barcode-builder__svg.patch b/patches/react-native-barcode-builder__svg.patch new file mode 100644 index 00000000..9e279102 --- /dev/null +++ b/patches/react-native-barcode-builder__svg.patch @@ -0,0 +1,70 @@ +diff --git a/index.js b/index.js +index 516605b258e03441c68a4645a442e449944251bd..4f57a8a0e9d23409aba2b79d10c010c006922b33 100644 +--- a/index.js ++++ b/index.js +@@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; + + import barcodes from 'jsbarcode/src/barcodes'; + +-import {Surface, Shape} from '@react-native-community/art'; ++import Svg, { Path } from 'react-native-svg'; + + export default class Barcode extends PureComponent { + static propTypes = { +@@ -46,6 +46,10 @@ export default class Barcode extends PureComponent { + bars: [], + barCodeWidth: 0 + }; ++ ++ this.renderSvg = this.renderSvg.bind(this); ++ this.renderBars = this.renderBars.bind(this); ++ this.renderBar = this.renderBar.bind(this); + } + + componentDidUpdate(prevProps) { +@@ -111,7 +115,7 @@ export default class Barcode extends PureComponent { + } + + drawRect(x, y, width, height) { +- return `M${x},${y}h${width}v${height}h-${width}z`; ++ return `M${x} ${y} h${width} v${height} h-${width} z`; + } + + getTotalWidthOfEncodings(encodings) { +@@ -165,6 +169,25 @@ export default class Barcode extends PureComponent { + return encoded; + } + ++ ++ renderSvg() { ++ return ( ++ ++ {this.renderBars()} ++ ++ ); ++ } ++ ++ renderBars() { ++ return this.state.bars.map(this.renderBar); ++ } ++ ++ renderBar(bar, index) { ++ return ( ++ ++ ); ++ } ++ + render() { + this.update(); + const backgroundStyle = { +@@ -172,9 +195,7 @@ export default class Barcode extends PureComponent { + }; + return ( + +- +- +- ++ {this.renderSvg()} + { typeof (this.props.text) !== 'undefined' && + {this.props.text} + } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f979d4e..c3a2865a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,6 +96,9 @@ patchedDependencies: '@pagopa/io-wallet-oid4vp': hash: eb884d9d039c2629efb6478edc8fd093285632bb22cf7a6015c81e20d0b3a431 path: patches/@pagopa__io-wallet-oid4vp.patch + react-native-barcode-builder: + hash: 6e322a00980f48989db6e63c513798c06b5a65a7fdd9e362298dcb1617e6367a + path: patches/react-native-barcode-builder__svg.patch importers: @@ -656,6 +659,12 @@ importers: react-native: specifier: 0.81.5 version: 0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0) + react-native-barcode-builder: + specifier: ^2.0.0 + version: 2.0.0(patch_hash=6e322a00980f48989db6e63c513798c06b5a65a7fdd9e362298dcb1617e6367a)(prop-types@15.8.1)(react-native@0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0) + react-native-svg: + specifier: 'catalog:' + version: 15.15.3(react-native@0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0) serialize-error: specifier: 'catalog:' version: 13.0.1 @@ -2671,6 +2680,13 @@ packages: peerDependencies: react-native: ^0.0.0-0 || >=0.65 <1.0 + '@react-native-community/art@1.2.0': + resolution: {integrity: sha512-a+ZcRGl/BzLa89yi33Mbn5SHavsEXqKUMdbfLf3U8MDLElndPqUetoJyGkv63+BcPO49UMWiQRP1YUz6/zfJ+A==} + deprecated: If you need a similar package, please consider using react-native-svg or @shopify/react-native-skia + peerDependencies: + react: '*' + react-native: '*' + '@react-native/assets-registry@0.81.5': resolution: {integrity: sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==} engines: {node: '>= 20.19.4'} @@ -4025,6 +4041,9 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + art@0.10.3: + resolution: {integrity: sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==} + asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -6618,6 +6637,9 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + jsbarcode@3.12.3: + resolution: {integrity: sha512-CuHU9hC6dPsHF5oVFMo8NW76uQVjH4L22CsP4hW+dNnGywJHC/B0ThA1CTDVLnxKLrrpYdicBLnd2xsgTfRnvg==} + jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} @@ -7936,6 +7958,11 @@ packages: react-is@19.2.4: resolution: {integrity: sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==} + react-native-barcode-builder@2.0.0: + resolution: {integrity: sha512-hOpP321behSPlpWNGcowN66P9Z2Xv6kQwa2I8SdfSGMFmJlll1b22R63xQSIAi72RC/gZe1cWBBz03J686e9JA==} + peerDependencies: + prop-types: ^15.5.0 + react-native-device-info@15.0.2: resolution: {integrity: sha512-dd71eXG2l3Cwp66IvKNadMTB8fhU3PEjyVddI97sYan+D4bgIAUmgGDhbSOFvHcGavksb2U17kiQYaDiK2WK2g==} peerDependencies: @@ -12608,6 +12635,14 @@ snapshots: merge-options: 3.0.4 react-native: 0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0) + '@react-native-community/art@1.2.0(react-native@0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': + dependencies: + art: 0.10.3 + invariant: 2.2.4 + prop-types: 15.8.1 + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0) + '@react-native/assets-registry@0.81.5': {} '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.29.0)': @@ -14079,6 +14114,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + art@0.10.3: {} + asap@2.0.6: {} asn1.js@4.10.1: @@ -17457,6 +17494,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbarcode@3.12.3: {} + jsc-safe-url@0.2.4: {} jsdom@20.0.3: @@ -19118,6 +19157,15 @@ snapshots: react-is@19.2.4: {} + react-native-barcode-builder@2.0.0(patch_hash=6e322a00980f48989db6e63c513798c06b5a65a7fdd9e362298dcb1617e6367a)(prop-types@15.8.1)(react-native@0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0): + dependencies: + '@react-native-community/art': 1.2.0(react-native@0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0) + jsbarcode: 3.12.3 + prop-types: 15.8.1 + transitivePeerDependencies: + - react + - react-native + react-native-device-info@15.0.2(react-native@0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0)): dependencies: react-native: 0.81.5(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.1.0) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e5a8e49f..12f5feda 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -51,4 +51,5 @@ overrides: zod: '4.3.6' patchedDependencies: '@pagopa/io-app-design-system': 'patches/@pagopa__io-app-design-system.patch' + 'react-native-barcode-builder': 'patches/react-native-barcode-builder__svg.patch' '@pagopa/io-wallet-oid4vp': patches/@pagopa__io-wallet-oid4vp.patch