diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index acba76f85..2ffa421ee 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.52.0" + ".": "0.53.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index fcd390fde..6217a2671 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # Changelog +## [0.53.0](https://github.com/solana-foundation/solana-developer-platform/compare/v0.52.0...v0.53.0) (2026-08-04) + +### Features + +* **sdp-web:** move token/RPC actions off the playground proxy ([#1064](https://github.com/solana-foundation/solana-developer-platform/pull/1064)) ([ce25f00](https://github.com/solana-foundation/solana-developer-platform/commit/ce25f0043184f1a69f43c3f247444901e175ca7d)) +* **sdp-api:** add the Dry-Run request header (PRO-1618) ([#1050](https://github.com/solana-foundation/solana-developer-platform/pull/1050)) ([dc13fab](https://github.com/solana-foundation/solana-developer-platform/commit/dc13faba875ef08c79be136ff0b795ce92f075e5)) +* use turbopack instead of webpack ([#1043](https://github.com/solana-foundation/solana-developer-platform/pull/1043)) ([ef57340](https://github.com/solana-foundation/solana-developer-platform/commit/ef573405213bfc569707ba1d70ce06adf36ddb33)) +* **sdp-web:** PART 1 stepped tokenization-engine chooser in the deploy modal ([#1039](https://github.com/solana-foundation/solana-developer-platform/pull/1039)) ([20d7832](https://github.com/solana-foundation/solana-developer-platform/commit/20d783239447139fef559e679c5e5d3a686edb9d)) +* support solana-private-channels ([#970](https://github.com/solana-foundation/solana-developer-platform/pull/970)) ([90520ef](https://github.com/solana-foundation/solana-developer-platform/commit/90520ef093b16c24081c94dec60c49532da7011e)) +* **sdp-web:** vercel flag standardization ([#1035](https://github.com/solana-foundation/solana-developer-platform/pull/1035)) ([186bf21](https://github.com/solana-foundation/solana-developer-platform/commit/186bf215337a64c365aa892171fc0994f2472a8a)) +* **web:** sync API playground with public OpenAPI ([#936](https://github.com/solana-foundation/solana-developer-platform/pull/936)) ([4ca03ca](https://github.com/solana-foundation/solana-developer-platform/commit/4ca03cadce86f92cd78990614ec6efa4baa69b5b)) + +### Bug Fixes + +* **i18n:** stop translation sync after Eve result ([#814](https://github.com/solana-foundation/solana-developer-platform/pull/814)) ([3555894](https://github.com/solana-foundation/solana-developer-platform/commit/3555894cd77d2de5ad00952c677a016245b7be66)) +* **i18n:** sign automated translation commits ([#1066](https://github.com/solana-foundation/solana-developer-platform/pull/1066)) ([10b672c](https://github.com/solana-foundation/solana-developer-platform/commit/10b672ca46b6aa62fa0ff68a655001ffa1b74ef2)) +* **api:** enforce scoped Kora sponsorship quotas ([#1030](https://github.com/solana-foundation/solana-developer-platform/pull/1030)) ([3f74b78](https://github.com/solana-foundation/solana-developer-platform/commit/3f74b78ad191a3501a85d5276aa2b54f4ba9a5d5)) +* **api:** enforce tenant-scoped data access ([#1032](https://github.com/solana-foundation/solana-developer-platform/pull/1032)) ([66ec82f](https://github.com/solana-foundation/solana-developer-platform/commit/66ec82f5fdc6a61b5985e16ab14ee698a82dbad7)) +* **ci:** stabilize Surfpool RPC setup ([#1051](https://github.com/solana-foundation/solana-developer-platform/pull/1051)) ([3d52590](https://github.com/solana-foundation/solana-developer-platform/commit/3d5259017b80f63b1005e9a43a2f514d89df8c88)) +* **deps:** remediate 32 runtime Dependabot alerts ([#1031](https://github.com/solana-foundation/solana-developer-platform/pull/1031)) ([a22bc15](https://github.com/solana-foundation/solana-developer-platform/commit/a22bc15fd98b411c298837d8ce3330b0dc474f84)) + +### Refactors + +* **policy:** extract the wallet/policy engine into @sdp/policy ([#1058](https://github.com/solana-foundation/solana-developer-platform/pull/1058)) ([d923dc8](https://github.com/solana-foundation/solana-developer-platform/commit/d923dc8cb9a25b425e95d2fa67ecc1873a483953)) + +### Maintenance + +* **deps:** bump the actions group with 2 updates ([#1057](https://github.com/solana-foundation/solana-developer-platform/pull/1057)) ([f222d54](https://github.com/solana-foundation/solana-developer-platform/commit/f222d544d55fda7a419ac21d38937681f5a17dfd)) + ## [0.52.0](https://github.com/solana-foundation/solana-developer-platform/compare/v0.51.0...v0.52.0) (2026-07-31) ### Features diff --git a/apps/sdp-web/messages/fr/dashboard-issuance.json b/apps/sdp-web/messages/fr/dashboard-issuance.json index 3ca9c16ab..b8875b75f 100644 --- a/apps/sdp-web/messages/fr/dashboard-issuance.json +++ b/apps/sdp-web/messages/fr/dashboard-issuance.json @@ -540,7 +540,19 @@ "sendTransaction": "Envoyer la transaction ?", "sendTransactionDescription": "Ceci soumettra une transaction on-chain. Voulez-vous continuer ?", "goAhead": "Continuer", - "token": "Token" + "token": "Token", + "tokenizationEngineTitle": "Moteur de tokenisation", + "tokenizationEngineHint": "Choisissez le moteur qui déploie et gère ce Token on-chain.", + "engineVulcanForgeName": "Vulcan Forge", + "engineVulcanForgeDescription": "Déployez on-chain et tokenisez sur Vulcan Forge avec un registre et une indexation intégrés.", + "engineMosaicName": "SDP with Mosaic", + "engineMosaicDescription": "Déployez avec le moteur Mosaic intégré de SDP sur Token-2022.", + "comingSoon": "Bientôt disponible", + "stepProgress": "Étape {current} sur {total}", + "vulcanForgeOnboardTitle": "Intégrer le Token à Vulcan Forge", + "vulcanForgeOnboardDescription": "AlphaLedger conserve un jumeau hors-ligne enregistré pour l'indexation et le reporting.", + "engineStepLabel": "Moteur", + "deployStepLabel": "Déployer" }, "forms": { "saveMetadata": "Enregistrer les métadonnées", diff --git a/apps/sdp-web/messages/fr/dashboard-private-channels.json b/apps/sdp-web/messages/fr/dashboard-private-channels.json new file mode 100644 index 000000000..f8f01f2e4 --- /dev/null +++ b/apps/sdp-web/messages/fr/dashboard-private-channels.json @@ -0,0 +1,298 @@ +{ + "DashboardPrivateChannels": { + "tabs": { + "overview": "Aperçu", + "channels": "Canaux", + "deposit": "Déposer", + "transfer": "Transfert", + "withdraw": "Retirer", + "members": "Membres", + "events": "Événements", + "instance": "Instance" + }, + "common": { + "loadError": "Une erreur est survenue lors du chargement de cette section.", + "cancel": "Annuler", + "amountUsdc": "Montant (USDC)", + "amountPlaceholder": "1.5", + "onChainBalance": "On-chain :", + "channelBalance": "Solde du canal :", + "amountRequired": "Saisissez un montant en USDC.", + "amountInvalid": "Saisissez un montant en USDC supérieur à zéro, avec jusqu'à 6 décimales.", + "amountWithUnit": "{amount} USDC" + }, + "overview": { + "title": "Aperçu", + "description": "Statut en direct de votre instance connectée.", + "gateway": "Gateway", + "solanaVersion": "Version Solana", + "slot": "Slot", + "latestBlockhash": "Dernier blockhash", + "escrowInstance": "Instance d'escrow", + "escrowProgram": "Programme d'escrow", + "authService": "Service d'authentification", + "ready": "Prêt", + "degraded": "Dégradé — {reason}", + "unreachable": "Inaccessible — {error}", + "onChain": "On-chain", + "notExecutable": "Non exécutable", + "reachable": "Accessible", + "notReachable": "Inaccessible", + "ownerMismatch": "propriétaire non concordant" + }, + "verifiedWallets": { + "title": "Wallets vérifiés", + "description": "Vérifiez un Wallet de custody auprès de cette instance pour débloquer les transactions. La vérification signe un challenge avec le Wallet ; la révocation le supprime.", + "loadError": "Impossible de charger vos Wallets. Actualisez la page pour réessayer.", + "noWallets": "Aucun Wallet trouvé pour cet utilisateur, créez-en un.", + "createWallet": "Créer un wallet", + "verified": "Vérifié", + "verify": "Vérifier", + "revokeTitle": "Révoquer la vérification", + "revokeAria": "Révoquer la vérification de {pubkey}", + "orphaned": "Le wallet custody ne figure plus dans la liste", + "verifySuccess": "Wallet {key} vérifié.", + "revokeSuccess": "Vérification de {key} révoquée.", + "channelBalanceTooltip": "Solde du canal pour le mint {mint}", + "channelBalanceAmount": "{amount} USDC" + }, + "channels": { + "title": "Canaux", + "description": "Les canaux logiques regroupent l'activité de votre instance connectée. Le canal par défaut est créé automatiquement et ne peut pas être supprimé.", + "newChannel": "Nouveau canal", + "namePlaceholder": "Nom du canal (ex. Trésorerie)", + "descriptionPlaceholder": "Description (facultative)", + "add": "Ajouter", + "empty": "Aucun canal pour le moment.", + "defaultBadge": "Par défaut", + "created": "Créé le {date}", + "deleteAria": "Supprimer {name}", + "deleteDefaultTitle": "Le canal par défaut ne peut pas être supprimé", + "deleteTitle": "Supprimer le canal", + "nameRequired": "Le nom du canal est obligatoire.", + "createSuccess": "Canal « {name} » créé.", + "deleteSuccess": "Canal « {name} » supprimé." + }, + "members": { + "title": "Membres", + "description": "Invitez des utilisateurs de projet SDP à votre espace de travail Private Channels et gérez les canaux auxquels ils appartiennent.", + "countOne": "{count} membre invité dans cet espace de travail.", + "countOther": "{count} membres invités dans cet espace de travail.", + "inviteMember": "Inviter un membre", + "empty": "Aucun membre pour le moment. Invitez un utilisateur de projet SDP pour commencer.", + "columnEmail": "E-mail", + "columnName": "Nom", + "columnVerifiedWallets": "Wallets vérifiés", + "columnChannels": "Canaux", + "columnActions": "Actions", + "verifiedCount": "{count} vérifié(s)", + "addToChannel": "Ajouter au canal", + "defaultSuffix": "(par défaut)", + "removeFromAria": "Retirer de {label}", + "delete": "Supprimer", + "inviteAria": "Inviter un membre", + "inviteTitle": "Inviter un membre", + "inviteDescription": "Choisissez un utilisateur de projet SDP à inviter. Un identifiant SPC sera créé pour lui.", + "projectUser": "Utilisateur de projet", + "selectUser": "Sélectionner un utilisateur…", + "pickedName": "Nom : {name}", + "inviting": "Invitation…", + "invite": "Inviter", + "inviteSuccess": "{email} invité(e).", + "inviteUrlCopied": "URL d'invitation copiée dans le presse-papiers.", + "deleteAria": "Supprimer le membre", + "removeTitle": "Retirer le membre", + "removeDescription": "Retire {email} de l'espace de travail et de tous les canaux auxquels ce membre appartient. Son identifiant SPC est conservé (SPC ne propose pas d'endpoint de suppression d'utilisateur), mais il reste orphelin de SDP.", + "removing": "Suppression…", + "remove": "Retirer", + "removeSuccess": "Membre retiré." + }, + "deposit": { + "title": "Dépôt", + "description": "Déplacez des USDC d'un wallet de custody vers l'escrow du canal sur devnet. Suivez la progression, du contrat d'escrow jusqu'à la confirmation on-chain.", + "fromWallet": "Depuis le wallet", + "fromWalletHelp": "Le dépôt est signé depuis ce wallet. Il doit contenir des USDC devnet (et un peu de SOL).", + "recipient": "Destinataire (facultatif)", + "recipientPlaceholder": "Par défaut, le wallet qui dépose", + "recipientHelp": "Une adresse de wallet ou un walletId à créditer dans le canal. Laissez vide pour créditer ce wallet.", + "submit": "Déposer", + "submitToast": "Dépôt soumis", + "progressLabel": "Dépôt en cours", + "failed": "Le dépôt a échoué.", + "viewTransaction": "Voir la transaction sur Solana Explorer", + "newDeposit": "Nouveau dépôt", + "stageSentTitle": "Envoyé à l'escrow sur devnet", + "stageSentDescription": "Diffusion du dépôt vers le programme d'escrow sur devnet.", + "stageConfirmedTitle": "Confirmé sur devnet", + "stageConfirmedDescription": "La transaction de dépôt a été confirmée on-chain.", + "statusSubmitted": "Soumis", + "statusConfirmed": "Confirmé", + "statusFailed": "Échoué", + "noWalletsBefore": "Aucun wallet vérifié pour le moment. Vérifiez un wallet de custody sur la ", + "noWalletsLink": "page d'aperçu des Private Channels", + "noWalletsAfter": " et approvisionnez-le avec des USDC devnet, puis revenez pour déposer.", + "statusPending": "En préparation", + "statusSettled": "Réglé", + "selectWallet": "Sélectionnez un wallet à partir duquel déposer." + }, + "withdraw": { + "title": "Retrait", + "description": "Brulez le solde de canal d'un wallet de custody et faites libérer les USDC correspondants par l'opérateur sur devnet. Suivez la progression, du burn jusqu'à la libération sur devnet.", + "fromWallet": "Retirer depuis", + "fromWalletHelp": "Le burn est signé depuis ce wallet. Son solde de canal est débité.", + "destination": "Libérer vers (facultatif)", + "destinationPlaceholder": "Par défaut, le wallet qui retire", + "destinationHelp": "Une adresse devnet ou un walletId pour recevoir les USDC libérés. Laissez vide pour libérer vers ce wallet.", + "submit": "Retirer", + "submitToast": "Retrait soumis", + "progressLabel": "Retrait en cours", + "failed": "Le retrait a échoué.", + "burnSignature": "Signature du burn :", + "viewRelease": "Voir la libération sur Solana Explorer", + "newWithdrawal": "Nouveau retrait", + "stageBurnSentTitle": "Burn envoyé au canal", + "stageBurnSentDescription": "Diffusion du burn vers la chaîne du canal.", + "stageBurnConfirmedTitle": "Burn confirmé (solde débité)", + "stageBurnConfirmedDescription": "Le burn a été confirmé et le solde de votre channel a été débité.", + "stageReleasedTitle": "Libéré sur devnet", + "stageReleasedDescription": "L'opérateur a libéré les USDC correspondants vers la destination.", + "statusPending": "En attente", + "statusSubmitted": "Soumis", + "statusBurnConfirmed": "Burn confirmé", + "statusFailed": "Échec", + "noWalletsBefore": "Aucun Wallet vérifié pour le moment. Vérifiez un Wallet de custody sur la page ", + "noWalletsLink": "Vue d'ensemble des Private Channels", + "noWalletsAfter": " et déposez des fonds dans le channel, puis revenez pour retirer.", + "statusSettled": "Réglé", + "selectWallet": "Sélectionnez un Wallet à partir duquel effectuer le retrait." + }, + "transfer": { + "title": "Transfert", + "description": "Transférez des USDC depuis votre Wallet de custody vérifié sélectionné vers un autre Wallet de membre vérifié dans le même channel logique. Les soldes appartiennent au Wallet et sont partagés entre les channels logiques.", + "noChannels": "Vous n'êtes membre d'aucun private channel actif. Demandez à un administrateur de channel de vous ajouter avant d'effectuer un transfert.", + "noSourceWallets": "Vous n'avez aucun Wallet de custody vérifié avec lequel SDP puisse signer. Vérifiez un Wallet provisionné dans Overview avant d'effectuer un transfert.", + "channel": "Channel", + "channelDefaultSuffix": " (par défaut)", + "fromWallet": "Depuis le Wallet vérifié", + "fromWalletHelp": "Le transfert est signé depuis ce Wallet. Le solde de son channel est débité.", + "recipientWallet": "Wallet destinataire", + "recipientsLoading": "Chargement des Wallets destinataires vérifiés…", + "recipientsRetry": "Recharger les destinataires", + "recipientsLoadFailed": "Impossible de charger les Wallets destinataires vérifiés.", + "recipientsEmpty": "Aucun autre membre du channel ne possède de Wallet vérifié éligible pour recevoir ce transfert.", + "selectChannel": "Sélectionnez un channel.", + "selectSourceWallet": "Sélectionnez un Wallet source vérifié.", + "selectRecipient": "Sélectionnez un Wallet destinataire vérifié.", + "selectChannelForRecipients": "Sélectionnez un channel pour charger les destinataires vérifiés.", + "incomplete": "Renseignez tous les champs du transfert.", + "submit": "Transférer des USDC", + "submitFailed": "Le transfert n'a pas pu être soumis. Réessayez avec les mêmes informations.", + "confirmedToast": "Transfert confirmé", + "submittedToast": "Transfert soumis, résultat en attente", + "failedToast": "Le transfert du private channel a échoué.", + "progressLabel": "Transféré", + "senderFallback": "Wallet source vérifié", + "recipientFallback": "Wallet destinataire vérifié", + "toMemberWallet": "Vers le Wallet de membre vérifié", + "signature": "Signature SPC", + "stageConfirmedTitle": "Transfert confirmé", + "stageConfirmedDescription": "SPC a exécuté le transfert et le solde du destinataire est mis à jour. Cette opération est définitive.", + "stageSubmittedTitle": "En attente du résultat du transfert", + "stageSubmittedDescription": "SPC a accepté le transfert, mais n'a pas encore communiqué le résultat. Vérifiez le solde du destinataire avant de réessayer afin d'éviter un double envoi.", + "stagePendingTitle": "Résultat de la soumission inconnu", + "stagePendingDescription": "Le transfert a été enregistré, mais son résultat n'a jamais été renvoyé. Vérifiez le solde du destinataire avant de réessayer.", + "stageFailedTitle": "Transfert échoué", + "stageFailedDescription": "SPC n'a pas mené le transfert à bien : aucun fonds n'a été déplacé. Vous pouvez réessayer.", + "statusPending": "En attente", + "statusSubmitted": "Soumis", + "statusConfirmed": "Confirmé", + "statusFailed": "Échec", + "newTransfer": "Nouveau transfert", + "tryAgain": "Réessayer" + }, + "events": { + "title": "Événements", + "description": "Activité du projet pour les canaux privés, incluant les événements de cycle de vie, de membres, de transferts et d'erreurs. L'historique est conservé même après la déconnexion ou la suppression d'une instance.", + "empty": "Aucun événement pour le moment. Connectez une instance ou créez un canal pour démarrer le flux d'activité.", + "columnEvent": "Événement", + "columnCategory": "Catégorie", + "columnStatus": "Statut", + "columnWhen": "Quand", + "loadMore": "Charger plus", + "familyLifecycle": "Cycle de vie", + "familyMember": "Membre", + "familyTransfer": "Transfert", + "familyError": "Erreur", + "statusPending": "En attente", + "statusConfirmed": "Confirmé", + "statusFailed": "Échec", + "statusStale": "Obsolète", + "statusInfo": "Info", + "typeInstanceConnected": "Instance connectée", + "typeInstanceDisconnected": "Instance déconnectée", + "typeChannelCreated": "Canal créé", + "typeChannelArchived": "Canal archivé", + "typeMemberAdded": "Membre ajouté", + "typeMemberRevoked": "Membre révoqué", + "typeMemberRoleChanged": "Rôle du membre modifié", + "typeWalletChallengeRequested": "Challenge Wallet demandé", + "typeWalletVerified": "Wallet vérifié", + "typeWalletVerificationRevoked": "Vérification du Wallet révoquée", + "typeDepositSubmitted": "Dépôt soumis", + "typeWithdrawalSubmitted": "Retrait soumis", + "typeSpcUnreachable": "Canaux privés inaccessibles", + "typeDepositConfirmed": "Dépôt confirmé", + "typeDepositSettled": "Dépôt réglé", + "typeDepositFailed": "Échec du dépôt", + "typeWithdrawalConfirmed": "Burn du retrait confirmé", + "typeTransferSubmitted": "Transfert de membre soumis", + "typeTransferConfirmed": "Transfert de membre confirmé", + "typeTransferFailed": "Échec du transfert de membre", + "typeWithdrawalSettled": "Retrait réglé", + "typeWithdrawalFailed": "Échec du retrait", + "typeDepositAwaitingSpcCredit": "En attente de crédit du canal", + "typeWithdrawalReleaseAttemptFailed": "Échec de la tentative de libération", + "typeStuckWarning": "Transfert bloqué", + "typeNeedsManualReview": "Nécessite une revue manuelle" + }, + "instance": { + "title": "Connecter un canal privé", + "description": "Pointez SDP vers une instance Solana Private Channels.", + "gatewayUrl": "URL de la passerelle", + "gatewayPlaceholder": "http://gateway.example:8899", + "chainRpcUrl": "URL RPC de la chaîne", + "chainRpcPlaceholder": "https://devnet.helius-rpc.com/?api-key=…", + "authUrl": "URL d'authentification", + "authPlaceholder": "http://auth.example:8903", + "escrowProgramId": "ID du programme Escrow", + "withdrawProgramId": "ID du programme Withdraw", + "escrowInstanceAddr": "Adresse de l'instance Escrow", + "testConnection": "Tester la connexion", + "testing": "Test en cours…", + "connect": "Connecter", + "connecting": "Connexion…", + "disconnect": "Déconnecter", + "disconnecting": "Déconnexion…", + "delete": "Supprimer", + "deleting": "Suppression…", + "statusReady": "Prêt", + "statusDegraded": "Dégradé", + "statusUnreachable": "Injoignable", + "statusFailed": "Échec", + "latency": "{ms} ms", + "latencyWithVersion": "{ms} ms · v{version}", + "connectSuccess": "Canal privé connecté.", + "disconnectSuccess": "Canal privé déconnecté. Vous pouvez le modifier et le reconnecter.", + "deleteSuccess": "Instance de canal privé supprimée.", + "gatewayLabel": "Gateway :", + "reactivateAria": "Réactiver l'instance existante", + "reactivateTitle": "Réactiver l'instance existante", + "reactivateDescription": "Cette URL de gateway a déjà été connectée à ce projet. La réactivation écrasera la configuration stockée sur l'enregistrement d'instance existant. Toutes les données en aval associées appartiendront désormais à la nouvelle configuration. Continuez à vos risques et périls.", + "reactivate": "Réactiver", + "reactivating": "Réactivation…", + "deleteAria": "Supprimer l'instance de canal privé", + "deleteTitle": "Supprimer l'instance de canal privé", + "deleteDescription": "Cette action supprimera définitivement l'enregistrement d'instance et toutes les données en aval qui lui sont liées (canaux, dépôts, transferts). Cette action est irréversible." + } + } +} diff --git a/apps/sdp-web/messages/fr/shared.json b/apps/sdp-web/messages/fr/shared.json index d962ae1b8..05fe1e4f4 100644 --- a/apps/sdp-web/messages/fr/shared.json +++ b/apps/sdp-web/messages/fr/shared.json @@ -131,7 +131,8 @@ "completeRequiredFields": "Complétez les champs requis : {fields}", "invalidApiKeyFormat": "Format de clé API invalide. Utilisez une clé brute comme sk_test_... ou sk_live_... avec un suffixe valide.", "playgroundExecutionFailed": "Échec de l’exécution Playground.", - "requestExecutionFailed": "Échec de l’exécution de la requête." + "requestExecutionFailed": "Échec de l’exécution de la requête.", + "invalidJsonField": "{field} doit contenir un JSON valide." }, "dashboardShell": { "workspace": "Espace de travail", @@ -198,7 +199,8 @@ "collapsePaymentsMenu": "Réduire le menu Paiements", "backToWallet": "Retour au Wallet", "walletControls": "Contrôles du Wallet", - "backToApprovals": "Retour aux approbations" + "backToApprovals": "Retour aux approbations", + "privateChannels": "Canaux privés" }, "validation": { "allowlistValueRequired": "La valeur Allowlist est requise", diff --git a/package.json b/package.json index e2d422716..7e0872b63 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solana-developer-platform", - "version": "0.52.0", + "version": "0.53.0", "private": true, "packageManager": "pnpm@10.16.0", "engines": {