@spare-technologies/spare-link 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (648) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/LICENSE +21 -0
  3. package/README.md +173 -0
  4. package/assets/fonts/MetroSans-Bold.otf +0 -0
  5. package/assets/fonts/MetroSans-Light.otf +0 -0
  6. package/assets/fonts/MetroSans-Medium.otf +0 -0
  7. package/assets/fonts/MetroSans-Regular.otf +0 -0
  8. package/assets/fonts/MetroSans-SemiBold.otf +0 -0
  9. package/assets/images/altareq_logo_mini.png +0 -0
  10. package/assets/images/altareq_logo_transparent_bg.png +0 -0
  11. package/assets/images/altareq_logo_white_bg.png +0 -0
  12. package/assets/images/spare_logo.png +0 -0
  13. package/lib/commonjs/core/client/link-api-client.js +297 -0
  14. package/lib/commonjs/core/client/link-api-client.js.map +1 -0
  15. package/lib/commonjs/core/errors/payment-api-error.js +35 -0
  16. package/lib/commonjs/core/errors/payment-api-error.js.map +1 -0
  17. package/lib/commonjs/core/models/index.js +2 -0
  18. package/lib/commonjs/core/models/index.js.map +1 -0
  19. package/lib/commonjs/core/models/link-session-status.js +14 -0
  20. package/lib/commonjs/core/models/link-session-status.js.map +1 -0
  21. package/lib/commonjs/core/models/payment-return-params.js +42 -0
  22. package/lib/commonjs/core/models/payment-return-params.js.map +1 -0
  23. package/lib/commonjs/core/models/payment-type.js +45 -0
  24. package/lib/commonjs/core/models/payment-type.js.map +1 -0
  25. package/lib/commonjs/core/models/wire-mappers.js +277 -0
  26. package/lib/commonjs/core/models/wire-mappers.js.map +1 -0
  27. package/lib/commonjs/core/services/consent-presenter.js +150 -0
  28. package/lib/commonjs/core/services/consent-presenter.js.map +1 -0
  29. package/lib/commonjs/core/services/execute-resume-if-needed.js +216 -0
  30. package/lib/commonjs/core/services/execute-resume-if-needed.js.map +1 -0
  31. package/lib/commonjs/core/services/multi-payment-rules-presenter.js +151 -0
  32. package/lib/commonjs/core/services/multi-payment-rules-presenter.js.map +1 -0
  33. package/lib/commonjs/core/services/payment-flow-controller.js +547 -0
  34. package/lib/commonjs/core/services/payment-flow-controller.js.map +1 -0
  35. package/lib/commonjs/core/services/payment-flow-state.js +110 -0
  36. package/lib/commonjs/core/services/payment-flow-state.js.map +1 -0
  37. package/lib/commonjs/core/services/payment-result-mapper.js +49 -0
  38. package/lib/commonjs/core/services/payment-result-mapper.js.map +1 -0
  39. package/lib/commonjs/core/services/pending-session-store.js +6 -0
  40. package/lib/commonjs/core/services/pending-session-store.js.map +1 -0
  41. package/lib/commonjs/core/services/presentation-utils.js +11 -0
  42. package/lib/commonjs/core/services/presentation-utils.js.map +1 -0
  43. package/lib/commonjs/core/services/redirect-buffer.js +40 -0
  44. package/lib/commonjs/core/services/redirect-buffer.js.map +1 -0
  45. package/lib/commonjs/core/services/user-friendly-messages.js +46 -0
  46. package/lib/commonjs/core/services/user-friendly-messages.js.map +1 -0
  47. package/lib/commonjs/index.js +294 -0
  48. package/lib/commonjs/index.js.map +1 -0
  49. package/lib/commonjs/internal/bank-redirect.js +53 -0
  50. package/lib/commonjs/internal/bank-redirect.js.map +1 -0
  51. package/lib/commonjs/internal/deep-link-listener.js +39 -0
  52. package/lib/commonjs/internal/deep-link-listener.js.map +1 -0
  53. package/lib/commonjs/internal/event-emitter.js +36 -0
  54. package/lib/commonjs/internal/event-emitter.js.map +1 -0
  55. package/lib/commonjs/internal/index.js +34 -0
  56. package/lib/commonjs/internal/index.js.map +1 -0
  57. package/lib/commonjs/internal/logger.js +67 -0
  58. package/lib/commonjs/internal/logger.js.map +1 -0
  59. package/lib/commonjs/internal/redact-uri.js +25 -0
  60. package/lib/commonjs/internal/redact-uri.js.map +1 -0
  61. package/lib/commonjs/internal/secure-store-pending-session-store.js +92 -0
  62. package/lib/commonjs/internal/secure-store-pending-session-store.js.map +1 -0
  63. package/lib/commonjs/internal/telemetry-collector.js +80 -0
  64. package/lib/commonjs/internal/telemetry-collector.js.map +1 -0
  65. package/lib/commonjs/package.json +1 -0
  66. package/lib/commonjs/public/constants.js +21 -0
  67. package/lib/commonjs/public/constants.js.map +1 -0
  68. package/lib/commonjs/public/index.js +152 -0
  69. package/lib/commonjs/public/index.js.map +1 -0
  70. package/lib/commonjs/public/payment-result.js +48 -0
  71. package/lib/commonjs/public/payment-result.js.map +1 -0
  72. package/lib/commonjs/public/recovery-result.js +40 -0
  73. package/lib/commonjs/public/recovery-result.js.map +1 -0
  74. package/lib/commonjs/public/spare-link-callbacks.js +6 -0
  75. package/lib/commonjs/public/spare-link-callbacks.js.map +1 -0
  76. package/lib/commonjs/public/spare-link-config.js +62 -0
  77. package/lib/commonjs/public/spare-link-config.js.map +1 -0
  78. package/lib/commonjs/public/spare-link-event.js +120 -0
  79. package/lib/commonjs/public/spare-link-event.js.map +1 -0
  80. package/lib/commonjs/public/spare-link-host-api.js +6 -0
  81. package/lib/commonjs/public/spare-link-host-api.js.map +1 -0
  82. package/lib/commonjs/public/spare-link-instance.js +285 -0
  83. package/lib/commonjs/public/spare-link-instance.js.map +1 -0
  84. package/lib/commonjs/public/spare-link-session.js +26 -0
  85. package/lib/commonjs/public/spare-link-session.js.map +1 -0
  86. package/lib/commonjs/public/spare-link.js +31 -0
  87. package/lib/commonjs/public/spare-link.js.map +1 -0
  88. package/lib/commonjs/ui/consent/charge-bearer-display.js +99 -0
  89. package/lib/commonjs/ui/consent/charge-bearer-display.js.map +1 -0
  90. package/lib/commonjs/ui/consent/consent-accordion.js +94 -0
  91. package/lib/commonjs/ui/consent/consent-accordion.js.map +1 -0
  92. package/lib/commonjs/ui/consent/consent-summary-section.js +27 -0
  93. package/lib/commonjs/ui/consent/consent-summary-section.js.map +1 -0
  94. package/lib/commonjs/ui/consent/cop-information.js +168 -0
  95. package/lib/commonjs/ui/consent/cop-information.js.map +1 -0
  96. package/lib/commonjs/ui/consent/international-payment-summary.js +98 -0
  97. package/lib/commonjs/ui/consent/international-payment-summary.js.map +1 -0
  98. package/lib/commonjs/ui/consent/label-value-rows.js +59 -0
  99. package/lib/commonjs/ui/consent/label-value-rows.js.map +1 -0
  100. package/lib/commonjs/ui/consent/multi-payment-rules-list.js +130 -0
  101. package/lib/commonjs/ui/consent/multi-payment-rules-list.js.map +1 -0
  102. package/lib/commonjs/ui/consent/multi-payment-summary.js +99 -0
  103. package/lib/commonjs/ui/consent/multi-payment-summary.js.map +1 -0
  104. package/lib/commonjs/ui/consent/single-payment-summary.js +158 -0
  105. package/lib/commonjs/ui/consent/single-payment-summary.js.map +1 -0
  106. package/lib/commonjs/ui/consent/terms-link.js +35 -0
  107. package/lib/commonjs/ui/consent/terms-link.js.map +1 -0
  108. package/lib/commonjs/ui/hooks/use-payment-flow-state.js +16 -0
  109. package/lib/commonjs/ui/hooks/use-payment-flow-state.js.map +1 -0
  110. package/lib/commonjs/ui/payment-flow-page.js +235 -0
  111. package/lib/commonjs/ui/payment-flow-page.js.map +1 -0
  112. package/lib/commonjs/ui/screens/bank-selection-screen.js +215 -0
  113. package/lib/commonjs/ui/screens/bank-selection-screen.js.map +1 -0
  114. package/lib/commonjs/ui/screens/consent-details-screen.js +124 -0
  115. package/lib/commonjs/ui/screens/consent-details-screen.js.map +1 -0
  116. package/lib/commonjs/ui/screens/index.js +48 -0
  117. package/lib/commonjs/ui/screens/index.js.map +1 -0
  118. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js +79 -0
  119. package/lib/commonjs/ui/screens/mandate-setup-success-screen.js.map +1 -0
  120. package/lib/commonjs/ui/screens/redirect-handoff-screen.js +42 -0
  121. package/lib/commonjs/ui/screens/redirect-handoff-screen.js.map +1 -0
  122. package/lib/commonjs/ui/screens/result-screen.js +83 -0
  123. package/lib/commonjs/ui/screens/result-screen.js.map +1 -0
  124. package/lib/commonjs/ui/screens/resume-processing-screen.js +109 -0
  125. package/lib/commonjs/ui/screens/resume-processing-screen.js.map +1 -0
  126. package/lib/commonjs/ui/spare-link-host.js +354 -0
  127. package/lib/commonjs/ui/spare-link-host.js.map +1 -0
  128. package/lib/commonjs/ui/theme/assets.js +20 -0
  129. package/lib/commonjs/ui/theme/assets.js.map +1 -0
  130. package/lib/commonjs/ui/theme/colors.js +36 -0
  131. package/lib/commonjs/ui/theme/colors.js.map +1 -0
  132. package/lib/commonjs/ui/theme/fonts.js +29 -0
  133. package/lib/commonjs/ui/theme/fonts.js.map +1 -0
  134. package/lib/commonjs/ui/theme/index.js +53 -0
  135. package/lib/commonjs/ui/theme/index.js.map +1 -0
  136. package/lib/commonjs/ui/theme/typography.js +76 -0
  137. package/lib/commonjs/ui/theme/typography.js.map +1 -0
  138. package/lib/commonjs/ui/widgets/footer.js +144 -0
  139. package/lib/commonjs/ui/widgets/footer.js.map +1 -0
  140. package/lib/commonjs/ui/widgets/gradient-spinner.js +172 -0
  141. package/lib/commonjs/ui/widgets/gradient-spinner.js.map +1 -0
  142. package/lib/commonjs/ui/widgets/handoff-screen-layout.js +77 -0
  143. package/lib/commonjs/ui/widgets/handoff-screen-layout.js.map +1 -0
  144. package/lib/commonjs/ui/widgets/index.js +41 -0
  145. package/lib/commonjs/ui/widgets/index.js.map +1 -0
  146. package/lib/commonjs/ui/widgets/layout-w-header.js +106 -0
  147. package/lib/commonjs/ui/widgets/layout-w-header.js.map +1 -0
  148. package/lib/commonjs/ui/widgets/modal-dismiss-button.js +47 -0
  149. package/lib/commonjs/ui/widgets/modal-dismiss-button.js.map +1 -0
  150. package/lib/commonjs/ui/widgets/stepper.js +124 -0
  151. package/lib/commonjs/ui/widgets/stepper.js.map +1 -0
  152. package/lib/commonjs/version.js +14 -0
  153. package/lib/commonjs/version.js.map +1 -0
  154. package/lib/module/core/client/link-api-client.js +292 -0
  155. package/lib/module/core/client/link-api-client.js.map +1 -0
  156. package/lib/module/core/errors/payment-api-error.js +29 -0
  157. package/lib/module/core/errors/payment-api-error.js.map +1 -0
  158. package/lib/module/core/models/index.js +2 -0
  159. package/lib/module/core/models/index.js.map +1 -0
  160. package/lib/module/core/models/link-session-status.js +10 -0
  161. package/lib/module/core/models/link-session-status.js.map +1 -0
  162. package/lib/module/core/models/payment-return-params.js +37 -0
  163. package/lib/module/core/models/payment-return-params.js.map +1 -0
  164. package/lib/module/core/models/payment-type.js +36 -0
  165. package/lib/module/core/models/payment-type.js.map +1 -0
  166. package/lib/module/core/models/wire-mappers.js +263 -0
  167. package/lib/module/core/models/wire-mappers.js.map +1 -0
  168. package/lib/module/core/services/consent-presenter.js +140 -0
  169. package/lib/module/core/services/consent-presenter.js.map +1 -0
  170. package/lib/module/core/services/execute-resume-if-needed.js +211 -0
  171. package/lib/module/core/services/execute-resume-if-needed.js.map +1 -0
  172. package/lib/module/core/services/multi-payment-rules-presenter.js +146 -0
  173. package/lib/module/core/services/multi-payment-rules-presenter.js.map +1 -0
  174. package/lib/module/core/services/payment-flow-controller.js +544 -0
  175. package/lib/module/core/services/payment-flow-controller.js.map +1 -0
  176. package/lib/module/core/services/payment-flow-state.js +106 -0
  177. package/lib/module/core/services/payment-flow-state.js.map +1 -0
  178. package/lib/module/core/services/payment-result-mapper.js +45 -0
  179. package/lib/module/core/services/payment-result-mapper.js.map +1 -0
  180. package/lib/module/core/services/pending-session-store.js +4 -0
  181. package/lib/module/core/services/pending-session-store.js.map +1 -0
  182. package/lib/module/core/services/presentation-utils.js +7 -0
  183. package/lib/module/core/services/presentation-utils.js.map +1 -0
  184. package/lib/module/core/services/redirect-buffer.js +33 -0
  185. package/lib/module/core/services/redirect-buffer.js.map +1 -0
  186. package/lib/module/core/services/user-friendly-messages.js +42 -0
  187. package/lib/module/core/services/user-friendly-messages.js.map +1 -0
  188. package/lib/module/index.js +40 -0
  189. package/lib/module/index.js.map +1 -0
  190. package/lib/module/internal/bank-redirect.js +49 -0
  191. package/lib/module/internal/bank-redirect.js.map +1 -0
  192. package/lib/module/internal/deep-link-listener.js +34 -0
  193. package/lib/module/internal/deep-link-listener.js.map +1 -0
  194. package/lib/module/internal/event-emitter.js +32 -0
  195. package/lib/module/internal/event-emitter.js.map +1 -0
  196. package/lib/module/internal/index.js +7 -0
  197. package/lib/module/internal/index.js.map +1 -0
  198. package/lib/module/internal/logger.js +61 -0
  199. package/lib/module/internal/logger.js.map +1 -0
  200. package/lib/module/internal/redact-uri.js +21 -0
  201. package/lib/module/internal/redact-uri.js.map +1 -0
  202. package/lib/module/internal/secure-store-pending-session-store.js +88 -0
  203. package/lib/module/internal/secure-store-pending-session-store.js.map +1 -0
  204. package/lib/module/internal/telemetry-collector.js +75 -0
  205. package/lib/module/internal/telemetry-collector.js.map +1 -0
  206. package/lib/module/package.json +1 -0
  207. package/lib/module/public/constants.js +17 -0
  208. package/lib/module/public/constants.js.map +1 -0
  209. package/lib/module/public/index.js +11 -0
  210. package/lib/module/public/index.js.map +1 -0
  211. package/lib/module/public/payment-result.js +41 -0
  212. package/lib/module/public/payment-result.js.map +1 -0
  213. package/lib/module/public/recovery-result.js +34 -0
  214. package/lib/module/public/recovery-result.js.map +1 -0
  215. package/lib/module/public/spare-link-callbacks.js +4 -0
  216. package/lib/module/public/spare-link-callbacks.js.map +1 -0
  217. package/lib/module/public/spare-link-config.js +54 -0
  218. package/lib/module/public/spare-link-config.js.map +1 -0
  219. package/lib/module/public/spare-link-event.js +115 -0
  220. package/lib/module/public/spare-link-event.js.map +1 -0
  221. package/lib/module/public/spare-link-host-api.js +4 -0
  222. package/lib/module/public/spare-link-host-api.js.map +1 -0
  223. package/lib/module/public/spare-link-instance.js +273 -0
  224. package/lib/module/public/spare-link-instance.js.map +1 -0
  225. package/lib/module/public/spare-link-session.js +21 -0
  226. package/lib/module/public/spare-link-session.js.map +1 -0
  227. package/lib/module/public/spare-link.js +4 -0
  228. package/lib/module/public/spare-link.js.map +1 -0
  229. package/lib/module/ui/consent/charge-bearer-display.js +95 -0
  230. package/lib/module/ui/consent/charge-bearer-display.js.map +1 -0
  231. package/lib/module/ui/consent/consent-accordion.js +90 -0
  232. package/lib/module/ui/consent/consent-accordion.js.map +1 -0
  233. package/lib/module/ui/consent/consent-summary-section.js +23 -0
  234. package/lib/module/ui/consent/consent-summary-section.js.map +1 -0
  235. package/lib/module/ui/consent/cop-information.js +165 -0
  236. package/lib/module/ui/consent/cop-information.js.map +1 -0
  237. package/lib/module/ui/consent/international-payment-summary.js +94 -0
  238. package/lib/module/ui/consent/international-payment-summary.js.map +1 -0
  239. package/lib/module/ui/consent/label-value-rows.js +55 -0
  240. package/lib/module/ui/consent/label-value-rows.js.map +1 -0
  241. package/lib/module/ui/consent/multi-payment-rules-list.js +125 -0
  242. package/lib/module/ui/consent/multi-payment-rules-list.js.map +1 -0
  243. package/lib/module/ui/consent/multi-payment-summary.js +95 -0
  244. package/lib/module/ui/consent/multi-payment-summary.js.map +1 -0
  245. package/lib/module/ui/consent/single-payment-summary.js +154 -0
  246. package/lib/module/ui/consent/single-payment-summary.js.map +1 -0
  247. package/lib/module/ui/consent/terms-link.js +31 -0
  248. package/lib/module/ui/consent/terms-link.js.map +1 -0
  249. package/lib/module/ui/hooks/use-payment-flow-state.js +12 -0
  250. package/lib/module/ui/hooks/use-payment-flow-state.js.map +1 -0
  251. package/lib/module/ui/payment-flow-page.js +232 -0
  252. package/lib/module/ui/payment-flow-page.js.map +1 -0
  253. package/lib/module/ui/screens/bank-selection-screen.js +211 -0
  254. package/lib/module/ui/screens/bank-selection-screen.js.map +1 -0
  255. package/lib/module/ui/screens/consent-details-screen.js +120 -0
  256. package/lib/module/ui/screens/consent-details-screen.js.map +1 -0
  257. package/lib/module/ui/screens/index.js +9 -0
  258. package/lib/module/ui/screens/index.js.map +1 -0
  259. package/lib/module/ui/screens/mandate-setup-success-screen.js +75 -0
  260. package/lib/module/ui/screens/mandate-setup-success-screen.js.map +1 -0
  261. package/lib/module/ui/screens/redirect-handoff-screen.js +39 -0
  262. package/lib/module/ui/screens/redirect-handoff-screen.js.map +1 -0
  263. package/lib/module/ui/screens/result-screen.js +79 -0
  264. package/lib/module/ui/screens/result-screen.js.map +1 -0
  265. package/lib/module/ui/screens/resume-processing-screen.js +105 -0
  266. package/lib/module/ui/screens/resume-processing-screen.js.map +1 -0
  267. package/lib/module/ui/spare-link-host.js +350 -0
  268. package/lib/module/ui/spare-link-host.js.map +1 -0
  269. package/lib/module/ui/theme/assets.js +16 -0
  270. package/lib/module/ui/theme/assets.js.map +1 -0
  271. package/lib/module/ui/theme/colors.js +32 -0
  272. package/lib/module/ui/theme/colors.js.map +1 -0
  273. package/lib/module/ui/theme/fonts.js +23 -0
  274. package/lib/module/ui/theme/fonts.js.map +1 -0
  275. package/lib/module/ui/theme/index.js +13 -0
  276. package/lib/module/ui/theme/index.js.map +1 -0
  277. package/lib/module/ui/theme/typography.js +49 -0
  278. package/lib/module/ui/theme/typography.js.map +1 -0
  279. package/lib/module/ui/widgets/footer.js +140 -0
  280. package/lib/module/ui/widgets/footer.js.map +1 -0
  281. package/lib/module/ui/widgets/gradient-spinner.js +168 -0
  282. package/lib/module/ui/widgets/gradient-spinner.js.map +1 -0
  283. package/lib/module/ui/widgets/handoff-screen-layout.js +73 -0
  284. package/lib/module/ui/widgets/handoff-screen-layout.js.map +1 -0
  285. package/lib/module/ui/widgets/index.js +8 -0
  286. package/lib/module/ui/widgets/index.js.map +1 -0
  287. package/lib/module/ui/widgets/layout-w-header.js +102 -0
  288. package/lib/module/ui/widgets/layout-w-header.js.map +1 -0
  289. package/lib/module/ui/widgets/modal-dismiss-button.js +43 -0
  290. package/lib/module/ui/widgets/modal-dismiss-button.js.map +1 -0
  291. package/lib/module/ui/widgets/stepper.js +120 -0
  292. package/lib/module/ui/widgets/stepper.js.map +1 -0
  293. package/lib/module/version.js +10 -0
  294. package/lib/module/version.js.map +1 -0
  295. package/lib/typescript/commonjs/core/client/link-api-client.d.ts +70 -0
  296. package/lib/typescript/commonjs/core/client/link-api-client.d.ts.map +1 -0
  297. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts +15 -0
  298. package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts.map +1 -0
  299. package/lib/typescript/commonjs/core/models/index.d.ts +124 -0
  300. package/lib/typescript/commonjs/core/models/index.d.ts.map +1 -0
  301. package/lib/typescript/commonjs/core/models/link-session-status.d.ts +6 -0
  302. package/lib/typescript/commonjs/core/models/link-session-status.d.ts.map +1 -0
  303. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts +15 -0
  304. package/lib/typescript/commonjs/core/models/payment-return-params.d.ts.map +1 -0
  305. package/lib/typescript/commonjs/core/models/payment-type.d.ts +18 -0
  306. package/lib/typescript/commonjs/core/models/payment-type.d.ts.map +1 -0
  307. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts +19 -0
  308. package/lib/typescript/commonjs/core/models/wire-mappers.d.ts.map +1 -0
  309. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts +67 -0
  310. package/lib/typescript/commonjs/core/services/consent-presenter.d.ts.map +1 -0
  311. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts +32 -0
  312. package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts.map +1 -0
  313. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts +9 -0
  314. package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts.map +1 -0
  315. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts +146 -0
  316. package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts.map +1 -0
  317. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts +64 -0
  318. package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts.map +1 -0
  319. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts +5 -0
  320. package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts.map +1 -0
  321. package/lib/typescript/commonjs/core/services/pending-session-store.d.ts +12 -0
  322. package/lib/typescript/commonjs/core/services/pending-session-store.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts +5 -0
  324. package/lib/typescript/commonjs/core/services/presentation-utils.d.ts.map +1 -0
  325. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts +6 -0
  326. package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts.map +1 -0
  327. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts +6 -0
  328. package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/index.d.ts +19 -0
  330. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/internal/bank-redirect.d.ts +6 -0
  332. package/lib/typescript/commonjs/internal/bank-redirect.d.ts.map +1 -0
  333. package/lib/typescript/commonjs/internal/deep-link-listener.d.ts +3 -0
  334. package/lib/typescript/commonjs/internal/deep-link-listener.d.ts.map +1 -0
  335. package/lib/typescript/commonjs/internal/event-emitter.d.ts +13 -0
  336. package/lib/typescript/commonjs/internal/event-emitter.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/internal/index.d.ts +5 -0
  338. package/lib/typescript/commonjs/internal/index.d.ts.map +1 -0
  339. package/lib/typescript/commonjs/internal/logger.d.ts +23 -0
  340. package/lib/typescript/commonjs/internal/logger.d.ts.map +1 -0
  341. package/lib/typescript/commonjs/internal/redact-uri.d.ts +3 -0
  342. package/lib/typescript/commonjs/internal/redact-uri.d.ts.map +1 -0
  343. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts +33 -0
  344. package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts.map +1 -0
  345. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts +2 -0
  346. package/lib/typescript/commonjs/internal/telemetry-collector.d.ts.map +1 -0
  347. package/lib/typescript/commonjs/package.json +1 -0
  348. package/lib/typescript/commonjs/public/constants.d.ts +12 -0
  349. package/lib/typescript/commonjs/public/constants.d.ts.map +1 -0
  350. package/lib/typescript/commonjs/public/index.d.ts +11 -0
  351. package/lib/typescript/commonjs/public/index.d.ts.map +1 -0
  352. package/lib/typescript/commonjs/public/payment-result.d.ts +43 -0
  353. package/lib/typescript/commonjs/public/payment-result.d.ts.map +1 -0
  354. package/lib/typescript/commonjs/public/recovery-result.d.ts +36 -0
  355. package/lib/typescript/commonjs/public/recovery-result.d.ts.map +1 -0
  356. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts +14 -0
  357. package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts.map +1 -0
  358. package/lib/typescript/commonjs/public/spare-link-config.d.ts +49 -0
  359. package/lib/typescript/commonjs/public/spare-link-config.d.ts.map +1 -0
  360. package/lib/typescript/commonjs/public/spare-link-event.d.ts +90 -0
  361. package/lib/typescript/commonjs/public/spare-link-event.d.ts.map +1 -0
  362. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts +29 -0
  363. package/lib/typescript/commonjs/public/spare-link-host-api.d.ts.map +1 -0
  364. package/lib/typescript/commonjs/public/spare-link-instance.d.ts +89 -0
  365. package/lib/typescript/commonjs/public/spare-link-instance.d.ts.map +1 -0
  366. package/lib/typescript/commonjs/public/spare-link-session.d.ts +20 -0
  367. package/lib/typescript/commonjs/public/spare-link-session.d.ts.map +1 -0
  368. package/lib/typescript/commonjs/public/spare-link.d.ts +3 -0
  369. package/lib/typescript/commonjs/public/spare-link.d.ts.map +1 -0
  370. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts +5 -0
  371. package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts.map +1 -0
  372. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts +10 -0
  373. package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts.map +1 -0
  374. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts +6 -0
  375. package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts.map +1 -0
  376. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts +6 -0
  377. package/lib/typescript/commonjs/ui/consent/cop-information.d.ts.map +1 -0
  378. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts +6 -0
  379. package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts.map +1 -0
  380. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts +10 -0
  381. package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts.map +1 -0
  382. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts +15 -0
  383. package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts.map +1 -0
  384. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts +6 -0
  385. package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts.map +1 -0
  386. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts +6 -0
  387. package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts.map +1 -0
  388. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts +2 -0
  389. package/lib/typescript/commonjs/ui/consent/terms-link.d.ts.map +1 -0
  390. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts +9 -0
  391. package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts.map +1 -0
  392. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts +20 -0
  393. package/lib/typescript/commonjs/ui/payment-flow-page.d.ts.map +1 -0
  394. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts +15 -0
  395. package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts.map +1 -0
  396. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts +13 -0
  397. package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts.map +1 -0
  398. package/lib/typescript/commonjs/ui/screens/index.d.ts +7 -0
  399. package/lib/typescript/commonjs/ui/screens/index.d.ts.map +1 -0
  400. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts +10 -0
  401. package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts.map +1 -0
  402. package/lib/typescript/commonjs/ui/screens/redirect-handoff-screen.d.ts +3 -0
  403. package/lib/typescript/commonjs/ui/screens/redirect-handoff-screen.d.ts.map +1 -0
  404. package/lib/typescript/commonjs/ui/screens/result-screen.d.ts +7 -0
  405. package/lib/typescript/commonjs/ui/screens/result-screen.d.ts.map +1 -0
  406. package/lib/typescript/commonjs/ui/screens/resume-processing-screen.d.ts +10 -0
  407. package/lib/typescript/commonjs/ui/screens/resume-processing-screen.d.ts.map +1 -0
  408. package/lib/typescript/commonjs/ui/spare-link-host.d.ts +23 -0
  409. package/lib/typescript/commonjs/ui/spare-link-host.d.ts.map +1 -0
  410. package/lib/typescript/commonjs/ui/theme/assets.d.ts +15 -0
  411. package/lib/typescript/commonjs/ui/theme/assets.d.ts.map +1 -0
  412. package/lib/typescript/commonjs/ui/theme/colors.d.ts +31 -0
  413. package/lib/typescript/commonjs/ui/theme/colors.d.ts.map +1 -0
  414. package/lib/typescript/commonjs/ui/theme/fonts.d.ts +12 -0
  415. package/lib/typescript/commonjs/ui/theme/fonts.d.ts.map +1 -0
  416. package/lib/typescript/commonjs/ui/theme/index.d.ts +11 -0
  417. package/lib/typescript/commonjs/ui/theme/index.d.ts.map +1 -0
  418. package/lib/typescript/commonjs/ui/theme/typography.d.ts +12 -0
  419. package/lib/typescript/commonjs/ui/theme/typography.d.ts.map +1 -0
  420. package/lib/typescript/commonjs/ui/widgets/footer.d.ts +23 -0
  421. package/lib/typescript/commonjs/ui/widgets/footer.d.ts.map +1 -0
  422. package/lib/typescript/commonjs/ui/widgets/gradient-spinner.d.ts +13 -0
  423. package/lib/typescript/commonjs/ui/widgets/gradient-spinner.d.ts.map +1 -0
  424. package/lib/typescript/commonjs/ui/widgets/handoff-screen-layout.d.ts +11 -0
  425. package/lib/typescript/commonjs/ui/widgets/handoff-screen-layout.d.ts.map +1 -0
  426. package/lib/typescript/commonjs/ui/widgets/index.d.ts +6 -0
  427. package/lib/typescript/commonjs/ui/widgets/index.d.ts.map +1 -0
  428. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts +20 -0
  429. package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts.map +1 -0
  430. package/lib/typescript/commonjs/ui/widgets/modal-dismiss-button.d.ts +6 -0
  431. package/lib/typescript/commonjs/ui/widgets/modal-dismiss-button.d.ts.map +1 -0
  432. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts +15 -0
  433. package/lib/typescript/commonjs/ui/widgets/stepper.d.ts.map +1 -0
  434. package/lib/typescript/commonjs/version.d.ts +8 -0
  435. package/lib/typescript/commonjs/version.d.ts.map +1 -0
  436. package/lib/typescript/module/core/client/link-api-client.d.ts +70 -0
  437. package/lib/typescript/module/core/client/link-api-client.d.ts.map +1 -0
  438. package/lib/typescript/module/core/errors/payment-api-error.d.ts +15 -0
  439. package/lib/typescript/module/core/errors/payment-api-error.d.ts.map +1 -0
  440. package/lib/typescript/module/core/models/index.d.ts +124 -0
  441. package/lib/typescript/module/core/models/index.d.ts.map +1 -0
  442. package/lib/typescript/module/core/models/link-session-status.d.ts +6 -0
  443. package/lib/typescript/module/core/models/link-session-status.d.ts.map +1 -0
  444. package/lib/typescript/module/core/models/payment-return-params.d.ts +15 -0
  445. package/lib/typescript/module/core/models/payment-return-params.d.ts.map +1 -0
  446. package/lib/typescript/module/core/models/payment-type.d.ts +18 -0
  447. package/lib/typescript/module/core/models/payment-type.d.ts.map +1 -0
  448. package/lib/typescript/module/core/models/wire-mappers.d.ts +19 -0
  449. package/lib/typescript/module/core/models/wire-mappers.d.ts.map +1 -0
  450. package/lib/typescript/module/core/services/consent-presenter.d.ts +67 -0
  451. package/lib/typescript/module/core/services/consent-presenter.d.ts.map +1 -0
  452. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts +32 -0
  453. package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts.map +1 -0
  454. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts +9 -0
  455. package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts.map +1 -0
  456. package/lib/typescript/module/core/services/payment-flow-controller.d.ts +146 -0
  457. package/lib/typescript/module/core/services/payment-flow-controller.d.ts.map +1 -0
  458. package/lib/typescript/module/core/services/payment-flow-state.d.ts +64 -0
  459. package/lib/typescript/module/core/services/payment-flow-state.d.ts.map +1 -0
  460. package/lib/typescript/module/core/services/payment-result-mapper.d.ts +5 -0
  461. package/lib/typescript/module/core/services/payment-result-mapper.d.ts.map +1 -0
  462. package/lib/typescript/module/core/services/pending-session-store.d.ts +12 -0
  463. package/lib/typescript/module/core/services/pending-session-store.d.ts.map +1 -0
  464. package/lib/typescript/module/core/services/presentation-utils.d.ts +5 -0
  465. package/lib/typescript/module/core/services/presentation-utils.d.ts.map +1 -0
  466. package/lib/typescript/module/core/services/redirect-buffer.d.ts +6 -0
  467. package/lib/typescript/module/core/services/redirect-buffer.d.ts.map +1 -0
  468. package/lib/typescript/module/core/services/user-friendly-messages.d.ts +6 -0
  469. package/lib/typescript/module/core/services/user-friendly-messages.d.ts.map +1 -0
  470. package/lib/typescript/module/index.d.ts +19 -0
  471. package/lib/typescript/module/index.d.ts.map +1 -0
  472. package/lib/typescript/module/internal/bank-redirect.d.ts +6 -0
  473. package/lib/typescript/module/internal/bank-redirect.d.ts.map +1 -0
  474. package/lib/typescript/module/internal/deep-link-listener.d.ts +3 -0
  475. package/lib/typescript/module/internal/deep-link-listener.d.ts.map +1 -0
  476. package/lib/typescript/module/internal/event-emitter.d.ts +13 -0
  477. package/lib/typescript/module/internal/event-emitter.d.ts.map +1 -0
  478. package/lib/typescript/module/internal/index.d.ts +5 -0
  479. package/lib/typescript/module/internal/index.d.ts.map +1 -0
  480. package/lib/typescript/module/internal/logger.d.ts +23 -0
  481. package/lib/typescript/module/internal/logger.d.ts.map +1 -0
  482. package/lib/typescript/module/internal/redact-uri.d.ts +3 -0
  483. package/lib/typescript/module/internal/redact-uri.d.ts.map +1 -0
  484. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts +33 -0
  485. package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts.map +1 -0
  486. package/lib/typescript/module/internal/telemetry-collector.d.ts +2 -0
  487. package/lib/typescript/module/internal/telemetry-collector.d.ts.map +1 -0
  488. package/lib/typescript/module/package.json +1 -0
  489. package/lib/typescript/module/public/constants.d.ts +12 -0
  490. package/lib/typescript/module/public/constants.d.ts.map +1 -0
  491. package/lib/typescript/module/public/index.d.ts +11 -0
  492. package/lib/typescript/module/public/index.d.ts.map +1 -0
  493. package/lib/typescript/module/public/payment-result.d.ts +43 -0
  494. package/lib/typescript/module/public/payment-result.d.ts.map +1 -0
  495. package/lib/typescript/module/public/recovery-result.d.ts +36 -0
  496. package/lib/typescript/module/public/recovery-result.d.ts.map +1 -0
  497. package/lib/typescript/module/public/spare-link-callbacks.d.ts +14 -0
  498. package/lib/typescript/module/public/spare-link-callbacks.d.ts.map +1 -0
  499. package/lib/typescript/module/public/spare-link-config.d.ts +49 -0
  500. package/lib/typescript/module/public/spare-link-config.d.ts.map +1 -0
  501. package/lib/typescript/module/public/spare-link-event.d.ts +90 -0
  502. package/lib/typescript/module/public/spare-link-event.d.ts.map +1 -0
  503. package/lib/typescript/module/public/spare-link-host-api.d.ts +29 -0
  504. package/lib/typescript/module/public/spare-link-host-api.d.ts.map +1 -0
  505. package/lib/typescript/module/public/spare-link-instance.d.ts +89 -0
  506. package/lib/typescript/module/public/spare-link-instance.d.ts.map +1 -0
  507. package/lib/typescript/module/public/spare-link-session.d.ts +20 -0
  508. package/lib/typescript/module/public/spare-link-session.d.ts.map +1 -0
  509. package/lib/typescript/module/public/spare-link.d.ts +3 -0
  510. package/lib/typescript/module/public/spare-link.d.ts.map +1 -0
  511. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts +5 -0
  512. package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts.map +1 -0
  513. package/lib/typescript/module/ui/consent/consent-accordion.d.ts +10 -0
  514. package/lib/typescript/module/ui/consent/consent-accordion.d.ts.map +1 -0
  515. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts +6 -0
  516. package/lib/typescript/module/ui/consent/consent-summary-section.d.ts.map +1 -0
  517. package/lib/typescript/module/ui/consent/cop-information.d.ts +6 -0
  518. package/lib/typescript/module/ui/consent/cop-information.d.ts.map +1 -0
  519. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts +6 -0
  520. package/lib/typescript/module/ui/consent/international-payment-summary.d.ts.map +1 -0
  521. package/lib/typescript/module/ui/consent/label-value-rows.d.ts +10 -0
  522. package/lib/typescript/module/ui/consent/label-value-rows.d.ts.map +1 -0
  523. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts +15 -0
  524. package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts.map +1 -0
  525. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts +6 -0
  526. package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts.map +1 -0
  527. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts +6 -0
  528. package/lib/typescript/module/ui/consent/single-payment-summary.d.ts.map +1 -0
  529. package/lib/typescript/module/ui/consent/terms-link.d.ts +2 -0
  530. package/lib/typescript/module/ui/consent/terms-link.d.ts.map +1 -0
  531. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts +9 -0
  532. package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts.map +1 -0
  533. package/lib/typescript/module/ui/payment-flow-page.d.ts +20 -0
  534. package/lib/typescript/module/ui/payment-flow-page.d.ts.map +1 -0
  535. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts +15 -0
  536. package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts.map +1 -0
  537. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts +13 -0
  538. package/lib/typescript/module/ui/screens/consent-details-screen.d.ts.map +1 -0
  539. package/lib/typescript/module/ui/screens/index.d.ts +7 -0
  540. package/lib/typescript/module/ui/screens/index.d.ts.map +1 -0
  541. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts +10 -0
  542. package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts.map +1 -0
  543. package/lib/typescript/module/ui/screens/redirect-handoff-screen.d.ts +3 -0
  544. package/lib/typescript/module/ui/screens/redirect-handoff-screen.d.ts.map +1 -0
  545. package/lib/typescript/module/ui/screens/result-screen.d.ts +7 -0
  546. package/lib/typescript/module/ui/screens/result-screen.d.ts.map +1 -0
  547. package/lib/typescript/module/ui/screens/resume-processing-screen.d.ts +10 -0
  548. package/lib/typescript/module/ui/screens/resume-processing-screen.d.ts.map +1 -0
  549. package/lib/typescript/module/ui/spare-link-host.d.ts +23 -0
  550. package/lib/typescript/module/ui/spare-link-host.d.ts.map +1 -0
  551. package/lib/typescript/module/ui/theme/assets.d.ts +15 -0
  552. package/lib/typescript/module/ui/theme/assets.d.ts.map +1 -0
  553. package/lib/typescript/module/ui/theme/colors.d.ts +31 -0
  554. package/lib/typescript/module/ui/theme/colors.d.ts.map +1 -0
  555. package/lib/typescript/module/ui/theme/fonts.d.ts +12 -0
  556. package/lib/typescript/module/ui/theme/fonts.d.ts.map +1 -0
  557. package/lib/typescript/module/ui/theme/index.d.ts +11 -0
  558. package/lib/typescript/module/ui/theme/index.d.ts.map +1 -0
  559. package/lib/typescript/module/ui/theme/typography.d.ts +12 -0
  560. package/lib/typescript/module/ui/theme/typography.d.ts.map +1 -0
  561. package/lib/typescript/module/ui/widgets/footer.d.ts +23 -0
  562. package/lib/typescript/module/ui/widgets/footer.d.ts.map +1 -0
  563. package/lib/typescript/module/ui/widgets/gradient-spinner.d.ts +13 -0
  564. package/lib/typescript/module/ui/widgets/gradient-spinner.d.ts.map +1 -0
  565. package/lib/typescript/module/ui/widgets/handoff-screen-layout.d.ts +11 -0
  566. package/lib/typescript/module/ui/widgets/handoff-screen-layout.d.ts.map +1 -0
  567. package/lib/typescript/module/ui/widgets/index.d.ts +6 -0
  568. package/lib/typescript/module/ui/widgets/index.d.ts.map +1 -0
  569. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts +20 -0
  570. package/lib/typescript/module/ui/widgets/layout-w-header.d.ts.map +1 -0
  571. package/lib/typescript/module/ui/widgets/modal-dismiss-button.d.ts +6 -0
  572. package/lib/typescript/module/ui/widgets/modal-dismiss-button.d.ts.map +1 -0
  573. package/lib/typescript/module/ui/widgets/stepper.d.ts +15 -0
  574. package/lib/typescript/module/ui/widgets/stepper.d.ts.map +1 -0
  575. package/lib/typescript/module/version.d.ts +8 -0
  576. package/lib/typescript/module/version.d.ts.map +1 -0
  577. package/package.json +124 -0
  578. package/plugins/with-spare-link.js +98 -0
  579. package/src/core/client/link-api-client.ts +414 -0
  580. package/src/core/errors/payment-api-error.ts +35 -0
  581. package/src/core/models/index.ts +139 -0
  582. package/src/core/models/link-session-status.ts +7 -0
  583. package/src/core/models/payment-return-params.ts +34 -0
  584. package/src/core/models/payment-type.ts +54 -0
  585. package/src/core/models/wire-mappers.ts +315 -0
  586. package/src/core/services/consent-presenter.ts +213 -0
  587. package/src/core/services/execute-resume-if-needed.ts +243 -0
  588. package/src/core/services/multi-payment-rules-presenter.ts +158 -0
  589. package/src/core/services/payment-flow-controller.ts +607 -0
  590. package/src/core/services/payment-flow-state.ts +124 -0
  591. package/src/core/services/payment-result-mapper.ts +41 -0
  592. package/src/core/services/pending-session-store.ts +12 -0
  593. package/src/core/services/presentation-utils.ts +4 -0
  594. package/src/core/services/redirect-buffer.ts +34 -0
  595. package/src/core/services/user-friendly-messages.ts +39 -0
  596. package/src/index.ts +115 -0
  597. package/src/internal/bank-redirect.ts +61 -0
  598. package/src/internal/deep-link-listener.ts +31 -0
  599. package/src/internal/event-emitter.ts +42 -0
  600. package/src/internal/index.ts +4 -0
  601. package/src/internal/logger.ts +81 -0
  602. package/src/internal/redact-uri.ts +18 -0
  603. package/src/internal/secure-store-pending-session-store.ts +131 -0
  604. package/src/internal/telemetry-collector.ts +90 -0
  605. package/src/public/constants.ts +14 -0
  606. package/src/public/index.ts +80 -0
  607. package/src/public/payment-result.ts +61 -0
  608. package/src/public/recovery-result.ts +49 -0
  609. package/src/public/spare-link-callbacks.ts +20 -0
  610. package/src/public/spare-link-config.ts +87 -0
  611. package/src/public/spare-link-event.ts +146 -0
  612. package/src/public/spare-link-host-api.ts +28 -0
  613. package/src/public/spare-link-instance.ts +289 -0
  614. package/src/public/spare-link-session.ts +28 -0
  615. package/src/public/spare-link.ts +2 -0
  616. package/src/ui/consent/charge-bearer-display.tsx +68 -0
  617. package/src/ui/consent/consent-accordion.tsx +89 -0
  618. package/src/ui/consent/consent-summary-section.tsx +19 -0
  619. package/src/ui/consent/cop-information.tsx +121 -0
  620. package/src/ui/consent/international-payment-summary.tsx +83 -0
  621. package/src/ui/consent/label-value-rows.tsx +50 -0
  622. package/src/ui/consent/multi-payment-rules-list.tsx +138 -0
  623. package/src/ui/consent/multi-payment-summary.tsx +82 -0
  624. package/src/ui/consent/single-payment-summary.tsx +123 -0
  625. package/src/ui/consent/terms-link.tsx +27 -0
  626. package/src/ui/hooks/use-payment-flow-state.ts +16 -0
  627. package/src/ui/payment-flow-page.tsx +254 -0
  628. package/src/ui/screens/bank-selection-screen.tsx +209 -0
  629. package/src/ui/screens/consent-details-screen.tsx +106 -0
  630. package/src/ui/screens/index.ts +12 -0
  631. package/src/ui/screens/mandate-setup-success-screen.tsx +72 -0
  632. package/src/ui/screens/redirect-handoff-screen.tsx +33 -0
  633. package/src/ui/screens/result-screen.tsx +71 -0
  634. package/src/ui/screens/resume-processing-screen.tsx +111 -0
  635. package/src/ui/spare-link-host.tsx +394 -0
  636. package/src/ui/theme/assets.ts +17 -0
  637. package/src/ui/theme/colors.ts +32 -0
  638. package/src/ui/theme/fonts.ts +25 -0
  639. package/src/ui/theme/index.ts +11 -0
  640. package/src/ui/theme/typography.ts +47 -0
  641. package/src/ui/widgets/footer.tsx +138 -0
  642. package/src/ui/widgets/gradient-spinner.tsx +156 -0
  643. package/src/ui/widgets/handoff-screen-layout.tsx +70 -0
  644. package/src/ui/widgets/index.ts +5 -0
  645. package/src/ui/widgets/layout-w-header.tsx +89 -0
  646. package/src/ui/widgets/modal-dismiss-button.tsx +44 -0
  647. package/src/ui/widgets/stepper.tsx +126 -0
  648. package/src/version.ts +7 -0
