feat: migrate to @tma.js/sdk-react for Telegram Mini App

- Add useTelegramSDK hook with reactive signals for viewport, safe area, fullscreen
- Migrate TelegramAdapter to use SDK components (backButton, mainButton, hapticFeedback, cloudStorage, themeParams, popup)
- Update Login, TelegramRedirect to use SDK helpers
- Update PlatformProvider, api/client to use centralized SDK functions
- Simplify useTelegramWebApp as backward-compatible wrapper
- Add automatic CSS variable binding for theme and viewport
This commit is contained in:
c0mrade
2026-02-01 20:13:50 +03:00
parent 55ae55f4af
commit edb5be09ae
14 changed files with 736 additions and 513 deletions

132
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "cabinet-frontend",
"version": "1.5.0",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
@@ -24,6 +24,7 @@
"@radix-ui/react-tooltip": "^1.2.8",
"@radix-ui/react-visually-hidden": "^1.2.4",
"@tanstack/react-query": "^5.8.0",
"@tma.js/sdk-react": "^3.0.15",
"axios": "^1.6.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
@@ -2606,6 +2607,92 @@
"react": "^18 || ^19"
}
},
"node_modules/@tma.js/bridge": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@tma.js/bridge/-/bridge-2.2.2.tgz",
"integrity": "sha512-dL7iZzYP/VC4/qJYSXPI1GXLGP3gLTp10L7iGY6PcjB2F4xXS2JnHUoYvD2DgQG1ogjE93zWnVIMN7inx1v+Eg==",
"license": "MIT",
"dependencies": {
"@tma.js/signals": "^1.0.1",
"@tma.js/toolkit": "^1.0.4",
"@tma.js/transformers": "^1.1.3",
"@tma.js/types": "^1.0.2",
"better-promises": "^1.0.0",
"error-kid": "^1.0.2",
"fp-ts": "^2.16.11",
"mitt": "^3.0.1",
"valibot": "^1.1.0"
}
},
"node_modules/@tma.js/sdk": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/@tma.js/sdk/-/sdk-3.1.6.tgz",
"integrity": "sha512-NENkQa7G5N9kwbL20ErUMO9Fukxl9eVhcJ439PbCg2WYMk/x9oNbx2DhEzhX4xM718zSjYejmSj1oXCKk0PxYA==",
"license": "MIT",
"dependencies": {
"@tma.js/bridge": "^2.2.2",
"@tma.js/signals": "^1.0.1",
"@tma.js/toolkit": "^1.0.4",
"@tma.js/transformers": "^1.1.3",
"@tma.js/types": "^1.0.2",
"better-promises": "^1.0.0",
"error-kid": "^1.0.2",
"fp-ts": "^2.16.11",
"valibot": "^1.1.0"
}
},
"node_modules/@tma.js/sdk-react": {
"version": "3.0.15",
"resolved": "https://registry.npmjs.org/@tma.js/sdk-react/-/sdk-react-3.0.15.tgz",
"integrity": "sha512-HsgqPINSBK87NIRZ+ZDol07QPhSQ3GOTofyZEH0xoaQjZWb9wVxUXwECa5ozRUdzWZI+Mgx8oD1pzrjyNkDjFA==",
"license": "MIT",
"dependencies": {
"@tma.js/sdk": "^3.1.6"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@tma.js/signals": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@tma.js/signals/-/signals-1.0.1.tgz",
"integrity": "sha512-i2HUuwGqL4BmM5KAklAUhMhlEgUOF+F4nMHHS/zxrmD0upHE/0CiXCEdQxVeeOGN6e2RrKlonA40sDtR6OUDCw==",
"license": "MIT"
},
"node_modules/@tma.js/toolkit": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@tma.js/toolkit/-/toolkit-1.0.4.tgz",
"integrity": "sha512-6CDlkgc+43WD2jy6jog3B50yt9t+/wRwrN25zOa4iSw4IzfqoFjaQcJzTupBYaRxz19C3Rrir7p0/qStS/Z8vw==",
"license": "MIT",
"dependencies": {
"better-promises": "^1.0.0",
"fp-ts": "^2.16.11"
}
},
"node_modules/@tma.js/transformers": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@tma.js/transformers/-/transformers-1.1.3.tgz",
"integrity": "sha512-zRL+fdo/NBpGqCJfl8ItAvcJIFT5Zy6UOYJwQPmUV5/gTHgmSvmGlrP43PeVi9XZ7Ggf4xbO6LUa4ehxozhMTA==",
"license": "MIT",
"dependencies": {
"@tma.js/toolkit": "^1.0.4",
"@tma.js/types": "^1.0.2",
"fp-ts": "^2.16.11",
"valibot": "^1.1.0"
}
},
"node_modules/@tma.js/types": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@tma.js/types/-/types-1.0.2.tgz",
"integrity": "sha512-qs4mi+U1xZmMQBdMhWAo1X4YqUJ/ae0y28s+GNCpQq58bsJo0h8rvyVOB1RwPvXogIY9+yribbZe6z3AIJmsAQ==",
"license": "MIT"
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -3194,6 +3281,15 @@
"baseline-browser-mapping": "dist/cli.js"
}
},
"node_modules/better-promises": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/better-promises/-/better-promises-1.0.0.tgz",
"integrity": "sha512-gPgL2nRgeSbMIe3QpsYdKR3K0S9OZuphVuos60Eqsw8d/6GivOkyJ5D/zmnolJ6hzh7upnnflBUWUlQh4qpU2A==",
"license": "MIT",
"dependencies": {
"error-kid": "^1.0.1"
}
},
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -3660,6 +3756,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/error-kid": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/error-kid/-/error-kid-1.0.2.tgz",
"integrity": "sha512-Xvq0ZrY/azCbREWKt9E/3mXDF0MkuEVVvHnOKutUhtq2O8pyneEixQ4nSFkA19Xfn+/OVSg//iVG0dxIDj7DIA==",
"license": "MIT"
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
@@ -4139,6 +4241,12 @@
"node": ">= 6"
}
},
"node_modules/fp-ts": {
"version": "2.16.11",
"resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.11.tgz",
"integrity": "sha512-LaI+KaX2NFkfn1ZGHoKCmcfv7yrZsC3b8NtWsTVQeHkq4F27vI5igUuO53sxqDEa2gNQMHFPmpojDw/1zmUK7w==",
"license": "MIT"
},
"node_modules/fraction.js": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
@@ -4876,6 +4984,12 @@
"node": "*"
}
},
"node_modules/mitt": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
"license": "MIT"
},
"node_modules/motion-dom": {
"version": "12.29.2",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.29.2.tgz",
@@ -6164,7 +6278,7 @@
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
@@ -6299,6 +6413,20 @@
"dev": true,
"license": "MIT"
},
"node_modules/valibot": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz",
"integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==",
"license": "MIT",
"peerDependencies": {
"typescript": ">=5"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/vite": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",