@tma.js/sdk 1.4.4 → 1.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/README.md +2 -2
  2. package/dist/dts/bridge/env/index.d.ts +0 -1
  3. package/dist/dts/bridge/events/events.d.ts +16 -16
  4. package/dist/dts/bridge/methods/methods.d.ts +27 -27
  5. package/dist/dts/bridge/methods/popup.d.ts +1 -1
  6. package/dist/dts/index.d.ts +3 -3
  7. package/dist/dts/init-data/types.d.ts +3 -3
  8. package/dist/dts/launch-params/index.d.ts +1 -4
  9. package/dist/dts/launch-params/retrieveFromLocation.d.ts +2 -2
  10. package/dist/dts/launch-params/retrieveFromPerformance.d.ts +3 -4
  11. package/dist/dts/launch-params/retrieveFromUrl.d.ts +3 -2
  12. package/dist/dts/launch-params/retrieveLaunchData.d.ts +1 -0
  13. package/dist/dts/launch-params/retrieveLaunchParams.d.ts +6 -0
  14. package/dist/dts/launch-params/storage.d.ts +3 -5
  15. package/dist/dts/launch-params/types.d.ts +1 -1
  16. package/dist/dts/{launch-params → misc}/getFirstNavigationEntry.d.ts +1 -1
  17. package/dist/dts/misc/index.d.ts +3 -0
  18. package/dist/dts/{bridge/env → misc}/isIframe.d.ts +1 -1
  19. package/dist/dts/misc/isPageReload.d.ts +5 -0
  20. package/dist/dts/theme-params/types.d.ts +1 -1
  21. package/dist/index.cjs +1 -2
  22. package/dist/index.iife.js +1 -2
  23. package/dist/index.mjs +841 -866
  24. package/package.json +2 -3
  25. package/dist/dts/launch-params/computeLaunchData.d.ts +0 -6
  26. package/dist/dts/launch-params/computePageReload.d.ts +0 -6
  27. package/dist/dts/launch-params/retrieveCurrent.d.ts +0 -5
  28. package/dist/index.cjs.map +0 -1
  29. package/dist/index.iife.js.map +0 -1
  30. package/dist/index.mjs.map +0 -1
  31. package/src/__tests__/globals.ts +0 -39
  32. package/src/back-button/BackButton.ts +0 -90
  33. package/src/back-button/__tests__/BackButton.ts +0 -129
  34. package/src/back-button/index.ts +0 -2
  35. package/src/back-button/types.ts +0 -14
  36. package/src/bridge/__tests__/parseMessage.ts +0 -23
  37. package/src/bridge/__tests__/request.ts +0 -236
  38. package/src/bridge/env/__tests__/hasExternalNotify.ts +0 -15
  39. package/src/bridge/env/__tests__/hasWebviewProxy.ts +0 -15
  40. package/src/bridge/env/__tests__/isIframe.ts +0 -30
  41. package/src/bridge/env/hasExternalNotify.ts +0 -19
  42. package/src/bridge/env/hasWebviewProxy.ts +0 -19
  43. package/src/bridge/env/index.ts +0 -3
  44. package/src/bridge/env/isIframe.ts +0 -11
  45. package/src/bridge/errors/MethodUnsupportedError.ts +0 -13
  46. package/src/bridge/errors/ParameterUnsupportedError.ts +0 -13
  47. package/src/bridge/errors/index.ts +0 -2
  48. package/src/bridge/events/__tests__/createEmitter.ts +0 -143
  49. package/src/bridge/events/__tests__/off.ts +0 -34
  50. package/src/bridge/events/__tests__/on.ts +0 -49
  51. package/src/bridge/events/__tests__/onTelegramEvent.ts +0 -49
  52. package/src/bridge/events/__tests__/once.ts +0 -64
  53. package/src/bridge/events/__tests__/singletonEmitter.ts +0 -22
  54. package/src/bridge/events/__tests__/subscribe.ts +0 -49
  55. package/src/bridge/events/__tests__/unsubscribe.ts +0 -34
  56. package/src/bridge/events/createEmitter.ts +0 -108
  57. package/src/bridge/events/events.ts +0 -170
  58. package/src/bridge/events/index.ts +0 -9
  59. package/src/bridge/events/off.ts +0 -14
  60. package/src/bridge/events/on.ts +0 -19
  61. package/src/bridge/events/onTelegramEvent.ts +0 -81
  62. package/src/bridge/events/once.ts +0 -18
  63. package/src/bridge/events/parsers/__tests__/clipboardTextReceived.ts +0 -21
  64. package/src/bridge/events/parsers/__tests__/invoiceClosed.ts +0 -12
  65. package/src/bridge/events/parsers/__tests__/popupClosed.ts +0 -10
  66. package/src/bridge/events/parsers/__tests__/qrTextReceived.ts +0 -9
  67. package/src/bridge/events/parsers/__tests__/theme-changed.ts +0 -42
  68. package/src/bridge/events/parsers/__tests__/viewportChanged.ts +0 -49
  69. package/src/bridge/events/parsers/clipboardTextReceived.ts +0 -26
  70. package/src/bridge/events/parsers/customMethodInvoked.ts +0 -25
  71. package/src/bridge/events/parsers/index.ts +0 -9
  72. package/src/bridge/events/parsers/invoiceClosed.ts +0 -26
  73. package/src/bridge/events/parsers/phoneRequested.ts +0 -14
  74. package/src/bridge/events/parsers/popupClosed.ts +0 -19
  75. package/src/bridge/events/parsers/qrTextReceived.ts +0 -14
  76. package/src/bridge/events/parsers/theme-changed.ts +0 -58
  77. package/src/bridge/events/parsers/viewportChanged.ts +0 -33
  78. package/src/bridge/events/parsers/writeAccessRequested.ts +0 -14
  79. package/src/bridge/events/singletonEmitter.ts +0 -19
  80. package/src/bridge/events/subscribe.ts +0 -15
  81. package/src/bridge/events/unsubscribe.ts +0 -10
  82. package/src/bridge/index.ts +0 -7
  83. package/src/bridge/invokeCustomMethod.ts +0 -56
  84. package/src/bridge/methods/__tests__/createPostEvent.ts +0 -37
  85. package/src/bridge/methods/__tests__/postEvent.ts +0 -137
  86. package/src/bridge/methods/createPostEvent.ts +0 -40
  87. package/src/bridge/methods/custom-methods.ts +0 -68
  88. package/src/bridge/methods/haptic.ts +0 -52
  89. package/src/bridge/methods/index.ts +0 -6
  90. package/src/bridge/methods/methods.ts +0 -370
  91. package/src/bridge/methods/popup.ts +0 -53
  92. package/src/bridge/methods/postEvent.ts +0 -101
  93. package/src/bridge/parseMessage.ts +0 -28
  94. package/src/bridge/request.ts +0 -176
  95. package/src/classnames/__tests__/classNames.ts +0 -20
  96. package/src/classnames/__tests__/mergeClassNames.ts +0 -21
  97. package/src/classnames/classNames.ts +0 -34
  98. package/src/classnames/index.ts +0 -2
  99. package/src/classnames/mergeClassNames.ts +0 -60
  100. package/src/closing-behavior/ClosingBehavior.ts +0 -64
  101. package/src/closing-behavior/__tests__/ClosingBehavior.ts +0 -86
  102. package/src/closing-behavior/index.ts +0 -2
  103. package/src/closing-behavior/types.ts +0 -12
  104. package/src/cloud-storage/CloudStorage.ts +0 -138
  105. package/src/cloud-storage/index.ts +0 -1
  106. package/src/colors/__tests__/isColorDark.ts +0 -12
  107. package/src/colors/__tests__/isRGB.ts +0 -13
  108. package/src/colors/__tests__/isRGBShort.ts +0 -13
  109. package/src/colors/__tests__/toRGB.ts +0 -23
  110. package/src/colors/index.ts +0 -5
  111. package/src/colors/isColorDark.ts +0 -22
  112. package/src/colors/isRGB.ts +0 -9
  113. package/src/colors/isRGBShort.ts +0 -9
  114. package/src/colors/toRGB.ts +0 -49
  115. package/src/colors/types.ts +0 -9
  116. package/src/css/__tests__/bindMiniAppCSSVars.ts +0 -175
  117. package/src/css/__tests__/bindThemeCSSVars.ts +0 -52
  118. package/src/css/__tests__/bindViewportCSSVars.ts +0 -55
  119. package/src/css/__tests__/setCSSVar.ts +0 -14
  120. package/src/css/bindMiniAppCSSVars.ts +0 -51
  121. package/src/css/bindThemeCSSVars.ts +0 -31
  122. package/src/css/bindViewportCSSVars.ts +0 -36
  123. package/src/css/index.ts +0 -4
  124. package/src/css/setCSSVar.ts +0 -8
  125. package/src/event-emitter/EventEmitter.ts +0 -146
  126. package/src/event-emitter/__tests__/EventEmitter.ts +0 -145
  127. package/src/event-emitter/index.ts +0 -2
  128. package/src/event-emitter/types.ts +0 -60
  129. package/src/globals.ts +0 -38
  130. package/src/haptic-feedback/HapticFeedback.ts +0 -70
  131. package/src/haptic-feedback/__tests__/HapticFeedback.ts +0 -68
  132. package/src/haptic-feedback/index.ts +0 -1
  133. package/src/index.ts +0 -185
  134. package/src/init/catchCustomStyles.ts +0 -17
  135. package/src/init/creators/__tests__/createViewport.ts +0 -96
  136. package/src/init/creators/createBackButton.ts +0 -25
  137. package/src/init/creators/createClosingBehavior.ts +0 -24
  138. package/src/init/creators/createMainButton.ts +0 -51
  139. package/src/init/creators/createMiniApp.ts +0 -48
  140. package/src/init/creators/createRequestIdGenerator.ts +0 -13
  141. package/src/init/creators/createSettingsButton.ts +0 -25
  142. package/src/init/creators/createThemeParams.ts +0 -11
  143. package/src/init/creators/createViewport.ts +0 -94
  144. package/src/init/creators/index.ts +0 -8
  145. package/src/init/css/index.ts +0 -1
  146. package/src/init/css/processCSSVarsOption.ts +0 -55
  147. package/src/init/index.ts +0 -2
  148. package/src/init/init.ts +0 -134
  149. package/src/init/types.ts +0 -94
  150. package/src/init-data/InitData.ts +0 -96
  151. package/src/init-data/__tests__/InitData.ts +0 -98
  152. package/src/init-data/__tests__/chatParser.ts +0 -102
  153. package/src/init-data/__tests__/initDataParser.ts +0 -136
  154. package/src/init-data/__tests__/parseInitData.ts +0 -136
  155. package/src/init-data/__tests__/userParser.ts +0 -96
  156. package/src/init-data/chatParser.ts +0 -19
  157. package/src/init-data/index.ts +0 -6
  158. package/src/init-data/initDataParser.ts +0 -41
  159. package/src/init-data/parseInitData.ts +0 -10
  160. package/src/init-data/types.ts +0 -164
  161. package/src/init-data/userParser.ts +0 -45
  162. package/src/invoice/Invoice.ts +0 -123
  163. package/src/invoice/index.ts +0 -2
  164. package/src/invoice/types.ts +0 -11
  165. package/src/launch-params/__tests__/retrieveFromUrl.ts +0 -19
  166. package/src/launch-params/computeLaunchData.ts +0 -81
  167. package/src/launch-params/computePageReload.ts +0 -13
  168. package/src/launch-params/getFirstNavigationEntry.ts +0 -10
  169. package/src/launch-params/index.ts +0 -13
  170. package/src/launch-params/launchParamsParser.ts +0 -45
  171. package/src/launch-params/parseLaunchParams.ts +0 -10
  172. package/src/launch-params/retrieveCurrent.ts +0 -27
  173. package/src/launch-params/retrieveFromLocation.ts +0 -10
  174. package/src/launch-params/retrieveFromPerformance.ts +0 -18
  175. package/src/launch-params/retrieveFromUrl.ts +0 -19
  176. package/src/launch-params/retrieveLaunchData.ts +0 -30
  177. package/src/launch-params/serializeLaunchParams.ts +0 -37
  178. package/src/launch-params/storage.ts +0 -33
  179. package/src/launch-params/types.ts +0 -62
  180. package/src/logger/Logger.ts +0 -72
  181. package/src/logger/__tests__/Logger.ts +0 -107
  182. package/src/logger/index.ts +0 -1
  183. package/src/main-button/MainButton.ts +0 -239
  184. package/src/main-button/__tests__/MainButton.ts +0 -346
  185. package/src/main-button/index.ts +0 -2
  186. package/src/main-button/types.ts +0 -26
  187. package/src/mini-app/MiniApp.ts +0 -348
  188. package/src/mini-app/__tests__/MiniApp.ts +0 -140
  189. package/src/mini-app/contactParser.ts +0 -29
  190. package/src/mini-app/index.ts +0 -2
  191. package/src/mini-app/types.ts +0 -38
  192. package/src/misc/__tests__/isRecord.ts +0 -21
  193. package/src/misc/index.ts +0 -2
  194. package/src/misc/isRecord.ts +0 -7
  195. package/src/misc/isTMA.ts +0 -13
  196. package/src/navigation/HashNavigator/HashNavigator.ts +0 -220
  197. package/src/navigation/HashNavigator/__tests__/HashNavigator.ts +0 -144
  198. package/src/navigation/HashNavigator/__tests__/drop.ts +0 -42
  199. package/src/navigation/HashNavigator/__tests__/go.ts +0 -9
  200. package/src/navigation/HashNavigator/drop.ts +0 -36
  201. package/src/navigation/HashNavigator/go.ts +0 -28
  202. package/src/navigation/HashNavigator/index.ts +0 -2
  203. package/src/navigation/HashNavigator/types.ts +0 -41
  204. package/src/navigation/Navigator/Navigator.ts +0 -282
  205. package/src/navigation/Navigator/index.ts +0 -2
  206. package/src/navigation/Navigator/types.ts +0 -55
  207. package/src/navigation/ensurePrefix.ts +0 -9
  208. package/src/navigation/getHash.ts +0 -17
  209. package/src/navigation/index.ts +0 -4
  210. package/src/parsing/ArrayValueParser.ts +0 -79
  211. package/src/parsing/ParseError.ts +0 -27
  212. package/src/parsing/ParseSchemaFieldError.ts +0 -21
  213. package/src/parsing/ValueParser.ts +0 -71
  214. package/src/parsing/__tests__/ArrayValueParser.ts +0 -18
  215. package/src/parsing/__tests__/toRecord.ts +0 -10
  216. package/src/parsing/createValueParserGenerator.ts +0 -16
  217. package/src/parsing/index.ts +0 -10
  218. package/src/parsing/parseBySchema.ts +0 -65
  219. package/src/parsing/parsers/__tests__/array.ts +0 -39
  220. package/src/parsing/parsers/__tests__/boolean.ts +0 -31
  221. package/src/parsing/parsers/__tests__/date.ts +0 -25
  222. package/src/parsing/parsers/__tests__/json.ts +0 -80
  223. package/src/parsing/parsers/__tests__/number.ts +0 -23
  224. package/src/parsing/parsers/__tests__/rgb.ts +0 -22
  225. package/src/parsing/parsers/__tests__/searchParams.ts +0 -105
  226. package/src/parsing/parsers/__tests__/string.ts +0 -25
  227. package/src/parsing/parsers/array.ts +0 -9
  228. package/src/parsing/parsers/boolean.ts +0 -22
  229. package/src/parsing/parsers/date.ts +0 -11
  230. package/src/parsing/parsers/index.ts +0 -8
  231. package/src/parsing/parsers/json.ts +0 -17
  232. package/src/parsing/parsers/number.ts +0 -21
  233. package/src/parsing/parsers/rgb.ts +0 -10
  234. package/src/parsing/parsers/searchParams.ts +0 -24
  235. package/src/parsing/parsers/string.ts +0 -12
  236. package/src/parsing/toRecord.ts +0 -27
  237. package/src/parsing/types.ts +0 -32
  238. package/src/parsing/unexpectedTypeError.ts +0 -6
  239. package/src/popup/Popup.ts +0 -91
  240. package/src/popup/__tests__/Popup.ts +0 -130
  241. package/src/popup/__tests__/preparePopupParams.ts +0 -85
  242. package/src/popup/index.ts +0 -2
  243. package/src/popup/preparePopupParams.ts +0 -59
  244. package/src/popup/types.ts +0 -69
  245. package/src/qr-scanner/QRScanner.ts +0 -95
  246. package/src/qr-scanner/index.ts +0 -2
  247. package/src/qr-scanner/types.ts +0 -11
  248. package/src/settings-button/SettingsButton.ts +0 -85
  249. package/src/settings-button/index.ts +0 -2
  250. package/src/settings-button/types.ts +0 -15
  251. package/src/state/State.ts +0 -67
  252. package/src/state/index.ts +0 -2
  253. package/src/state/types.ts +0 -31
  254. package/src/storage.ts +0 -69
  255. package/src/supports/__tests__/supports.ts +0 -123
  256. package/src/supports/createSupportsFunc.ts +0 -18
  257. package/src/supports/createSupportsParamFunc.ts +0 -27
  258. package/src/supports/index.ts +0 -4
  259. package/src/supports/supports.ts +0 -84
  260. package/src/supports/types.ts +0 -1
  261. package/src/theme-params/ThemeParams.ts +0 -131
  262. package/src/theme-params/__tests__/keys.ts +0 -19
  263. package/src/theme-params/__tests__/parseThemeParams.ts +0 -29
  264. package/src/theme-params/__tests__/serializeThemeParams.ts +0 -29
  265. package/src/theme-params/__tests__/themeParamsParser.ts +0 -29
  266. package/src/theme-params/index.ts +0 -6
  267. package/src/theme-params/keys.ts +0 -24
  268. package/src/theme-params/parseThemeParams.ts +0 -10
  269. package/src/theme-params/requestThemeParams.ts +0 -13
  270. package/src/theme-params/serializeThemeParams.ts +0 -20
  271. package/src/theme-params/themeParamsParser.ts +0 -22
  272. package/src/theme-params/types.ts +0 -33
  273. package/src/timeout/TimeoutError.ts +0 -6
  274. package/src/timeout/__tests__/isTimeoutError.ts +0 -9
  275. package/src/timeout/__tests__/withTimeout.ts +0 -28
  276. package/src/timeout/index.ts +0 -4
  277. package/src/timeout/isTimeoutError.ts +0 -9
  278. package/src/timeout/sleep.ts +0 -10
  279. package/src/timeout/withTimeout.ts +0 -24
  280. package/src/types/index.ts +0 -4
  281. package/src/types/methods.ts +0 -18
  282. package/src/types/platform.ts +0 -14
  283. package/src/types/request-id.ts +0 -10
  284. package/src/types/utils.ts +0 -50
  285. package/src/utils/Utils.ts +0 -107
  286. package/src/utils/index.ts +0 -1
  287. package/src/version/__tests__/compareVersions.ts +0 -19
  288. package/src/version/compareVersions.ts +0 -28
  289. package/src/version/index.ts +0 -2
  290. package/src/version/types.ts +0 -4
  291. package/src/viewport/Viewport.ts +0 -171
  292. package/src/viewport/__tests__/isStableViewportPlatform.ts +0 -15
  293. package/src/viewport/__tests__/utils.ts +0 -12
  294. package/src/viewport/index.ts +0 -4
  295. package/src/viewport/isStableViewportPlatform.ts +0 -10
  296. package/src/viewport/requestViewport.ts +0 -23
  297. package/src/viewport/types.ts +0 -23
  298. package/src/viewport/utils.ts +0 -7