@@ -0,0 +1,47 @@
1
+ import type { TextStyle } from 'react-native';
2
+ import { Colors } from './colors';
3
+ import { linkFontFamilyForWeight } from './fonts';
4
+
5
+ export { FONT_FAMILY, linkFontFamilyForWeight, useLinkFonts, LINK_FONT_MAP } from './fonts';
6
+
7
+ function withFont(weight: TextStyle['fontWeight'], style: TextStyle): TextStyle {
8
+ return { ...style, fontFamily: linkFontFamilyForWeight(weight) };
9
+ }
10
+
11
+ export const Typography = {
12
+ title: withFont('700', {
13
+ fontSize: 18,
14
+ fontWeight: '700',
15
+ color: Colors.textPrimary,
16
+ }),
17
+ bodyMuted: withFont('400', {
18
+ fontSize: 14,
19
+ fontWeight: '400',
20
+ color: Colors.textMuted,
21
+ }),
22
+ label: withFont('500', {
23
+ fontSize: 14,
24
+ fontWeight: '500',
25
+ color: Colors.textLabel,
26
+ }),
27
+ value: withFont('500', {
28
+ fontSize: 14,
29
+ fontWeight: '500',
30
+ color: Colors.textPrimary,
31
+ }),
32
+ amount: withFont('700', {
33
+ fontSize: 28,
34
+ fontWeight: '700',
35
+ color: Colors.textPrimary,
36
+ }),
37
+ creditor: withFont('500', {
38
+ fontSize: 16,
39
+ fontWeight: '500',
40
+ color: Colors.textPrimary,
41
+ }),
42
+ button: withFont('600', {
43
+ fontSize: 16,
44
+ fontWeight: '600',
45
+ color: '#FFFFFF',
46
+ }),
47
+ } as const;
@@ -0,0 +1,138 @@
1
+ import { LinearGradient } from 'expo-linear-gradient';
2
+ import { ActivityIndicator, Image, Pressable, StyleSheet, Text, View } from 'react-native';
3
+ import { FONT_FAMILY } from '../theme';
4
+ import { Assets } from '../theme/assets';
5
+
6
+ export interface FooterProps {
7
+ onContinue?: () => void;
8
+ onCancel?: () => void;
9
+ /** Continue button label. Defaults to "Proceed using Altareq". */
10
+ continueButtonText?: string;
11
+ disabledContinueButton?: boolean;
12
+ /** When true the continue button shows a spinner and cannot be tapped. */
13
+ isLoading?: boolean;
14
+ /** Show the gradient-bordered Cancel button. Defaults to true. */
15
+ showCancelButton?: boolean;
16
+ /** testID for the continue button. Defaults to "footer-continue-btn". */
17
+ continueTestID?: string;
18
+ /** testID for the cancel button. Defaults to "footer-cancel-btn". */
19
+ cancelTestID?: string;
20
+ }
21
+
22
+ const DEFAULT_CONTINUE_TEXT = 'Proceed using Altareq';
23
+
24
+ // CBUAE-approved gradient — copied verbatim from Flutter `Footer`
25
+ // (#00C8AF → #015AD7 → #000 at stops 0 / 0.41 / 0.82).
26
+ const CONTINUE_GRADIENT = ['#00C8AF', '#015AD7', '#000000'] as const;
27
+ const CONTINUE_GRADIENT_STOPS = [0, 0.41, 0.82] as const;
28
+ const CANCEL_BORDER_GRADIENT = ['#00C8AF', '#015AD7'] as const;
29
+
30
+ /**
31
+ * Shared flow-screen footer. Port of Flutter `Footer`
32
+ * (`lib/src/ui/widgets/footer.dart`): a full-width gradient "Proceed using
33
+ * Altareq" pill with the Altareq mini icon, plus an optional gradient-bordered
34
+ * white "Cancel" pill.
35
+ */
36
+ export function Footer(props: FooterProps): JSX.Element {
37
+ const showCancel = props.showCancelButton ?? true;
38
+ const continueText = props.continueButtonText ?? DEFAULT_CONTINUE_TEXT;
39
+ const isContinueEnabled =
40
+ !props.disabledContinueButton && !props.isLoading && props.onContinue != null;
41
+
42
+ return (
43
+ <View>
44
+ <Pressable
45
+ testID={props.continueTestID ?? 'footer-continue-btn'}
46
+ accessibilityRole="button"
47
+ accessibilityState={{ disabled: !isContinueEnabled }}
48
+ onPress={isContinueEnabled ? props.onContinue : undefined}
49
+ disabled={!isContinueEnabled}
50
+ style={{ opacity: isContinueEnabled ? 1 : 0.4 }}
51
+ >
52
+ <LinearGradient
53
+ colors={CONTINUE_GRADIENT}
54
+ locations={CONTINUE_GRADIENT_STOPS}
55
+ start={{ x: 0, y: 0 }}
56
+ end={{ x: 1, y: 0 }}
57
+ style={styles.continueGradient}
58
+ >
59
+ {props.isLoading ? (
60
+ <ActivityIndicator testID="footer-continue-spinner" size="small" color="#FFFFFF" />
61
+ ) : (
62
+ <View style={styles.continueContent}>
63
+ <Image
64
+ source={Assets.altareqIconMini}
65
+ style={styles.miniIcon}
66
+ resizeMode="contain"
67
+ accessibilityRole="image"
68
+ accessibilityLabel="Altareq"
69
+ />
70
+ <Text style={styles.continueText}>{continueText}</Text>
71
+ </View>
72
+ )}
73
+ </LinearGradient>
74
+ </Pressable>
75
+
76
+ {showCancel ? (
77
+ <View style={styles.cancelSpacer}>
78
+ <LinearGradient
79
+ colors={CANCEL_BORDER_GRADIENT}
80
+ start={{ x: 0, y: 0 }}
81
+ end={{ x: 1, y: 0 }}
82
+ style={styles.cancelBorder}
83
+ >
84
+ <Pressable
85
+ testID={props.cancelTestID ?? 'footer-cancel-btn'}
86
+ accessibilityRole="button"
87
+ onPress={props.onCancel}
88
+ style={styles.cancelInner}
89
+ >
90
+ <Text style={styles.cancelText}>Cancel</Text>
91
+ </Pressable>
92
+ </LinearGradient>
93
+ </View>
94
+ ) : null}
95
+ </View>
96
+ );
97
+ }
98
+
99
+ const BUTTON_HEIGHT = 48;
100
+ const BUTTON_RADIUS = 40;
101
+
102
+ const styles = StyleSheet.create({
103
+ continueGradient: {
104
+ height: BUTTON_HEIGHT,
105
+ borderRadius: BUTTON_RADIUS,
106
+ alignItems: 'center',
107
+ justifyContent: 'center',
108
+ },
109
+ continueContent: {
110
+ flexDirection: 'row',
111
+ alignItems: 'center',
112
+ justifyContent: 'center',
113
+ },
114
+ miniIcon: { width: 24, height: 24, marginRight: 10 },
115
+ continueText: {
116
+ fontFamily: FONT_FAMILY,
117
+ fontSize: 16,
118
+ color: '#FFFFFF',
119
+ },
120
+ cancelSpacer: { marginTop: 8 },
121
+ cancelBorder: {
122
+ height: BUTTON_HEIGHT,
123
+ borderRadius: BUTTON_RADIUS,
124
+ padding: 2, // border thickness
125
+ },
126
+ cancelInner: {
127
+ flex: 1,
128
+ backgroundColor: '#FFFFFF',
129
+ borderRadius: BUTTON_RADIUS,
130
+ alignItems: 'center',
131
+ justifyContent: 'center',
132
+ },
133
+ cancelText: {
134
+ fontFamily: FONT_FAMILY,
135
+ fontSize: 16,
136
+ color: 'rgba(0,0,0,0.87)',
137
+ },
138
+ });
@@ -0,0 +1,156 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { Animated, Easing, Platform, UIManager, View } from 'react-native';
3
+ import { HandoffGradient } from '../theme/colors';
4
+
5
+ export interface GradientSpinnerProps {
6
+ size?: number;
7
+ strokeWidth?: number;
8
+ testID?: string;
9
+ }
10
+
11
+ /** Flutter `drawArc` sweep: `math.pi * 1.7` radians. */
12
+ const ARC_SWEEP_FRACTION = 1.7 / 2;
13
+
14
+ function isRNSVGAvailable(): boolean {
15
+ if (Platform.OS === 'web') return false;
16
+ return (
17
+ typeof UIManager.getViewManagerConfig === 'function' &&
18
+ UIManager.getViewManagerConfig('RNSVGCircle') != null
19
+ );
20
+ }
21
+
22
+ function useSpinAnimation(): Animated.AnimatedInterpolation<string> {
23
+ const rotation = useRef(new Animated.Value(0)).current;
24
+
25
+ useEffect(() => {
26
+ const animation = Animated.loop(
27
+ Animated.timing(rotation, {
28
+ toValue: 1,
29
+ duration: 1200,
30
+ easing: Easing.linear,
31
+ useNativeDriver: true,
32
+ }),
33
+ );
34
+ animation.start();
35
+ return () => animation.stop();
36
+ }, [rotation]);
37
+
38
+ return rotation.interpolate({
39
+ inputRange: [0, 1],
40
+ outputRange: ['0deg', '360deg'],
41
+ });
42
+ }
43
+
44
+ /**
45
+ * Thin stroked arc with sweep gradient — mirrors Flutter `GradientSpinner`.
46
+ */
47
+ function SvgGradientSpinner({
48
+ size,
49
+ strokeWidth,
50
+ testID,
51
+ spin,
52
+ }: {
53
+ size: number;
54
+ strokeWidth: number;
55
+ testID: string;
56
+ spin: Animated.AnimatedInterpolation<string>;
57
+ }): JSX.Element {
58
+ const Svg = require('react-native-svg').default as typeof import('react-native-svg').default;
59
+ const {
60
+ Circle,
61
+ Defs,
62
+ LinearGradient: SvgLinearGradient,
63
+ Stop,
64
+ } = require('react-native-svg') as typeof import('react-native-svg');
65
+
66
+ const radius = (size - strokeWidth) / 2;
67
+ const circumference = 2 * Math.PI * radius;
68
+ const arcLength = circumference * ARC_SWEEP_FRACTION;
69
+ const gapLength = circumference - arcLength;
70
+ const gradientId = 'gradient-spinner-stroke';
71
+
72
+ return (
73
+ <View style={{ width: size, height: size }} testID={testID} collapsable={false}>
74
+ <Animated.View style={{ transform: [{ rotate: spin }] }}>
75
+ <Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
76
+ <Defs>
77
+ <SvgLinearGradient id={gradientId} x1="0%" y1="0%" x2="100%" y2="100%">
78
+ <Stop offset="0%" stopColor="#FFFFFF" />
79
+ <Stop offset="60%" stopColor="#00C8AF" />
80
+ <Stop offset="100%" stopColor="#FFFFFF" />
81
+ </SvgLinearGradient>
82
+ </Defs>
83
+ <Circle
84
+ cx={size / 2}
85
+ cy={size / 2}
86
+ r={radius}
87
+ stroke={`url(#${gradientId})`}
88
+ strokeWidth={strokeWidth}
89
+ strokeLinecap="round"
90
+ fill="none"
91
+ strokeDasharray={`${arcLength} ${gapLength}`}
92
+ rotation={-90}
93
+ origin={`${size / 2}, ${size / 2}`}
94
+ />
95
+ </Svg>
96
+ </Animated.View>
97
+ </View>
98
+ );
99
+ }
100
+
101
+ /**
102
+ * Fallback when `react-native-svg` is not linked — thin rotating highlight arc.
103
+ * Inactive quadrants use handoff mid-blue so the open arc blends on the screen.
104
+ */
105
+ function BorderGradientSpinner({
106
+ size,
107
+ strokeWidth,
108
+ testID,
109
+ spin,
110
+ }: {
111
+ size: number;
112
+ strokeWidth: number;
113
+ testID: string;
114
+ spin: Animated.AnimatedInterpolation<string>;
115
+ }): JSX.Element {
116
+ const blend = HandoffGradient.mid;
117
+
118
+ return (
119
+ <View style={{ width: size, height: size }} testID={testID} collapsable={false}>
120
+ <Animated.View
121
+ collapsable={false}
122
+ style={{
123
+ width: size,
124
+ height: size,
125
+ borderRadius: size / 2,
126
+ borderWidth: strokeWidth,
127
+ borderTopColor: '#FFFFFF',
128
+ borderRightColor: '#00C8AF',
129
+ borderBottomColor: blend,
130
+ borderLeftColor: blend,
131
+ transform: [{ rotate: spin }],
132
+ }}
133
+ />
134
+ </View>
135
+ );
136
+ }
137
+
138
+ /**
139
+ * Spinning gradient arc — mirrors Flutter `GradientSpinner`.
140
+ *
141
+ * Prefer the SVG stroked arc (requires `react-native-svg` in the native build).
142
+ * Falls back to a border arc when SVG is not linked.
143
+ */
144
+ export function GradientSpinner({
145
+ size = 56,
146
+ strokeWidth = 3,
147
+ testID = 'gradient-spinner',
148
+ }: GradientSpinnerProps): JSX.Element {
149
+ const spin = useSpinAnimation();
150
+ const shared = { size, strokeWidth, testID, spin };
151
+
152
+ if (isRNSVGAvailable()) {
153
+ return <SvgGradientSpinner {...shared} />;
154
+ }
155
+ return <BorderGradientSpinner {...shared} />;
156
+ }
@@ -0,0 +1,70 @@
1
+ import { LinearGradient } from 'expo-linear-gradient';
2
+ import type { ReactNode } from 'react';
3
+ import { Image, StyleSheet, Text, View } from 'react-native';
4
+ import { SafeAreaView } from 'react-native-safe-area-context';
5
+ import { Assets } from '../theme/assets';
6
+ import { HandoffGradient } from '../theme/colors';
7
+ import { linkFontFamilyForWeight } from '../theme/fonts';
8
+
9
+ export interface HandoffScreenLayoutProps {
10
+ children: ReactNode;
11
+ testID?: string;
12
+ }
13
+
14
+ /**
15
+ * Full-screen teal→navy gradient with a bottom "Powered by Altareq" footer.
16
+ * Shared by redirect-handoff and resume-processing screens (Flutter parity).
17
+ */
18
+ export function HandoffScreenLayout({ children, testID }: HandoffScreenLayoutProps): JSX.Element {
19
+ return (
20
+ <LinearGradient
21
+ colors={[HandoffGradient.start, HandoffGradient.mid, HandoffGradient.end]}
22
+ locations={[0, 0.45, 1]}
23
+ style={styles.fill}
24
+ >
25
+ <SafeAreaView style={styles.fill} testID={testID}>
26
+ <View style={styles.center}>{children}</View>
27
+ <PoweredByFooter />
28
+ </SafeAreaView>
29
+ </LinearGradient>
30
+ );
31
+ }
32
+
33
+ function PoweredByFooter(): JSX.Element {
34
+ return (
35
+ <View style={styles.footer} testID="handoff-powered-by">
36
+ <Text style={styles.poweredByLabel}>Powered by</Text>
37
+ <Image
38
+ source={Assets.altareqLogoTransparentBg}
39
+ style={styles.logo}
40
+ resizeMode="contain"
41
+ accessibilityLabel="Altareq"
42
+ />
43
+ </View>
44
+ );
45
+ }
46
+
47
+ const styles = StyleSheet.create({
48
+ fill: { flex: 1 },
49
+ center: {
50
+ flex: 1,
51
+ alignItems: 'center',
52
+ justifyContent: 'center',
53
+ paddingHorizontal: 40,
54
+ },
55
+ footer: {
56
+ alignItems: 'center',
57
+ paddingBottom: 36,
58
+ gap: 8,
59
+ },
60
+ poweredByLabel: {
61
+ fontFamily: linkFontFamilyForWeight('400'),
62
+ fontSize: 14,
63
+ color: 'rgba(255,255,255,0.7)',
64
+ },
65
+ logo: {
66
+ height: 40,
67
+ width: 160,
68
+ tintColor: '#FFFFFF',
69
+ },
70
+ });
@@ -0,0 +1,5 @@
1
+ export { CustomStepper, type CustomStepperProps } from './stepper';
2
+ export { LayoutWHeader, type LayoutWHeaderProps } from './layout-w-header';
3
+ export { Footer, type FooterProps } from './footer';
4
+ export { GradientSpinner, type GradientSpinnerProps } from './gradient-spinner';
5
+ export { HandoffScreenLayout, type HandoffScreenLayoutProps } from './handoff-screen-layout';
@@ -0,0 +1,89 @@
1
+ import { Ionicons } from '@expo/vector-icons';
2
+ import type { ReactNode } from 'react';
3
+ import { Image, Pressable, StyleSheet, View } from 'react-native';
4
+ import { Colors } from '../theme';
5
+ import { Assets } from '../theme/assets';
6
+ import { CustomStepper } from './stepper';
7
+
8
+ export interface LayoutWHeaderProps {
9
+ children: ReactNode;
10
+ /** Stepper progress (0 .. 2). Defaults to 0.5, matching Flutter. */
11
+ progress?: number;
12
+ /** When set, shows a leading back arrow like Flutter's AppBar. */
13
+ onBackPress?: () => void;
14
+ /** Disables the back arrow while async work is in-flight. */
15
+ backDisabled?: boolean;
16
+ }
17
+
18
+ /**
19
+ * Shared flow-screen chrome. Port of Flutter `LayoutWHeader`
20
+ * (`lib/src/ui/widgets/layout_w_header.dart`): a white page with a centered
21
+ * Spare logo header, the Altareq white-background logo, a {@link CustomStepper}
22
+ * progress bar, and 22px body padding wrapping the screen content.
23
+ *
24
+ * CBUAE-approved chrome — copy/dimensions match the Flutter SDK exactly.
25
+ */
26
+ export function LayoutWHeader(props: LayoutWHeaderProps): JSX.Element {
27
+ const showBack = props.onBackPress != null;
28
+ return (
29
+ <View style={styles.page} testID="layout-w-header">
30
+ <View style={styles.appBar}>
31
+ {showBack ? (
32
+ <Pressable
33
+ accessibilityRole="button"
34
+ accessibilityLabel="Back"
35
+ testID="layout-w-header-back"
36
+ onPress={props.onBackPress}
37
+ disabled={props.backDisabled}
38
+ hitSlop={8}
39
+ style={[styles.backButton, props.backDisabled && styles.backButtonDisabled]}
40
+ >
41
+ <Ionicons name="arrow-back" size={24} color={Colors.textPrimary} />
42
+ </Pressable>
43
+ ) : null}
44
+ <Image
45
+ source={Assets.spareLogo}
46
+ style={styles.spareLogo}
47
+ resizeMode="contain"
48
+ accessibilityRole="image"
49
+ accessibilityLabel="Spare"
50
+ />
51
+ </View>
52
+ <Image
53
+ source={Assets.altareqLogoWhiteBg}
54
+ style={styles.altareqLogo}
55
+ resizeMode="contain"
56
+ accessibilityRole="image"
57
+ accessibilityLabel="Altareq"
58
+ />
59
+ <View style={styles.stepperWrap}>
60
+ <CustomStepper progress={props.progress ?? 0.5} />
61
+ </View>
62
+ <View style={styles.body}>{props.children}</View>
63
+ </View>
64
+ );
65
+ }
66
+
67
+ const styles = StyleSheet.create({
68
+ page: { flex: 1, backgroundColor: '#FFFFFF' },
69
+ appBar: {
70
+ height: 56,
71
+ alignItems: 'center',
72
+ justifyContent: 'center',
73
+ paddingTop: 8,
74
+ },
75
+ backButton: {
76
+ position: 'absolute',
77
+ left: 8,
78
+ top: 8,
79
+ width: 40,
80
+ height: 40,
81
+ alignItems: 'center',
82
+ justifyContent: 'center',
83
+ },
84
+ backButtonDisabled: { opacity: 0.4 },
85
+ spareLogo: { height: 18, width: 120 },
86
+ altareqLogo: { height: 45, width: '100%', alignSelf: 'center' },
87
+ stepperWrap: { paddingHorizontal: 22, paddingVertical: 16 },
88
+ body: { flex: 1, padding: 22 },
89
+ });
@@ -0,0 +1,44 @@
1
+ import { Ionicons } from '@expo/vector-icons';
2
+ import { Pressable, StyleSheet, View } from 'react-native';
3
+ import { Colors } from '../theme';
4
+
5
+ export interface ModalDismissButtonProps {
6
+ visible: boolean;
7
+ onPress: () => void;
8
+ }
9
+
10
+ export function ModalDismissButton(props: ModalDismissButtonProps): JSX.Element | null {
11
+ if (!props.visible) return null;
12
+ return (
13
+ <View style={styles.dismissBar}>
14
+ <Pressable
15
+ accessibilityRole="button"
16
+ accessibilityLabel="Close"
17
+ testID="spare-link-modal-dismiss"
18
+ onPress={props.onPress}
19
+ hitSlop={16}
20
+ style={styles.dismissPressable}
21
+ >
22
+ <Ionicons name="close" size={18} color={Colors.textPrimary} />
23
+ </Pressable>
24
+ </View>
25
+ );
26
+ }
27
+
28
+ const styles = StyleSheet.create({
29
+ dismissBar: {
30
+ flexDirection: 'row',
31
+ justifyContent: 'flex-end',
32
+ paddingHorizontal: 12,
33
+ paddingTop: 8,
34
+ paddingBottom: 4,
35
+ },
36
+ dismissPressable: {
37
+ width: 32,
38
+ height: 32,
39
+ alignItems: 'center',
40
+ justifyContent: 'center',
41
+ borderRadius: 16,
42
+ backgroundColor: Colors.surfaceMuted,
43
+ },
44
+ });
@@ -0,0 +1,126 @@
1
+ import { StyleSheet, Text, View } from 'react-native';
2
+ import { FONT_FAMILY } from '../theme';
3
+
4
+ const TOTAL_STEPS = 3;
5
+ const STEP_LABELS = ['Consent', 'Authorize', 'Complete'] as const;
6
+
7
+ export interface CustomStepperProps {
8
+ /**
9
+ * Current step index in the range `0 .. TOTAL_STEPS - 1` (0 → 2 for 3 steps).
10
+ * Matches Flutter's `CustomStepper.progress`.
11
+ */
12
+ progress: number;
13
+ }
14
+
15
+ /**
16
+ * Three-step progress indicator. Port of Flutter `CustomStepper`
17
+ * (`lib/src/ui/widgets/stepper.dart`): a grey baseline with a black fill up to
18
+ * the current step, numbered circles, and "Consent / Authorize / Complete"
19
+ * labels.
20
+ */
21
+ export function CustomStepper(props: CustomStepperProps): JSX.Element {
22
+ const maxProgress = TOTAL_STEPS - 1;
23
+ const progressPercent = Math.min(1, Math.max(0, props.progress / maxProgress));
24
+
25
+ return (
26
+ <View testID="custom-stepper">
27
+ <View style={styles.track}>
28
+ <View style={styles.lineArea}>
29
+ {/* Background baseline */}
30
+ <View style={styles.baseline} />
31
+ {/* Filled progress line — width is a percent of the inset lineArea
32
+ (not the padded track), so it stays aligned with the baseline and
33
+ never overshoots the last circle. */}
34
+ <View style={[styles.fill, { width: `${progressPercent * 100}%` }]} />
35
+ {/* Numbered circles */}
36
+ <View style={styles.circlesRow}>
37
+ {STEP_LABELS.map((label, index) => {
38
+ const isFilled = props.progress >= index;
39
+ return (
40
+ <View
41
+ key={label}
42
+ testID={`stepper-circle-${index}`}
43
+ style={[styles.circle, isFilled ? styles.circleFilled : styles.circleEmpty]}
44
+ >
45
+ <Text style={[styles.circleText, isFilled && styles.circleTextFilled]}>
46
+ {index + 1}
47
+ </Text>
48
+ </View>
49
+ );
50
+ })}
51
+ </View>
52
+ </View>
53
+ </View>
54
+ <View style={styles.labelsRow}>
55
+ {STEP_LABELS.map((label) => (
56
+ <Text key={label} style={styles.label}>
57
+ {label}
58
+ </Text>
59
+ ))}
60
+ </View>
61
+ </View>
62
+ );
63
+ }
64
+
65
+ const LINE_COLOR_BG = '#D6D6DB'; // Colors.grey.shade300
66
+ const CIRCLE_SIZE = 32;
67
+
68
+ const styles = StyleSheet.create({
69
+ track: {
70
+ height: 40,
71
+ justifyContent: 'center',
72
+ paddingHorizontal: 12,
73
+ },
74
+ // Inset content box (track width − 24). The baseline and the percent-width
75
+ // fill are positioned relative to this, so they share one reference span.
76
+ lineArea: {
77
+ justifyContent: 'center',
78
+ },
79
+ baseline: {
80
+ position: 'absolute',
81
+ left: 0,
82
+ right: 0,
83
+ top: 18,
84
+ height: 4,
85
+ backgroundColor: LINE_COLOR_BG,
86
+ },
87
+ fill: {
88
+ position: 'absolute',
89
+ left: 0,
90
+ top: 18,
91
+ height: 4,
92
+ backgroundColor: '#000000',
93
+ borderTopRightRadius: 12,
94
+ borderBottomRightRadius: 12,
95
+ },
96
+ circlesRow: {
97
+ flexDirection: 'row',
98
+ justifyContent: 'space-between',
99
+ alignItems: 'center',
100
+ },
101
+ circle: {
102
+ width: CIRCLE_SIZE,
103
+ height: CIRCLE_SIZE,
104
+ borderRadius: CIRCLE_SIZE / 2,
105
+ alignItems: 'center',
106
+ justifyContent: 'center',
107
+ },
108
+ circleFilled: { backgroundColor: '#000000' },
109
+ circleEmpty: { backgroundColor: LINE_COLOR_BG },
110
+ circleText: {
111
+ fontFamily: FONT_FAMILY,
112
+ fontWeight: '700',
113
+ color: '#000000',
114
+ },
115
+ circleTextFilled: { color: '#FFFFFF' },
116
+ labelsRow: {
117
+ flexDirection: 'row',
118
+ justifyContent: 'space-between',
119
+ marginTop: 4,
120
+ },
121
+ label: {
122
+ fontFamily: FONT_FAMILY,
123
+ fontSize: 14,
124
+ color: '#000000',
125
+ },
126
+ });
package/src/version.ts ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SDK version reported in telemetry and the default User-Agent. This file is
3
+ * regenerated from `package.json` by the root `version` npm script on every
4
+ * release bump (see the `version` script in the repo-root package.json), so it
5
+ * always matches the published version — do not edit the literal by hand.
6
+ */
7
+ export const SDK_VERSION = '0.1.0-beta.0' as const;