@tma.js/sdk-solid 0.1.8 → 0.1.10

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.
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("solid-js"),m=require("@tma.js/sdk"),h=require("@tma.js/utils"),d=t.createContext(void 0,{name:"SDKContext"});function C(){const n=t.useContext(d);if(n===void 0)throw new Error("useSDKContext hook was used outside of SDKProvider.");return n}function p(n){const e=t.createMemo(()=>n.initOptions||{}),[o]=t.createResource(e,m.init),s=t.createMemo(()=>o.state==="ready"?o():null),u=t.createMemo(()=>o.loading),c=t.createMemo(()=>o.error===void 0?null:o.error);return t.createComponent(d.Provider,{value:{initResult:s,loading:u,error:c},get children(){return n.children}})}function a(n,e){return t.createMemo(()=>n()[e])}function r(n,e,o){const s=a(n,e),[u,c]=t.createSignal(s(),{equals:!1});return t.createEffect(()=>{const l=s(),g=()=>{c(i=>i)};o.forEach(i=>l.on(i,g)),t.onCleanup(()=>{o.forEach(i=>l.off(i,g))})}),u}function f(){const{initResult:n}=C(),e=t.createMemo(()=>{const o=n();if(o===null)throw new Error("Unable to use SDK as it is not ready.");return o});return{backButton:r(e,"backButton",["isVisibleChanged"]),closingBehavior:r(e,"closingBehavior",["isConfirmationNeededChanged"]),cloudStorage:a(e,"cloudStorage"),haptic:a(e,"haptic"),initData:a(e,"initData"),initDataRaw:a(e,"initDataRaw"),mainButton:r(e,"mainButton",["backgroundColorChanged","isVisibleChanged","isProgressVisibleChanged","isEnabledChanged","textChanged","textColorChanged"]),popup:r(e,"popup",["isOpenedChanged"]),postEvent:a(e,"postEvent"),qrScanner:r(e,"qrScanner",["isOpenedChanged"]),themeParams:r(e,"themeParams",["changed"]),viewport:r(e,"viewport",["heightChanged","isExpandedChanged","stableHeightChanged","widthChanged"]),webApp:r(e,"webApp",["backgroundColorChanged","headerColorChanged"])}}Object.defineProperty(exports,"classNames",{enumerable:!0,get:()=>h.classNames});Object.defineProperty(exports,"mergeClassNames",{enumerable:!0,get:()=>h.mergeClassNames});exports.SDKContext=d;exports.SDKProvider=p;exports.useSDK=f;exports.useSDKContext=C;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/context.ts","../src/hooks.ts","../src/SDKProvider.tsx","../src/useInitResultValue.ts","../src/useDynamicInitResultValue.ts","../src/useSDK.ts"],"sourcesContent":["import { createContext } from 'solid-js';\n\nimport type { SDKContextType } from './types.js';\n\nexport const SDKContext = createContext<SDKContextType>(undefined, { name: 'SDKContext' });\n","import { useContext } from 'solid-js';\n\nimport { SDKContext } from './context.js';\nimport type { SDKContextType } from './types.js';\n\n/**\n * Uses SDKContext context.\n */\nexport function useSDKContext(): SDKContextType {\n const context = useContext(SDKContext);\n\n if (context === undefined) {\n throw new Error('useSDKContext hook was used outside of SDKProvider.');\n }\n return context;\n}\n","import { createMemo, createResource, type ParentProps } from 'solid-js';\nimport { init } from '@tma.js/sdk';\n\nimport { SDKContext } from './context.js';\nimport type { SDKInitOptions } from './types.js';\n\nexport type SDKProviderProps = ParentProps<{ initOptions?: SDKInitOptions }>;\n\nexport function SDKProvider(props: SDKProviderProps) {\n const initOptions = createMemo(() => props.initOptions || {});\n const [data] = createResource(initOptions, init);\n\n const initResult = createMemo(() => {\n return data.state === 'ready' ? data() : null;\n });\n const loading = createMemo(() => data.loading);\n const error = createMemo(() => data.error === undefined ? null : data.error);\n\n return (\n <SDKContext.Provider value={{ initResult, loading, error }}>\n {props.children}\n </SDKContext.Provider>\n );\n}\n","import { createMemo, type Accessor } from 'solid-js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\n\n/**\n * Extracts value from the SDK init result by key.\n * @param result - init result accessor.\n * @param key - key to extract.\n */\nexport function useInitResultValue<K extends SDKInitResultKey>(\n result: Accessor<SDKInitResult>,\n key: K\n): Accessor<SDKInitResultValue<K>> {\n return createMemo(() => result()[key]);\n}","import { createEffect, createSignal, onCleanup, type Accessor } from 'solid-js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.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\ntype DynamicComponentKey = {\n [K in SDKInitResultKey]: SDKInitResultValue<K> extends Trackable ? K : never;\n}[SDKInitResultKey];\n\n/**\n * Extracts value from the SDK init result by specified key and listens to its all specified\n * events, making the returned value to update.\n * @param initResult - SDK init result.\n * @param key - SDK init result key.\n * @param events - tracked events list.\n */\nexport function useDynamicInitResultValue<K extends DynamicComponentKey>(\n initResult: Accessor<SDKInitResult>,\n key: K,\n events: EventName<SDKInitResultValue<K>>[],\n): Accessor<SDKInitResultValue<K>> {\n // Get original value from init result.\n const initResultValue = useInitResultValue(initResult, key);\n\n // Here we store value, which should always update it in case, some of its props\n // were changed/\n const [value, setValue] = createSignal(initResultValue(), { equals: false });\n\n createEffect(() => {\n const value = initResultValue();\n const listener = () => {\n // We use prev => prev on purpose. This will make Solid sure, something inside\n // dynamic value changed.\n setValue(prev => prev);\n };\n\n events.forEach(event => value.on(event, listener));\n onCleanup(() => {\n events.forEach(event => value.off(event, listener));\n });\n });\n\n return value;\n}","import { createMemo, type Accessor } from 'solid-js';\n\nimport { useSDKContext } from './hooks.js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport { useDynamicInitResultValue } from './useDynamicInitResultValue.js';\nimport type { SDKInitResultKey, SDKInitResultValue } from './types.js';\n\nexport type SDK = {\n [K in SDKInitResultKey]: Accessor<SDKInitResultValue<K>>\n};\n\n/**\n * Returns ready to use SDK components.\n */\nexport function useSDK(): SDK {\n const { initResult } = useSDKContext();\n\n const sdk = createMemo(() => {\n const result = initResult();\n\n if (result === null) {\n throw new Error('Unable to use SDK as it is not ready.');\n }\n return result;\n });\n\n return {\n backButton: useDynamicInitResultValue(sdk, 'backButton', ['isVisibleChanged']),\n closingBehavior: useDynamicInitResultValue(sdk, 'closingBehavior', ['isConfirmationNeededChanged']),\n cloudStorage: useInitResultValue(sdk, 'cloudStorage'),\n haptic: useInitResultValue(sdk, 'haptic'),\n initData: useInitResultValue(sdk, 'initData'),\n initDataRaw: useInitResultValue(sdk, 'initDataRaw'),\n mainButton: useDynamicInitResultValue(sdk, 'mainButton', [\n 'backgroundColorChanged',\n 'isVisibleChanged',\n 'isProgressVisibleChanged',\n 'isEnabledChanged',\n 'textChanged',\n 'textColorChanged',\n ]),\n popup: useDynamicInitResultValue(sdk, 'popup', ['isOpenedChanged']),\n postEvent: useInitResultValue(sdk, 'postEvent'),\n qrScanner: useDynamicInitResultValue(sdk, 'qrScanner', ['isOpenedChanged']),\n themeParams: useDynamicInitResultValue(sdk, 'themeParams', ['changed']),\n viewport: useDynamicInitResultValue(sdk, 'viewport', [\n 'heightChanged',\n 'isExpandedChanged',\n 'stableHeightChanged',\n 'widthChanged',\n ]),\n webApp: useDynamicInitResultValue(sdk, 'webApp', ['backgroundColorChanged', 'headerColorChanged']),\n };\n}"],"names":["SDKContext","createContext","useSDKContext","context","useContext","SDKProvider","props","initOptions","createMemo","data","createResource","init","initResult","state","loading","error","undefined","_$createComponent","Provider","value","children","useInitResultValue","result","key","useDynamicInitResultValue","events","initResultValue","setValue","createSignal","createEffect","listener","prev","event","onCleanup","useSDK","sdk"],"mappings":"gKAIaA,EAAaC,EAAAA,cAA8B,OAAW,CAAE,KAAM,YAAc,CAAA,ECIlF,SAASC,GAAgC,CACxC,MAAAC,EAAUC,aAAWJ,CAAU,EAErC,GAAIG,IAAY,OACR,MAAA,IAAI,MAAM,qDAAqD,EAEhE,OAAAA,CACT,CCPO,SAASE,EAAYC,EAAyB,CACnD,MAAMC,EAAcC,EAAAA,WAAW,IAAMF,EAAMC,aAAe,CAAE,CAAA,EACtD,CAACE,CAAI,EAAIC,EAAc,eAACH,EAAaI,EAAI,IAAA,EAEzCC,EAAaJ,EAAAA,WAAW,IACrBC,EAAKI,QAAU,QAAUJ,EAAI,EAAK,IAC1C,EACKK,EAAUN,EAAU,WAAC,IAAMC,EAAKK,OAAO,EACvCC,EAAQP,aAAW,IAAMC,EAAKM,QAAUC,OAAY,KAAOP,EAAKM,KAAK,EAE3E,OAAAE,EAAA,gBACGjB,EAAWkB,SAAQ,CAACC,MAAO,CAAEP,WAAAA,EAAYE,QAAAA,EAASC,MAAAA,CAAO,EAAA,IAAAK,UAAA,CAAA,OACvDd,EAAMc,QAAQ,CAAA,CAAA,CAGrB,CCfgB,SAAAC,EACdC,EACAC,EACiC,CACjC,OAAOf,EAAW,WAAA,IAAMc,IAASC,CAAG,CAAC,CACvC,CCWgB,SAAAC,EACdZ,EACAW,EACAE,EACiC,CAE3B,MAAAC,EAAkBL,EAAmBT,EAAYW,CAAG,EAIpD,CAACJ,EAAOQ,CAAQ,EAAIC,EAAA,aAAaF,IAAmB,CAAE,OAAQ,EAAA,CAAO,EAE3EG,OAAAA,EAAAA,aAAa,IAAM,CACjB,MAAMV,EAAQO,IACRI,EAAW,IAAM,CAGrBH,KAAiBI,CAAI,CAAA,EAGvBN,EAAO,QAAiBN,GAAAA,EAAM,GAAGa,EAAOF,CAAQ,CAAC,EACjDG,EAAAA,UAAU,IAAM,CACdR,EAAO,QAAiBN,GAAAA,EAAM,IAAIa,EAAOF,CAAQ,CAAC,CAAA,CACnD,CAAA,CACF,EAEMX,CACT,CCrCO,SAASe,GAAc,CACtB,KAAA,CAAE,WAAAtB,GAAeV,IAEjBiC,EAAM3B,EAAAA,WAAW,IAAM,CAC3B,MAAMc,EAASV,IAEf,GAAIU,IAAW,KACP,MAAA,IAAI,MAAM,uCAAuC,EAElD,OAAAA,CAAA,CACR,EAEM,MAAA,CACL,WAAYE,EAA0BW,EAAK,aAAc,CAAC,kBAAkB,CAAC,EAC7E,gBAAiBX,EAA0BW,EAAK,kBAAmB,CAAC,6BAA6B,CAAC,EAClG,aAAcd,EAAmBc,EAAK,cAAc,EACpD,OAAQd,EAAmBc,EAAK,QAAQ,EACxC,SAAUd,EAAmBc,EAAK,UAAU,EAC5C,YAAad,EAAmBc,EAAK,aAAa,EAClD,WAAYX,EAA0BW,EAAK,aAAc,CACvD,yBACA,mBACA,2BACA,mBACA,cACA,kBAAA,CACD,EACD,MAAOX,EAA0BW,EAAK,QAAS,CAAC,iBAAiB,CAAC,EAClE,UAAWd,EAAmBc,EAAK,WAAW,EAC9C,UAAWX,EAA0BW,EAAK,YAAa,CAAC,iBAAiB,CAAC,EAC1E,YAAaX,EAA0BW,EAAK,cAAe,CAAC,SAAS,CAAC,EACtE,SAAUX,EAA0BW,EAAK,WAAY,CACnD,gBACA,oBACA,sBACA,cAAA,CACD,EACD,OAAQX,EAA0BW,EAAK,SAAU,CAAC,yBAA0B,oBAAoB,CAAC,CAAA,CAErG"}
@@ -78,4 +78,4 @@ export {
78
78
  K as useSDK,
79
79
  b as useSDKContext
80
80
  };
81
- //# sourceMappingURL=index.js.map
81
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/context.ts","../src/hooks.ts","../src/SDKProvider.tsx","../src/useInitResultValue.ts","../src/useDynamicInitResultValue.ts","../src/useSDK.ts"],"sourcesContent":["import { createContext } from 'solid-js';\n\nimport type { SDKContextType } from './types.js';\n\nexport const SDKContext = createContext<SDKContextType>(undefined, { name: 'SDKContext' });\n","import { useContext } from 'solid-js';\n\nimport { SDKContext } from './context.js';\nimport type { SDKContextType } from './types.js';\n\n/**\n * Uses SDKContext context.\n */\nexport function useSDKContext(): SDKContextType {\n const context = useContext(SDKContext);\n\n if (context === undefined) {\n throw new Error('useSDKContext hook was used outside of SDKProvider.');\n }\n return context;\n}\n","import { createMemo, createResource, type ParentProps } from 'solid-js';\nimport { init } from '@tma.js/sdk';\n\nimport { SDKContext } from './context.js';\nimport type { SDKInitOptions } from './types.js';\n\nexport type SDKProviderProps = ParentProps<{ initOptions?: SDKInitOptions }>;\n\nexport function SDKProvider(props: SDKProviderProps) {\n const initOptions = createMemo(() => props.initOptions || {});\n const [data] = createResource(initOptions, init);\n\n const initResult = createMemo(() => {\n return data.state === 'ready' ? data() : null;\n });\n const loading = createMemo(() => data.loading);\n const error = createMemo(() => data.error === undefined ? null : data.error);\n\n return (\n <SDKContext.Provider value={{ initResult, loading, error }}>\n {props.children}\n </SDKContext.Provider>\n );\n}\n","import { createMemo, type Accessor } from 'solid-js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\n\n/**\n * Extracts value from the SDK init result by key.\n * @param result - init result accessor.\n * @param key - key to extract.\n */\nexport function useInitResultValue<K extends SDKInitResultKey>(\n result: Accessor<SDKInitResult>,\n key: K\n): Accessor<SDKInitResultValue<K>> {\n return createMemo(() => result()[key]);\n}","import { createEffect, createSignal, onCleanup, type Accessor } from 'solid-js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.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\ntype DynamicComponentKey = {\n [K in SDKInitResultKey]: SDKInitResultValue<K> extends Trackable ? K : never;\n}[SDKInitResultKey];\n\n/**\n * Extracts value from the SDK init result by specified key and listens to its all specified\n * events, making the returned value to update.\n * @param initResult - SDK init result.\n * @param key - SDK init result key.\n * @param events - tracked events list.\n */\nexport function useDynamicInitResultValue<K extends DynamicComponentKey>(\n initResult: Accessor<SDKInitResult>,\n key: K,\n events: EventName<SDKInitResultValue<K>>[],\n): Accessor<SDKInitResultValue<K>> {\n // Get original value from init result.\n const initResultValue = useInitResultValue(initResult, key);\n\n // Here we store value, which should always update it in case, some of its props\n // were changed/\n const [value, setValue] = createSignal(initResultValue(), { equals: false });\n\n createEffect(() => {\n const value = initResultValue();\n const listener = () => {\n // We use prev => prev on purpose. This will make Solid sure, something inside\n // dynamic value changed.\n setValue(prev => prev);\n };\n\n events.forEach(event => value.on(event, listener));\n onCleanup(() => {\n events.forEach(event => value.off(event, listener));\n });\n });\n\n return value;\n}","import { createMemo, type Accessor } from 'solid-js';\n\nimport { useSDKContext } from './hooks.js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport { useDynamicInitResultValue } from './useDynamicInitResultValue.js';\nimport type { SDKInitResultKey, SDKInitResultValue } from './types.js';\n\nexport type SDK = {\n [K in SDKInitResultKey]: Accessor<SDKInitResultValue<K>>\n};\n\n/**\n * Returns ready to use SDK components.\n */\nexport function useSDK(): SDK {\n const { initResult } = useSDKContext();\n\n const sdk = createMemo(() => {\n const result = initResult();\n\n if (result === null) {\n throw new Error('Unable to use SDK as it is not ready.');\n }\n return result;\n });\n\n return {\n backButton: useDynamicInitResultValue(sdk, 'backButton', ['isVisibleChanged']),\n closingBehavior: useDynamicInitResultValue(sdk, 'closingBehavior', ['isConfirmationNeededChanged']),\n cloudStorage: useInitResultValue(sdk, 'cloudStorage'),\n haptic: useInitResultValue(sdk, 'haptic'),\n initData: useInitResultValue(sdk, 'initData'),\n initDataRaw: useInitResultValue(sdk, 'initDataRaw'),\n mainButton: useDynamicInitResultValue(sdk, 'mainButton', [\n 'backgroundColorChanged',\n 'isVisibleChanged',\n 'isProgressVisibleChanged',\n 'isEnabledChanged',\n 'textChanged',\n 'textColorChanged',\n ]),\n popup: useDynamicInitResultValue(sdk, 'popup', ['isOpenedChanged']),\n postEvent: useInitResultValue(sdk, 'postEvent'),\n qrScanner: useDynamicInitResultValue(sdk, 'qrScanner', ['isOpenedChanged']),\n themeParams: useDynamicInitResultValue(sdk, 'themeParams', ['changed']),\n viewport: useDynamicInitResultValue(sdk, 'viewport', [\n 'heightChanged',\n 'isExpandedChanged',\n 'stableHeightChanged',\n 'widthChanged',\n ]),\n webApp: useDynamicInitResultValue(sdk, 'webApp', ['backgroundColorChanged', 'headerColorChanged']),\n };\n}"],"names":["SDKContext","createContext","useSDKContext","context","useContext","SDKProvider","props","initOptions","createMemo","data","createResource","init","initResult","state","loading","error","undefined","_$createComponent","Provider","value","children","useInitResultValue","result","key","useDynamicInitResultValue","events","initResultValue","setValue","createSignal","createEffect","listener","prev","event","onCleanup","useSDK","sdk"],"mappings":";;;AAIO,MAAMA,IAAaC,EAA8B,QAAW,EAAE,MAAM,aAAc,CAAA;ACIlF,SAASC,IAAgC;AACxC,QAAAC,IAAUC,EAAWJ,CAAU;AAErC,MAAIG,MAAY;AACR,UAAA,IAAI,MAAM,qDAAqD;AAEhE,SAAAA;AACT;ACPO,SAASE,EAAYC,GAAyB;AACnD,QAAMC,IAAcC,EAAW,MAAMF,EAAMC,eAAe,CAAE,CAAA,GACtD,CAACE,CAAI,IAAIC,EAAeH,GAAaI,CAAI,GAEzCC,IAAaJ,EAAW,MACrBC,EAAKI,UAAU,UAAUJ,EAAI,IAAK,IAC1C,GACKK,IAAUN,EAAW,MAAMC,EAAKK,OAAO,GACvCC,IAAQP,EAAW,MAAMC,EAAKM,UAAUC,SAAY,OAAOP,EAAKM,KAAK;AAE3E,SAAAE,EACGjB,EAAWkB,UAAQ;AAAA,IAACC,OAAO;AAAA,MAAEP,YAAAA;AAAAA,MAAYE,SAAAA;AAAAA,MAASC,OAAAA;AAAAA,IAAO;AAAA,IAAA,IAAAK,WAAA;AAAA,aACvDd,EAAMc;AAAAA,IAAQ;AAAA,EAAA,CAAA;AAGrB;ACfgB,SAAAC,EACdC,GACAC,GACiC;AACjC,SAAOf,EAAW,MAAMc,IAASC,CAAG,CAAC;AACvC;ACWgB,SAAAC,EACdZ,GACAW,GACAE,GACiC;AAE3B,QAAAC,IAAkBL,EAAmBT,GAAYW,CAAG,GAIpD,CAACJ,GAAOQ,CAAQ,IAAIC,EAAaF,KAAmB,EAAE,QAAQ,GAAA,CAAO;AAE3E,SAAAG,EAAa,MAAM;AACjB,UAAMV,IAAQO,KACRI,IAAW,MAAM;AAGrB,MAAAH,EAAS,OAAQI,CAAI;AAAA,IAAA;AAGvB,IAAAN,EAAO,QAAQ,CAASN,MAAAA,EAAM,GAAGa,GAAOF,CAAQ,CAAC,GACjDG,EAAU,MAAM;AACd,MAAAR,EAAO,QAAQ,CAASN,MAAAA,EAAM,IAAIa,GAAOF,CAAQ,CAAC;AAAA,IAAA,CACnD;AAAA,EAAA,CACF,GAEMX;AACT;ACrCO,SAASe,IAAc;AACtB,QAAA,EAAE,YAAAtB,MAAeV,KAEjBiC,IAAM3B,EAAW,MAAM;AAC3B,UAAMc,IAASV;AAEf,QAAIU,MAAW;AACP,YAAA,IAAI,MAAM,uCAAuC;AAElD,WAAAA;AAAA,EAAA,CACR;AAEM,SAAA;AAAA,IACL,YAAYE,EAA0BW,GAAK,cAAc,CAAC,kBAAkB,CAAC;AAAA,IAC7E,iBAAiBX,EAA0BW,GAAK,mBAAmB,CAAC,6BAA6B,CAAC;AAAA,IAClG,cAAcd,EAAmBc,GAAK,cAAc;AAAA,IACpD,QAAQd,EAAmBc,GAAK,QAAQ;AAAA,IACxC,UAAUd,EAAmBc,GAAK,UAAU;AAAA,IAC5C,aAAad,EAAmBc,GAAK,aAAa;AAAA,IAClD,YAAYX,EAA0BW,GAAK,cAAc;AAAA,MACvD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,IACD,OAAOX,EAA0BW,GAAK,SAAS,CAAC,iBAAiB,CAAC;AAAA,IAClE,WAAWd,EAAmBc,GAAK,WAAW;AAAA,IAC9C,WAAWX,EAA0BW,GAAK,aAAa,CAAC,iBAAiB,CAAC;AAAA,IAC1E,aAAaX,EAA0BW,GAAK,eAAe,CAAC,SAAS,CAAC;AAAA,IACtE,UAAUX,EAA0BW,GAAK,YAAY;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,IACD,QAAQX,EAA0BW,GAAK,UAAU,CAAC,0BAA0B,oBAAoB,CAAC;AAAA,EAAA;AAErG;"}
@@ -0,0 +1,2 @@
1
+ (function(n,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("solid-js"),require("@tma.js/sdk"),require("@tma.js/utils")):typeof define=="function"&&define.amd?define(["exports","solid-js","@tma.js/sdk","@tma.js/utils"],t):(n=typeof globalThis<"u"?globalThis:n||self,t((n.tmajs=n.tmajs||{},n.tmajs["sdk-solid"]={}),n["solid-js"],n.tmajs.sdk,n.tmajs.utils))})(this,function(n,t,g,l){"use strict";const c=t.createContext(void 0,{name:"SDKContext"});function m(){const a=t.useContext(c);if(a===void 0)throw new Error("useSDKContext hook was used outside of SDKProvider.");return a}function p(a){const e=t.createMemo(()=>a.initOptions||{}),[r]=t.createResource(e,g.init),u=t.createMemo(()=>r.state==="ready"?r():null),d=t.createMemo(()=>r.loading),h=t.createMemo(()=>r.error===void 0?null:r.error);return t.createComponent(c.Provider,{value:{initResult:u,loading:d,error:h},get children(){return a.children}})}function i(a,e){return t.createMemo(()=>a()[e])}function o(a,e,r){const u=i(a,e),[d,h]=t.createSignal(u(),{equals:!1});return t.createEffect(()=>{const C=u(),f=()=>{h(s=>s)};r.forEach(s=>C.on(s,f)),t.onCleanup(()=>{r.forEach(s=>C.off(s,f))})}),d}function S(){const{initResult:a}=m(),e=t.createMemo(()=>{const r=a();if(r===null)throw new Error("Unable to use SDK as it is not ready.");return r});return{backButton:o(e,"backButton",["isVisibleChanged"]),closingBehavior:o(e,"closingBehavior",["isConfirmationNeededChanged"]),cloudStorage:i(e,"cloudStorage"),haptic:i(e,"haptic"),initData:i(e,"initData"),initDataRaw:i(e,"initDataRaw"),mainButton:o(e,"mainButton",["backgroundColorChanged","isVisibleChanged","isProgressVisibleChanged","isEnabledChanged","textChanged","textColorChanged"]),popup:o(e,"popup",["isOpenedChanged"]),postEvent:i(e,"postEvent"),qrScanner:o(e,"qrScanner",["isOpenedChanged"]),themeParams:o(e,"themeParams",["changed"]),viewport:o(e,"viewport",["heightChanged","isExpandedChanged","stableHeightChanged","widthChanged"]),webApp:o(e,"webApp",["backgroundColorChanged","headerColorChanged"])}}Object.defineProperty(n,"classNames",{enumerable:!0,get:()=>l.classNames}),Object.defineProperty(n,"mergeClassNames",{enumerable:!0,get:()=>l.mergeClassNames}),n.SDKContext=c,n.SDKProvider=p,n.useSDK=S,n.useSDKContext=m,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
2
+ //# sourceMappingURL=index.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../src/context.ts","../src/hooks.ts","../src/SDKProvider.tsx","../src/useInitResultValue.ts","../src/useDynamicInitResultValue.ts","../src/useSDK.ts"],"sourcesContent":["import { createContext } from 'solid-js';\n\nimport type { SDKContextType } from './types.js';\n\nexport const SDKContext = createContext<SDKContextType>(undefined, { name: 'SDKContext' });\n","import { useContext } from 'solid-js';\n\nimport { SDKContext } from './context.js';\nimport type { SDKContextType } from './types.js';\n\n/**\n * Uses SDKContext context.\n */\nexport function useSDKContext(): SDKContextType {\n const context = useContext(SDKContext);\n\n if (context === undefined) {\n throw new Error('useSDKContext hook was used outside of SDKProvider.');\n }\n return context;\n}\n","import { createMemo, createResource, type ParentProps } from 'solid-js';\nimport { init } from '@tma.js/sdk';\n\nimport { SDKContext } from './context.js';\nimport type { SDKInitOptions } from './types.js';\n\nexport type SDKProviderProps = ParentProps<{ initOptions?: SDKInitOptions }>;\n\nexport function SDKProvider(props: SDKProviderProps) {\n const initOptions = createMemo(() => props.initOptions || {});\n const [data] = createResource(initOptions, init);\n\n const initResult = createMemo(() => {\n return data.state === 'ready' ? data() : null;\n });\n const loading = createMemo(() => data.loading);\n const error = createMemo(() => data.error === undefined ? null : data.error);\n\n return (\n <SDKContext.Provider value={{ initResult, loading, error }}>\n {props.children}\n </SDKContext.Provider>\n );\n}\n","import { createMemo, type Accessor } from 'solid-js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\n\n/**\n * Extracts value from the SDK init result by key.\n * @param result - init result accessor.\n * @param key - key to extract.\n */\nexport function useInitResultValue<K extends SDKInitResultKey>(\n result: Accessor<SDKInitResult>,\n key: K\n): Accessor<SDKInitResultValue<K>> {\n return createMemo(() => result()[key]);\n}","import { createEffect, createSignal, onCleanup, type Accessor } from 'solid-js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.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\ntype DynamicComponentKey = {\n [K in SDKInitResultKey]: SDKInitResultValue<K> extends Trackable ? K : never;\n}[SDKInitResultKey];\n\n/**\n * Extracts value from the SDK init result by specified key and listens to its all specified\n * events, making the returned value to update.\n * @param initResult - SDK init result.\n * @param key - SDK init result key.\n * @param events - tracked events list.\n */\nexport function useDynamicInitResultValue<K extends DynamicComponentKey>(\n initResult: Accessor<SDKInitResult>,\n key: K,\n events: EventName<SDKInitResultValue<K>>[],\n): Accessor<SDKInitResultValue<K>> {\n // Get original value from init result.\n const initResultValue = useInitResultValue(initResult, key);\n\n // Here we store value, which should always update it in case, some of its props\n // were changed/\n const [value, setValue] = createSignal(initResultValue(), { equals: false });\n\n createEffect(() => {\n const value = initResultValue();\n const listener = () => {\n // We use prev => prev on purpose. This will make Solid sure, something inside\n // dynamic value changed.\n setValue(prev => prev);\n };\n\n events.forEach(event => value.on(event, listener));\n onCleanup(() => {\n events.forEach(event => value.off(event, listener));\n });\n });\n\n return value;\n}","import { createMemo, type Accessor } from 'solid-js';\n\nimport { useSDKContext } from './hooks.js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport { useDynamicInitResultValue } from './useDynamicInitResultValue.js';\nimport type { SDKInitResultKey, SDKInitResultValue } from './types.js';\n\nexport type SDK = {\n [K in SDKInitResultKey]: Accessor<SDKInitResultValue<K>>\n};\n\n/**\n * Returns ready to use SDK components.\n */\nexport function useSDK(): SDK {\n const { initResult } = useSDKContext();\n\n const sdk = createMemo(() => {\n const result = initResult();\n\n if (result === null) {\n throw new Error('Unable to use SDK as it is not ready.');\n }\n return result;\n });\n\n return {\n backButton: useDynamicInitResultValue(sdk, 'backButton', ['isVisibleChanged']),\n closingBehavior: useDynamicInitResultValue(sdk, 'closingBehavior', ['isConfirmationNeededChanged']),\n cloudStorage: useInitResultValue(sdk, 'cloudStorage'),\n haptic: useInitResultValue(sdk, 'haptic'),\n initData: useInitResultValue(sdk, 'initData'),\n initDataRaw: useInitResultValue(sdk, 'initDataRaw'),\n mainButton: useDynamicInitResultValue(sdk, 'mainButton', [\n 'backgroundColorChanged',\n 'isVisibleChanged',\n 'isProgressVisibleChanged',\n 'isEnabledChanged',\n 'textChanged',\n 'textColorChanged',\n ]),\n popup: useDynamicInitResultValue(sdk, 'popup', ['isOpenedChanged']),\n postEvent: useInitResultValue(sdk, 'postEvent'),\n qrScanner: useDynamicInitResultValue(sdk, 'qrScanner', ['isOpenedChanged']),\n themeParams: useDynamicInitResultValue(sdk, 'themeParams', ['changed']),\n viewport: useDynamicInitResultValue(sdk, 'viewport', [\n 'heightChanged',\n 'isExpandedChanged',\n 'stableHeightChanged',\n 'widthChanged',\n ]),\n webApp: useDynamicInitResultValue(sdk, 'webApp', ['backgroundColorChanged', 'headerColorChanged']),\n };\n}"],"names":["SDKContext","createContext","useSDKContext","context","useContext","SDKProvider","props","initOptions","createMemo","data","createResource","init","initResult","state","loading","error","undefined","_$createComponent","Provider","value","children","useInitResultValue","result","key","useDynamicInitResultValue","events","initResultValue","setValue","createSignal","createEffect","listener","prev","event","onCleanup","useSDK","sdk"],"mappings":"2ZAIa,MAAAA,EAAaC,EAAAA,cAA8B,OAAW,CAAE,KAAM,YAAc,CAAA,ECIlF,SAASC,GAAgC,CACxC,MAAAC,EAAUC,aAAWJ,CAAU,EAErC,GAAIG,IAAY,OACR,MAAA,IAAI,MAAM,qDAAqD,EAEhE,OAAAA,CACT,CCPO,SAASE,EAAYC,EAAyB,CACnD,MAAMC,EAAcC,EAAAA,WAAW,IAAMF,EAAMC,aAAe,CAAE,CAAA,EACtD,CAACE,CAAI,EAAIC,EAAc,eAACH,EAAaI,EAAI,IAAA,EAEzCC,EAAaJ,EAAAA,WAAW,IACrBC,EAAKI,QAAU,QAAUJ,EAAI,EAAK,IAC1C,EACKK,EAAUN,EAAU,WAAC,IAAMC,EAAKK,OAAO,EACvCC,EAAQP,aAAW,IAAMC,EAAKM,QAAUC,OAAY,KAAOP,EAAKM,KAAK,EAE3E,OAAAE,EAAA,gBACGjB,EAAWkB,SAAQ,CAACC,MAAO,CAAEP,WAAAA,EAAYE,QAAAA,EAASC,MAAAA,CAAO,EAAA,IAAAK,UAAA,CAAA,OACvDd,EAAMc,QAAQ,CAAA,CAAA,CAGrB,CCfgB,SAAAC,EACdC,EACAC,EACiC,CACjC,OAAOf,EAAW,WAAA,IAAMc,IAASC,CAAG,CAAC,CACvC,CCWgB,SAAAC,EACdZ,EACAW,EACAE,EACiC,CAE3B,MAAAC,EAAkBL,EAAmBT,EAAYW,CAAG,EAIpD,CAACJ,EAAOQ,CAAQ,EAAIC,EAAA,aAAaF,IAAmB,CAAE,OAAQ,EAAA,CAAO,EAE3EG,OAAAA,EAAAA,aAAa,IAAM,CACjB,MAAMV,EAAQO,IACRI,EAAW,IAAM,CAGrBH,KAAiBI,CAAI,CAAA,EAGvBN,EAAO,QAAiBN,GAAAA,EAAM,GAAGa,EAAOF,CAAQ,CAAC,EACjDG,EAAAA,UAAU,IAAM,CACdR,EAAO,QAAiBN,GAAAA,EAAM,IAAIa,EAAOF,CAAQ,CAAC,CAAA,CACnD,CAAA,CACF,EAEMX,CACT,CCrCO,SAASe,GAAc,CACtB,KAAA,CAAE,WAAAtB,GAAeV,IAEjBiC,EAAM3B,EAAAA,WAAW,IAAM,CAC3B,MAAMc,EAASV,IAEf,GAAIU,IAAW,KACP,MAAA,IAAI,MAAM,uCAAuC,EAElD,OAAAA,CAAA,CACR,EAEM,MAAA,CACL,WAAYE,EAA0BW,EAAK,aAAc,CAAC,kBAAkB,CAAC,EAC7E,gBAAiBX,EAA0BW,EAAK,kBAAmB,CAAC,6BAA6B,CAAC,EAClG,aAAcd,EAAmBc,EAAK,cAAc,EACpD,OAAQd,EAAmBc,EAAK,QAAQ,EACxC,SAAUd,EAAmBc,EAAK,UAAU,EAC5C,YAAad,EAAmBc,EAAK,aAAa,EAClD,WAAYX,EAA0BW,EAAK,aAAc,CACvD,yBACA,mBACA,2BACA,mBACA,cACA,kBAAA,CACD,EACD,MAAOX,EAA0BW,EAAK,QAAS,CAAC,iBAAiB,CAAC,EAClE,UAAWd,EAAmBc,EAAK,WAAW,EAC9C,UAAWX,EAA0BW,EAAK,YAAa,CAAC,iBAAiB,CAAC,EAC1E,YAAaX,EAA0BW,EAAK,cAAe,CAAC,SAAS,CAAC,EACtE,SAAUX,EAA0BW,EAAK,WAAY,CACnD,gBACA,oBACA,sBACA,cAAA,CACD,EACD,OAAQX,EAA0BW,EAAK,SAAU,CAAC,yBAA0B,oBAAoB,CAAC,CAAA,CAErG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tma.js/sdk-solid",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Solid JS bindings for Web Apps client SDK.",
5
5
  "author": "Vladislav Kibenko <wolfram.deus@gmail.com>",
6
6
  "homepage": "https://github.com/Telegram-Mini-Apps/tma.js#readme",
@@ -25,21 +25,21 @@
25
25
  "dist",
26
26
  "src"
27
27
  ],
28
- "main": "./dist/index.umd.cjs",
29
- "browser": "./dist/index.umd.cjs",
30
- "module": "./dist/index.js",
28
+ "main": "./dist/index.cjs",
29
+ "browser": "./dist/index.umd.js",
30
+ "module": "./dist/index.mjs",
31
31
  "types": "./dist/dts/index.d.ts",
32
32
  "exports": {
33
33
  ".": {
34
34
  "types": "./dist/dts/index.d.ts",
35
- "import": "./dist/index.js",
36
- "require": "./dist/index.umd.cjs",
37
- "default": "./dist/index.umd.cjs"
35
+ "import": "./dist/index.mjs",
36
+ "require": "./dist/index.cjs",
37
+ "default": "./dist/index.cjs"
38
38
  }
39
39
  },
40
40
  "dependencies": {
41
- "@tma.js/utils": "0.5.3",
42
- "@tma.js/sdk": "0.12.1"
41
+ "@tma.js/utils": "0.5.4",
42
+ "@tma.js/sdk": "0.12.3"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "solid-js": "^1.0.0"
@@ -47,7 +47,7 @@
47
47
  "devDependencies": {
48
48
  "eslint-config-custom": "0.1.0",
49
49
  "tsconfig": "0.0.2",
50
- "build-utils": "0.0.0"
50
+ "build-utils": "0.0.1"
51
51
  },
52
52
  "publishConfig": {
53
53
  "access": "public"
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/context.ts","../src/hooks.ts","../src/SDKProvider.tsx","../src/useInitResultValue.ts","../src/useDynamicInitResultValue.ts","../src/useSDK.ts"],"sourcesContent":["import { createContext } from 'solid-js';\n\nimport type { SDKContextType } from './types.js';\n\nexport const SDKContext = createContext<SDKContextType>(undefined, { name: 'SDKContext' });\n","import { useContext } from 'solid-js';\n\nimport { SDKContext } from './context.js';\nimport type { SDKContextType } from './types.js';\n\n/**\n * Uses SDKContext context.\n */\nexport function useSDKContext(): SDKContextType {\n const context = useContext(SDKContext);\n\n if (context === undefined) {\n throw new Error('useSDKContext hook was used outside of SDKProvider.');\n }\n return context;\n}\n","import { createMemo, createResource, type ParentProps } from 'solid-js';\nimport { init } from '@tma.js/sdk';\n\nimport { SDKContext } from './context.js';\nimport type { SDKInitOptions } from './types.js';\n\nexport type SDKProviderProps = ParentProps<{ initOptions?: SDKInitOptions }>;\n\nexport function SDKProvider(props: SDKProviderProps) {\n const initOptions = createMemo(() => props.initOptions || {});\n const [data] = createResource(initOptions, init);\n\n const initResult = createMemo(() => {\n return data.state === 'ready' ? data() : null;\n });\n const loading = createMemo(() => data.loading);\n const error = createMemo(() => data.error === undefined ? null : data.error);\n\n return (\n <SDKContext.Provider value={{ initResult, loading, error }}>\n {props.children}\n </SDKContext.Provider>\n );\n}\n","import { createMemo, type Accessor } from 'solid-js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\n\n/**\n * Extracts value from the SDK init result by key.\n * @param result - init result accessor.\n * @param key - key to extract.\n */\nexport function useInitResultValue<K extends SDKInitResultKey>(\n result: Accessor<SDKInitResult>,\n key: K\n): Accessor<SDKInitResultValue<K>> {\n return createMemo(() => result()[key]);\n}","import { createEffect, createSignal, onCleanup, type Accessor } from 'solid-js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.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\ntype DynamicComponentKey = {\n [K in SDKInitResultKey]: SDKInitResultValue<K> extends Trackable ? K : never;\n}[SDKInitResultKey];\n\n/**\n * Extracts value from the SDK init result by specified key and listens to its all specified\n * events, making the returned value to update.\n * @param initResult - SDK init result.\n * @param key - SDK init result key.\n * @param events - tracked events list.\n */\nexport function useDynamicInitResultValue<K extends DynamicComponentKey>(\n initResult: Accessor<SDKInitResult>,\n key: K,\n events: EventName<SDKInitResultValue<K>>[],\n): Accessor<SDKInitResultValue<K>> {\n // Get original value from init result.\n const initResultValue = useInitResultValue(initResult, key);\n\n // Here we store value, which should always update it in case, some of its props\n // were changed/\n const [value, setValue] = createSignal(initResultValue(), { equals: false });\n\n createEffect(() => {\n const value = initResultValue();\n const listener = () => {\n // We use prev => prev on purpose. This will make Solid sure, something inside\n // dynamic value changed.\n setValue(prev => prev);\n };\n\n events.forEach(event => value.on(event, listener));\n onCleanup(() => {\n events.forEach(event => value.off(event, listener));\n });\n });\n\n return value;\n}","import { createMemo, type Accessor } from 'solid-js';\n\nimport { useSDKContext } from './hooks.js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport { useDynamicInitResultValue } from './useDynamicInitResultValue.js';\nimport type { SDKInitResultKey, SDKInitResultValue } from './types.js';\n\nexport type SDK = {\n [K in SDKInitResultKey]: Accessor<SDKInitResultValue<K>>\n};\n\n/**\n * Returns ready to use SDK components.\n */\nexport function useSDK(): SDK {\n const { initResult } = useSDKContext();\n\n const sdk = createMemo(() => {\n const result = initResult();\n\n if (result === null) {\n throw new Error('Unable to use SDK as it is not ready.');\n }\n return result;\n });\n\n return {\n backButton: useDynamicInitResultValue(sdk, 'backButton', ['isVisibleChanged']),\n closingBehavior: useDynamicInitResultValue(sdk, 'closingBehavior', ['isConfirmationNeededChanged']),\n cloudStorage: useInitResultValue(sdk, 'cloudStorage'),\n haptic: useInitResultValue(sdk, 'haptic'),\n initData: useInitResultValue(sdk, 'initData'),\n initDataRaw: useInitResultValue(sdk, 'initDataRaw'),\n mainButton: useDynamicInitResultValue(sdk, 'mainButton', [\n 'backgroundColorChanged',\n 'isVisibleChanged',\n 'isProgressVisibleChanged',\n 'isEnabledChanged',\n 'textChanged',\n 'textColorChanged',\n ]),\n popup: useDynamicInitResultValue(sdk, 'popup', ['isOpenedChanged']),\n postEvent: useInitResultValue(sdk, 'postEvent'),\n qrScanner: useDynamicInitResultValue(sdk, 'qrScanner', ['isOpenedChanged']),\n themeParams: useDynamicInitResultValue(sdk, 'themeParams', ['changed']),\n viewport: useDynamicInitResultValue(sdk, 'viewport', [\n 'heightChanged',\n 'isExpandedChanged',\n 'stableHeightChanged',\n 'widthChanged',\n ]),\n webApp: useDynamicInitResultValue(sdk, 'webApp', ['backgroundColorChanged', 'headerColorChanged']),\n };\n}"],"names":["SDKContext","createContext","useSDKContext","context","useContext","SDKProvider","props","initOptions","createMemo","data","createResource","init","initResult","state","loading","error","undefined","_$createComponent","Provider","value","children","useInitResultValue","result","key","useDynamicInitResultValue","events","initResultValue","setValue","createSignal","createEffect","listener","prev","event","onCleanup","useSDK","sdk"],"mappings":";;;AAIO,MAAMA,IAAaC,EAA8B,QAAW,EAAE,MAAM,aAAc,CAAA;ACIlF,SAASC,IAAgC;AACxC,QAAAC,IAAUC,EAAWJ,CAAU;AAErC,MAAIG,MAAY;AACR,UAAA,IAAI,MAAM,qDAAqD;AAEhE,SAAAA;AACT;ACPO,SAASE,EAAYC,GAAyB;AACnD,QAAMC,IAAcC,EAAW,MAAMF,EAAMC,eAAe,CAAE,CAAA,GACtD,CAACE,CAAI,IAAIC,EAAeH,GAAaI,CAAI,GAEzCC,IAAaJ,EAAW,MACrBC,EAAKI,UAAU,UAAUJ,EAAI,IAAK,IAC1C,GACKK,IAAUN,EAAW,MAAMC,EAAKK,OAAO,GACvCC,IAAQP,EAAW,MAAMC,EAAKM,UAAUC,SAAY,OAAOP,EAAKM,KAAK;AAE3E,SAAAE,EACGjB,EAAWkB,UAAQ;AAAA,IAACC,OAAO;AAAA,MAAEP,YAAAA;AAAAA,MAAYE,SAAAA;AAAAA,MAASC,OAAAA;AAAAA,IAAO;AAAA,IAAA,IAAAK,WAAA;AAAA,aACvDd,EAAMc;AAAAA,IAAQ;AAAA,EAAA,CAAA;AAGrB;ACfgB,SAAAC,EACdC,GACAC,GACiC;AACjC,SAAOf,EAAW,MAAMc,IAASC,CAAG,CAAC;AACvC;ACWgB,SAAAC,EACdZ,GACAW,GACAE,GACiC;AAE3B,QAAAC,IAAkBL,EAAmBT,GAAYW,CAAG,GAIpD,CAACJ,GAAOQ,CAAQ,IAAIC,EAAaF,KAAmB,EAAE,QAAQ,GAAA,CAAO;AAE3E,SAAAG,EAAa,MAAM;AACjB,UAAMV,IAAQO,KACRI,IAAW,MAAM;AAGrB,MAAAH,EAAS,OAAQI,CAAI;AAAA,IAAA;AAGvB,IAAAN,EAAO,QAAQ,CAASN,MAAAA,EAAM,GAAGa,GAAOF,CAAQ,CAAC,GACjDG,EAAU,MAAM;AACd,MAAAR,EAAO,QAAQ,CAASN,MAAAA,EAAM,IAAIa,GAAOF,CAAQ,CAAC;AAAA,IAAA,CACnD;AAAA,EAAA,CACF,GAEMX;AACT;ACrCO,SAASe,IAAc;AACtB,QAAA,EAAE,YAAAtB,MAAeV,KAEjBiC,IAAM3B,EAAW,MAAM;AAC3B,UAAMc,IAASV;AAEf,QAAIU,MAAW;AACP,YAAA,IAAI,MAAM,uCAAuC;AAElD,WAAAA;AAAA,EAAA,CACR;AAEM,SAAA;AAAA,IACL,YAAYE,EAA0BW,GAAK,cAAc,CAAC,kBAAkB,CAAC;AAAA,IAC7E,iBAAiBX,EAA0BW,GAAK,mBAAmB,CAAC,6BAA6B,CAAC;AAAA,IAClG,cAAcd,EAAmBc,GAAK,cAAc;AAAA,IACpD,QAAQd,EAAmBc,GAAK,QAAQ;AAAA,IACxC,UAAUd,EAAmBc,GAAK,UAAU;AAAA,IAC5C,aAAad,EAAmBc,GAAK,aAAa;AAAA,IAClD,YAAYX,EAA0BW,GAAK,cAAc;AAAA,MACvD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,IACD,OAAOX,EAA0BW,GAAK,SAAS,CAAC,iBAAiB,CAAC;AAAA,IAClE,WAAWd,EAAmBc,GAAK,WAAW;AAAA,IAC9C,WAAWX,EAA0BW,GAAK,aAAa,CAAC,iBAAiB,CAAC;AAAA,IAC1E,aAAaX,EAA0BW,GAAK,eAAe,CAAC,SAAS,CAAC;AAAA,IACtE,UAAUX,EAA0BW,GAAK,YAAY;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,IACD,QAAQX,EAA0BW,GAAK,UAAU,CAAC,0BAA0B,oBAAoB,CAAC;AAAA,EAAA;AAErG;"}
@@ -1,2 +0,0 @@
1
- (function(n,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("solid-js"),require("@tma.js/sdk"),require("@tma.js/utils")):typeof define=="function"&&define.amd?define(["exports","solid-js","@tma.js/sdk","@tma.js/utils"],t):(n=typeof globalThis<"u"?globalThis:n||self,t((n["@tma"]=n["@tma"]||{},n["@tma"]["js/sdk-solid"]={}),n["solid-js"],n["@tma"]["js/sdk"],n["@tma"]["js/utils"]))})(this,function(n,t,g,l){"use strict";const c=t.createContext(void 0,{name:"SDKContext"});function m(){const a=t.useContext(c);if(a===void 0)throw new Error("useSDKContext hook was used outside of SDKProvider.");return a}function p(a){const e=t.createMemo(()=>a.initOptions||{}),[r]=t.createResource(e,g.init),u=t.createMemo(()=>r.state==="ready"?r():null),d=t.createMemo(()=>r.loading),h=t.createMemo(()=>r.error===void 0?null:r.error);return t.createComponent(c.Provider,{value:{initResult:u,loading:d,error:h},get children(){return a.children}})}function i(a,e){return t.createMemo(()=>a()[e])}function o(a,e,r){const u=i(a,e),[d,h]=t.createSignal(u(),{equals:!1});return t.createEffect(()=>{const C=u(),f=()=>{h(s=>s)};r.forEach(s=>C.on(s,f)),t.onCleanup(()=>{r.forEach(s=>C.off(s,f))})}),d}function S(){const{initResult:a}=m(),e=t.createMemo(()=>{const r=a();if(r===null)throw new Error("Unable to use SDK as it is not ready.");return r});return{backButton:o(e,"backButton",["isVisibleChanged"]),closingBehavior:o(e,"closingBehavior",["isConfirmationNeededChanged"]),cloudStorage:i(e,"cloudStorage"),haptic:i(e,"haptic"),initData:i(e,"initData"),initDataRaw:i(e,"initDataRaw"),mainButton:o(e,"mainButton",["backgroundColorChanged","isVisibleChanged","isProgressVisibleChanged","isEnabledChanged","textChanged","textColorChanged"]),popup:o(e,"popup",["isOpenedChanged"]),postEvent:i(e,"postEvent"),qrScanner:o(e,"qrScanner",["isOpenedChanged"]),themeParams:o(e,"themeParams",["changed"]),viewport:o(e,"viewport",["heightChanged","isExpandedChanged","stableHeightChanged","widthChanged"]),webApp:o(e,"webApp",["backgroundColorChanged","headerColorChanged"])}}Object.defineProperty(n,"classNames",{enumerable:!0,get:()=>l.classNames}),Object.defineProperty(n,"mergeClassNames",{enumerable:!0,get:()=>l.mergeClassNames}),n.SDKContext=c,n.SDKProvider=p,n.useSDK=S,n.useSDKContext=m,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
2
- //# sourceMappingURL=index.umd.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.umd.cjs","sources":["../src/context.ts","../src/hooks.ts","../src/SDKProvider.tsx","../src/useInitResultValue.ts","../src/useDynamicInitResultValue.ts","../src/useSDK.ts"],"sourcesContent":["import { createContext } from 'solid-js';\n\nimport type { SDKContextType } from './types.js';\n\nexport const SDKContext = createContext<SDKContextType>(undefined, { name: 'SDKContext' });\n","import { useContext } from 'solid-js';\n\nimport { SDKContext } from './context.js';\nimport type { SDKContextType } from './types.js';\n\n/**\n * Uses SDKContext context.\n */\nexport function useSDKContext(): SDKContextType {\n const context = useContext(SDKContext);\n\n if (context === undefined) {\n throw new Error('useSDKContext hook was used outside of SDKProvider.');\n }\n return context;\n}\n","import { createMemo, createResource, type ParentProps } from 'solid-js';\nimport { init } from '@tma.js/sdk';\n\nimport { SDKContext } from './context.js';\nimport type { SDKInitOptions } from './types.js';\n\nexport type SDKProviderProps = ParentProps<{ initOptions?: SDKInitOptions }>;\n\nexport function SDKProvider(props: SDKProviderProps) {\n const initOptions = createMemo(() => props.initOptions || {});\n const [data] = createResource(initOptions, init);\n\n const initResult = createMemo(() => {\n return data.state === 'ready' ? data() : null;\n });\n const loading = createMemo(() => data.loading);\n const error = createMemo(() => data.error === undefined ? null : data.error);\n\n return (\n <SDKContext.Provider value={{ initResult, loading, error }}>\n {props.children}\n </SDKContext.Provider>\n );\n}\n","import { createMemo, type Accessor } from 'solid-js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\n\n/**\n * Extracts value from the SDK init result by key.\n * @param result - init result accessor.\n * @param key - key to extract.\n */\nexport function useInitResultValue<K extends SDKInitResultKey>(\n result: Accessor<SDKInitResult>,\n key: K\n): Accessor<SDKInitResultValue<K>> {\n return createMemo(() => result()[key]);\n}","import { createEffect, createSignal, onCleanup, type Accessor } from 'solid-js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport type { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.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\ntype DynamicComponentKey = {\n [K in SDKInitResultKey]: SDKInitResultValue<K> extends Trackable ? K : never;\n}[SDKInitResultKey];\n\n/**\n * Extracts value from the SDK init result by specified key and listens to its all specified\n * events, making the returned value to update.\n * @param initResult - SDK init result.\n * @param key - SDK init result key.\n * @param events - tracked events list.\n */\nexport function useDynamicInitResultValue<K extends DynamicComponentKey>(\n initResult: Accessor<SDKInitResult>,\n key: K,\n events: EventName<SDKInitResultValue<K>>[],\n): Accessor<SDKInitResultValue<K>> {\n // Get original value from init result.\n const initResultValue = useInitResultValue(initResult, key);\n\n // Here we store value, which should always update it in case, some of its props\n // were changed/\n const [value, setValue] = createSignal(initResultValue(), { equals: false });\n\n createEffect(() => {\n const value = initResultValue();\n const listener = () => {\n // We use prev => prev on purpose. This will make Solid sure, something inside\n // dynamic value changed.\n setValue(prev => prev);\n };\n\n events.forEach(event => value.on(event, listener));\n onCleanup(() => {\n events.forEach(event => value.off(event, listener));\n });\n });\n\n return value;\n}","import { createMemo, type Accessor } from 'solid-js';\n\nimport { useSDKContext } from './hooks.js';\nimport { useInitResultValue } from './useInitResultValue.js';\nimport { useDynamicInitResultValue } from './useDynamicInitResultValue.js';\nimport type { SDKInitResultKey, SDKInitResultValue } from './types.js';\n\nexport type SDK = {\n [K in SDKInitResultKey]: Accessor<SDKInitResultValue<K>>\n};\n\n/**\n * Returns ready to use SDK components.\n */\nexport function useSDK(): SDK {\n const { initResult } = useSDKContext();\n\n const sdk = createMemo(() => {\n const result = initResult();\n\n if (result === null) {\n throw new Error('Unable to use SDK as it is not ready.');\n }\n return result;\n });\n\n return {\n backButton: useDynamicInitResultValue(sdk, 'backButton', ['isVisibleChanged']),\n closingBehavior: useDynamicInitResultValue(sdk, 'closingBehavior', ['isConfirmationNeededChanged']),\n cloudStorage: useInitResultValue(sdk, 'cloudStorage'),\n haptic: useInitResultValue(sdk, 'haptic'),\n initData: useInitResultValue(sdk, 'initData'),\n initDataRaw: useInitResultValue(sdk, 'initDataRaw'),\n mainButton: useDynamicInitResultValue(sdk, 'mainButton', [\n 'backgroundColorChanged',\n 'isVisibleChanged',\n 'isProgressVisibleChanged',\n 'isEnabledChanged',\n 'textChanged',\n 'textColorChanged',\n ]),\n popup: useDynamicInitResultValue(sdk, 'popup', ['isOpenedChanged']),\n postEvent: useInitResultValue(sdk, 'postEvent'),\n qrScanner: useDynamicInitResultValue(sdk, 'qrScanner', ['isOpenedChanged']),\n themeParams: useDynamicInitResultValue(sdk, 'themeParams', ['changed']),\n viewport: useDynamicInitResultValue(sdk, 'viewport', [\n 'heightChanged',\n 'isExpandedChanged',\n 'stableHeightChanged',\n 'widthChanged',\n ]),\n webApp: useDynamicInitResultValue(sdk, 'webApp', ['backgroundColorChanged', 'headerColorChanged']),\n };\n}"],"names":["SDKContext","createContext","useSDKContext","context","useContext","SDKProvider","props","initOptions","createMemo","data","createResource","init","initResult","state","loading","error","undefined","_$createComponent","Provider","value","children","useInitResultValue","result","key","useDynamicInitResultValue","events","initResultValue","setValue","createSignal","createEffect","listener","prev","event","onCleanup","useSDK","sdk"],"mappings":"obAIa,MAAAA,EAAaC,EAAAA,cAA8B,OAAW,CAAE,KAAM,YAAc,CAAA,ECIlF,SAASC,GAAgC,CACxC,MAAAC,EAAUC,aAAWJ,CAAU,EAErC,GAAIG,IAAY,OACR,MAAA,IAAI,MAAM,qDAAqD,EAEhE,OAAAA,CACT,CCPO,SAASE,EAAYC,EAAyB,CACnD,MAAMC,EAAcC,EAAAA,WAAW,IAAMF,EAAMC,aAAe,CAAE,CAAA,EACtD,CAACE,CAAI,EAAIC,EAAc,eAACH,EAAaI,EAAI,IAAA,EAEzCC,EAAaJ,EAAAA,WAAW,IACrBC,EAAKI,QAAU,QAAUJ,EAAI,EAAK,IAC1C,EACKK,EAAUN,EAAU,WAAC,IAAMC,EAAKK,OAAO,EACvCC,EAAQP,aAAW,IAAMC,EAAKM,QAAUC,OAAY,KAAOP,EAAKM,KAAK,EAE3E,OAAAE,EAAA,gBACGjB,EAAWkB,SAAQ,CAACC,MAAO,CAAEP,WAAAA,EAAYE,QAAAA,EAASC,MAAAA,CAAO,EAAA,IAAAK,UAAA,CAAA,OACvDd,EAAMc,QAAQ,CAAA,CAAA,CAGrB,CCfgB,SAAAC,EACdC,EACAC,EACiC,CACjC,OAAOf,EAAW,WAAA,IAAMc,IAASC,CAAG,CAAC,CACvC,CCWgB,SAAAC,EACdZ,EACAW,EACAE,EACiC,CAE3B,MAAAC,EAAkBL,EAAmBT,EAAYW,CAAG,EAIpD,CAACJ,EAAOQ,CAAQ,EAAIC,EAAA,aAAaF,IAAmB,CAAE,OAAQ,EAAA,CAAO,EAE3EG,OAAAA,EAAAA,aAAa,IAAM,CACjB,MAAMV,EAAQO,IACRI,EAAW,IAAM,CAGrBH,KAAiBI,CAAI,CAAA,EAGvBN,EAAO,QAAiBN,GAAAA,EAAM,GAAGa,EAAOF,CAAQ,CAAC,EACjDG,EAAAA,UAAU,IAAM,CACdR,EAAO,QAAiBN,GAAAA,EAAM,IAAIa,EAAOF,CAAQ,CAAC,CAAA,CACnD,CAAA,CACF,EAEMX,CACT,CCrCO,SAASe,GAAc,CACtB,KAAA,CAAE,WAAAtB,GAAeV,IAEjBiC,EAAM3B,EAAAA,WAAW,IAAM,CAC3B,MAAMc,EAASV,IAEf,GAAIU,IAAW,KACP,MAAA,IAAI,MAAM,uCAAuC,EAElD,OAAAA,CAAA,CACR,EAEM,MAAA,CACL,WAAYE,EAA0BW,EAAK,aAAc,CAAC,kBAAkB,CAAC,EAC7E,gBAAiBX,EAA0BW,EAAK,kBAAmB,CAAC,6BAA6B,CAAC,EAClG,aAAcd,EAAmBc,EAAK,cAAc,EACpD,OAAQd,EAAmBc,EAAK,QAAQ,EACxC,SAAUd,EAAmBc,EAAK,UAAU,EAC5C,YAAad,EAAmBc,EAAK,aAAa,EAClD,WAAYX,EAA0BW,EAAK,aAAc,CACvD,yBACA,mBACA,2BACA,mBACA,cACA,kBAAA,CACD,EACD,MAAOX,EAA0BW,EAAK,QAAS,CAAC,iBAAiB,CAAC,EAClE,UAAWd,EAAmBc,EAAK,WAAW,EAC9C,UAAWX,EAA0BW,EAAK,YAAa,CAAC,iBAAiB,CAAC,EAC1E,YAAaX,EAA0BW,EAAK,cAAe,CAAC,SAAS,CAAC,EACtE,SAAUX,EAA0BW,EAAK,WAAY,CACnD,gBACA,oBACA,sBACA,cAAA,CACD,EACD,OAAQX,EAA0BW,EAAK,SAAU,CAAC,yBAA0B,oBAAoB,CAAC,CAAA,CAErG"}