@tma.js/sdk-react 0.4.12 → 0.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +28 -28
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +68 -68
  6. package/src/index.ts +2 -2
  7. package/src/lib/back-button/index.ts +3 -3
  8. package/src/lib/back-button/types.ts +1 -1
  9. package/src/lib/back-button/useBackButton.ts +13 -13
  10. package/src/lib/back-button/withBackButton.tsx +18 -18
  11. package/src/lib/closing-behavior/index.ts +3 -3
  12. package/src/lib/closing-behavior/types.ts +1 -1
  13. package/src/lib/closing-behavior/useClosingBehaviour.ts +13 -13
  14. package/src/lib/closing-behavior/withClosingBehaviour.tsx +18 -18
  15. package/src/lib/cloud-storage.tsx +28 -28
  16. package/src/lib/haptic-feedback/index.ts +3 -3
  17. package/src/lib/haptic-feedback/types.ts +1 -1
  18. package/src/lib/haptic-feedback/useHapticFeedback.ts +9 -9
  19. package/src/lib/haptic-feedback/withHapticFeedback.tsx +18 -18
  20. package/src/lib/hooks.ts +52 -52
  21. package/src/lib/index.ts +13 -13
  22. package/src/lib/init-data/index.ts +3 -3
  23. package/src/lib/init-data/types.ts +1 -1
  24. package/src/lib/init-data/useInitData.ts +9 -9
  25. package/src/lib/init-data/withInitData.tsx +18 -18
  26. package/src/lib/launch-params/index.ts +3 -3
  27. package/src/lib/launch-params/types.ts +1 -1
  28. package/src/lib/launch-params/useLaunchParams.ts +11 -11
  29. package/src/lib/launch-params/withLaunchParams.tsx +18 -18
  30. package/src/lib/main-button/index.ts +3 -3
  31. package/src/lib/main-button/types.ts +1 -1
  32. package/src/lib/main-button/useMainButton.ts +16 -16
  33. package/src/lib/main-button/withMainButton.tsx +18 -18
  34. package/src/lib/popup/index.ts +3 -3
  35. package/src/lib/popup/types.ts +1 -1
  36. package/src/lib/popup/usePopup.ts +13 -13
  37. package/src/lib/popup/withPopup.tsx +18 -18
  38. package/src/lib/qr-scanner/index.ts +3 -3
  39. package/src/lib/qr-scanner/types.ts +1 -1
  40. package/src/lib/qr-scanner/useQRScanner.ts +13 -13
  41. package/src/lib/qr-scanner/withQRScanner.tsx +18 -18
  42. package/src/lib/theme-params.tsx +29 -29
  43. package/src/lib/viewport/index.ts +3 -3
  44. package/src/lib/viewport/types.ts +1 -1
  45. package/src/lib/viewport/useViewport.ts +15 -15
  46. package/src/lib/viewport/withViewport.tsx +18 -18
  47. package/src/lib/web-app/index.ts +3 -3
  48. package/src/lib/web-app/types.ts +1 -1
  49. package/src/lib/web-app/useWebApp.ts +13 -13
  50. package/src/lib/web-app/withWebApp.tsx +18 -18
  51. package/src/provider/SDKProvider.tsx +47 -47
  52. package/src/provider/context.ts +11 -11
  53. package/src/provider/hocs.tsx +18 -18
  54. package/src/provider/hooks.ts +23 -23
  55. package/src/provider/index.ts +5 -5
  56. package/src/provider/types.ts +34 -34
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2022 Telegram Web Apps
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Telegram Web Apps
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,28 +1,28 @@
1
- # @tma.js/sdk-react
2
-
3
- [code-badge]: https://img.shields.io/badge/source-black?logo=github
4
-
5
- [code-link]: https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/sdk-react
6
-
7
- [docs-link]: https://docs.telegram-mini-apps.com/docs/libraries/tma-js-sdk-react
8
-
9
- [docs-badge]: https://img.shields.io/badge/documentation-blue?logo=gitbook&logoColor=white
10
-
11
- [npm-link]: https://npmjs.com/package/@tma.js/sdk-react
12
-
13
- [npm-badge]: https://img.shields.io/npm/v/@tma.js/sdk-react?logo=npm
14
-
15
- [size-badge]: https://img.shields.io/bundlephobia/minzip/@tma.js/sdk-react
16
-
17
- [![NPM][npm-badge]][npm-link]
18
- ![Size][size-badge]
19
- [![docs-badge]][docs-link]
20
- [![code-badge]][code-link]
21
-
22
- React bindings for client SDK. Contains hooks, components and other
23
- useful tools which allow usage of React along with Web Apps client SDK.
24
- Tracks SDK components changes out of box.
25
-
26
- This library is a part of TypeScript packages ecosystem around Telegram Web
27
- Apps. You can learn more about this package in this
28
- [documentation](https://docs.telegram-mini-apps.com/docs/libraries/tma-js-sdk-react).
1
+ # @tma.js/sdk-react
2
+
3
+ [code-badge]: https://img.shields.io/badge/source-black?logo=github
4
+
5
+ [code-link]: https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/sdk-react
6
+
7
+ [docs-link]: https://docs.telegram-mini-apps.com/docs/libraries/tma-js-sdk-react
8
+
9
+ [docs-badge]: https://img.shields.io/badge/documentation-blue?logo=gitbook&logoColor=white
10
+
11
+ [npm-link]: https://npmjs.com/package/@tma.js/sdk-react
12
+
13
+ [npm-badge]: https://img.shields.io/npm/v/@tma.js/sdk-react?logo=npm
14
+
15
+ [size-badge]: https://img.shields.io/bundlephobia/minzip/@tma.js/sdk-react
16
+
17
+ [![NPM][npm-badge]][npm-link]
18
+ ![Size][size-badge]
19
+ [![docs-badge]][docs-link]
20
+ [![code-badge]][code-link]
21
+
22
+ React bindings for client SDK. Contains hooks, components and other
23
+ useful tools which allow usage of React along with Web Apps client SDK.
24
+ Tracks SDK components changes out of box.
25
+
26
+ This library is a part of TypeScript packages ecosystem around Telegram Web
27
+ Apps. You can learn more about this package in this
28
+ [documentation](https://docs.telegram-mini-apps.com/docs/libraries/tma-js-sdk-react).
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/provider/context.ts","../src/provider/hooks.ts","../src/provider/hocs.tsx","../src/provider/SDKProvider.tsx","../src/lib/hooks.ts","../src/lib/back-button/useBackButton.ts","../src/lib/back-button/withBackButton.tsx","../src/lib/closing-behavior/useClosingBehaviour.ts","../src/lib/closing-behavior/withClosingBehaviour.tsx","../src/lib/haptic-feedback/useHapticFeedback.ts","../src/lib/haptic-feedback/withHapticFeedback.tsx","../src/lib/init-data/useInitData.ts","../src/lib/init-data/withInitData.tsx","../src/lib/launch-params/useLaunchParams.ts","../src/lib/launch-params/withLaunchParams.tsx","../src/lib/main-button/useMainButton.ts","../src/lib/main-button/withMainButton.tsx","../src/lib/popup/usePopup.ts","../src/lib/popup/withPopup.tsx","../src/lib/qr-scanner/useQRScanner.ts","../src/lib/qr-scanner/withQRScanner.tsx","../src/lib/viewport/useViewport.ts","../src/lib/viewport/withViewport.tsx","../src/lib/web-app/useWebApp.ts","../src/lib/web-app/withWebApp.tsx","../src/lib/cloud-storage.tsx","../src/lib/theme-params.tsx"],"sourcesContent":["import { createContext } from 'react';\r\n\r\nimport type { SDKContext } from './types.js';\r\n\r\nexport const sdkContext = createContext<SDKContext>({\r\n components: null,\r\n didInit: false,\r\n error: null,\r\n});\r\n\r\nsdkContext.displayName = 'SDKContext';\r\n","import { useContext } from 'react';\r\n\r\nimport { sdkContext } from './context.js';\r\nimport type { SDKComponent, SDKComponentName } from './types.js';\r\n\r\n/**\r\n * Returns current SDK information.\r\n */\r\nexport const useSDK = () => useContext(sdkContext);\r\n\r\n/**\r\n * Returns value by its field name from SDK init result.\r\n * @param name - component name.\r\n * @throws {Error} SDK is not initialized.\r\n */\r\nexport function useUnit<N extends SDKComponentName>(name: N): SDKComponent<N> {\r\n const { components } = useSDK();\r\n\r\n if (components === null) {\r\n throw new Error(`Unable to get unit \"${name}\" as long as SDK is not initialized.`);\r\n }\r\n return components[name];\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport type { SDKContext } from './types.js';\r\nimport { useSDK } from './hooks.js';\r\n\r\n/**\r\n * HOC which passes SDK context to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withSDK<P extends { sdk?: SDKContext }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'sdk'>> {\r\n return function WithLaunchParams(props: Omit<P, 'sdk'>) {\r\n const p = { ...props, sdk: useSDK() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import React, {\r\n memo,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type PropsWithChildren,\r\n} from 'react';\r\nimport { init, type InitOptions } from '@tma.js/sdk';\r\n\r\nimport { sdkContext } from './context.js';\r\nimport type { SDKComponents, SDKContext } from './types.js';\r\n\r\nexport type SDKInitOptions = InitOptions;\r\n\r\nexport type SDKProviderProps = PropsWithChildren<{ initOptions?: SDKInitOptions }>;\r\n\r\n/**\r\n * Component which provides access to SDK components.\r\n */\r\nexport const SDKProvider = memo<SDKProviderProps>((props) => {\r\n const { children, initOptions } = props;\r\n const [didInit, setDidInit] = useState(false);\r\n const [error, setError] = useState<null | unknown>(null);\r\n const [components, setComponents] = useState<SDKComponents | null>(null);\r\n\r\n // Initialize SDK on DOM attach.\r\n useEffect(() => {\r\n // Update init status.\r\n setDidInit(true);\r\n\r\n // Init SDK.\r\n init(initOptions)\r\n .then(setComponents)\r\n .catch(setError);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const context = useMemo<SDKContext>(() => ({\r\n components,\r\n didInit,\r\n error,\r\n }), [didInit, components, error]);\r\n\r\n return <sdkContext.Provider value={context}>{children}</sdkContext.Provider>;\r\n});\r\n\r\nSDKProvider.displayName = 'SDKProvider';\r\n","import { useCallback, useState, useEffect } from 'react';\r\nimport type { PostEvent } from '@tma.js/sdk';\r\n\r\nimport { useUnit } from '../provider/index.js';\r\n\r\ninterface Trackable {\r\n on: (event: any, ...args: any[]) => void;\r\n off: (event: any, ...args: any[]) => void;\r\n}\r\n\r\ntype EventName<T extends Trackable> = T extends {\r\n on(event: infer E, ...args: any[]): any\r\n} ? E : never;\r\n\r\n/**\r\n * The hook which returns function used for force update.\r\n */\r\nexport function useForceUpdate(): (() => void) {\r\n const [, setHash] = useState(0);\r\n // TODO: Maybe just assign new symbol?\r\n return useCallback(() => setHash((hash) => (hash + 1) % 1_000_000), []);\r\n}\r\n\r\n/**\r\n * The hook which listens to the specified object events and calls force update\r\n * in case, some of them was emitted.\r\n * @param trackable - object which allows events listening.\r\n * @param events - events to listen. This array will be memoized during first\r\n * hook call.\r\n */\r\nexport function useEventsTracking<T extends Trackable>(\r\n trackable: T,\r\n events: EventName<T>[],\r\n) {\r\n const forceUpdate = useForceUpdate();\r\n\r\n useEffect(() => {\r\n // Start listening to each event.\r\n events.forEach((event) => trackable.on(event, forceUpdate));\r\n\r\n // On cleanup remove event listeners.\r\n return () => events.forEach((event) => trackable.off(event, forceUpdate));\r\n }, [trackable, forceUpdate, events]);\r\n}\r\n\r\n/**\r\n * Returns event posting function which was created during SDK\r\n * initialization.\r\n */\r\nexport function usePostEvent(): PostEvent {\r\n return useUnit('postEvent');\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { BackButton } from './types.js';\r\n\r\n/**\r\n * Returns BackButton component instance.\r\n */\r\nexport function useBackButton(): BackButton {\r\n const backButton = useUnit('backButton');\r\n useEventsTracking(backButton, ['isVisibleChanged']);\r\n\r\n return backButton;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useBackButton } from './useBackButton.js';\r\nimport type { BackButton } from './types.js';\r\n\r\n/**\r\n * HOC which passes BackButton SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withBackButton<P extends { backButton?: BackButton }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'backButton'>> {\r\n return function WithBackButton(props: Omit<P, 'backButton'>) {\r\n const p = { ...props, backButton: useBackButton() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { ClosingBehaviour } from './types.js';\r\n\r\n/**\r\n * Returns ClosingBehaviour component instance.\r\n */\r\nexport function useClosingBehaviour(): ClosingBehaviour {\r\n const component = useUnit('closingBehavior');\r\n useEventsTracking(component, ['isConfirmationNeededChanged']);\r\n\r\n return component;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useClosingBehaviour } from './useClosingBehaviour.js';\r\nimport type { ClosingBehaviour } from './types.js';\r\n\r\n/**\r\n * HOC which passes ClosingBehaviour SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withClosingBehaviour<P extends { closingBehaviour?: ClosingBehaviour }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'closingBehaviour'>> {\r\n return function WithClosingConfirmation(props: Omit<P, 'closingBehaviour'>) {\r\n const p = { ...props, closingBehaviour: useClosingBehaviour() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport type { HapticFeedback } from './types.js';\r\n\r\n/**\r\n * Returns HapticFeedback component instance.\r\n */\r\nexport function useHapticFeedback(): HapticFeedback {\r\n return useUnit('haptic');\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useHapticFeedback } from './useHapticFeedback.js';\r\nimport type { HapticFeedback } from './types.js';\r\n\r\n/**\r\n * HOC which passes HapticFeedback SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withHapticFeedback<P extends { hapticFeedback?: HapticFeedback }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'hapticFeedback'>> {\r\n return function WithHapticFeedback(props: Omit<P, 'hapticFeedback'>) {\r\n const p = { ...props, hapticFeedback: useHapticFeedback() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport type { InitData } from './types.js';\r\n\r\n/**\r\n * Returns InitData component instance.\r\n */\r\nexport function useInitData(): InitData | null {\r\n return useUnit('initData') || null;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useInitData } from './useInitData.js';\r\nimport type { InitData } from './types.js';\r\n\r\n/**\r\n * HOC which passes InitData SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withInitData<P extends { initData?: InitData }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'initData'>> {\r\n return function WithInitData(props: Omit<P, 'initData'>) {\r\n const p = { ...props, initData: useInitData() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useMemo } from 'react';\r\nimport { retrieveLaunchParams } from '@tma.js/sdk';\r\n\r\nimport type { LaunchParams } from './types.js';\r\n\r\n/**\r\n * The hook which returns launch parameters initially passed to Web App.\r\n */\r\nexport function useLaunchParams(): LaunchParams {\r\n return useMemo(retrieveLaunchParams, []);\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useLaunchParams } from './useLaunchParams.js';\r\nimport type { LaunchParams } from './types.js';\r\n\r\n/**\r\n * HOC which passes launch parameters to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withLaunchParams<P extends { launchParams?: LaunchParams }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'launchParams'>> {\r\n return function WithLaunchParams(props: Omit<P, 'launchParams'>) {\r\n const p = { ...props, launchParams: useLaunchParams() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { MainButton } from './types.js';\r\n\r\n/**\r\n * Returns MainButton component instance.\r\n */\r\nexport function useMainButton(): MainButton {\r\n const mainButton = useUnit('mainButton');\r\n useEventsTracking(mainButton, [\r\n 'isEnabledChanged', 'backgroundColorChanged', 'isProgressVisibleChanged',\r\n 'textChanged', 'textColorChanged', 'isVisibleChanged',\r\n ]);\r\n\r\n return mainButton;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useMainButton } from './useMainButton.js';\r\nimport type { MainButton } from './types.js';\r\n\r\n/**\r\n * HOC which passes MainButton SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withMainButton<P extends { mainButton?: MainButton }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'mainButton'>> {\r\n return function WithMainButton(props: Omit<P, 'mainButton'>) {\r\n const p = { ...props, mainButton: useMainButton() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { Popup } from './types.js';\r\n\r\n/**\r\n * Returns Popup component instance.\r\n */\r\nexport function usePopup(): Popup {\r\n const popup = useUnit('popup');\r\n useEventsTracking(popup, ['isOpenedChanged']);\r\n\r\n return popup;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { usePopup } from './usePopup.js';\r\nimport type { Popup } from './types.js';\r\n\r\n/**\r\n * HOC which passes Popup SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withPopup<P extends { popup?: Popup }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'popup'>> {\r\n return function WithPopup(props: Omit<P, 'popup'>) {\r\n const p = { ...props, popup: usePopup() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { QRScanner } from './types.js';\r\n\r\n/**\r\n * Returns QRScanner component instance.\r\n */\r\nexport function useQRScanner(): QRScanner {\r\n const qrScanner = useUnit('qrScanner');\r\n useEventsTracking(qrScanner, ['isOpenedChanged']);\r\n\r\n return qrScanner;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useQRScanner } from './useQRScanner.js';\r\nimport type { QRScanner } from './types.js';\r\n\r\n/**\r\n * HOC which passes QRScanner SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withQRScanner<P extends { qrScanner?: QRScanner }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'qrScanner'>> {\r\n return function WithQRScanner(props: Omit<P, 'qrScanner'>) {\r\n const p = { ...props, qrScanner: useQRScanner() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { Viewport } from './types.js';\r\n\r\n/**\r\n * Returns Viewport component instance.\r\n */\r\nexport function useViewport(): Viewport {\r\n const viewport = useUnit('viewport');\r\n useEventsTracking(viewport, [\r\n 'stableHeightChanged', 'isExpandedChanged', 'heightChanged', 'widthChanged',\r\n ]);\r\n\r\n return viewport;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useViewport } from './useViewport.js';\r\nimport type { Viewport } from './types.js';\r\n\r\n/**\r\n * HOC which passes Viewport SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withViewport<P extends { viewport?: Viewport }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'viewport'>> {\r\n return function WithViewport(props: Omit<P, 'viewport'>) {\r\n const p = { ...props, viewport: useViewport() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport type { WebApp } from './types.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\n\r\n/**\r\n * Returns WebApp component instance.\r\n */\r\nexport function useWebApp(): WebApp {\r\n const webApp = useUnit('webApp');\r\n useEventsTracking(webApp, ['headerColorChanged', 'backgroundColorChanged']);\r\n\r\n return webApp;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useWebApp } from './useWebApp.js';\r\nimport type { WebApp } from './types.js';\r\n\r\n/**\r\n * HOC which passes WebApp SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withWebApp<P extends { webApp?: WebApp }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'webApp'>> {\r\n return function WithWebApp(props: Omit<P, 'webApp'>) {\r\n const p = { ...props, webApp: useWebApp() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport type { CloudStorage } from '@tma.js/sdk';\r\n\r\nimport { useUnit } from '../provider/index.js';\r\n\r\n/**\r\n * Returns CloudStorage component instance.\r\n */\r\nexport function useCloudStorage(): CloudStorage {\r\n return useUnit('cloudStorage');\r\n}\r\n\r\n/**\r\n * HOC which passes CloudStorage SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withCloudStorage<P extends { cloudStorage?: CloudStorage }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'cloudStorage'>> {\r\n return function WithCloudStorage(props: Omit<P, 'cloudStorage'>) {\r\n const p = { ...props, cloudStorage: useCloudStorage() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n\r\nexport type { CloudStorage };\r\n","import React, { type ComponentType } from 'react';\r\nimport type { ThemeParams } from '@tma.js/sdk';\r\n\r\nimport { useUnit } from '../provider/index.js';\r\nimport { useEventsTracking } from './hooks.js';\r\n\r\n/**\r\n * Returns ThemeParams component instance.\r\n */\r\nexport function useThemeParams(): ThemeParams {\r\n const theme = useUnit('themeParams');\r\n useEventsTracking(theme, ['changed']);\r\n\r\n return theme;\r\n}\r\n\r\n/**\r\n * HOC which passes ThemeParams SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withThemeParams<P extends { themeParams?: ThemeParams }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'themeParams'>> {\r\n return function WithThemeParams(props: Omit<P, 'themeParams'>) {\r\n const p = { ...props, themeParams: useThemeParams() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n"],"names":["sdkContext","createContext","useSDK","useContext","useUnit","name","components","withSDK","Component","props","p","React","SDKProvider","memo","children","initOptions","didInit","setDidInit","useState","error","setError","setComponents","useEffect","init","context","useMemo","useForceUpdate","setHash","useCallback","hash","useEventsTracking","trackable","events","forceUpdate","event","usePostEvent","useBackButton","backButton","withBackButton","useClosingBehaviour","component","withClosingBehaviour","useHapticFeedback","withHapticFeedback","useInitData","withInitData","useLaunchParams","retrieveLaunchParams","withLaunchParams","useMainButton","mainButton","withMainButton","usePopup","popup","withPopup","useQRScanner","qrScanner","withQRScanner","useViewport","viewport","withViewport","useWebApp","webApp","withWebApp","useCloudStorage","withCloudStorage","useThemeParams","theme","withThemeParams"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/provider/context.ts","../src/provider/hooks.ts","../src/provider/hocs.tsx","../src/provider/SDKProvider.tsx","../src/lib/hooks.ts","../src/lib/back-button/useBackButton.ts","../src/lib/back-button/withBackButton.tsx","../src/lib/closing-behavior/useClosingBehaviour.ts","../src/lib/closing-behavior/withClosingBehaviour.tsx","../src/lib/haptic-feedback/useHapticFeedback.ts","../src/lib/haptic-feedback/withHapticFeedback.tsx","../src/lib/init-data/useInitData.ts","../src/lib/init-data/withInitData.tsx","../src/lib/launch-params/useLaunchParams.ts","../src/lib/launch-params/withLaunchParams.tsx","../src/lib/main-button/useMainButton.ts","../src/lib/main-button/withMainButton.tsx","../src/lib/popup/usePopup.ts","../src/lib/popup/withPopup.tsx","../src/lib/qr-scanner/useQRScanner.ts","../src/lib/qr-scanner/withQRScanner.tsx","../src/lib/viewport/useViewport.ts","../src/lib/viewport/withViewport.tsx","../src/lib/web-app/useWebApp.ts","../src/lib/web-app/withWebApp.tsx","../src/lib/cloud-storage.tsx","../src/lib/theme-params.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { SDKContext } from './types.js';\n\nexport const sdkContext = createContext<SDKContext>({\n components: null,\n didInit: false,\n error: null,\n});\n\nsdkContext.displayName = 'SDKContext';\n","import { useContext } from 'react';\n\nimport { sdkContext } from './context.js';\nimport type { SDKComponent, SDKComponentName } from './types.js';\n\n/**\n * Returns current SDK information.\n */\nexport const useSDK = () => useContext(sdkContext);\n\n/**\n * Returns value by its field name from SDK init result.\n * @param name - component name.\n * @throws {Error} SDK is not initialized.\n */\nexport function useUnit<N extends SDKComponentName>(name: N): SDKComponent<N> {\n const { components } = useSDK();\n\n if (components === null) {\n throw new Error(`Unable to get unit \"${name}\" as long as SDK is not initialized.`);\n }\n return components[name];\n}\n","import React, { type ComponentType } from 'react';\n\nimport type { SDKContext } from './types.js';\nimport { useSDK } from './hooks.js';\n\n/**\n * HOC which passes SDK context to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withSDK<P extends { sdk?: SDKContext }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'sdk'>> {\n return function WithLaunchParams(props: Omit<P, 'sdk'>) {\n const p = { ...props, sdk: useSDK() } as P;\n\n return <Component {...p} />;\n };\n}\n","import React, {\n memo,\n useEffect,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react';\nimport { init, type InitOptions } from '@tma.js/sdk';\n\nimport { sdkContext } from './context.js';\nimport type { SDKComponents, SDKContext } from './types.js';\n\nexport type SDKInitOptions = InitOptions;\n\nexport type SDKProviderProps = PropsWithChildren<{ initOptions?: SDKInitOptions }>;\n\n/**\n * Component which provides access to SDK components.\n */\nexport const SDKProvider = memo<SDKProviderProps>((props) => {\n const { children, initOptions } = props;\n const [didInit, setDidInit] = useState(false);\n const [error, setError] = useState<null | unknown>(null);\n const [components, setComponents] = useState<SDKComponents | null>(null);\n\n // Initialize SDK on DOM attach.\n useEffect(() => {\n // Update init status.\n setDidInit(true);\n\n // Init SDK.\n init(initOptions)\n .then(setComponents)\n .catch(setError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const context = useMemo<SDKContext>(() => ({\n components,\n didInit,\n error,\n }), [didInit, components, error]);\n\n return <sdkContext.Provider value={context}>{children}</sdkContext.Provider>;\n});\n\nSDKProvider.displayName = 'SDKProvider';\n","import { useCallback, useState, useEffect } from 'react';\nimport type { PostEvent } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\n\ninterface Trackable {\n on: (event: any, ...args: any[]) => void;\n off: (event: any, ...args: any[]) => void;\n}\n\ntype EventName<T extends Trackable> = T extends {\n on(event: infer E, ...args: any[]): any\n} ? E : never;\n\n/**\n * The hook which returns function used for force update.\n */\nexport function useForceUpdate(): (() => void) {\n const [, setHash] = useState(0);\n // TODO: Maybe just assign new symbol?\n return useCallback(() => setHash((hash) => (hash + 1) % 1_000_000), []);\n}\n\n/**\n * The hook which listens to the specified object events and calls force update\n * in case, some of them was emitted.\n * @param trackable - object which allows events listening.\n * @param events - events to listen. This array will be memoized during first\n * hook call.\n */\nexport function useEventsTracking<T extends Trackable>(\n trackable: T,\n events: EventName<T>[],\n) {\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n // Start listening to each event.\n events.forEach((event) => trackable.on(event, forceUpdate));\n\n // On cleanup remove event listeners.\n return () => events.forEach((event) => trackable.off(event, forceUpdate));\n }, [trackable, forceUpdate, events]);\n}\n\n/**\n * Returns event posting function which was created during SDK\n * initialization.\n */\nexport function usePostEvent(): PostEvent {\n return useUnit('postEvent');\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { BackButton } from './types.js';\n\n/**\n * Returns BackButton component instance.\n */\nexport function useBackButton(): BackButton {\n const backButton = useUnit('backButton');\n useEventsTracking(backButton, ['isVisibleChanged']);\n\n return backButton;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useBackButton } from './useBackButton.js';\nimport type { BackButton } from './types.js';\n\n/**\n * HOC which passes BackButton SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withBackButton<P extends { backButton?: BackButton }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'backButton'>> {\n return function WithBackButton(props: Omit<P, 'backButton'>) {\n const p = { ...props, backButton: useBackButton() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { ClosingBehaviour } from './types.js';\n\n/**\n * Returns ClosingBehaviour component instance.\n */\nexport function useClosingBehaviour(): ClosingBehaviour {\n const component = useUnit('closingBehavior');\n useEventsTracking(component, ['isConfirmationNeededChanged']);\n\n return component;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useClosingBehaviour } from './useClosingBehaviour.js';\nimport type { ClosingBehaviour } from './types.js';\n\n/**\n * HOC which passes ClosingBehaviour SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withClosingBehaviour<P extends { closingBehaviour?: ClosingBehaviour }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'closingBehaviour'>> {\n return function WithClosingConfirmation(props: Omit<P, 'closingBehaviour'>) {\n const p = { ...props, closingBehaviour: useClosingBehaviour() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport type { HapticFeedback } from './types.js';\n\n/**\n * Returns HapticFeedback component instance.\n */\nexport function useHapticFeedback(): HapticFeedback {\n return useUnit('haptic');\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useHapticFeedback } from './useHapticFeedback.js';\nimport type { HapticFeedback } from './types.js';\n\n/**\n * HOC which passes HapticFeedback SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withHapticFeedback<P extends { hapticFeedback?: HapticFeedback }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'hapticFeedback'>> {\n return function WithHapticFeedback(props: Omit<P, 'hapticFeedback'>) {\n const p = { ...props, hapticFeedback: useHapticFeedback() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport type { InitData } from './types.js';\n\n/**\n * Returns InitData component instance.\n */\nexport function useInitData(): InitData | null {\n return useUnit('initData') || null;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useInitData } from './useInitData.js';\nimport type { InitData } from './types.js';\n\n/**\n * HOC which passes InitData SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withInitData<P extends { initData?: InitData }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'initData'>> {\n return function WithInitData(props: Omit<P, 'initData'>) {\n const p = { ...props, initData: useInitData() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useMemo } from 'react';\nimport { retrieveLaunchParams } from '@tma.js/sdk';\n\nimport type { LaunchParams } from './types.js';\n\n/**\n * The hook which returns launch parameters initially passed to Web App.\n */\nexport function useLaunchParams(): LaunchParams {\n return useMemo(retrieveLaunchParams, []);\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useLaunchParams } from './useLaunchParams.js';\nimport type { LaunchParams } from './types.js';\n\n/**\n * HOC which passes launch parameters to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withLaunchParams<P extends { launchParams?: LaunchParams }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'launchParams'>> {\n return function WithLaunchParams(props: Omit<P, 'launchParams'>) {\n const p = { ...props, launchParams: useLaunchParams() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { MainButton } from './types.js';\n\n/**\n * Returns MainButton component instance.\n */\nexport function useMainButton(): MainButton {\n const mainButton = useUnit('mainButton');\n useEventsTracking(mainButton, [\n 'isEnabledChanged', 'backgroundColorChanged', 'isProgressVisibleChanged',\n 'textChanged', 'textColorChanged', 'isVisibleChanged',\n ]);\n\n return mainButton;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useMainButton } from './useMainButton.js';\nimport type { MainButton } from './types.js';\n\n/**\n * HOC which passes MainButton SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withMainButton<P extends { mainButton?: MainButton }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'mainButton'>> {\n return function WithMainButton(props: Omit<P, 'mainButton'>) {\n const p = { ...props, mainButton: useMainButton() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { Popup } from './types.js';\n\n/**\n * Returns Popup component instance.\n */\nexport function usePopup(): Popup {\n const popup = useUnit('popup');\n useEventsTracking(popup, ['isOpenedChanged']);\n\n return popup;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { usePopup } from './usePopup.js';\nimport type { Popup } from './types.js';\n\n/**\n * HOC which passes Popup SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withPopup<P extends { popup?: Popup }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'popup'>> {\n return function WithPopup(props: Omit<P, 'popup'>) {\n const p = { ...props, popup: usePopup() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { QRScanner } from './types.js';\n\n/**\n * Returns QRScanner component instance.\n */\nexport function useQRScanner(): QRScanner {\n const qrScanner = useUnit('qrScanner');\n useEventsTracking(qrScanner, ['isOpenedChanged']);\n\n return qrScanner;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useQRScanner } from './useQRScanner.js';\nimport type { QRScanner } from './types.js';\n\n/**\n * HOC which passes QRScanner SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withQRScanner<P extends { qrScanner?: QRScanner }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'qrScanner'>> {\n return function WithQRScanner(props: Omit<P, 'qrScanner'>) {\n const p = { ...props, qrScanner: useQRScanner() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { Viewport } from './types.js';\n\n/**\n * Returns Viewport component instance.\n */\nexport function useViewport(): Viewport {\n const viewport = useUnit('viewport');\n useEventsTracking(viewport, [\n 'stableHeightChanged', 'isExpandedChanged', 'heightChanged', 'widthChanged',\n ]);\n\n return viewport;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useViewport } from './useViewport.js';\nimport type { Viewport } from './types.js';\n\n/**\n * HOC which passes Viewport SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withViewport<P extends { viewport?: Viewport }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'viewport'>> {\n return function WithViewport(props: Omit<P, 'viewport'>) {\n const p = { ...props, viewport: useViewport() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport type { WebApp } from './types.js';\nimport { useEventsTracking } from '../hooks.js';\n\n/**\n * Returns WebApp component instance.\n */\nexport function useWebApp(): WebApp {\n const webApp = useUnit('webApp');\n useEventsTracking(webApp, ['headerColorChanged', 'backgroundColorChanged']);\n\n return webApp;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useWebApp } from './useWebApp.js';\nimport type { WebApp } from './types.js';\n\n/**\n * HOC which passes WebApp SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withWebApp<P extends { webApp?: WebApp }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'webApp'>> {\n return function WithWebApp(props: Omit<P, 'webApp'>) {\n const p = { ...props, webApp: useWebApp() } as P;\n\n return <Component {...p} />;\n };\n}\n","import React, { type ComponentType } from 'react';\n\nimport type { CloudStorage } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\n\n/**\n * Returns CloudStorage component instance.\n */\nexport function useCloudStorage(): CloudStorage {\n return useUnit('cloudStorage');\n}\n\n/**\n * HOC which passes CloudStorage SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withCloudStorage<P extends { cloudStorage?: CloudStorage }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'cloudStorage'>> {\n return function WithCloudStorage(props: Omit<P, 'cloudStorage'>) {\n const p = { ...props, cloudStorage: useCloudStorage() } as P;\n\n return <Component {...p} />;\n };\n}\n\nexport type { CloudStorage };\n","import React, { type ComponentType } from 'react';\nimport type { ThemeParams } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\nimport { useEventsTracking } from './hooks.js';\n\n/**\n * Returns ThemeParams component instance.\n */\nexport function useThemeParams(): ThemeParams {\n const theme = useUnit('themeParams');\n useEventsTracking(theme, ['changed']);\n\n return theme;\n}\n\n/**\n * HOC which passes ThemeParams SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withThemeParams<P extends { themeParams?: ThemeParams }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'themeParams'>> {\n return function WithThemeParams(props: Omit<P, 'themeParams'>) {\n const p = { ...props, themeParams: useThemeParams() } as P;\n\n return <Component {...p} />;\n };\n}\n"],"names":["sdkContext","createContext","useSDK","useContext","useUnit","name","components","withSDK","Component","props","p","React","SDKProvider","memo","children","initOptions","didInit","setDidInit","useState","error","setError","setComponents","useEffect","init","context","useMemo","useForceUpdate","setHash","useCallback","hash","useEventsTracking","trackable","events","forceUpdate","event","usePostEvent","useBackButton","backButton","withBackButton","useClosingBehaviour","component","withClosingBehaviour","useHapticFeedback","withHapticFeedback","useInitData","withInitData","useLaunchParams","retrieveLaunchParams","withLaunchParams","useMainButton","mainButton","withMainButton","usePopup","popup","withPopup","useQRScanner","qrScanner","withQRScanner","useViewport","viewport","withViewport","useWebApp","webApp","withWebApp","useCloudStorage","withCloudStorage","useThemeParams","theme","withThemeParams"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/provider/context.ts","../src/provider/hooks.ts","../src/provider/hocs.tsx","../src/provider/SDKProvider.tsx","../src/lib/hooks.ts","../src/lib/back-button/useBackButton.ts","../src/lib/back-button/withBackButton.tsx","../src/lib/closing-behavior/useClosingBehaviour.ts","../src/lib/closing-behavior/withClosingBehaviour.tsx","../src/lib/haptic-feedback/useHapticFeedback.ts","../src/lib/haptic-feedback/withHapticFeedback.tsx","../src/lib/init-data/useInitData.ts","../src/lib/init-data/withInitData.tsx","../src/lib/launch-params/useLaunchParams.ts","../src/lib/launch-params/withLaunchParams.tsx","../src/lib/main-button/useMainButton.ts","../src/lib/main-button/withMainButton.tsx","../src/lib/popup/usePopup.ts","../src/lib/popup/withPopup.tsx","../src/lib/qr-scanner/useQRScanner.ts","../src/lib/qr-scanner/withQRScanner.tsx","../src/lib/viewport/useViewport.ts","../src/lib/viewport/withViewport.tsx","../src/lib/web-app/useWebApp.ts","../src/lib/web-app/withWebApp.tsx","../src/lib/cloud-storage.tsx","../src/lib/theme-params.tsx"],"sourcesContent":["import { createContext } from 'react';\r\n\r\nimport type { SDKContext } from './types.js';\r\n\r\nexport const sdkContext = createContext<SDKContext>({\r\n components: null,\r\n didInit: false,\r\n error: null,\r\n});\r\n\r\nsdkContext.displayName = 'SDKContext';\r\n","import { useContext } from 'react';\r\n\r\nimport { sdkContext } from './context.js';\r\nimport type { SDKComponent, SDKComponentName } from './types.js';\r\n\r\n/**\r\n * Returns current SDK information.\r\n */\r\nexport const useSDK = () => useContext(sdkContext);\r\n\r\n/**\r\n * Returns value by its field name from SDK init result.\r\n * @param name - component name.\r\n * @throws {Error} SDK is not initialized.\r\n */\r\nexport function useUnit<N extends SDKComponentName>(name: N): SDKComponent<N> {\r\n const { components } = useSDK();\r\n\r\n if (components === null) {\r\n throw new Error(`Unable to get unit \"${name}\" as long as SDK is not initialized.`);\r\n }\r\n return components[name];\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport type { SDKContext } from './types.js';\r\nimport { useSDK } from './hooks.js';\r\n\r\n/**\r\n * HOC which passes SDK context to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withSDK<P extends { sdk?: SDKContext }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'sdk'>> {\r\n return function WithLaunchParams(props: Omit<P, 'sdk'>) {\r\n const p = { ...props, sdk: useSDK() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import React, {\r\n memo,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type PropsWithChildren,\r\n} from 'react';\r\nimport { init, type InitOptions } from '@tma.js/sdk';\r\n\r\nimport { sdkContext } from './context.js';\r\nimport type { SDKComponents, SDKContext } from './types.js';\r\n\r\nexport type SDKInitOptions = InitOptions;\r\n\r\nexport type SDKProviderProps = PropsWithChildren<{ initOptions?: SDKInitOptions }>;\r\n\r\n/**\r\n * Component which provides access to SDK components.\r\n */\r\nexport const SDKProvider = memo<SDKProviderProps>((props) => {\r\n const { children, initOptions } = props;\r\n const [didInit, setDidInit] = useState(false);\r\n const [error, setError] = useState<null | unknown>(null);\r\n const [components, setComponents] = useState<SDKComponents | null>(null);\r\n\r\n // Initialize SDK on DOM attach.\r\n useEffect(() => {\r\n // Update init status.\r\n setDidInit(true);\r\n\r\n // Init SDK.\r\n init(initOptions)\r\n .then(setComponents)\r\n .catch(setError);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const context = useMemo<SDKContext>(() => ({\r\n components,\r\n didInit,\r\n error,\r\n }), [didInit, components, error]);\r\n\r\n return <sdkContext.Provider value={context}>{children}</sdkContext.Provider>;\r\n});\r\n\r\nSDKProvider.displayName = 'SDKProvider';\r\n","import { useCallback, useState, useEffect } from 'react';\r\nimport type { PostEvent } from '@tma.js/sdk';\r\n\r\nimport { useUnit } from '../provider/index.js';\r\n\r\ninterface Trackable {\r\n on: (event: any, ...args: any[]) => void;\r\n off: (event: any, ...args: any[]) => void;\r\n}\r\n\r\ntype EventName<T extends Trackable> = T extends {\r\n on(event: infer E, ...args: any[]): any\r\n} ? E : never;\r\n\r\n/**\r\n * The hook which returns function used for force update.\r\n */\r\nexport function useForceUpdate(): (() => void) {\r\n const [, setHash] = useState(0);\r\n // TODO: Maybe just assign new symbol?\r\n return useCallback(() => setHash((hash) => (hash + 1) % 1_000_000), []);\r\n}\r\n\r\n/**\r\n * The hook which listens to the specified object events and calls force update\r\n * in case, some of them was emitted.\r\n * @param trackable - object which allows events listening.\r\n * @param events - events to listen. This array will be memoized during first\r\n * hook call.\r\n */\r\nexport function useEventsTracking<T extends Trackable>(\r\n trackable: T,\r\n events: EventName<T>[],\r\n) {\r\n const forceUpdate = useForceUpdate();\r\n\r\n useEffect(() => {\r\n // Start listening to each event.\r\n events.forEach((event) => trackable.on(event, forceUpdate));\r\n\r\n // On cleanup remove event listeners.\r\n return () => events.forEach((event) => trackable.off(event, forceUpdate));\r\n }, [trackable, forceUpdate, events]);\r\n}\r\n\r\n/**\r\n * Returns event posting function which was created during SDK\r\n * initialization.\r\n */\r\nexport function usePostEvent(): PostEvent {\r\n return useUnit('postEvent');\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { BackButton } from './types.js';\r\n\r\n/**\r\n * Returns BackButton component instance.\r\n */\r\nexport function useBackButton(): BackButton {\r\n const backButton = useUnit('backButton');\r\n useEventsTracking(backButton, ['isVisibleChanged']);\r\n\r\n return backButton;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useBackButton } from './useBackButton.js';\r\nimport type { BackButton } from './types.js';\r\n\r\n/**\r\n * HOC which passes BackButton SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withBackButton<P extends { backButton?: BackButton }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'backButton'>> {\r\n return function WithBackButton(props: Omit<P, 'backButton'>) {\r\n const p = { ...props, backButton: useBackButton() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { ClosingBehaviour } from './types.js';\r\n\r\n/**\r\n * Returns ClosingBehaviour component instance.\r\n */\r\nexport function useClosingBehaviour(): ClosingBehaviour {\r\n const component = useUnit('closingBehavior');\r\n useEventsTracking(component, ['isConfirmationNeededChanged']);\r\n\r\n return component;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useClosingBehaviour } from './useClosingBehaviour.js';\r\nimport type { ClosingBehaviour } from './types.js';\r\n\r\n/**\r\n * HOC which passes ClosingBehaviour SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withClosingBehaviour<P extends { closingBehaviour?: ClosingBehaviour }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'closingBehaviour'>> {\r\n return function WithClosingConfirmation(props: Omit<P, 'closingBehaviour'>) {\r\n const p = { ...props, closingBehaviour: useClosingBehaviour() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport type { HapticFeedback } from './types.js';\r\n\r\n/**\r\n * Returns HapticFeedback component instance.\r\n */\r\nexport function useHapticFeedback(): HapticFeedback {\r\n return useUnit('haptic');\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useHapticFeedback } from './useHapticFeedback.js';\r\nimport type { HapticFeedback } from './types.js';\r\n\r\n/**\r\n * HOC which passes HapticFeedback SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withHapticFeedback<P extends { hapticFeedback?: HapticFeedback }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'hapticFeedback'>> {\r\n return function WithHapticFeedback(props: Omit<P, 'hapticFeedback'>) {\r\n const p = { ...props, hapticFeedback: useHapticFeedback() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport type { InitData } from './types.js';\r\n\r\n/**\r\n * Returns InitData component instance.\r\n */\r\nexport function useInitData(): InitData | null {\r\n return useUnit('initData') || null;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useInitData } from './useInitData.js';\r\nimport type { InitData } from './types.js';\r\n\r\n/**\r\n * HOC which passes InitData SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withInitData<P extends { initData?: InitData }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'initData'>> {\r\n return function WithInitData(props: Omit<P, 'initData'>) {\r\n const p = { ...props, initData: useInitData() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useMemo } from 'react';\r\nimport { retrieveLaunchParams } from '@tma.js/sdk';\r\n\r\nimport type { LaunchParams } from './types.js';\r\n\r\n/**\r\n * The hook which returns launch parameters initially passed to Web App.\r\n */\r\nexport function useLaunchParams(): LaunchParams {\r\n return useMemo(retrieveLaunchParams, []);\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useLaunchParams } from './useLaunchParams.js';\r\nimport type { LaunchParams } from './types.js';\r\n\r\n/**\r\n * HOC which passes launch parameters to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withLaunchParams<P extends { launchParams?: LaunchParams }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'launchParams'>> {\r\n return function WithLaunchParams(props: Omit<P, 'launchParams'>) {\r\n const p = { ...props, launchParams: useLaunchParams() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { MainButton } from './types.js';\r\n\r\n/**\r\n * Returns MainButton component instance.\r\n */\r\nexport function useMainButton(): MainButton {\r\n const mainButton = useUnit('mainButton');\r\n useEventsTracking(mainButton, [\r\n 'isEnabledChanged', 'backgroundColorChanged', 'isProgressVisibleChanged',\r\n 'textChanged', 'textColorChanged', 'isVisibleChanged',\r\n ]);\r\n\r\n return mainButton;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useMainButton } from './useMainButton.js';\r\nimport type { MainButton } from './types.js';\r\n\r\n/**\r\n * HOC which passes MainButton SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withMainButton<P extends { mainButton?: MainButton }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'mainButton'>> {\r\n return function WithMainButton(props: Omit<P, 'mainButton'>) {\r\n const p = { ...props, mainButton: useMainButton() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { Popup } from './types.js';\r\n\r\n/**\r\n * Returns Popup component instance.\r\n */\r\nexport function usePopup(): Popup {\r\n const popup = useUnit('popup');\r\n useEventsTracking(popup, ['isOpenedChanged']);\r\n\r\n return popup;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { usePopup } from './usePopup.js';\r\nimport type { Popup } from './types.js';\r\n\r\n/**\r\n * HOC which passes Popup SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withPopup<P extends { popup?: Popup }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'popup'>> {\r\n return function WithPopup(props: Omit<P, 'popup'>) {\r\n const p = { ...props, popup: usePopup() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { QRScanner } from './types.js';\r\n\r\n/**\r\n * Returns QRScanner component instance.\r\n */\r\nexport function useQRScanner(): QRScanner {\r\n const qrScanner = useUnit('qrScanner');\r\n useEventsTracking(qrScanner, ['isOpenedChanged']);\r\n\r\n return qrScanner;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useQRScanner } from './useQRScanner.js';\r\nimport type { QRScanner } from './types.js';\r\n\r\n/**\r\n * HOC which passes QRScanner SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withQRScanner<P extends { qrScanner?: QRScanner }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'qrScanner'>> {\r\n return function WithQRScanner(props: Omit<P, 'qrScanner'>) {\r\n const p = { ...props, qrScanner: useQRScanner() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\nimport type { Viewport } from './types.js';\r\n\r\n/**\r\n * Returns Viewport component instance.\r\n */\r\nexport function useViewport(): Viewport {\r\n const viewport = useUnit('viewport');\r\n useEventsTracking(viewport, [\r\n 'stableHeightChanged', 'isExpandedChanged', 'heightChanged', 'widthChanged',\r\n ]);\r\n\r\n return viewport;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useViewport } from './useViewport.js';\r\nimport type { Viewport } from './types.js';\r\n\r\n/**\r\n * HOC which passes Viewport SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withViewport<P extends { viewport?: Viewport }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'viewport'>> {\r\n return function WithViewport(props: Omit<P, 'viewport'>) {\r\n const p = { ...props, viewport: useViewport() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import { useUnit } from '../../provider/index.js';\r\nimport type { WebApp } from './types.js';\r\nimport { useEventsTracking } from '../hooks.js';\r\n\r\n/**\r\n * Returns WebApp component instance.\r\n */\r\nexport function useWebApp(): WebApp {\r\n const webApp = useUnit('webApp');\r\n useEventsTracking(webApp, ['headerColorChanged', 'backgroundColorChanged']);\r\n\r\n return webApp;\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport { useWebApp } from './useWebApp.js';\r\nimport type { WebApp } from './types.js';\r\n\r\n/**\r\n * HOC which passes WebApp SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withWebApp<P extends { webApp?: WebApp }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'webApp'>> {\r\n return function WithWebApp(props: Omit<P, 'webApp'>) {\r\n const p = { ...props, webApp: useWebApp() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n","import React, { type ComponentType } from 'react';\r\n\r\nimport type { CloudStorage } from '@tma.js/sdk';\r\n\r\nimport { useUnit } from '../provider/index.js';\r\n\r\n/**\r\n * Returns CloudStorage component instance.\r\n */\r\nexport function useCloudStorage(): CloudStorage {\r\n return useUnit('cloudStorage');\r\n}\r\n\r\n/**\r\n * HOC which passes CloudStorage SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withCloudStorage<P extends { cloudStorage?: CloudStorage }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'cloudStorage'>> {\r\n return function WithCloudStorage(props: Omit<P, 'cloudStorage'>) {\r\n const p = { ...props, cloudStorage: useCloudStorage() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n\r\nexport type { CloudStorage };\r\n","import React, { type ComponentType } from 'react';\r\nimport type { ThemeParams } from '@tma.js/sdk';\r\n\r\nimport { useUnit } from '../provider/index.js';\r\nimport { useEventsTracking } from './hooks.js';\r\n\r\n/**\r\n * Returns ThemeParams component instance.\r\n */\r\nexport function useThemeParams(): ThemeParams {\r\n const theme = useUnit('themeParams');\r\n useEventsTracking(theme, ['changed']);\r\n\r\n return theme;\r\n}\r\n\r\n/**\r\n * HOC which passes ThemeParams SDK component to wrapped React component.\r\n * @param Component - component to wrap.\r\n */\r\nexport function withThemeParams<P extends { themeParams?: ThemeParams }>(\r\n Component: ComponentType<P>,\r\n): ComponentType<Omit<P, 'themeParams'>> {\r\n return function WithThemeParams(props: Omit<P, 'themeParams'>) {\r\n const p = { ...props, themeParams: useThemeParams() } as P;\r\n\r\n return <Component {...p} />;\r\n };\r\n}\r\n"],"names":["sdkContext","createContext","useSDK","useContext","useUnit","name","components","withSDK","Component","props","p","React","SDKProvider","memo","children","initOptions","didInit","setDidInit","useState","error","setError","setComponents","useEffect","init","context","useMemo","useForceUpdate","setHash","useCallback","hash","useEventsTracking","trackable","events","forceUpdate","event","usePostEvent","useBackButton","backButton","withBackButton","useClosingBehaviour","component","withClosingBehaviour","useHapticFeedback","withHapticFeedback","useInitData","withInitData","useLaunchParams","retrieveLaunchParams","withLaunchParams","useMainButton","mainButton","withMainButton","usePopup","popup","withPopup","useQRScanner","qrScanner","withQRScanner","useViewport","viewport","withViewport","useWebApp","webApp","withWebApp","useCloudStorage","withCloudStorage","useThemeParams","theme","withThemeParams"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/provider/context.ts","../src/provider/hooks.ts","../src/provider/hocs.tsx","../src/provider/SDKProvider.tsx","../src/lib/hooks.ts","../src/lib/back-button/useBackButton.ts","../src/lib/back-button/withBackButton.tsx","../src/lib/closing-behavior/useClosingBehaviour.ts","../src/lib/closing-behavior/withClosingBehaviour.tsx","../src/lib/haptic-feedback/useHapticFeedback.ts","../src/lib/haptic-feedback/withHapticFeedback.tsx","../src/lib/init-data/useInitData.ts","../src/lib/init-data/withInitData.tsx","../src/lib/launch-params/useLaunchParams.ts","../src/lib/launch-params/withLaunchParams.tsx","../src/lib/main-button/useMainButton.ts","../src/lib/main-button/withMainButton.tsx","../src/lib/popup/usePopup.ts","../src/lib/popup/withPopup.tsx","../src/lib/qr-scanner/useQRScanner.ts","../src/lib/qr-scanner/withQRScanner.tsx","../src/lib/viewport/useViewport.ts","../src/lib/viewport/withViewport.tsx","../src/lib/web-app/useWebApp.ts","../src/lib/web-app/withWebApp.tsx","../src/lib/cloud-storage.tsx","../src/lib/theme-params.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { SDKContext } from './types.js';\n\nexport const sdkContext = createContext<SDKContext>({\n components: null,\n didInit: false,\n error: null,\n});\n\nsdkContext.displayName = 'SDKContext';\n","import { useContext } from 'react';\n\nimport { sdkContext } from './context.js';\nimport type { SDKComponent, SDKComponentName } from './types.js';\n\n/**\n * Returns current SDK information.\n */\nexport const useSDK = () => useContext(sdkContext);\n\n/**\n * Returns value by its field name from SDK init result.\n * @param name - component name.\n * @throws {Error} SDK is not initialized.\n */\nexport function useUnit<N extends SDKComponentName>(name: N): SDKComponent<N> {\n const { components } = useSDK();\n\n if (components === null) {\n throw new Error(`Unable to get unit \"${name}\" as long as SDK is not initialized.`);\n }\n return components[name];\n}\n","import React, { type ComponentType } from 'react';\n\nimport type { SDKContext } from './types.js';\nimport { useSDK } from './hooks.js';\n\n/**\n * HOC which passes SDK context to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withSDK<P extends { sdk?: SDKContext }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'sdk'>> {\n return function WithLaunchParams(props: Omit<P, 'sdk'>) {\n const p = { ...props, sdk: useSDK() } as P;\n\n return <Component {...p} />;\n };\n}\n","import React, {\n memo,\n useEffect,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react';\nimport { init, type InitOptions } from '@tma.js/sdk';\n\nimport { sdkContext } from './context.js';\nimport type { SDKComponents, SDKContext } from './types.js';\n\nexport type SDKInitOptions = InitOptions;\n\nexport type SDKProviderProps = PropsWithChildren<{ initOptions?: SDKInitOptions }>;\n\n/**\n * Component which provides access to SDK components.\n */\nexport const SDKProvider = memo<SDKProviderProps>((props) => {\n const { children, initOptions } = props;\n const [didInit, setDidInit] = useState(false);\n const [error, setError] = useState<null | unknown>(null);\n const [components, setComponents] = useState<SDKComponents | null>(null);\n\n // Initialize SDK on DOM attach.\n useEffect(() => {\n // Update init status.\n setDidInit(true);\n\n // Init SDK.\n init(initOptions)\n .then(setComponents)\n .catch(setError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const context = useMemo<SDKContext>(() => ({\n components,\n didInit,\n error,\n }), [didInit, components, error]);\n\n return <sdkContext.Provider value={context}>{children}</sdkContext.Provider>;\n});\n\nSDKProvider.displayName = 'SDKProvider';\n","import { useCallback, useState, useEffect } from 'react';\nimport type { PostEvent } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\n\ninterface Trackable {\n on: (event: any, ...args: any[]) => void;\n off: (event: any, ...args: any[]) => void;\n}\n\ntype EventName<T extends Trackable> = T extends {\n on(event: infer E, ...args: any[]): any\n} ? E : never;\n\n/**\n * The hook which returns function used for force update.\n */\nexport function useForceUpdate(): (() => void) {\n const [, setHash] = useState(0);\n // TODO: Maybe just assign new symbol?\n return useCallback(() => setHash((hash) => (hash + 1) % 1_000_000), []);\n}\n\n/**\n * The hook which listens to the specified object events and calls force update\n * in case, some of them was emitted.\n * @param trackable - object which allows events listening.\n * @param events - events to listen. This array will be memoized during first\n * hook call.\n */\nexport function useEventsTracking<T extends Trackable>(\n trackable: T,\n events: EventName<T>[],\n) {\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n // Start listening to each event.\n events.forEach((event) => trackable.on(event, forceUpdate));\n\n // On cleanup remove event listeners.\n return () => events.forEach((event) => trackable.off(event, forceUpdate));\n }, [trackable, forceUpdate, events]);\n}\n\n/**\n * Returns event posting function which was created during SDK\n * initialization.\n */\nexport function usePostEvent(): PostEvent {\n return useUnit('postEvent');\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { BackButton } from './types.js';\n\n/**\n * Returns BackButton component instance.\n */\nexport function useBackButton(): BackButton {\n const backButton = useUnit('backButton');\n useEventsTracking(backButton, ['isVisibleChanged']);\n\n return backButton;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useBackButton } from './useBackButton.js';\nimport type { BackButton } from './types.js';\n\n/**\n * HOC which passes BackButton SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withBackButton<P extends { backButton?: BackButton }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'backButton'>> {\n return function WithBackButton(props: Omit<P, 'backButton'>) {\n const p = { ...props, backButton: useBackButton() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { ClosingBehaviour } from './types.js';\n\n/**\n * Returns ClosingBehaviour component instance.\n */\nexport function useClosingBehaviour(): ClosingBehaviour {\n const component = useUnit('closingBehavior');\n useEventsTracking(component, ['isConfirmationNeededChanged']);\n\n return component;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useClosingBehaviour } from './useClosingBehaviour.js';\nimport type { ClosingBehaviour } from './types.js';\n\n/**\n * HOC which passes ClosingBehaviour SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withClosingBehaviour<P extends { closingBehaviour?: ClosingBehaviour }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'closingBehaviour'>> {\n return function WithClosingConfirmation(props: Omit<P, 'closingBehaviour'>) {\n const p = { ...props, closingBehaviour: useClosingBehaviour() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport type { HapticFeedback } from './types.js';\n\n/**\n * Returns HapticFeedback component instance.\n */\nexport function useHapticFeedback(): HapticFeedback {\n return useUnit('haptic');\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useHapticFeedback } from './useHapticFeedback.js';\nimport type { HapticFeedback } from './types.js';\n\n/**\n * HOC which passes HapticFeedback SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withHapticFeedback<P extends { hapticFeedback?: HapticFeedback }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'hapticFeedback'>> {\n return function WithHapticFeedback(props: Omit<P, 'hapticFeedback'>) {\n const p = { ...props, hapticFeedback: useHapticFeedback() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport type { InitData } from './types.js';\n\n/**\n * Returns InitData component instance.\n */\nexport function useInitData(): InitData | null {\n return useUnit('initData') || null;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useInitData } from './useInitData.js';\nimport type { InitData } from './types.js';\n\n/**\n * HOC which passes InitData SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withInitData<P extends { initData?: InitData }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'initData'>> {\n return function WithInitData(props: Omit<P, 'initData'>) {\n const p = { ...props, initData: useInitData() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useMemo } from 'react';\nimport { retrieveLaunchParams } from '@tma.js/sdk';\n\nimport type { LaunchParams } from './types.js';\n\n/**\n * The hook which returns launch parameters initially passed to Web App.\n */\nexport function useLaunchParams(): LaunchParams {\n return useMemo(retrieveLaunchParams, []);\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useLaunchParams } from './useLaunchParams.js';\nimport type { LaunchParams } from './types.js';\n\n/**\n * HOC which passes launch parameters to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withLaunchParams<P extends { launchParams?: LaunchParams }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'launchParams'>> {\n return function WithLaunchParams(props: Omit<P, 'launchParams'>) {\n const p = { ...props, launchParams: useLaunchParams() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { MainButton } from './types.js';\n\n/**\n * Returns MainButton component instance.\n */\nexport function useMainButton(): MainButton {\n const mainButton = useUnit('mainButton');\n useEventsTracking(mainButton, [\n 'isEnabledChanged', 'backgroundColorChanged', 'isProgressVisibleChanged',\n 'textChanged', 'textColorChanged', 'isVisibleChanged',\n ]);\n\n return mainButton;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useMainButton } from './useMainButton.js';\nimport type { MainButton } from './types.js';\n\n/**\n * HOC which passes MainButton SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withMainButton<P extends { mainButton?: MainButton }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'mainButton'>> {\n return function WithMainButton(props: Omit<P, 'mainButton'>) {\n const p = { ...props, mainButton: useMainButton() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { Popup } from './types.js';\n\n/**\n * Returns Popup component instance.\n */\nexport function usePopup(): Popup {\n const popup = useUnit('popup');\n useEventsTracking(popup, ['isOpenedChanged']);\n\n return popup;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { usePopup } from './usePopup.js';\nimport type { Popup } from './types.js';\n\n/**\n * HOC which passes Popup SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withPopup<P extends { popup?: Popup }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'popup'>> {\n return function WithPopup(props: Omit<P, 'popup'>) {\n const p = { ...props, popup: usePopup() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { QRScanner } from './types.js';\n\n/**\n * Returns QRScanner component instance.\n */\nexport function useQRScanner(): QRScanner {\n const qrScanner = useUnit('qrScanner');\n useEventsTracking(qrScanner, ['isOpenedChanged']);\n\n return qrScanner;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useQRScanner } from './useQRScanner.js';\nimport type { QRScanner } from './types.js';\n\n/**\n * HOC which passes QRScanner SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withQRScanner<P extends { qrScanner?: QRScanner }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'qrScanner'>> {\n return function WithQRScanner(props: Omit<P, 'qrScanner'>) {\n const p = { ...props, qrScanner: useQRScanner() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport { useEventsTracking } from '../hooks.js';\nimport type { Viewport } from './types.js';\n\n/**\n * Returns Viewport component instance.\n */\nexport function useViewport(): Viewport {\n const viewport = useUnit('viewport');\n useEventsTracking(viewport, [\n 'stableHeightChanged', 'isExpandedChanged', 'heightChanged', 'widthChanged',\n ]);\n\n return viewport;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useViewport } from './useViewport.js';\nimport type { Viewport } from './types.js';\n\n/**\n * HOC which passes Viewport SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withViewport<P extends { viewport?: Viewport }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'viewport'>> {\n return function WithViewport(props: Omit<P, 'viewport'>) {\n const p = { ...props, viewport: useViewport() } as P;\n\n return <Component {...p} />;\n };\n}\n","import { useUnit } from '../../provider/index.js';\nimport type { WebApp } from './types.js';\nimport { useEventsTracking } from '../hooks.js';\n\n/**\n * Returns WebApp component instance.\n */\nexport function useWebApp(): WebApp {\n const webApp = useUnit('webApp');\n useEventsTracking(webApp, ['headerColorChanged', 'backgroundColorChanged']);\n\n return webApp;\n}\n","import React, { type ComponentType } from 'react';\n\nimport { useWebApp } from './useWebApp.js';\nimport type { WebApp } from './types.js';\n\n/**\n * HOC which passes WebApp SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withWebApp<P extends { webApp?: WebApp }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'webApp'>> {\n return function WithWebApp(props: Omit<P, 'webApp'>) {\n const p = { ...props, webApp: useWebApp() } as P;\n\n return <Component {...p} />;\n };\n}\n","import React, { type ComponentType } from 'react';\n\nimport type { CloudStorage } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\n\n/**\n * Returns CloudStorage component instance.\n */\nexport function useCloudStorage(): CloudStorage {\n return useUnit('cloudStorage');\n}\n\n/**\n * HOC which passes CloudStorage SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withCloudStorage<P extends { cloudStorage?: CloudStorage }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'cloudStorage'>> {\n return function WithCloudStorage(props: Omit<P, 'cloudStorage'>) {\n const p = { ...props, cloudStorage: useCloudStorage() } as P;\n\n return <Component {...p} />;\n };\n}\n\nexport type { CloudStorage };\n","import React, { type ComponentType } from 'react';\nimport type { ThemeParams } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\nimport { useEventsTracking } from './hooks.js';\n\n/**\n * Returns ThemeParams component instance.\n */\nexport function useThemeParams(): ThemeParams {\n const theme = useUnit('themeParams');\n useEventsTracking(theme, ['changed']);\n\n return theme;\n}\n\n/**\n * HOC which passes ThemeParams SDK component to wrapped React component.\n * @param Component - component to wrap.\n */\nexport function withThemeParams<P extends { themeParams?: ThemeParams }>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, 'themeParams'>> {\n return function WithThemeParams(props: Omit<P, 'themeParams'>) {\n const p = { ...props, themeParams: useThemeParams() } as P;\n\n return <Component {...p} />;\n };\n}\n"],"names":["sdkContext","createContext","useSDK","useContext","useUnit","name","components","withSDK","Component","props","p","React","SDKProvider","memo","children","initOptions","didInit","setDidInit","useState","error","setError","setComponents","useEffect","init","context","useMemo","useForceUpdate","setHash","useCallback","hash","useEventsTracking","trackable","events","forceUpdate","event","usePostEvent","useBackButton","backButton","withBackButton","useClosingBehaviour","component","withClosingBehaviour","useHapticFeedback","withHapticFeedback","useInitData","withInitData","useLaunchParams","retrieveLaunchParams","withLaunchParams","useMainButton","mainButton","withMainButton","usePopup","popup","withPopup","useQRScanner","qrScanner","withQRScanner","useViewport","viewport","withViewport","useWebApp","webApp","withWebApp","useCloudStorage","withCloudStorage","useThemeParams","theme","withThemeParams"],"mappings":"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"}
package/package.json CHANGED
@@ -1,68 +1,68 @@
1
- {
2
- "name": "@tma.js/sdk-react",
3
- "version": "0.4.12",
4
- "description": "React bindings for Web Apps client SDK. Contains hooks, components and other useful tools which allow usage of React along with Web Apps client SDK.",
5
- "author": "Vladislav Kibenko <wolfram.deus@gmail.com>",
6
- "homepage": "https://github.com/Telegram-Mini-Apps/tma.js#readme",
7
- "repository": {
8
- "type": "git",
9
- "url": "git@github.com:Telegram-Mini-Apps/tma.js.git",
10
- "directory": "packages/sdk-react"
11
- },
12
- "bugs": {
13
- "url": "https://github.com/Telegram-Mini-Apps/tma.js/issues"
14
- },
15
- "keywords": [
16
- "telegram-mini-apps",
17
- "typescript",
18
- "sdk",
19
- "react"
20
- ],
21
- "license": "MIT",
22
- "type": "module",
23
- "sideEffects": false,
24
- "files": [
25
- "dist",
26
- "src"
27
- ],
28
- "main": "./dist/index.cjs",
29
- "module": "./dist/index.mjs",
30
- "types": "./dist/dts/index.d.ts",
31
- "exports": {
32
- ".": {
33
- "types": "./dist/dts/index.d.ts",
34
- "import": "./dist/index.mjs",
35
- "require": "./dist/index.cjs",
36
- "default": "./dist/index.cjs"
37
- }
38
- },
39
- "scripts": {
40
- "lint": "eslint -c .eslintrc.cjs src/**/*",
41
- "typecheck": "tsc --noEmit -p tsconfig.build.json",
42
- "build": "vite build",
43
- "rollup": "pnpm run typecheck && pnpm run build"
44
- },
45
- "peerDependencies": {
46
- "@types/react": "^17.0.0 || ^18.0.0",
47
- "react": "^17.0.0 || ^18.0.0"
48
- },
49
- "peerDependenciesMeta": {
50
- "@types/react": {
51
- "optional": true
52
- }
53
- },
54
- "dependencies": {
55
- "@tma.js/launch-params": "workspace:*",
56
- "@tma.js/theme-params": "workspace:*",
57
- "@tma.js/bridge": "workspace:*",
58
- "@tma.js/sdk": "workspace:*"
59
- },
60
- "devDependencies": {
61
- "tsconfig": "workspace:*",
62
- "eslint-config-custom": "workspace:*",
63
- "build-utils": "workspace:*"
64
- },
65
- "publishConfig": {
66
- "access": "public"
67
- }
68
- }
1
+ {
2
+ "name": "@tma.js/sdk-react",
3
+ "version": "0.4.13",
4
+ "description": "React bindings for Web Apps client SDK. Contains hooks, components and other useful tools which allow usage of React along with Web Apps client SDK.",
5
+ "author": "Vladislav Kibenko <wolfram.deus@gmail.com>",
6
+ "homepage": "https://github.com/Telegram-Mini-Apps/tma.js#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git@github.com:Telegram-Mini-Apps/tma.js.git",
10
+ "directory": "packages/sdk-react"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/Telegram-Mini-Apps/tma.js/issues"
14
+ },
15
+ "keywords": [
16
+ "telegram-mini-apps",
17
+ "typescript",
18
+ "sdk",
19
+ "react"
20
+ ],
21
+ "license": "MIT",
22
+ "type": "module",
23
+ "sideEffects": false,
24
+ "files": [
25
+ "dist",
26
+ "src"
27
+ ],
28
+ "main": "./dist/index.cjs",
29
+ "module": "./dist/index.mjs",
30
+ "types": "./dist/dts/index.d.ts",
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/dts/index.d.ts",
34
+ "import": "./dist/index.mjs",
35
+ "require": "./dist/index.cjs",
36
+ "default": "./dist/index.cjs"
37
+ }
38
+ },
39
+ "peerDependencies": {
40
+ "@types/react": "^17.0.0 || ^18.0.0",
41
+ "react": "^17.0.0 || ^18.0.0"
42
+ },
43
+ "peerDependenciesMeta": {
44
+ "@types/react": {
45
+ "optional": true
46
+ }
47
+ },
48
+ "dependencies": {
49
+ "@tma.js/launch-params": "0.0.4",
50
+ "@tma.js/theme-params": "0.0.4",
51
+ "@tma.js/bridge": "1.3.9",
52
+ "@tma.js/sdk": "0.12.5"
53
+ },
54
+ "devDependencies": {
55
+ "tsconfig": "0.0.2",
56
+ "eslint-config-custom": "0.1.0",
57
+ "build-utils": "0.0.1"
58
+ },
59
+ "publishConfig": {
60
+ "access": "public"
61
+ },
62
+ "scripts": {
63
+ "lint": "eslint -c .eslintrc.cjs src/**/*",
64
+ "typecheck": "tsc --noEmit -p tsconfig.build.json",
65
+ "build": "vite build",
66
+ "rollup": "pnpm run typecheck && pnpm run build"
67
+ }
68
+ }
package/src/index.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './lib/index.js';
2
- export * from './provider/index.js';
1
+ export * from './lib/index.js';
2
+ export * from './provider/index.js';
@@ -1,3 +1,3 @@
1
- export * from './types.js';
2
- export * from './useBackButton.js';
3
- export * from './withBackButton.js';
1
+ export * from './types.js';
2
+ export * from './useBackButton.js';
3
+ export * from './withBackButton.js';
@@ -1 +1 @@
1
- export type { BackButton } from '@tma.js/sdk';
1
+ export type { BackButton } from '@tma.js/sdk';
@@ -1,13 +1,13 @@
1
- import { useUnit } from '../../provider/index.js';
2
- import { useEventsTracking } from '../hooks.js';
3
- import type { BackButton } from './types.js';
4
-
5
- /**
6
- * Returns BackButton component instance.
7
- */
8
- export function useBackButton(): BackButton {
9
- const backButton = useUnit('backButton');
10
- useEventsTracking(backButton, ['isVisibleChanged']);
11
-
12
- return backButton;
13
- }
1
+ import { useUnit } from '../../provider/index.js';
2
+ import { useEventsTracking } from '../hooks.js';
3
+ import type { BackButton } from './types.js';
4
+
5
+ /**
6
+ * Returns BackButton component instance.
7
+ */
8
+ export function useBackButton(): BackButton {
9
+ const backButton = useUnit('backButton');
10
+ useEventsTracking(backButton, ['isVisibleChanged']);
11
+
12
+ return backButton;
13
+ }
@@ -1,18 +1,18 @@
1
- import React, { type ComponentType } from 'react';
2
-
3
- import { useBackButton } from './useBackButton.js';
4
- import type { BackButton } from './types.js';
5
-
6
- /**
7
- * HOC which passes BackButton SDK component to wrapped React component.
8
- * @param Component - component to wrap.
9
- */
10
- export function withBackButton<P extends { backButton?: BackButton }>(
11
- Component: ComponentType<P>,
12
- ): ComponentType<Omit<P, 'backButton'>> {
13
- return function WithBackButton(props: Omit<P, 'backButton'>) {
14
- const p = { ...props, backButton: useBackButton() } as P;
15
-
16
- return <Component {...p} />;
17
- };
18
- }
1
+ import React, { type ComponentType } from 'react';
2
+
3
+ import { useBackButton } from './useBackButton.js';
4
+ import type { BackButton } from './types.js';
5
+
6
+ /**
7
+ * HOC which passes BackButton SDK component to wrapped React component.
8
+ * @param Component - component to wrap.
9
+ */
10
+ export function withBackButton<P extends { backButton?: BackButton }>(
11
+ Component: ComponentType<P>,
12
+ ): ComponentType<Omit<P, 'backButton'>> {
13
+ return function WithBackButton(props: Omit<P, 'backButton'>) {
14
+ const p = { ...props, backButton: useBackButton() } as P;
15
+
16
+ return <Component {...p} />;
17
+ };
18
+ }
@@ -1,3 +1,3 @@
1
- export * from './types.js';
2
- export * from './useClosingBehaviour.js';
3
- export * from './withClosingBehaviour.js';
1
+ export * from './types.js';
2
+ export * from './useClosingBehaviour.js';
3
+ export * from './withClosingBehaviour.js';
@@ -1 +1 @@
1
- export type { ClosingBehaviour } from '@tma.js/sdk';
1
+ export type { ClosingBehaviour } from '@tma.js/sdk';
@@ -1,13 +1,13 @@
1
- import { useUnit } from '../../provider/index.js';
2
- import { useEventsTracking } from '../hooks.js';
3
- import type { ClosingBehaviour } from './types.js';
4
-
5
- /**
6
- * Returns ClosingBehaviour component instance.
7
- */
8
- export function useClosingBehaviour(): ClosingBehaviour {
9
- const component = useUnit('closingBehavior');
10
- useEventsTracking(component, ['isConfirmationNeededChanged']);
11
-
12
- return component;
13
- }
1
+ import { useUnit } from '../../provider/index.js';
2
+ import { useEventsTracking } from '../hooks.js';
3
+ import type { ClosingBehaviour } from './types.js';
4
+
5
+ /**
6
+ * Returns ClosingBehaviour component instance.
7
+ */
8
+ export function useClosingBehaviour(): ClosingBehaviour {
9
+ const component = useUnit('closingBehavior');
10
+ useEventsTracking(component, ['isConfirmationNeededChanged']);
11
+
12
+ return component;
13
+ }