@@ -1,239 +0,0 @@
1
- import {
2
- off,
3
- on,
4
- type PostEvent,
5
- postEvent as defaultPostEvent,
6
- } from '~/bridge/index.js';
7
- import { EventEmitter } from '~/event-emitter/index.js';
8
- import { State } from '~/state/index.js';
9
- import type { RGB } from '~/colors/index.js';
10
-
11
- import type {
12
- MainButtonEvents,
13
- MainButtonParams,
14
- MainButtonProps,
15
- MainButtonState,
16
- } from './types.js';
17
-
18
- type Emitter = EventEmitter<MainButtonEvents>;
19
-
20
- /**
21
- * Controls the main button, which is displayed at the bottom
22
- * of the Mini App in the Telegram interface.
23
- */
24
- export class MainButton {
25
- private readonly ee: Emitter = new EventEmitter();
26
-
27
- private readonly state: State<MainButtonState>;
28
-
29
- private readonly postEvent: PostEvent;
30
-
31
- constructor(props: MainButtonProps) {
32
- const {
33
- postEvent = defaultPostEvent,
34
- text,
35
- textColor,
36
- backgroundColor,
37
- isEnabled,
38
- isVisible,
39
- isLoaderVisible,
40
- } = props;
41
-
42
- this.postEvent = postEvent;
43
- this.state = new State({
44
- backgroundColor,
45
- isEnabled,
46
- isVisible,
47
- isLoaderVisible,
48
- text,
49
- textColor,
50
- }, this.ee);
51
- }
52
-
53
- /**
54
- * Sends current local state to Telegram application.
55
- */
56
- private commit(): void {
57
- // We should not commit changes until payload is correct. We could
58
- // have some invalid values in case, button instance was created
59
- // with empty values. Otherwise, an unexpected behaviour could be received.
60
- if (this.text === '') {
61
- return;
62
- }
63
-
64
- this.postEvent('web_app_setup_main_button', {
65
- is_visible: this.isVisible,
66
- is_active: this.isEnabled,
67
- is_progress_visible: this.isLoaderVisible,
68
- text: this.text,
69
- color: this.backgroundColor,
70
- text_color: this.textColor,
71
- });
72
- }
73
-
74
- private set isEnabled(isEnabled: boolean) {
75
- this.setParams({ isEnabled });
76
- }
77
-
78
- /**
79
- * True if the Main Button is currently enabled.
80
- */
81
- get isEnabled(): boolean {
82
- return this.state.get('isEnabled');
83
- }
84
-
85
- private set isLoaderVisible(isLoaderVisible: boolean) {
86
- this.setParams({ isLoaderVisible });
87
- }
88
-
89
- /**
90
- * True if the Main Button loader is currently visible.
91
- */
92
- get isLoaderVisible(): boolean {
93
- return this.state.get('isLoaderVisible');
94
- }
95
-
96
- private set isVisible(isVisible: boolean) {
97
- this.setParams({ isVisible });
98
- }
99
-
100
- /**
101
- * True if the Main Button is currently visible.
102
- */
103
- get isVisible(): boolean {
104
- return this.state.get('isVisible');
105
- }
106
-
107
- /**
108
- * The Main Button background color.
109
- */
110
- get backgroundColor(): RGB {
111
- return this.state.get('backgroundColor');
112
- }
113
-
114
- /**
115
- * The Main Button text.
116
- */
117
- get text(): string {
118
- return this.state.get('text');
119
- }
120
-
121
- /**
122
- * The Main Button text color.
123
- */
124
- get textColor(): RGB {
125
- return this.state.get('textColor');
126
- }
127
-
128
- /**
129
- * Disables the Main Button.
130
- */
131
- disable(): this {
132
- // FIXME: This method does not work on Android. Event "main_button_pressed"
133
- // keeps getting received even in case, button is disabled.
134
- // Issue: https://github.com/Telegram-Mini-Apps/documentation/issues/1
135
- this.isEnabled = false;
136
- return this;
137
- }
138
-
139
- /**
140
- * Enables the Main Button.
141
- */
142
- enable(): this {
143
- this.isEnabled = true;
144
- return this;
145
- }
146
-
147
- /**
148
- * Hides the Main Button.
149
- */
150
- hide(): this {
151
- this.isVisible = false;
152
- return this;
153
- }
154
-
155
- /**
156
- * Hides the Main Button loader.
157
- */
158
- hideLoader(): this {
159
- this.isLoaderVisible = false;
160
- return this;
161
- }
162
-
163
- /**
164
- * Adds new event listener.
165
- * @param event - event name.
166
- * @param listener - event listener.
167
- */
168
- on: Emitter['on'] = (event, listener) => (
169
- // FIXME: Event 'main_button_pressed' is still being received on Android
170
- // even if the main button is disabled.
171
- // Issue: https://github.com/Telegram-Mini-Apps/tma.js/issues/3
172
- event === 'click'
173
- ? on('main_button_pressed', listener)
174
- : this.ee.on(event, listener)
175
- );
176
-
177
- /**
178
- * Removes event listener.
179
- * @param event - event name.
180
- * @param listener - event listener.
181
- */
182
- off: Emitter['off'] = (event, listener) => (
183
- event === 'click'
184
- ? off('main_button_pressed', listener)
185
- : this.ee.off(event, listener)
186
- );
187
-
188
- /**
189
- * Shows the Main Button. Note that opening the Mini App from the attachment menu hides the
190
- * main button until the user interacts with the Mini App interface.
191
- */
192
- show(): this {
193
- this.isVisible = true;
194
- return this;
195
- }
196
-
197
- /**
198
- * A method to show a loading indicator on the Main Button. It is recommended to display
199
- * loader if the action tied to the button may take a long time.
200
- */
201
- showLoader(): this {
202
- this.isLoaderVisible = true;
203
- return this;
204
- }
205
-
206
- /**
207
- * Sets new Main Button text. Minimal length for text is 1 symbol, and maximum is 64 symbols.
208
- * @param text - new text.
209
- */
210
- setText(text: string): this {
211
- return this.setParams({ text });
212
- }
213
-
214
- /**
215
- * Sets new Main Button text color.
216
- * @param textColor - new text color.
217
- */
218
- setTextColor(textColor: RGB): this {
219
- return this.setParams({ textColor });
220
- }
221
-
222
- /**
223
- * Updates current Main Button color.
224
- * @param backgroundColor - color to set.
225
- */
226
- setBackgroundColor(backgroundColor: RGB): this {
227
- return this.setParams({ backgroundColor });
228
- }
229
-
230
- /**
231
- * Allows setting multiple Main Button parameters.
232
- * @param params - Main Button parameters.
233
- */
234
- setParams(params: MainButtonParams): this {
235
- this.state.set(params);
236
- this.commit();
237
- return this;
238
- }
239
- }
@@ -1,346 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
-
3
- import { MainButton } from '../MainButton';
4
-
5
- describe('disable', () => {
6
- it('should call "web_app_setup_main_button" method with parameter where "is_active" property equal to false', () => {
7
- const postEvent = vi.fn();
8
- const mainButton = new MainButton({
9
- text: 'Test',
10
- textColor: '#000000',
11
- backgroundColor: '#ffffff',
12
- postEvent,
13
- isLoaderVisible: false,
14
- isVisible: false,
15
- isEnabled: false,
16
- });
17
-
18
- mainButton.disable();
19
- expect(postEvent).toHaveBeenCalledTimes(1);
20
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
21
- expect(postEvent.mock.calls[0][1]).toHaveProperty('is_active', false);
22
- });
23
-
24
- it('should emit "change:isEnabled" event with false value', () => {
25
- const listener = vi.fn();
26
- const postEvent = vi.fn();
27
- const mainButton = new MainButton({
28
- text: 'Test',
29
- textColor: '#000000',
30
- backgroundColor: '#ffffff',
31
- postEvent,
32
- isLoaderVisible: false,
33
- isVisible: false,
34
- isEnabled: true,
35
- });
36
-
37
- mainButton.on('change:isEnabled', listener);
38
- mainButton.disable();
39
- expect(listener).toHaveBeenCalledTimes(1);
40
- expect(listener).toHaveBeenCalledWith(false);
41
- });
42
- });
43
-
44
- describe('enable', () => {
45
- it('should call "web_app_setup_main_button" method with parameter where "is_active" property equal to true', () => {
46
- const postEvent = vi.fn();
47
- const mainButton = new MainButton({
48
- text: 'Test',
49
- textColor: '#000000',
50
- backgroundColor: '#ffffff',
51
- postEvent,
52
- isLoaderVisible: false,
53
- isVisible: false,
54
- isEnabled: false,
55
- });
56
-
57
- mainButton.enable();
58
- expect(postEvent).toHaveBeenCalledTimes(1);
59
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
60
- expect(postEvent.mock.calls[0][1]).toHaveProperty('is_active', true);
61
- });
62
-
63
- it('should emit "change:isEnabled" event with true value', () => {
64
- const listener = vi.fn();
65
- const mainButton = new MainButton({
66
- text: 'Test',
67
- textColor: '#000000',
68
- backgroundColor: '#ffffff',
69
- postEvent: vi.fn(),
70
- isLoaderVisible: false,
71
- isVisible: false,
72
- isEnabled: false,
73
- });
74
-
75
- mainButton.on('change:isEnabled', listener);
76
- mainButton.enable();
77
- expect(listener).toHaveBeenCalledTimes(1);
78
- expect(listener).toHaveBeenCalledWith(true);
79
- });
80
- });
81
-
82
- describe('hide', () => {
83
- it('should call "web_app_setup_main_button" method with parameter where "is_visible" property equal to false', () => {
84
- const postEvent = vi.fn();
85
- const mainButton = new MainButton({
86
- text: 'Test',
87
- textColor: '#000000',
88
- backgroundColor: '#ffffff',
89
- postEvent,
90
- isLoaderVisible: false,
91
- isVisible: true,
92
- isEnabled: false,
93
- });
94
-
95
- mainButton.hide();
96
- expect(postEvent).toHaveBeenCalledTimes(1);
97
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
98
- expect(postEvent.mock.calls[0][1]).toHaveProperty('is_visible', false);
99
- });
100
-
101
- it('should emit "change:isVisible" event with false value', () => {
102
- const listener = vi.fn();
103
- const mainButton = new MainButton({
104
- text: 'Test',
105
- textColor: '#000000',
106
- backgroundColor: '#ffffff',
107
- postEvent: vi.fn(),
108
- isLoaderVisible: false,
109
- isVisible: true,
110
- isEnabled: false,
111
- });
112
-
113
- mainButton.on('change:isVisible', listener);
114
- mainButton.hide();
115
- expect(listener).toHaveBeenCalledTimes(1);
116
- expect(listener).toHaveBeenCalledWith(false);
117
- });
118
- });
119
-
120
- describe('hideLoader', () => {
121
- it('should call "web_app_setup_main_button" method with parameter where "is_progress_visible" property equal to false', () => {
122
- const postEvent = vi.fn();
123
- const mainButton = new MainButton({
124
- text: 'Test',
125
- textColor: '#000000',
126
- backgroundColor: '#ffffff',
127
- postEvent,
128
- isLoaderVisible: true,
129
- isVisible: false,
130
- isEnabled: false,
131
- });
132
-
133
- mainButton.hideLoader();
134
- expect(postEvent).toHaveBeenCalledTimes(1);
135
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
136
- expect(postEvent.mock.calls[0][1]).toHaveProperty('is_progress_visible', false);
137
- });
138
-
139
- it('should emit "change:isLoaderVisible" event with false value', () => {
140
- const listener = vi.fn();
141
- const mainButton = new MainButton({
142
- text: 'Test',
143
- textColor: '#000000',
144
- backgroundColor: '#ffffff',
145
- postEvent: vi.fn(),
146
- isLoaderVisible: true,
147
- isVisible: false,
148
- isEnabled: false,
149
- });
150
-
151
- mainButton.on('change:isLoaderVisible', listener);
152
- mainButton.hideLoader();
153
- expect(listener).toHaveBeenCalledTimes(1);
154
- expect(listener).toHaveBeenCalledWith(false);
155
- });
156
- });
157
-
158
- describe('show', () => {
159
- it('should call "web_app_setup_main_button" method with parameter where "is_visible" property equal to true', () => {
160
- const postEvent = vi.fn();
161
- const mainButton = new MainButton({
162
- text: 'Test',
163
- textColor: '#000000',
164
- backgroundColor: '#ffffff',
165
- postEvent,
166
- isLoaderVisible: false,
167
- isVisible: false,
168
- isEnabled: false,
169
- });
170
-
171
- mainButton.show();
172
- expect(postEvent).toHaveBeenCalledTimes(1);
173
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
174
- expect(postEvent.mock.calls[0][1]).toHaveProperty('is_visible', true);
175
- });
176
-
177
- it('should emit "change:isVisible" event with true value', () => {
178
- const listener = vi.fn();
179
- const mainButton = new MainButton({
180
- text: 'Test',
181
- textColor: '#000000',
182
- backgroundColor: '#ffffff',
183
- postEvent: vi.fn(),
184
- isLoaderVisible: false,
185
- isVisible: false,
186
- isEnabled: false,
187
- });
188
-
189
- mainButton.on('change:isVisible', listener);
190
- mainButton.show();
191
- expect(listener).toHaveBeenCalledTimes(1);
192
- expect(listener).toHaveBeenCalledWith(true);
193
- });
194
- });
195
-
196
- describe('showLoader', () => {
197
- it('should call "web_app_setup_main_button" method with parameter where "is_progress_visible" property equal to true', () => {
198
- const postEvent = vi.fn();
199
- const mainButton = new MainButton({
200
- text: 'Test',
201
- textColor: '#000000',
202
- backgroundColor: '#ffffff',
203
- postEvent,
204
- isLoaderVisible: false,
205
- isVisible: false,
206
- isEnabled: false,
207
- });
208
-
209
- mainButton.showLoader();
210
- expect(postEvent).toHaveBeenCalledTimes(1);
211
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
212
- expect(postEvent.mock.calls[0][1]).toHaveProperty('is_progress_visible', true);
213
- });
214
-
215
- it('should emit "change:isLoaderVisible" event with true value', () => {
216
- const listener = vi.fn();
217
- const mainButton = new MainButton({
218
- text: 'Test',
219
- textColor: '#000000',
220
- backgroundColor: '#ffffff',
221
- postEvent: vi.fn(),
222
- isLoaderVisible: false,
223
- isVisible: false,
224
- isEnabled: false,
225
- });
226
-
227
- mainButton.on('change:isLoaderVisible', listener);
228
- mainButton.showLoader();
229
- expect(listener).toHaveBeenCalledTimes(1);
230
- expect(listener).toHaveBeenCalledWith(true);
231
- });
232
- });
233
-
234
- describe('setText', () => {
235
- it('should call "web_app_setup_main_button" method with parameter where "text" property equal to specified value', () => {
236
- const postEvent = vi.fn();
237
- const mainButton = new MainButton({
238
- text: 'Test',
239
- textColor: '#000000',
240
- backgroundColor: '#ffffff',
241
- postEvent,
242
- isLoaderVisible: false,
243
- isVisible: false,
244
- isEnabled: false,
245
- });
246
-
247
- mainButton.setText('WOW');
248
- expect(postEvent).toHaveBeenCalledTimes(1);
249
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
250
- expect(postEvent.mock.calls[0][1]).toHaveProperty('text', 'WOW');
251
- });
252
-
253
- it('should emit "change:text" event with specified value', () => {
254
- const listener = vi.fn();
255
- const mainButton = new MainButton({
256
- text: 'Test',
257
- textColor: '#000000',
258
- backgroundColor: '#ffffff',
259
- postEvent: vi.fn(),
260
- isLoaderVisible: false,
261
- isVisible: false,
262
- isEnabled: false,
263
- });
264
-
265
- mainButton.on('change:text', listener);
266
- mainButton.setText('Punch');
267
- expect(listener).toHaveBeenCalledTimes(1);
268
- expect(listener).toHaveBeenCalledWith('Punch');
269
- });
270
- });
271
-
272
- describe('setTextColor', () => {
273
- it('should call "web_app_setup_main_button" method with parameter where "text_color" property equal to specified value', () => {
274
- const postEvent = vi.fn();
275
- const mainButton = new MainButton({
276
- text: 'Test',
277
- textColor: '#000000',
278
- backgroundColor: '#ffffff',
279
- postEvent,
280
- isLoaderVisible: false,
281
- isVisible: false,
282
- isEnabled: false,
283
- });
284
-
285
- mainButton.setTextColor('#ffaacc');
286
- expect(postEvent).toHaveBeenCalledTimes(1);
287
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
288
- expect(postEvent.mock.calls[0][1]).toHaveProperty('text_color', '#ffaacc');
289
- });
290
-
291
- it('should emit "change:textColor" event with specified value', () => {
292
- const listener = vi.fn();
293
- const mainButton = new MainButton({
294
- text: 'Test',
295
- textColor: '#000000',
296
- backgroundColor: '#ffffff',
297
- postEvent: vi.fn(),
298
- isLoaderVisible: false,
299
- isVisible: false,
300
- isEnabled: false,
301
- });
302
-
303
- mainButton.on('change:textColor', listener);
304
- mainButton.setTextColor('#aaaaaa');
305
- expect(listener).toHaveBeenCalledTimes(1);
306
- expect(listener).toHaveBeenCalledWith('#aaaaaa');
307
- });
308
- });
309
-
310
- describe('setColor', () => {
311
- it('should call "web_app_setup_main_button" method with parameter where "color" property equal to specified value', () => {
312
- const postEvent = vi.fn();
313
- const mainButton = new MainButton({
314
- text: 'Test',
315
- textColor: '#000000',
316
- backgroundColor: '#ffffff',
317
- postEvent,
318
- isLoaderVisible: false,
319
- isVisible: false,
320
- isEnabled: false,
321
- });
322
-
323
- mainButton.setBackgroundColor('#ffaacc');
324
- expect(postEvent).toHaveBeenCalledTimes(1);
325
- expect(postEvent.mock.calls[0][0]).toBe('web_app_setup_main_button');
326
- expect(postEvent.mock.calls[0][1]).toHaveProperty('color', '#ffaacc');
327
- });
328
-
329
- it('should emit "change:backgroundColor" event with specified value', () => {
330
- const listener = vi.fn();
331
- const mainButton = new MainButton({
332
- text: 'Test',
333
- textColor: '#000000',
334
- backgroundColor: '#ffffff',
335
- postEvent: vi.fn(),
336
- isLoaderVisible: false,
337
- isVisible: false,
338
- isEnabled: false,
339
- });
340
-
341
- mainButton.on('change:backgroundColor', listener);
342
- mainButton.setBackgroundColor('#aaaaaa');
343
- expect(listener).toHaveBeenCalledTimes(1);
344
- expect(listener).toHaveBeenCalledWith('#aaaaaa');
345
- });
346
- });
@@ -1,2 +0,0 @@
1
- export * from './MainButton.js';
2
- export * from './types.js';
@@ -1,26 +0,0 @@
1
- import type { PostEvent } from '~/bridge/index.js';
2
- import type { RGB } from '~/colors/index.js';
3
- import type { StateEvents } from '~/state/index.js';
4
-
5
- export interface MainButtonParams {
6
- backgroundColor?: RGB;
7
- isEnabled?: boolean;
8
- isLoaderVisible?: boolean;
9
- isVisible?: boolean;
10
- text?: string;
11
- textColor?: RGB;
12
- }
13
-
14
- export interface MainButtonProps extends Required<MainButtonParams> {
15
- postEvent?: PostEvent;
16
- }
17
-
18
- export type MainButtonState = Required<MainButtonParams>;
19
-
20
- export interface MainButtonEvents extends StateEvents<MainButtonState> {
21
- click: () => void;
22
- }
23
-
24
- export type MainButtonEventName = keyof MainButtonEvents;
25
-
26
- export type MainButtonEventListener<E extends MainButtonEventName> = MainButtonEvents[E];