@tma.js/sdk-solid 0.1.4 → 0.1.6

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.
@@ -3,4 +3,4 @@ import type { SDKInitOptions } from './types.js';
3
3
  export type SDKProviderProps = ParentProps<{
4
4
  initOptions?: SDKInitOptions;
5
5
  }>;
6
- export declare function SDKProvider(props: SDKProviderProps): import("solid-js").JSX.Element;
6
+ export declare function SDKProvider(props: SDKProviderProps): any;
@@ -0,0 +1 @@
1
+ export declare const SDKContext: any;
package/dist/index.js ADDED
@@ -0,0 +1,81 @@
1
+ import { createContext as g, useContext as C, createMemo as r, createResource as p, createComponent as f, createSignal as m, createEffect as v, onCleanup as D } from "solid-js";
2
+ import { init as S } from "@tma.js/sdk";
3
+ import { classNames as k, mergeClassNames as B } from "@tma.js/utils";
4
+ const h = g(void 0, { name: "SDKContext" });
5
+ function b() {
6
+ const t = C(h);
7
+ if (t === void 0)
8
+ throw new Error("useSDKContext hook was used outside of SDKProvider.");
9
+ return t;
10
+ }
11
+ function E(t) {
12
+ const e = r(() => t.initOptions || {}), [n] = p(e, S), s = r(() => n.state === "ready" ? n() : null), u = r(() => n.loading), c = r(() => n.error === void 0 ? null : n.error);
13
+ return f(h.Provider, {
14
+ value: {
15
+ initResult: s,
16
+ loading: u,
17
+ error: c
18
+ },
19
+ get children() {
20
+ return t.children;
21
+ }
22
+ });
23
+ }
24
+ function a(t, e) {
25
+ return r(() => t()[e]);
26
+ }
27
+ function o(t, e, n) {
28
+ const s = a(t, e), [u, c] = m(s(), { equals: !1 });
29
+ return v(() => {
30
+ const d = s(), l = () => {
31
+ c((i) => i);
32
+ };
33
+ n.forEach((i) => d.on(i, l)), D(() => {
34
+ n.forEach((i) => d.off(i, l));
35
+ });
36
+ }), u;
37
+ }
38
+ function K() {
39
+ const { initResult: t } = b(), e = r(() => {
40
+ const n = t();
41
+ if (n === null)
42
+ throw new Error("Unable to use SDK as it is not ready.");
43
+ return n;
44
+ });
45
+ return {
46
+ backButton: o(e, "backButton", ["isVisibleChanged"]),
47
+ closingBehavior: o(e, "closingBehavior", ["isConfirmationNeededChanged"]),
48
+ cloudStorage: a(e, "cloudStorage"),
49
+ haptic: a(e, "haptic"),
50
+ initData: a(e, "initData"),
51
+ initDataRaw: a(e, "initDataRaw"),
52
+ mainButton: o(e, "mainButton", [
53
+ "backgroundColorChanged",
54
+ "isVisibleChanged",
55
+ "isProgressVisibleChanged",
56
+ "isEnabledChanged",
57
+ "textChanged",
58
+ "textColorChanged"
59
+ ]),
60
+ popup: o(e, "popup", ["isOpenedChanged"]),
61
+ postEvent: a(e, "postEvent"),
62
+ qrScanner: o(e, "qrScanner", ["isOpenedChanged"]),
63
+ themeParams: o(e, "themeParams", ["changed"]),
64
+ viewport: o(e, "viewport", [
65
+ "heightChanged",
66
+ "isExpandedChanged",
67
+ "stableHeightChanged",
68
+ "widthChanged"
69
+ ]),
70
+ webApp: o(e, "webApp", ["backgroundColorChanged", "headerColorChanged"])
71
+ };
72
+ }
73
+ export {
74
+ h as SDKContext,
75
+ E as SDKProvider,
76
+ k as classNames,
77
+ B as mergeClassNames,
78
+ K as useSDK,
79
+ b as useSDKContext
80
+ };
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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, 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 { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { Accessor, createMemo } from 'solid-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 { Accessor, createEffect, createSignal, onCleanup } from 'solid-js';\nimport { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { useInitResultValue } from './useInitResultValue.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["@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
@@ -0,0 +1 @@
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, 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 { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { Accessor, createMemo } from 'solid-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 { Accessor, createEffect, createSignal, onCleanup } from 'solid-js';\nimport { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { useInitResultValue } from './useInitResultValue.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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tma.js/sdk-solid",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
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,44 +25,35 @@
25
25
  "dist",
26
26
  "src"
27
27
  ],
28
- "source": "src/index.ts",
29
- "main": "dist/cjs/index.js",
30
- "module": "dist/esm/index.js",
31
- "types": "dist/types/index.d.ts",
28
+ "main": "./dist/index.umd.cjs",
29
+ "browser": "./dist/index.umd.cjs",
30
+ "module": "./dist/index.js",
31
+ "types": "./dist/dts/index.d.ts",
32
32
  "exports": {
33
33
  ".": {
34
- "types": "./dist/types/index.d.ts",
35
- "solid": "./dist/source/index.js",
36
- "import": "./dist/esm/index.js",
37
- "require": "./dist/cjs/index.js",
38
- "node": "./dist/cjs/index.js",
39
- "default": "./dist/cjs/index.js"
40
- },
41
- "./*": {
42
- "types": "./dist/types/*.d.ts",
43
- "solid": "./dist/source/*.js",
44
- "import": "./dist/esm/*.js",
45
- "require": "./dist/cjs/*.js",
46
- "node": "./dist/cjs/*.js",
47
- "default": "./dist/cjs/*.js"
34
+ "types": "./dist/dts/index.d.ts",
35
+ "import": "./dist/index.js",
36
+ "require": "./dist/index.umd.cjs",
37
+ "default": "./dist/index.umd.cjs"
48
38
  }
49
39
  },
50
40
  "dependencies": {
51
- "@tma.js/utils": "0.5.2",
52
- "@tma.js/sdk": "0.11.4"
41
+ "@tma.js/utils": "0.5.3",
42
+ "@tma.js/sdk": "0.11.6"
53
43
  },
54
44
  "peerDependencies": {
55
45
  "solid-js": "^1.0.0"
56
46
  },
57
47
  "devDependencies": {
58
48
  "eslint-config-custom": "0.1.0",
59
- "tsconfig": "0.0.2"
49
+ "tsconfig": "0.0.2",
50
+ "build-utils": "0.0.0"
60
51
  },
61
52
  "publishConfig": {
62
53
  "access": "public"
63
54
  },
64
55
  "scripts": {
65
56
  "lint": "eslint -c .eslintrc.cjs src/**/*",
66
- "build": "rimraf dist && rollup --config rollup.config.js"
57
+ "build": "vite build"
67
58
  }
68
59
  }
package/dist/cjs/index.js DELETED
@@ -1,2 +0,0 @@
1
- "use strict";var e=require("solid-js"),t=require("solid-js/web"),n=require("@tma.js/sdk"),r=require("@tma.js/utils");const o=e.createContext(void 0,{name:"SDKContext"});function a(){const t=e.useContext(o);if(void 0===t)throw new Error("useSDKContext hook was used outside of SDKProvider.");return t}function i(t,n){return e.createMemo((()=>t()[n]))}function s(t,n,r){const o=i(t,n),[a,s]=e.createSignal(o(),{equals:!1});return e.createEffect((()=>{const t=o(),n=()=>{s((e=>e))};r.forEach((e=>t.on(e,n))),e.onCleanup((()=>{r.forEach((e=>t.off(e,n)))}))})),a}Object.defineProperty(exports,"classNames",{enumerable:!0,get:function(){return r.classNames}}),Object.defineProperty(exports,"mergeClassNames",{enumerable:!0,get:function(){return r.mergeClassNames}}),exports.SDKContext=o,exports.SDKProvider=function(r){const a=e.createMemo((()=>r.initOptions||{})),[i]=e.createResource(a,n.init),s=e.createMemo((()=>"ready"===i.state?i():null)),u=e.createMemo((()=>i.loading)),c=e.createMemo((()=>void 0===i.error?null:i.error));return t.createComponent(o.Provider,{value:{initResult:s,loading:u,error:c},get children(){return r.children}})},exports.useSDK=function(){const{initResult:t}=a(),n=e.createMemo((()=>{const e=t();if(null===e)throw new Error("Unable to use SDK as it is not ready.");return e}));return{backButton:s(n,"backButton",["isVisibleChanged"]),closingBehavior:s(n,"closingBehavior",["isConfirmationNeededChanged"]),cloudStorage:i(n,"cloudStorage"),haptic:i(n,"haptic"),initData:i(n,"initData"),initDataRaw:i(n,"initDataRaw"),mainButton:s(n,"mainButton",["backgroundColorChanged","isVisibleChanged","isProgressVisibleChanged","isEnabledChanged","textChanged","textColorChanged"]),popup:s(n,"popup",["isOpenedChanged"]),postEvent:i(n,"postEvent"),qrScanner:s(n,"qrScanner",["isOpenedChanged"]),themeParams:s(n,"themeParams",["changed"]),viewport:s(n,"viewport",["heightChanged","isExpandedChanged","stableHeightChanged","widthChanged"]),webApp:s(n,"webApp",["backgroundColorChanged","headerColorChanged"])}},exports.useSDKContext=a;
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/context.ts","../../src/hooks.ts","../../src/useInitResultValue.ts","../../src/useDynamicInitResultValue.ts","../../src/SDKProvider.tsx","../../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 { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { Accessor, createMemo } from 'solid-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 { Accessor, createEffect, createSignal, onCleanup } from 'solid-js';\nimport { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { useInitResultValue } from './useInitResultValue.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, createResource, 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';\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","undefined","name","useSDKContext","context","useContext","Error","useInitResultValue","result","key","createMemo","useDynamicInitResultValue","initResult","events","initResultValue","value","setValue","createSignal","equals","createEffect","listener","prev","forEach","event","on","onCleanup","off","props","initOptions","data","createResource","init","state","loading","error","_$createComponent","createComponent","Provider","children","sdk","backButton","closingBehavior","cloudStorage","haptic","initData","initDataRaw","mainButton","popup","postEvent","qrScanner","themeParams","viewport","webApp"],"mappings":"2HAIaA,EAAaC,EAAaA,mBAAiBC,EAAW,CAAEC,KAAM,eCIpE,SAASC,IACd,MAAMC,EAAUC,aAAWN,GAE3B,QAAgBE,IAAZG,EACF,MAAM,IAAIE,MAAM,uDAElB,OAAOF,CACT,CCPO,SAASG,EACdC,EACAC,GAEA,OAAOC,EAAUA,YAAC,IAAMF,IAASC,IACnC,CCWO,SAASE,EACdC,EACAH,EACAI,GAGA,MAAMC,EAAkBP,EAAmBK,EAAYH,IAIhDM,EAAOC,GAAYC,EAAYA,aAACH,IAAmB,CAAEI,QAAQ,IAgBpE,OAdAC,EAAAA,cAAa,KACX,MAAMJ,EAAQD,IACRM,EAAWA,KAGfJ,GAASK,GAAQA,GAAK,EAGxBR,EAAOS,SAAQC,GAASR,EAAMS,GAAGD,EAAOH,KACxCK,EAAAA,WAAU,KACRZ,EAAOS,SAAQC,GAASR,EAAMW,IAAIH,EAAOH,IAAU,GACnD,IAGGL,CACT,oPC3CO,SAAqBY,GAC1B,MAAMC,EAAclB,EAAAA,YAAW,IAAMiB,EAAMC,aAAe,CAAE,KACrDC,GAAQC,EAAcA,eAACF,EAAaG,EAAIA,MAEzCnB,EAAaF,EAAAA,YAAW,IACN,UAAfmB,EAAKG,MAAoBH,IAAS,OAErCI,EAAUvB,EAAUA,YAAC,IAAMmB,EAAKI,UAChCC,EAAQxB,cAAW,SAAqBT,IAAf4B,EAAKK,MAAsB,KAAOL,EAAKK,QAEtE,OAAAC,EAAAC,gBACGrC,EAAWsC,SAAQ,CAACtB,MAAO,CAAEH,aAAYqB,UAASC,SAAOI,eAAA,OACvDX,EAAMW,QAAQ,GAGrB,iBCTO,WACL,MAAM1B,WAAEA,GAAeT,IAEjBoC,EAAM7B,EAAAA,YAAW,KACrB,MAAMF,EAASI,IAEf,GAAe,OAAXJ,EACF,MAAM,IAAIF,MAAM,yCAElB,OAAOE,CAAM,IAGf,MAAO,CACLgC,WAAY7B,EAA0B4B,EAAK,aAAc,CAAC,qBAC1DE,gBAAiB9B,EAA0B4B,EAAK,kBAAmB,CAAC,gCACpEG,aAAcnC,EAAmBgC,EAAK,gBACtCI,OAAQpC,EAAmBgC,EAAK,UAChCK,SAAUrC,EAAmBgC,EAAK,YAClCM,YAAatC,EAAmBgC,EAAK,eACrCO,WAAYnC,EAA0B4B,EAAK,aAAc,CACvD,yBACA,mBACA,2BACA,mBACA,cACA,qBAEFQ,MAAOpC,EAA0B4B,EAAK,QAAS,CAAC,oBAChDS,UAAWzC,EAAmBgC,EAAK,aACnCU,UAAWtC,EAA0B4B,EAAK,YAAa,CAAC,oBACxDW,YAAavC,EAA0B4B,EAAK,cAAe,CAAC,YAC5DY,SAAUxC,EAA0B4B,EAAK,WAAY,CACnD,gBACA,oBACA,sBACA,iBAEFa,OAAQzC,EAA0B4B,EAAK,SAAU,CAAC,yBAA0B,uBAEhF"}
package/dist/esm/index.js DELETED
@@ -1,2 +0,0 @@
1
- import{createContext as e,useContext as n,createMemo as t,createResource as o,createSignal as r,createEffect as a,onCleanup as i}from"solid-js";import{createComponent as s}from"solid-js/web";import{init as d}from"@tma.js/sdk";export{classNames,mergeClassNames}from"@tma.js/utils";const h=e(void 0,{name:"SDKContext"});function u(){const e=n(h);if(void 0===e)throw new Error("useSDKContext hook was used outside of SDKProvider.");return e}function l(e){const n=t((()=>e.initOptions||{})),[r]=o(n,d),a=t((()=>"ready"===r.state?r():null)),i=t((()=>r.loading)),u=t((()=>void 0===r.error?null:r.error));return s(h.Provider,{value:{initResult:a,loading:i,error:u},get children(){return e.children}})}function c(e,n){return t((()=>e()[n]))}function g(e,n,t){const o=c(e,n),[s,d]=r(o(),{equals:!1});return a((()=>{const e=o(),n=()=>{d((e=>e))};t.forEach((t=>e.on(t,n))),i((()=>{t.forEach((t=>e.off(t,n)))}))})),s}function p(){const{initResult:e}=u(),n=t((()=>{const n=e();if(null===n)throw new Error("Unable to use SDK as it is not ready.");return n}));return{backButton:g(n,"backButton",["isVisibleChanged"]),closingBehavior:g(n,"closingBehavior",["isConfirmationNeededChanged"]),cloudStorage:c(n,"cloudStorage"),haptic:c(n,"haptic"),initData:c(n,"initData"),initDataRaw:c(n,"initDataRaw"),mainButton:g(n,"mainButton",["backgroundColorChanged","isVisibleChanged","isProgressVisibleChanged","isEnabledChanged","textChanged","textColorChanged"]),popup:g(n,"popup",["isOpenedChanged"]),postEvent:c(n,"postEvent"),qrScanner:g(n,"qrScanner",["isOpenedChanged"]),themeParams:g(n,"themeParams",["changed"]),viewport:g(n,"viewport",["heightChanged","isExpandedChanged","stableHeightChanged","widthChanged"]),webApp:g(n,"webApp",["backgroundColorChanged","headerColorChanged"])}}export{h as SDKContext,l as SDKProvider,p as useSDK,u as useSDKContext};
2
- //# sourceMappingURL=index.js.map
@@ -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, 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 { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { Accessor, createMemo } from 'solid-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 { Accessor, createEffect, createSignal, onCleanup } from 'solid-js';\nimport { SDKInitResult, SDKInitResultKey, SDKInitResultValue } from './types.js';\nimport { useInitResultValue } from './useInitResultValue.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","undefined","name","useSDKContext","context","useContext","Error","SDKProvider","props","initOptions","createMemo","data","createResource","init","initResult","state","loading","error","_$createComponent","Provider","value","children","useInitResultValue","result","key","useDynamicInitResultValue","events","initResultValue","setValue","createSignal","equals","createEffect","listener","prev","forEach","event","on","onCleanup","off","useSDK","sdk","backButton","closingBehavior","cloudStorage","haptic","initData","initDataRaw","mainButton","popup","postEvent","qrScanner","themeParams","viewport","webApp"],"mappings":"8RAIaA,EAAaC,OAA8BC,EAAW,CAAEC,KAAM,eCIpE,SAASC,IACd,MAAMC,EAAUC,EAAWN,GAE3B,QAAgBE,IAAZG,EACF,MAAM,IAAIE,MAAM,uDAElB,OAAOF,CACT,CCPO,SAASG,EAAYC,GAC1B,MAAMC,EAAcC,GAAW,IAAMF,EAAMC,aAAe,CAAE,KACrDE,GAAQC,EAAeH,EAAaI,GAErCC,EAAaJ,GAAW,IACN,UAAfC,EAAKI,MAAoBJ,IAAS,OAErCK,EAAUN,GAAW,IAAMC,EAAKK,UAChCC,EAAQP,GAAW,SAAqBT,IAAfU,EAAKM,MAAsB,KAAON,EAAKM,QAEtE,OAAAC,EACGnB,EAAWoB,SAAQ,CAACC,MAAO,CAAEN,aAAYE,UAASC,SAAOI,eAAA,OACvDb,EAAMa,QAAQ,GAGrB,CCfO,SAASC,EACdC,EACAC,GAEA,OAAOd,GAAW,IAAMa,IAASC,IACnC,CCWO,SAASC,EACdX,EACAU,EACAE,GAGA,MAAMC,EAAkBL,EAAmBR,EAAYU,IAIhDJ,EAAOQ,GAAYC,EAAaF,IAAmB,CAAEG,QAAQ,IAgBpE,OAdAC,GAAa,KACX,MAAMX,EAAQO,IACRK,EAAWA,KAGfJ,GAASK,GAAQA,GAAK,EAGxBP,EAAOQ,SAAQC,GAASf,EAAMgB,GAAGD,EAAOH,KACxCK,GAAU,KACRX,EAAOQ,SAAQC,GAASf,EAAMkB,IAAIH,EAAOH,IAAU,GACnD,IAGGZ,CACT,CCrCO,SAASmB,IACd,MAAMzB,WAAEA,GAAeX,IAEjBqC,EAAM9B,GAAW,KACrB,MAAMa,EAAST,IAEf,GAAe,OAAXS,EACF,MAAM,IAAIjB,MAAM,yCAElB,OAAOiB,CAAM,IAGf,MAAO,CACLkB,WAAYhB,EAA0Be,EAAK,aAAc,CAAC,qBAC1DE,gBAAiBjB,EAA0Be,EAAK,kBAAmB,CAAC,gCACpEG,aAAcrB,EAAmBkB,EAAK,gBACtCI,OAAQtB,EAAmBkB,EAAK,UAChCK,SAAUvB,EAAmBkB,EAAK,YAClCM,YAAaxB,EAAmBkB,EAAK,eACrCO,WAAYtB,EAA0Be,EAAK,aAAc,CACvD,yBACA,mBACA,2BACA,mBACA,cACA,qBAEFQ,MAAOvB,EAA0Be,EAAK,QAAS,CAAC,oBAChDS,UAAW3B,EAAmBkB,EAAK,aACnCU,UAAWzB,EAA0Be,EAAK,YAAa,CAAC,oBACxDW,YAAa1B,EAA0Be,EAAK,cAAe,CAAC,YAC5DY,SAAU3B,EAA0Be,EAAK,WAAY,CACnD,gBACA,oBACA,sBACA,iBAEFa,OAAQ5B,EAA0Be,EAAK,SAAU,CAAC,yBAA0B,uBAEhF"}
@@ -1,15 +0,0 @@
1
- import { createMemo, createResource } from 'solid-js';
2
- import { init } from '@tma.js/sdk';
3
- import { SDKContext } from './context.js';
4
- export function SDKProvider(props) {
5
- const initOptions = createMemo(() => props.initOptions || {});
6
- const [data] = createResource(initOptions, init);
7
- const initResult = createMemo(() => {
8
- return data.state === 'ready' ? data() : null;
9
- });
10
- const loading = createMemo(() => data.loading);
11
- const error = createMemo(() => data.error === undefined ? null : data.error);
12
- return (<SDKContext.Provider value={{ initResult, loading, error }}>
13
- {props.children}
14
- </SDKContext.Provider>);
15
- }
@@ -1,2 +0,0 @@
1
- import { createContext } from 'solid-js';
2
- export const SDKContext = createContext(undefined, { name: 'SDKContext' });
@@ -1,12 +0,0 @@
1
- import { useContext } from 'solid-js';
2
- import { SDKContext } from './context.js';
3
- /**
4
- * Uses SDKContext context.
5
- */
6
- export function useSDKContext() {
7
- const context = useContext(SDKContext);
8
- if (context === undefined) {
9
- throw new Error('useSDKContext hook was used outside of SDKProvider.');
10
- }
11
- return context;
12
- }
@@ -1,6 +0,0 @@
1
- export * from './context.js';
2
- export * from './hooks.js';
3
- export * from './SDKProvider.jsx';
4
- export * from './types.js';
5
- export * from './useSDK.js';
6
- export { classNames, mergeClassNames } from '@tma.js/utils';
@@ -1 +0,0 @@
1
- export {};
@@ -1,29 +0,0 @@
1
- import { createEffect, createSignal, onCleanup } from 'solid-js';
2
- import { useInitResultValue } from './useInitResultValue.js';
3
- /**
4
- * Extracts value from the SDK init result by specified key and listens to its all specified
5
- * events, making the returned value to update.
6
- * @param initResult - SDK init result.
7
- * @param key - SDK init result key.
8
- * @param events - tracked events list.
9
- */
10
- export function useDynamicInitResultValue(initResult, key, events) {
11
- // Get original value from init result.
12
- const initResultValue = useInitResultValue(initResult, key);
13
- // Here we store value, which should always update it in case, some of its props
14
- // were changed/
15
- const [value, setValue] = createSignal(initResultValue(), { equals: false });
16
- createEffect(() => {
17
- const value = initResultValue();
18
- const listener = () => {
19
- // We use prev => prev on purpose. This will make Solid sure, something inside
20
- // dynamic value changed.
21
- setValue(prev => prev);
22
- };
23
- events.forEach(event => value.on(event, listener));
24
- onCleanup(() => {
25
- events.forEach(event => value.off(event, listener));
26
- });
27
- });
28
- return value;
29
- }
@@ -1,9 +0,0 @@
1
- import { createMemo } from 'solid-js';
2
- /**
3
- * Extracts value from the SDK init result by key.
4
- * @param result - init result accessor.
5
- * @param key - key to extract.
6
- */
7
- export function useInitResultValue(result, key) {
8
- return createMemo(() => result()[key]);
9
- }
@@ -1,44 +0,0 @@
1
- import { createMemo } from 'solid-js';
2
- import { useSDKContext } from './hooks.js';
3
- import { useInitResultValue } from './useInitResultValue.js';
4
- import { useDynamicInitResultValue } from './useDynamicInitResultValue.js';
5
- /**
6
- * Returns ready to use SDK components.
7
- */
8
- export function useSDK() {
9
- const { initResult } = useSDKContext();
10
- const sdk = createMemo(() => {
11
- const result = initResult();
12
- if (result === null) {
13
- throw new Error('Unable to use SDK as it is not ready.');
14
- }
15
- return result;
16
- });
17
- return {
18
- backButton: useDynamicInitResultValue(sdk, 'backButton', ['isVisibleChanged']),
19
- closingBehavior: useDynamicInitResultValue(sdk, 'closingBehavior', ['isConfirmationNeededChanged']),
20
- cloudStorage: useInitResultValue(sdk, 'cloudStorage'),
21
- haptic: useInitResultValue(sdk, 'haptic'),
22
- initData: useInitResultValue(sdk, 'initData'),
23
- initDataRaw: useInitResultValue(sdk, 'initDataRaw'),
24
- mainButton: useDynamicInitResultValue(sdk, 'mainButton', [
25
- 'backgroundColorChanged',
26
- 'isVisibleChanged',
27
- 'isProgressVisibleChanged',
28
- 'isEnabledChanged',
29
- 'textChanged',
30
- 'textColorChanged',
31
- ]),
32
- popup: useDynamicInitResultValue(sdk, 'popup', ['isOpenedChanged']),
33
- postEvent: useInitResultValue(sdk, 'postEvent'),
34
- qrScanner: useDynamicInitResultValue(sdk, 'qrScanner', ['isOpenedChanged']),
35
- themeParams: useDynamicInitResultValue(sdk, 'themeParams', ['changed']),
36
- viewport: useDynamicInitResultValue(sdk, 'viewport', [
37
- 'heightChanged',
38
- 'isExpandedChanged',
39
- 'stableHeightChanged',
40
- 'widthChanged',
41
- ]),
42
- webApp: useDynamicInitResultValue(sdk, 'webApp', ['backgroundColorChanged', 'headerColorChanged']),
43
- };
44
- }
@@ -1,2 +0,0 @@
1
- import type { SDKContextType } from './types.js';
2
- export declare const SDKContext: import("solid-js").Context<SDKContextType>;
File without changes
File without changes
File without changes
File without changes
File without changes