@tma.js/sdk-react 0.4.16 → 0.5.0

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.
@@ -1,7 +1,6 @@
1
1
  export * from './back-button/index.js';
2
2
  export * from './closing-behavior/index.js';
3
3
  export * from './haptic-feedback/index.js';
4
- export * from './init-data/index.js';
5
4
  export * from './launch-params/index.js';
6
5
  export * from './main-button/index.js';
7
6
  export * from './popup/index.js';
@@ -10,4 +9,5 @@ export * from './viewport/index.js';
10
9
  export * from './web-app/index.js';
11
10
  export * from './cloud-storage.js';
12
11
  export { usePostEvent } from './hooks.js';
12
+ export * from './init-data.js';
13
13
  export * from './theme-params.js';
@@ -0,0 +1,20 @@
1
+ import { type ComponentType } from 'react';
2
+ import type { InitData } from '@tma.js/sdk';
3
+ interface EnhancedProps {
4
+ initData: InitData | null;
5
+ initDataRaw: string | null;
6
+ }
7
+ /**
8
+ * Returns InitData component instance.
9
+ */
10
+ export declare function useInitData(): InitData | null;
11
+ /**
12
+ * Returns init data raw representation.
13
+ */
14
+ export declare function useInitDataRaw(): string | null;
15
+ /**
16
+ * HOC which passes InitData SDK component to wrapped React component.
17
+ * @param Component - component to wrap.
18
+ */
19
+ export declare function withInitData<P extends Partial<EnhancedProps>>(Component: ComponentType<P>): ComponentType<Omit<P, keyof EnhancedProps>>;
20
+ export { InitData };
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react"),p=require("@tma.js/sdk"),a=o.createContext({components:null,didInit:!1,error:null});a.displayName="SDKContext";const c=()=>o.useContext(a);function u(t){const{components:r}=c();if(r===null)throw new Error(`Unable to get unit "${t}" as long as SDK is not initialized.`);return r[t]}function K(t){return function(e){const n={...e,sdk:c()};return o.createElement(t,{...n})}}const d=o.memo(t=>{const{children:r,initOptions:e}=t,[n,v]=o.useState(!1),[s,W]=o.useState(null),[h,D]=o.useState(null);o.useEffect(()=>{v(!0),p.init(e).then(D).catch(W)},[]);const x=o.useMemo(()=>({components:h,didInit:n,error:s}),[n,h,s]);return o.createElement(a.Provider,{value:x},r)});d.displayName="SDKProvider";function A(){const[,t]=o.useState(0);return o.useCallback(()=>t(r=>(r+1)%1e6),[])}function i(t,r){const e=A();o.useEffect(()=>(r.forEach(n=>t.on(n,e)),()=>r.forEach(n=>t.off(n,e))),[t,e,r])}function I(){return u("postEvent")}function l(){const t=u("backButton");return i(t,["isVisibleChanged"]),t}function M(t){return function(e){const n={...e,backButton:l()};return o.createElement(t,{...n})}}function f(){const t=u("closingBehavior");return i(t,["isConfirmationNeededChanged"]),t}function V(t){return function(e){const n={...e,closingBehaviour:f()};return o.createElement(t,{...n})}}function m(){return u("haptic")}function F(t){return function(e){const n={...e,hapticFeedback:m()};return o.createElement(t,{...n})}}function g(){return u("initData")||null}function H(t){return function(e){const n={...e,initData:g()};return o.createElement(t,{...n})}}function w(){return o.useMemo(p.retrieveLaunchParams,[])}function L(t){return function(e){const n={...e,launchParams:w()};return o.createElement(t,{...n})}}function C(){const t=u("mainButton");return i(t,["isEnabledChanged","backgroundColorChanged","isProgressVisibleChanged","textChanged","textColorChanged","isVisibleChanged"]),t}function T(t){return function(e){const n={...e,mainButton:C()};return o.createElement(t,{...n})}}function S(){const t=u("popup");return i(t,["isOpenedChanged"]),t}function R(t){return function(e){const n={...e,popup:S()};return o.createElement(t,{...n})}}function P(){const t=u("qrScanner");return i(t,["isOpenedChanged"]),t}function q(t){return function(e){const n={...e,qrScanner:P()};return o.createElement(t,{...n})}}function B(){const t=u("viewport");return i(t,["stableHeightChanged","isExpandedChanged","heightChanged","widthChanged"]),t}function Q(t){return function(e){const n={...e,viewport:B()};return o.createElement(t,{...n})}}function b(){const t=u("webApp");return i(t,["headerColorChanged","backgroundColorChanged"]),t}function U(t){return function(e){const n={...e,webApp:b()};return o.createElement(t,{...n})}}function E(){return u("cloudStorage")}function y(t){return function(e){const n={...e,cloudStorage:E()};return o.createElement(t,{...n})}}function k(){const t=u("themeParams");return i(t,["changed"]),t}function O(t){return function(e){const n={...e,themeParams:k()};return o.createElement(t,{...n})}}exports.SDKProvider=d;exports.sdkContext=a;exports.useBackButton=l;exports.useClosingBehaviour=f;exports.useCloudStorage=E;exports.useHapticFeedback=m;exports.useInitData=g;exports.useLaunchParams=w;exports.useMainButton=C;exports.usePopup=S;exports.usePostEvent=I;exports.useQRScanner=P;exports.useSDK=c;exports.useThemeParams=k;exports.useUnit=u;exports.useViewport=B;exports.useWebApp=b;exports.withBackButton=M;exports.withClosingBehaviour=V;exports.withCloudStorage=y;exports.withHapticFeedback=F;exports.withInitData=H;exports.withLaunchParams=L;exports.withMainButton=T;exports.withPopup=R;exports.withQRScanner=q;exports.withSDK=K;exports.withThemeParams=O;exports.withViewport=Q;exports.withWebApp=U;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),p=require("@tma.js/sdk"),a=r.createContext({components:null,didInit:!1,error:null});a.displayName="SDKContext";const c=()=>r.useContext(a);function u(t){const{components:o}=c();if(o===null)throw new Error(`Unable to get unit "${t}" as long as SDK is not initialized.`);return o[t]}function x(t){return function(e){const n={...e,sdk:c()};return r.createElement(t,{...n})}}const l=r.memo(t=>{const{children:o,initOptions:e}=t,[n,v]=r.useState(!1),[s,W]=r.useState(null),[h,I]=r.useState(null);r.useEffect(()=>{v(!0),p.init(e).then(I).catch(W)},[]);const R=r.useMemo(()=>({components:h,didInit:n,error:s}),[n,h,s]);return r.createElement(a.Provider,{value:R},o)});l.displayName="SDKProvider";function K(){const[,t]=r.useState(0);return r.useCallback(()=>t(o=>(o+1)%1e6),[])}function i(t,o){const e=K();r.useEffect(()=>(o.forEach(n=>t.on(n,e)),()=>o.forEach(n=>t.off(n,e))),[t,e,o])}function A(){return u("postEvent")}function d(){const t=u("backButton");return i(t,["isVisibleChanged"]),t}function M(t){return function(e){const n={...e,backButton:d()};return r.createElement(t,{...n})}}function f(){const t=u("closingBehavior");return i(t,["isConfirmationNeededChanged"]),t}function V(t){return function(e){const n={...e,closingBehaviour:f()};return r.createElement(t,{...n})}}function m(){return u("haptic")}function F(t){return function(e){const n={...e,hapticFeedback:m()};return r.createElement(t,{...n})}}function w(){return r.useMemo(p.retrieveLaunchParams,[])}function H(t){return function(e){const n={...e,launchParams:w()};return r.createElement(t,{...n})}}function g(){const t=u("mainButton");return i(t,["isEnabledChanged","backgroundColorChanged","isProgressVisibleChanged","textChanged","textColorChanged","isVisibleChanged"]),t}function L(t){return function(e){const n={...e,mainButton:g()};return r.createElement(t,{...n})}}function C(){const t=u("popup");return i(t,["isOpenedChanged"]),t}function T(t){return function(e){const n={...e,popup:C()};return r.createElement(t,{...n})}}function S(){const t=u("qrScanner");return i(t,["isOpenedChanged"]),t}function q(t){return function(e){const n={...e,qrScanner:S()};return r.createElement(t,{...n})}}function P(){const t=u("viewport");return i(t,["stableHeightChanged","isExpandedChanged","heightChanged","widthChanged"]),t}function Q(t){return function(e){const n={...e,viewport:P()};return r.createElement(t,{...n})}}function B(){const t=u("webApp");return i(t,["headerColorChanged","backgroundColorChanged"]),t}function U(t){return function(e){const n={...e,webApp:B()};return r.createElement(t,{...n})}}function b(){return u("cloudStorage")}function y(t){return function(e){const n={...e,cloudStorage:b()};return r.createElement(t,{...n})}}function E(){return u("initData")||null}function D(){return u("initDataRaw")||null}function O(t){return function(e){const n={...e,initData:E(),initDataRaw:D()};return r.createElement(t,{...n})}}function k(){const t=u("themeParams");return i(t,["changed"]),t}function N(t){return function(e){const n={...e,themeParams:k()};return r.createElement(t,{...n})}}exports.SDKProvider=l;exports.sdkContext=a;exports.useBackButton=d;exports.useClosingBehaviour=f;exports.useCloudStorage=b;exports.useHapticFeedback=m;exports.useInitData=E;exports.useInitDataRaw=D;exports.useLaunchParams=w;exports.useMainButton=g;exports.usePopup=C;exports.usePostEvent=A;exports.useQRScanner=S;exports.useSDK=c;exports.useThemeParams=k;exports.useUnit=u;exports.useViewport=P;exports.useWebApp=B;exports.withBackButton=M;exports.withClosingBehaviour=V;exports.withCloudStorage=y;exports.withHapticFeedback=F;exports.withInitData=O;exports.withLaunchParams=H;exports.withMainButton=L;exports.withPopup=T;exports.withQRScanner=q;exports.withSDK=x;exports.withThemeParams=N;exports.withViewport=Q;exports.withWebApp=U;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -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';\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 Mini 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
+ {"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/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/init-data.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 { 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 Mini 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 { InitData } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\n\ninterface EnhancedProps {\n initData: InitData | null;\n initDataRaw: string | null;\n}\n\n/**\n * Returns InitData component instance.\n */\nexport function useInitData(): InitData | null {\n return useUnit('initData') || null;\n}\n\n/**\n * Returns init data raw representation.\n */\nexport function useInitDataRaw(): string | null {\n return useUnit('initDataRaw') || null;\n}\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 Partial<EnhancedProps>>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, keyof EnhancedProps>> {\n return function WithInitData(props) {\n const enhancedProps = {\n ...props,\n initData: useInitData(),\n initDataRaw: useInitDataRaw(),\n } as P;\n\n return <Component {...enhancedProps} />;\n };\n}\n\nexport { InitData };\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","useLaunchParams","retrieveLaunchParams","withLaunchParams","useMainButton","mainButton","withMainButton","usePopup","popup","withPopup","useQRScanner","qrScanner","withQRScanner","useViewport","viewport","withViewport","useWebApp","webApp","withWebApp","useCloudStorage","withCloudStorage","useInitData","useInitDataRaw","withInitData","enhancedProps","useThemeParams","theme","withThemeParams"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,83 +1,74 @@
1
- import o, { createContext as w, useContext as E, memo as b, useState as c, useEffect as p, useMemo as f, useCallback as B } from "react";
2
- import { init as P, retrieveLaunchParams as S } from "@tma.js/sdk";
3
- const a = w({
1
+ import o, { createContext as w, useContext as E, memo as b, useState as a, useEffect as p, useMemo as f, useCallback as P } from "react";
2
+ import { init as B, retrieveLaunchParams as S } from "@tma.js/sdk";
3
+ const c = w({
4
4
  components: null,
5
5
  didInit: !1,
6
6
  error: null
7
7
  });
8
- a.displayName = "SDKContext";
9
- const l = () => E(a);
8
+ c.displayName = "SDKContext";
9
+ const l = () => E(c);
10
10
  function i(n) {
11
11
  const { components: r } = l();
12
12
  if (r === null)
13
13
  throw new Error(`Unable to get unit "${n}" as long as SDK is not initialized.`);
14
14
  return r[n];
15
15
  }
16
- function q(n) {
16
+ function N(n) {
17
17
  return function(e) {
18
18
  const t = { ...e, sdk: l() };
19
19
  return /* @__PURE__ */ o.createElement(n, { ...t });
20
20
  };
21
21
  }
22
22
  const W = b((n) => {
23
- const { children: r, initOptions: e } = n, [t, d] = c(!1), [s, m] = c(null), [h, g] = c(null);
23
+ const { children: r, initOptions: e } = n, [t, d] = a(!1), [s, m] = a(null), [h, g] = a(null);
24
24
  p(() => {
25
- d(!0), P(e).then(g).catch(m);
25
+ d(!0), B(e).then(g).catch(m);
26
26
  }, []);
27
27
  const C = f(() => ({
28
28
  components: h,
29
29
  didInit: t,
30
30
  error: s
31
31
  }), [t, h, s]);
32
- return /* @__PURE__ */ o.createElement(a.Provider, { value: C }, r);
32
+ return /* @__PURE__ */ o.createElement(c.Provider, { value: C }, r);
33
33
  });
34
34
  W.displayName = "SDKProvider";
35
- function k() {
36
- const [, n] = c(0);
37
- return B(() => n((r) => (r + 1) % 1e6), []);
35
+ function D() {
36
+ const [, n] = a(0);
37
+ return P(() => n((r) => (r + 1) % 1e6), []);
38
38
  }
39
39
  function u(n, r) {
40
- const e = k();
40
+ const e = D();
41
41
  p(() => (r.forEach((t) => n.on(t, e)), () => r.forEach((t) => n.off(t, e))), [n, e, r]);
42
42
  }
43
- function N() {
43
+ function O() {
44
44
  return i("postEvent");
45
45
  }
46
- function v() {
46
+ function k() {
47
47
  const n = i("backButton");
48
48
  return u(n, ["isVisibleChanged"]), n;
49
49
  }
50
- function O(n) {
50
+ function Q(n) {
51
51
  return function(e) {
52
- const t = { ...e, backButton: v() };
52
+ const t = { ...e, backButton: k() };
53
53
  return /* @__PURE__ */ o.createElement(n, { ...t });
54
54
  };
55
55
  }
56
- function D() {
56
+ function v() {
57
57
  const n = i("closingBehavior");
58
58
  return u(n, ["isConfirmationNeededChanged"]), n;
59
59
  }
60
- function Q(n) {
60
+ function y(n) {
61
61
  return function(e) {
62
- const t = { ...e, closingBehaviour: D() };
62
+ const t = { ...e, closingBehaviour: v() };
63
63
  return /* @__PURE__ */ o.createElement(n, { ...t });
64
64
  };
65
65
  }
66
66
  function x() {
67
67
  return i("haptic");
68
68
  }
69
- function y(n) {
70
- return function(e) {
71
- const t = { ...e, hapticFeedback: x() };
72
- return /* @__PURE__ */ o.createElement(n, { ...t });
73
- };
74
- }
75
- function A() {
76
- return i("initData") || null;
77
- }
78
69
  function z(n) {
79
70
  return function(e) {
80
- const t = { ...e, initData: A() };
71
+ const t = { ...e, hapticFeedback: x() };
81
72
  return /* @__PURE__ */ o.createElement(n, { ...t });
82
73
  };
83
74
  }
@@ -90,7 +81,7 @@ function $(n) {
90
81
  return /* @__PURE__ */ o.createElement(n, { ...t });
91
82
  };
92
83
  }
93
- function K() {
84
+ function R() {
94
85
  const n = i("mainButton");
95
86
  return u(n, [
96
87
  "isEnabledChanged",
@@ -103,31 +94,31 @@ function K() {
103
94
  }
104
95
  function j(n) {
105
96
  return function(e) {
106
- const t = { ...e, mainButton: K() };
97
+ const t = { ...e, mainButton: R() };
107
98
  return /* @__PURE__ */ o.createElement(n, { ...t });
108
99
  };
109
100
  }
110
- function V() {
101
+ function A() {
111
102
  const n = i("popup");
112
103
  return u(n, ["isOpenedChanged"]), n;
113
104
  }
114
105
  function G(n) {
115
106
  return function(e) {
116
- const t = { ...e, popup: V() };
107
+ const t = { ...e, popup: A() };
117
108
  return /* @__PURE__ */ o.createElement(n, { ...t });
118
109
  };
119
110
  }
120
- function F() {
111
+ function K() {
121
112
  const n = i("qrScanner");
122
113
  return u(n, ["isOpenedChanged"]), n;
123
114
  }
124
115
  function J(n) {
125
116
  return function(e) {
126
- const t = { ...e, qrScanner: F() };
117
+ const t = { ...e, qrScanner: K() };
127
118
  return /* @__PURE__ */ o.createElement(n, { ...t });
128
119
  };
129
120
  }
130
- function H() {
121
+ function V() {
131
122
  const n = i("viewport");
132
123
  return u(n, [
133
124
  "stableHeightChanged",
@@ -138,68 +129,85 @@ function H() {
138
129
  }
139
130
  function X(n) {
140
131
  return function(e) {
141
- const t = { ...e, viewport: H() };
132
+ const t = { ...e, viewport: V() };
142
133
  return /* @__PURE__ */ o.createElement(n, { ...t });
143
134
  };
144
135
  }
145
- function L() {
136
+ function F() {
146
137
  const n = i("webApp");
147
138
  return u(n, ["headerColorChanged", "backgroundColorChanged"]), n;
148
139
  }
149
140
  function Y(n) {
150
141
  return function(e) {
151
- const t = { ...e, webApp: L() };
142
+ const t = { ...e, webApp: F() };
152
143
  return /* @__PURE__ */ o.createElement(n, { ...t });
153
144
  };
154
145
  }
155
- function M() {
146
+ function H() {
156
147
  return i("cloudStorage");
157
148
  }
158
149
  function Z(n) {
159
150
  return function(e) {
160
- const t = { ...e, cloudStorage: M() };
151
+ const t = { ...e, cloudStorage: H() };
161
152
  return /* @__PURE__ */ o.createElement(n, { ...t });
162
153
  };
163
154
  }
164
- function R() {
155
+ function L() {
156
+ return i("initData") || null;
157
+ }
158
+ function M() {
159
+ return i("initDataRaw") || null;
160
+ }
161
+ function _(n) {
162
+ return function(e) {
163
+ const t = {
164
+ ...e,
165
+ initData: L(),
166
+ initDataRaw: M()
167
+ };
168
+ return /* @__PURE__ */ o.createElement(n, { ...t });
169
+ };
170
+ }
171
+ function T() {
165
172
  const n = i("themeParams");
166
173
  return u(n, ["changed"]), n;
167
174
  }
168
- function _(n) {
175
+ function nn(n) {
169
176
  return function(e) {
170
- const t = { ...e, themeParams: R() };
177
+ const t = { ...e, themeParams: T() };
171
178
  return /* @__PURE__ */ o.createElement(n, { ...t });
172
179
  };
173
180
  }
174
181
  export {
175
182
  W as SDKProvider,
176
- a as sdkContext,
177
- v as useBackButton,
178
- D as useClosingBehaviour,
179
- M as useCloudStorage,
183
+ c as sdkContext,
184
+ k as useBackButton,
185
+ v as useClosingBehaviour,
186
+ H as useCloudStorage,
180
187
  x as useHapticFeedback,
181
- A as useInitData,
188
+ L as useInitData,
189
+ M as useInitDataRaw,
182
190
  I as useLaunchParams,
183
- K as useMainButton,
184
- V as usePopup,
185
- N as usePostEvent,
186
- F as useQRScanner,
191
+ R as useMainButton,
192
+ A as usePopup,
193
+ O as usePostEvent,
194
+ K as useQRScanner,
187
195
  l as useSDK,
188
- R as useThemeParams,
196
+ T as useThemeParams,
189
197
  i as useUnit,
190
- H as useViewport,
191
- L as useWebApp,
192
- O as withBackButton,
193
- Q as withClosingBehaviour,
198
+ V as useViewport,
199
+ F as useWebApp,
200
+ Q as withBackButton,
201
+ y as withClosingBehaviour,
194
202
  Z as withCloudStorage,
195
- y as withHapticFeedback,
196
- z as withInitData,
203
+ z as withHapticFeedback,
204
+ _ as withInitData,
197
205
  $ as withLaunchParams,
198
206
  j as withMainButton,
199
207
  G as withPopup,
200
208
  J as withQRScanner,
201
- q as withSDK,
202
- _ as withThemeParams,
209
+ N as withSDK,
210
+ nn as withThemeParams,
203
211
  X as withViewport,
204
212
  Y as withWebApp
205
213
  };
@@ -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';\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 Mini 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
+ {"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/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/init-data.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 { 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 Mini 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 { InitData } from '@tma.js/sdk';\n\nimport { useUnit } from '../provider/index.js';\n\ninterface EnhancedProps {\n initData: InitData | null;\n initDataRaw: string | null;\n}\n\n/**\n * Returns InitData component instance.\n */\nexport function useInitData(): InitData | null {\n return useUnit('initData') || null;\n}\n\n/**\n * Returns init data raw representation.\n */\nexport function useInitDataRaw(): string | null {\n return useUnit('initDataRaw') || null;\n}\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 Partial<EnhancedProps>>(\n Component: ComponentType<P>,\n): ComponentType<Omit<P, keyof EnhancedProps>> {\n return function WithInitData(props) {\n const enhancedProps = {\n ...props,\n initData: useInitData(),\n initDataRaw: useInitDataRaw(),\n } as P;\n\n return <Component {...enhancedProps} />;\n };\n}\n\nexport { InitData };\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","useLaunchParams","retrieveLaunchParams","withLaunchParams","useMainButton","mainButton","withMainButton","usePopup","popup","withPopup","useQRScanner","qrScanner","withQRScanner","useViewport","viewport","withViewport","useWebApp","webApp","withWebApp","useCloudStorage","withCloudStorage","useInitData","useInitDataRaw","withInitData","enhancedProps","useThemeParams","theme","withThemeParams"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tma.js/sdk-react",
3
- "version": "0.4.16",
3
+ "version": "0.5.0",
4
4
  "description": "React bindings for Mini Apps client SDK. Contains hooks, components and other useful tools which allow usage of React along with Mini Apps client SDK.",
5
5
  "author": "Vladislav Kibenko <wolfram.deus@gmail.com>",
6
6
  "homepage": "https://github.com/Telegram-Mini-Apps/tma.js#readme",
@@ -49,7 +49,7 @@
49
49
  "@tma.js/launch-params": "0.0.6",
50
50
  "@tma.js/theme-params": "0.0.6",
51
51
  "@tma.js/bridge": "1.3.11",
52
- "@tma.js/sdk": "0.12.8"
52
+ "@tma.js/sdk": "0.12.9"
53
53
  },
54
54
  "devDependencies": {
55
55
  "tsconfig": "0.0.2",
@@ -62,7 +62,6 @@
62
62
  "scripts": {
63
63
  "lint": "eslint -c .eslintrc.cjs src/**/*",
64
64
  "typecheck": "tsc --noEmit -p tsconfig.build.json",
65
- "build": "vite build",
66
- "rollup": "pnpm run typecheck && pnpm run build"
65
+ "build": "vite build"
67
66
  }
68
67
  }
package/src/lib/index.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  export * from './back-button/index.js';
2
2
  export * from './closing-behavior/index.js';
3
3
  export * from './haptic-feedback/index.js';
4
- export * from './init-data/index.js';
5
4
  export * from './launch-params/index.js';
6
5
  export * from './main-button/index.js';
7
6
  export * from './popup/index.js';
@@ -10,4 +9,5 @@ export * from './viewport/index.js';
10
9
  export * from './web-app/index.js';
11
10
  export * from './cloud-storage.js';
12
11
  export { usePostEvent } from './hooks.js';
12
+ export * from './init-data.js';
13
13
  export * from './theme-params.js';
@@ -0,0 +1,43 @@
1
+ import React, { type ComponentType } from 'react';
2
+ import type { InitData } from '@tma.js/sdk';
3
+
4
+ import { useUnit } from '../provider/index.js';
5
+
6
+ interface EnhancedProps {
7
+ initData: InitData | null;
8
+ initDataRaw: string | null;
9
+ }
10
+
11
+ /**
12
+ * Returns InitData component instance.
13
+ */
14
+ export function useInitData(): InitData | null {
15
+ return useUnit('initData') || null;
16
+ }
17
+
18
+ /**
19
+ * Returns init data raw representation.
20
+ */
21
+ export function useInitDataRaw(): string | null {
22
+ return useUnit('initDataRaw') || null;
23
+ }
24
+
25
+ /**
26
+ * HOC which passes InitData SDK component to wrapped React component.
27
+ * @param Component - component to wrap.
28
+ */
29
+ export function withInitData<P extends Partial<EnhancedProps>>(
30
+ Component: ComponentType<P>,
31
+ ): ComponentType<Omit<P, keyof EnhancedProps>> {
32
+ return function WithInitData(props) {
33
+ const enhancedProps = {
34
+ ...props,
35
+ initData: useInitData(),
36
+ initDataRaw: useInitDataRaw(),
37
+ } as P;
38
+
39
+ return <Component {...enhancedProps} />;
40
+ };
41
+ }
42
+
43
+ export { InitData };
@@ -1,3 +0,0 @@
1
- export * from './types.js';
2
- export * from './useInitData.js';
3
- export * from './withInitData.js';
@@ -1 +0,0 @@
1
- export type { InitData } from '@tma.js/sdk';
@@ -1,5 +0,0 @@
1
- import type { InitData } from './types.js';
2
- /**
3
- * Returns InitData component instance.
4
- */
5
- export declare function useInitData(): InitData | null;
@@ -1,9 +0,0 @@
1
- import { type ComponentType } from 'react';
2
- import type { InitData } from './types.js';
3
- /**
4
- * HOC which passes InitData SDK component to wrapped React component.
5
- * @param Component - component to wrap.
6
- */
7
- export declare function withInitData<P extends {
8
- initData?: InitData;
9
- }>(Component: ComponentType<P>): ComponentType<Omit<P, 'initData'>>;
@@ -1,3 +0,0 @@
1
- export * from './types.js';
2
- export * from './useInitData.js';
3
- export * from './withInitData.js';
@@ -1 +0,0 @@
1
- export type { InitData } from '@tma.js/sdk';
@@ -1,9 +0,0 @@
1
- import { useUnit } from '../../provider/index.js';
2
- import type { InitData } from './types.js';
3
-
4
- /**
5
- * Returns InitData component instance.
6
- */
7
- export function useInitData(): InitData | null {
8
- return useUnit('initData') || null;
9
- }
@@ -1,18 +0,0 @@
1
- import React, { type ComponentType } from 'react';
2
-
3
- import { useInitData } from './useInitData.js';
4
- import type { InitData } from './types.js';
5
-
6
- /**
7
- * HOC which passes InitData SDK component to wrapped React component.
8
- * @param Component - component to wrap.
9
- */
10
- export function withInitData<P extends { initData?: InitData }>(
11
- Component: ComponentType<P>,
12
- ): ComponentType<Omit<P, 'initData'>> {
13
- return function WithInitData(props: Omit<P, 'initData'>) {
14
- const p = { ...props, initData: useInitData() } as P;
15
-
16
- return <Component {...p} />;
17
- };
18
- }