@btndprojects/loam-ui-native 0.2.1 → 0.3.1

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 (365) hide show
  1. package/dist/accordion/index.js +4 -2
  2. package/dist/adaptive/index.js +12 -2
  3. package/dist/address-block/index.js +23 -0
  4. package/dist/alert/index.js +5 -2
  5. package/dist/analyzer/index.js +13 -5
  6. package/dist/announcement/index.js +15 -5
  7. package/dist/appearance-picker/index.js +15 -0
  8. package/dist/audio-player/index.js +26 -2
  9. package/dist/avatar/index.js +2 -2
  10. package/dist/avatar-group/index.js +5 -3
  11. package/dist/badge/index.js +6 -3
  12. package/dist/banner/index.js +3 -2
  13. package/dist/board/index.js +13 -6
  14. package/dist/button/index.js +6 -3
  15. package/dist/camera-permission/index.js +19 -11
  16. package/dist/capture-result/index.js +26 -16
  17. package/dist/card/index.js +7 -3
  18. package/dist/card-form/index.js +15 -9
  19. package/dist/carousel/index.js +3 -1
  20. package/dist/chart/index.js +15 -5
  21. package/dist/charts/index.js +18 -5
  22. package/dist/chat/index.js +35 -10
  23. package/dist/checkbox/index.js +6 -4
  24. package/dist/checklist/index.js +16 -7
  25. package/dist/checkout/index.js +25 -12
  26. package/dist/chip/index.js +7 -4
  27. package/dist/chunk-2BZD3NAP.js +1110 -0
  28. package/dist/chunk-2YKVID2V.js +35 -0
  29. package/dist/{chunk-H7DWSL4O.js → chunk-36DA3IPO.js} +115 -27
  30. package/dist/chunk-3A56MIAN.js +599 -0
  31. package/dist/{chunk-AEB7KCHQ.js → chunk-3SCKCWF5.js} +39 -28
  32. package/dist/chunk-3TZNDHKO.js +187 -0
  33. package/dist/chunk-43K3BLXV.js +9 -0
  34. package/dist/chunk-46ZJIQ2Z.js +208 -0
  35. package/dist/{chunk-PMMTGBBS.js → chunk-4CZMQDQL.js} +75 -22
  36. package/dist/chunk-4QCR3K2J.js +1 -0
  37. package/dist/{chunk-E2E3I5W2.js → chunk-5DTKORLI.js} +54 -45
  38. package/dist/{chunk-5VFZRGVD.js → chunk-5J4WFXFA.js} +32 -15
  39. package/dist/{chunk-JBMLWFSJ.js → chunk-5KJ7TEQ6.js} +83 -48
  40. package/dist/chunk-5NU33TXK.js +529 -0
  41. package/dist/chunk-6KSUS7DF.js +690 -0
  42. package/dist/{chunk-3WEZCGHX.js → chunk-6RV6UW2J.js} +140 -56
  43. package/dist/chunk-6RZM7RP2.js +520 -0
  44. package/dist/{chunk-JJLPBRVZ.js → chunk-75BDCC7K.js} +2 -0
  45. package/dist/{chunk-U5NLHYV6.js → chunk-7CGJBQUA.js} +333 -22
  46. package/dist/{chunk-I4FHVKEC.js → chunk-7IVF6JLJ.js} +16 -5
  47. package/dist/chunk-7IWCGXYA.js +143 -0
  48. package/dist/chunk-7LM4ASFH.js +172 -0
  49. package/dist/chunk-7MCEJFWV.js +341 -0
  50. package/dist/{chunk-2SY63FCH.js → chunk-7NGMUVNU.js} +66 -30
  51. package/dist/chunk-7PBSIXT7.js +355 -0
  52. package/dist/chunk-7QOYGENL.js +443 -0
  53. package/dist/{chunk-TDMG26JI.js → chunk-A7SWYDE5.js} +40 -9
  54. package/dist/chunk-ADHPJALR.js +3051 -0
  55. package/dist/{chunk-ZLTO5VQI.js → chunk-ALJYZLNQ.js} +131 -61
  56. package/dist/{chunk-GDKVKNR2.js → chunk-AQ5FIG74.js} +110 -30
  57. package/dist/chunk-B2MMZZQB.js +426 -0
  58. package/dist/{chunk-QYPE5JX3.js → chunk-B7JZ3N5G.js} +142 -105
  59. package/dist/{chunk-QHTVYA65.js → chunk-BL37SW6G.js} +388 -102
  60. package/dist/chunk-BTRMA7GC.js +21 -0
  61. package/dist/{chunk-FUMHAAF3.js → chunk-C7IUWIUZ.js} +243 -92
  62. package/dist/chunk-CA3DUVYD.js +10 -0
  63. package/dist/{chunk-FYWNRX4F.js → chunk-CBCJSO2B.js} +143 -13
  64. package/dist/chunk-CHPX4MFI.js +239 -0
  65. package/dist/chunk-CLGAMIOT.js +648 -0
  66. package/dist/chunk-CUE7VML6.js +1141 -0
  67. package/dist/{chunk-D5N5QWI7.js → chunk-CVU6S2E5.js} +497 -235
  68. package/dist/{chunk-U23FYWME.js → chunk-CXPQMA6Z.js} +101 -34
  69. package/dist/{chunk-36EC2T6P.js → chunk-D2LN4I7I.js} +1 -1
  70. package/dist/{chunk-TLCIR6RG.js → chunk-D34LNBO5.js} +411 -155
  71. package/dist/{chunk-FV6HMP7W.js → chunk-D4BCQICM.js} +207 -65
  72. package/dist/chunk-EABKIIA4.js +1 -0
  73. package/dist/chunk-EICSYRAG.js +341 -0
  74. package/dist/chunk-EMWAJMAS.js +83 -0
  75. package/dist/chunk-EOLZWRV6.js +149 -0
  76. package/dist/chunk-EOQVTGB6.js +350 -0
  77. package/dist/{chunk-ZVATDZOM.js → chunk-ESGUHNB2.js} +106 -28
  78. package/dist/{chunk-46MMSDGL.js → chunk-F2KNBPKY.js} +104 -73
  79. package/dist/{chunk-KQZ3GLHR.js → chunk-G7H3NX3G.js} +40 -17
  80. package/dist/{chunk-3QMEOFW5.js → chunk-GM7YIPB7.js} +421 -207
  81. package/dist/{chunk-QHAITQIF.js → chunk-GVQQG435.js} +256 -86
  82. package/dist/chunk-HE43OMEL.js +1056 -0
  83. package/dist/{chunk-XIDTBCBA.js → chunk-HHOMFQ7R.js} +1049 -207
  84. package/dist/chunk-HNAKS4Z3.js +207 -0
  85. package/dist/chunk-HP6ST2OW.js +352 -0
  86. package/dist/chunk-HW3OWDTU.js +1 -0
  87. package/dist/{chunk-QP3KMOVF.js → chunk-HZDB44K4.js} +24 -14
  88. package/dist/chunk-I6CUP2LW.js +1155 -0
  89. package/dist/chunk-ICV4Y2WY.js +27 -0
  90. package/dist/chunk-IHSIENOE.js +3950 -0
  91. package/dist/{chunk-T5LTPKX6.js → chunk-IMMALLRU.js} +53 -25
  92. package/dist/{chunk-C4GTDLRC.js → chunk-JA6TK7H2.js} +154 -67
  93. package/dist/{chunk-EVOIGUBI.js → chunk-JAVZ5JPV.js} +43 -13
  94. package/dist/{chunk-CPTOADB2.js → chunk-JCMTP3E4.js} +527 -201
  95. package/dist/{chunk-OJQUBQWA.js → chunk-JCXFFK64.js} +73 -16
  96. package/dist/{chunk-V2OEB75Z.js → chunk-JWCVBFDU.js} +75 -35
  97. package/dist/chunk-JXRTD5RI.js +414 -0
  98. package/dist/chunk-JYIUZUIQ.js +1567 -0
  99. package/dist/chunk-K3TK3GIV.js +219 -0
  100. package/dist/chunk-KEVZIHM2.js +1511 -0
  101. package/dist/{chunk-VAOAKWUK.js → chunk-KHZDNQQD.js} +42 -8
  102. package/dist/chunk-KL4GDV4V.js +131 -0
  103. package/dist/{chunk-Q6NKEPRE.js → chunk-KNILMM4H.js} +73 -28
  104. package/dist/chunk-KRBUZV45.js +25 -0
  105. package/dist/{chunk-7BUIKDD6.js → chunk-KXLDK6HB.js} +91 -30
  106. package/dist/chunk-KZ3X7TSL.js +196 -0
  107. package/dist/{chunk-5UTRIXQ6.js → chunk-L2WMOA2V.js} +187 -43
  108. package/dist/chunk-L4D5LHCH.js +109 -0
  109. package/dist/{chunk-W63AJTM7.js → chunk-LAUJPLDB.js} +236 -71
  110. package/dist/{chunk-TN2ZNJUI.js → chunk-LGNTP5XA.js} +47 -13
  111. package/dist/chunk-LUZFCCSD.js +271 -0
  112. package/dist/{chunk-XTORZWRF.js → chunk-LXJCP4PL.js} +111 -30
  113. package/dist/chunk-MCOZJWPU.js +731 -0
  114. package/dist/{chunk-SATMR6SG.js → chunk-MG4SKWLL.js} +780 -142
  115. package/dist/{chunk-JUYWSSKW.js → chunk-MPEPTSER.js} +95 -16
  116. package/dist/chunk-MWPJ4YGP.js +1 -0
  117. package/dist/{chunk-LUMVGO2K.js → chunk-N7AX4OA4.js} +80 -29
  118. package/dist/chunk-NHSLM6SE.js +523 -0
  119. package/dist/{chunk-IT6FUXXG.js → chunk-NNJLVA7M.js} +43 -11
  120. package/dist/{chunk-TQVAIKFD.js → chunk-NZG75DGA.js} +102 -62
  121. package/dist/chunk-O76QXRBV.js +431 -0
  122. package/dist/chunk-OANH27AK.js +223 -0
  123. package/dist/chunk-OCHPK5YV.js +609 -0
  124. package/dist/chunk-OMHVEVX4.js +436 -0
  125. package/dist/{chunk-SWS5JQIF.js → chunk-ONKQUJWD.js} +187 -60
  126. package/dist/chunk-OVTK7A6T.js +615 -0
  127. package/dist/{chunk-UXGIW7OK.js → chunk-PCEFCOLN.js} +5 -1
  128. package/dist/{chunk-QIKT7LIB.js → chunk-PFLNFIVB.js} +91 -23
  129. package/dist/chunk-PHSZY37H.js +300 -0
  130. package/dist/chunk-PJLTKDVY.js +18 -0
  131. package/dist/{chunk-SHHY5OMK.js → chunk-PK7BN3MI.js} +83 -15
  132. package/dist/{chunk-YXOAPXMU.js → chunk-PWFRDRGS.js} +101 -14
  133. package/dist/{chunk-TY4MTKQJ.js → chunk-PYPMD46W.js} +332 -66
  134. package/dist/chunk-Q6CCHDI7.js +331 -0
  135. package/dist/chunk-QFA5WS2A.js +750 -0
  136. package/dist/chunk-QJMMM4RC.js +124 -0
  137. package/dist/chunk-QYWEVAM6.js +407 -0
  138. package/dist/chunk-R5T4VZ7Z.js +126 -0
  139. package/dist/chunk-R77HFLZD.js +1 -0
  140. package/dist/{chunk-LMPHCVJJ.js → chunk-RAESDNU5.js} +162 -68
  141. package/dist/chunk-RBYQUXNL.js +1 -0
  142. package/dist/chunk-RCM3DT5E.js +1 -0
  143. package/dist/chunk-RGNY56L7.js +282 -0
  144. package/dist/chunk-RIK6UX2K.js +344 -0
  145. package/dist/{chunk-5LAAAXFP.js → chunk-RJA3RXO3.js} +63 -54
  146. package/dist/chunk-RJYRJ3LD.js +1 -0
  147. package/dist/chunk-RMA3NOY4.js +599 -0
  148. package/dist/{chunk-VDPK5CY4.js → chunk-RSWKKAHK.js} +143 -61
  149. package/dist/{chunk-B7N4ASYE.js → chunk-RVOIIX3V.js} +17 -45
  150. package/dist/chunk-SA2RRBGT.js +1077 -0
  151. package/dist/{chunk-7OVVSVEZ.js → chunk-SG3J4R45.js} +440 -169
  152. package/dist/chunk-SPUK7JD4.js +238 -0
  153. package/dist/chunk-SWXV2K5N.js +434 -0
  154. package/dist/chunk-SYJEPXP6.js +1303 -0
  155. package/dist/{chunk-LKFC4CS7.js → chunk-SZLI34TA.js} +18 -9
  156. package/dist/{chunk-NBEF4EPJ.js → chunk-T77WJA74.js} +131 -16
  157. package/dist/chunk-TDWWVJA4.js +630 -0
  158. package/dist/chunk-TFHI5XDR.js +610 -0
  159. package/dist/chunk-TH4PW2WU.js +17 -0
  160. package/dist/chunk-TTQ24HQX.js +12 -0
  161. package/dist/chunk-TUACVJNG.js +12 -0
  162. package/dist/{chunk-F5B3UINI.js → chunk-TUL5RUIA.js} +171 -62
  163. package/dist/{chunk-C6APNDVA.js → chunk-TYOSA7JG.js} +63 -34
  164. package/dist/chunk-TYQTMMEV.js +1 -0
  165. package/dist/{chunk-DW3L54DQ.js → chunk-TZO6YDS7.js} +53 -12
  166. package/dist/{chunk-67IZZ2MJ.js → chunk-U3ETF22F.js} +75 -30
  167. package/dist/{chunk-EDCBJV7J.js → chunk-U6BYHD2N.js} +87 -31
  168. package/dist/{chunk-ENP3BMZU.js → chunk-UF6EJXPQ.js} +16 -1
  169. package/dist/{chunk-IPUNJMAQ.js → chunk-UNNQIPGK.js} +304 -68
  170. package/dist/chunk-UQVO6AJV.js +171 -0
  171. package/dist/{chunk-FZGAAOKS.js → chunk-VFDQAAIW.js} +138 -32
  172. package/dist/chunk-VIUE3VQT.js +1 -0
  173. package/dist/{chunk-5RENVKBQ.js → chunk-VJLSSSGC.js} +126 -30
  174. package/dist/chunk-VLMT6KYT.js +350 -0
  175. package/dist/chunk-VMHGBUGS.js +35 -0
  176. package/dist/{chunk-4IZXHVFJ.js → chunk-VQKPBYW6.js} +228 -172
  177. package/dist/{chunk-G6UESEVN.js → chunk-VSSTWLC5.js} +49 -11
  178. package/dist/{chunk-TRGFFU6A.js → chunk-VZYYZRPN.js} +866 -330
  179. package/dist/{chunk-JLC6PM5S.js → chunk-WAIJCD2V.js} +128 -54
  180. package/dist/chunk-WFMQ3WKM.js +378 -0
  181. package/dist/chunk-WJ2KDRMY.js +66 -0
  182. package/dist/chunk-WKFZJO54.js +437 -0
  183. package/dist/{chunk-QEYFDRHR.js → chunk-WVVD3XOV.js} +146 -84
  184. package/dist/chunk-XAIWMSLB.js +1 -0
  185. package/dist/chunk-XBXUBBJZ.js +98 -0
  186. package/dist/chunk-XCU7MYBJ.js +1 -0
  187. package/dist/chunk-XHE4PGCI.js +717 -0
  188. package/dist/chunk-XRSJ32M3.js +331 -0
  189. package/dist/chunk-XTCVOEAW.js +1 -0
  190. package/dist/chunk-XWGXVQF6.js +58 -0
  191. package/dist/{chunk-MKSNFG7H.js → chunk-Y3XKKO5K.js} +191 -109
  192. package/dist/chunk-Y4QNMBLO.js +533 -0
  193. package/dist/chunk-Y5H4CTKO.js +1 -0
  194. package/dist/chunk-YBQIN75A.js +403 -0
  195. package/dist/{chunk-PNF3NKB5.js → chunk-YJ5PXOX3.js} +28 -11
  196. package/dist/{chunk-M656FYNH.js → chunk-YLRSRUPS.js} +63 -49
  197. package/dist/chunk-YM6MPJ4A.js +1 -0
  198. package/dist/chunk-YV7KZENV.js +200 -0
  199. package/dist/chunk-Z7I4ZSO6.js +316 -0
  200. package/dist/{chunk-EY4DD67D.js → chunk-ZIRMWD2B.js} +199 -126
  201. package/dist/chunk-ZPMG3FWU.js +75 -0
  202. package/dist/{chunk-QRUMA22E.js → chunk-ZTXMK2G7.js} +92 -43
  203. package/dist/{chunk-2OLKPG4E.js → chunk-ZVJCWXAL.js} +189 -87
  204. package/dist/{chunk-YAAHPATV.js → chunk-ZYQ23DPT.js} +49 -34
  205. package/dist/coachmark/index.js +7 -3
  206. package/dist/code-block/index.js +4 -3
  207. package/dist/color-field/index.js +12 -4
  208. package/dist/color-picker/index.js +23 -0
  209. package/dist/commerce/index.js +27 -16
  210. package/dist/confirm/index.js +31 -0
  211. package/dist/connection-card/index.js +34 -0
  212. package/dist/connectivity/index.js +3 -2
  213. package/dist/context-menu/index.js +10 -2
  214. package/dist/copy-button/index.js +3 -2
  215. package/dist/data-grid/index.js +30 -17
  216. package/dist/date-range-picker/index.js +19 -9
  217. package/dist/description-list/index.js +4 -1
  218. package/dist/device-frame/index.js +30 -0
  219. package/dist/dialog/index.js +8 -2
  220. package/dist/divider/index.js +2 -0
  221. package/dist/empty-state/index.js +13 -2
  222. package/dist/error-summary/index.js +7 -2
  223. package/dist/fab/index.js +4 -2
  224. package/dist/file-manager/index.js +33 -17
  225. package/dist/file-upload/index.js +12 -6
  226. package/dist/filter-bar/index.js +10 -6
  227. package/dist/flow-run/index.js +19 -12
  228. package/dist/form/index.js +30 -3
  229. package/dist/gallery/index.js +5 -2
  230. package/dist/hold-to-confirm/index.js +4 -2
  231. package/dist/hover-card/index.js +18 -0
  232. package/dist/icon-tile/index.js +10 -0
  233. package/dist/image/index.js +9 -0
  234. package/dist/index.d.ts +29826 -17941
  235. package/dist/index.js +197 -141
  236. package/dist/infinite-list/index.js +4 -2
  237. package/dist/inline-edit/index.js +5 -4
  238. package/dist/input/index.js +4 -3
  239. package/dist/interactions/index.js +4 -1
  240. package/dist/invoice/index.js +18 -9
  241. package/dist/job-row/index.js +22 -0
  242. package/dist/json-inspector/index.js +20 -0
  243. package/dist/kbd/index.js +2 -2
  244. package/dist/keyboard/index.js +7 -2
  245. package/dist/level-meter/index.js +9 -0
  246. package/dist/list-row/index.js +11 -3
  247. package/dist/log-viewer/index.js +9 -2
  248. package/dist/map-view/index.js +13 -2
  249. package/dist/markdown/index.js +8 -5
  250. package/dist/metric/index.js +6 -3
  251. package/dist/metric-strip/index.js +12 -0
  252. package/dist/money/index.js +11 -4
  253. package/dist/nav-drawer/index.js +6 -2
  254. package/dist/nav-header/index.js +10 -4
  255. package/dist/navigation/index.js +29 -2
  256. package/dist/notification-center/index.js +24 -10
  257. package/dist/number-roll/index.js +3 -1
  258. package/dist/onboarding-pager/index.js +22 -0
  259. package/dist/one-handed/index.js +2 -2
  260. package/dist/os-surfaces/index.js +6 -3
  261. package/dist/otp/index.js +5 -4
  262. package/dist/page-header/index.js +2 -1
  263. package/dist/pagination/index.js +4 -2
  264. package/dist/payment-method/index.js +17 -11
  265. package/dist/payment-status/index.js +22 -14
  266. package/dist/permission/index.js +18 -2
  267. package/dist/picker/index.js +17 -6
  268. package/dist/progress/index.js +7 -2
  269. package/dist/provenance/index.js +16 -0
  270. package/dist/pull-to-refresh/index.js +2 -2
  271. package/dist/qr-code/index.js +16 -0
  272. package/dist/query-builder/index.js +30 -0
  273. package/dist/radio-group/index.js +6 -4
  274. package/dist/rating/index.js +7 -2
  275. package/dist/receivables/index.js +31 -18
  276. package/dist/recording-indicator/index.js +21 -0
  277. package/dist/refund/index.js +24 -15
  278. package/dist/repeatable-rows/index.js +19 -0
  279. package/dist/save-status/index.js +5 -3
  280. package/dist/screen/index.js +3 -0
  281. package/dist/scroll-area/index.js +1 -1
  282. package/dist/search-field/index.js +8 -3
  283. package/dist/secret-field/index.js +19 -0
  284. package/dist/section-header/index.js +4 -0
  285. package/dist/segmented-control/index.js +2 -2
  286. package/dist/sheet/index.js +9 -3
  287. package/dist/shortcuts-sheet/index.js +2 -0
  288. package/dist/sign-in-screen/index.js +25 -0
  289. package/dist/skeleton/index.js +3 -1
  290. package/dist/slider/index.js +2 -1
  291. package/dist/sortable/index.js +4 -3
  292. package/dist/spinner/index.js +2 -1
  293. package/dist/split-button/index.js +17 -5
  294. package/dist/spotlight/index.js +7 -1
  295. package/dist/stack/index.js +2 -0
  296. package/dist/stage-timeline/index.js +6 -3
  297. package/dist/status-dot/index.js +6 -2
  298. package/dist/stepper/index.js +7 -3
  299. package/dist/streaming-text/index.js +2 -1
  300. package/dist/survey/index.js +24 -14
  301. package/dist/switch/index.js +6 -2
  302. package/dist/system-state/index.js +12 -4
  303. package/dist/tab-bar/index.js +10 -2
  304. package/dist/tabs/index.js +10 -2
  305. package/dist/tags-input/index.js +8 -5
  306. package/dist/text/index.js +4 -0
  307. package/dist/textarea/index.js +5 -4
  308. package/dist/thinking/index.js +4 -1
  309. package/dist/tile-rail/index.js +10 -0
  310. package/dist/time-field/index.js +15 -7
  311. package/dist/time-range-control/index.js +26 -12
  312. package/dist/timeline/index.js +2 -2
  313. package/dist/toast/index.js +4 -2
  314. package/dist/toolbar/index.js +3 -2
  315. package/dist/tour/index.js +12 -10
  316. package/dist/transcript/index.js +28 -0
  317. package/dist/truncation-notice/index.js +2 -2
  318. package/dist/update-notice/index.js +15 -8
  319. package/dist/video-player/index.js +26 -2
  320. package/dist/viewfinder/index.js +12 -4
  321. package/dist/widget/index.js +11 -4
  322. package/dist/wizard/index.js +7 -4
  323. package/package.json +13 -13
  324. package/dist/chunk-2PKYGLQ6.js +0 -268
  325. package/dist/chunk-2SWKL3AJ.js +0 -466
  326. package/dist/chunk-2TXERVVA.js +0 -1081
  327. package/dist/chunk-3DUWIYV5.js +0 -437
  328. package/dist/chunk-3NMD74ZU.js +0 -4
  329. package/dist/chunk-4DS5ZWVC.js +0 -83
  330. package/dist/chunk-6YAQBXB3.js +0 -93
  331. package/dist/chunk-74FLKD24.js +0 -237
  332. package/dist/chunk-CMTVNF3D.js +0 -104
  333. package/dist/chunk-DN7MNQIP.js +0 -799
  334. package/dist/chunk-DVGBZ3TX.js +0 -455
  335. package/dist/chunk-F3H33DQX.js +0 -300
  336. package/dist/chunk-FAJI7BSC.js +0 -443
  337. package/dist/chunk-G3AFC24V.js +0 -60
  338. package/dist/chunk-HJLPZA4X.js +0 -369
  339. package/dist/chunk-HYEOQWT7.js +0 -647
  340. package/dist/chunk-IDM7JJMO.js +0 -110
  341. package/dist/chunk-IVKMZ7BB.js +0 -326
  342. package/dist/chunk-IXKWIFWZ.js +0 -334
  343. package/dist/chunk-JV5YOTOB.js +0 -164
  344. package/dist/chunk-KFJGFLMW.js +0 -158
  345. package/dist/chunk-LQP4KEXZ.js +0 -214
  346. package/dist/chunk-NTQ2F3AU.js +0 -257
  347. package/dist/chunk-O5V4TG3V.js +0 -329
  348. package/dist/chunk-OWAMM2DK.js +0 -280
  349. package/dist/chunk-PID3NJB7.js +0 -405
  350. package/dist/chunk-QDZGFXQD.js +0 -176
  351. package/dist/chunk-QPWDDJJ4.js +0 -385
  352. package/dist/chunk-ROCUG24E.js +0 -416
  353. package/dist/chunk-RU3ZPNL6.js +0 -1986
  354. package/dist/chunk-RXSCIO6W.js +0 -153
  355. package/dist/chunk-SKWO3SZF.js +0 -2284
  356. package/dist/chunk-UQGBTPXH.js +0 -218
  357. package/dist/chunk-UYGDJWMN.js +0 -273
  358. package/dist/chunk-W74TXYFB.js +0 -107
  359. package/dist/chunk-WRDSPUE7.js +0 -417
  360. package/dist/chunk-XBZGDDMR.js +0 -105
  361. package/dist/chunk-XN4KG3P4.js +0 -1040
  362. package/dist/chunk-XQXMLMH3.js +0 -211
  363. package/dist/chunk-ZECZOOSB.js +0 -245
  364. /package/dist/{chunk-VFCUIDRT.js → chunk-3BKLBYPK.js} +0 -0
  365. /package/dist/{chunk-GEIGMWNF.js → chunk-QNZII37O.js} +0 -0
@@ -1,17 +1,24 @@
1
- import { OTP } from './chunk-67IZZ2MJ.js';
2
- import { SecurePayLabel } from './chunk-JV5YOTOB.js';
3
- import { Amount } from './chunk-QHAITQIF.js';
4
- import { DescriptionList } from './chunk-QIKT7LIB.js';
5
- import { Spinner } from './chunk-KQZ3GLHR.js';
6
- import { usePayLabels } from './chunk-GEIGMWNF.js';
7
- import { Badge } from './chunk-TN2ZNJUI.js';
1
+ import { PanelToneContext, panelMutedInk, PanelRoot, PanelFooter, panelSurface } from './chunk-R5T4VZ7Z.js';
2
+ import { OTP } from './chunk-U3ETF22F.js';
3
+ import { SecurePayLabel } from './chunk-7MCEJFWV.js';
4
+ import { Amount } from './chunk-GVQQG435.js';
5
+ import { DescriptionList } from './chunk-PFLNFIVB.js';
6
+ import { usePayLabels } from './chunk-QNZII37O.js';
7
+ import { formatTime } from './chunk-CA3DUVYD.js';
8
+ import { DismissButton } from './chunk-Z7I4ZSO6.js';
9
+ import { Button } from './chunk-5DTKORLI.js';
10
+ import { resolveTextRole } from './chunk-L4D5LHCH.js';
11
+ import { Badge } from './chunk-LGNTP5XA.js';
12
+ import { Skeleton } from './chunk-YJ5PXOX3.js';
13
+ import { softToneSkin } from './chunk-PJLTKDVY.js';
8
14
  import { expandedProps } from './chunk-W23G6JLF.js';
9
- import { Button } from './chunk-E2E3I5W2.js';
15
+ import { Spinner } from './chunk-G7H3NX3G.js';
16
+ import { isAndroidIdiom } from './chunk-TH4PW2WU.js';
10
17
  import { useLabels, useLoamLocale } from './chunk-APCWFOZW.js';
11
- import { Icon } from './chunk-UXGIW7OK.js';
12
- import { useResolvedMotion } from './chunk-J64KGCGX.js';
13
- import * as React4 from 'react';
14
- import { Animated, Easing, View, Text, Pressable } from 'react-native';
18
+ import { Icon } from './chunk-PCEFCOLN.js';
19
+ import { springConfig, motionTiming, useResolvedMotion } from './chunk-J64KGCGX.js';
20
+ import * as React from 'react';
21
+ import { StyleSheet, Animated, Easing, View, Text, Pressable } from 'react-native';
15
22
  import { createStyleSheet, useLoamTheme, useStyles } from '@btndprojects/loam-theme-native';
16
23
  import { STATES, stateText, isTerminal, declineText, recoveryActions, declineHeadline, nothingChargedText, THREE_DS_TIMEOUT_SECONDS } from '@btndprojects/loam-pay';
17
24
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -42,6 +49,7 @@ var DEFAULT_LABELS = {
42
49
  nextStep: "Next step",
43
50
  declineCode: "decline_code",
44
51
  network: "network",
52
+ dismiss: "Dismiss",
45
53
  soft: "soft",
46
54
  hard: "hard",
47
55
  attempt: "attempt",
@@ -59,6 +67,10 @@ function StatePill({
59
67
  label,
60
68
  showCode = false,
61
69
  pulse = true,
70
+ size = "sm",
71
+ variant = "soft",
72
+ count,
73
+ error,
62
74
  labels: labelsProp,
63
75
  style
64
76
  }) {
@@ -68,8 +80,8 @@ function StatePill({
68
80
  const def = STATES[state];
69
81
  const pulsing = pulse && state === "processing";
70
82
  const words = label ?? stateText(state, pay).label;
71
- const dim = React4.useRef(new Animated.Value(1)).current;
72
- React4.useEffect(() => {
83
+ const dim = React.useRef(new Animated.Value(1)).current;
84
+ React.useEffect(() => {
73
85
  if (!pulsing || theme.reduceMotion) {
74
86
  dim.setValue(1);
75
87
  return;
@@ -94,13 +106,15 @@ function StatePill({
94
106
  children: /* @__PURE__ */ jsx(
95
107
  Badge,
96
108
  {
97
- variant: TONE_VARIANT[def.tone],
98
- size: "sm",
99
- accessibilityLabel: showCode ? `${words} ${state}` : words,
109
+ variant: error ? "danger" : TONE_VARIANT[def.tone],
110
+ size,
111
+ outline: variant === "outline",
112
+ accessibilityLabel: typeof error === "string" && error ? error : `${showCode ? `${words} ${state}` : words}${count !== void 0 ? ` ${count}` : ""}`,
100
113
  dot: true,
101
114
  dotStyle: { opacity: dim },
102
115
  children: /* @__PURE__ */ jsxs(View, { style: styles.pillRow, children: [
103
- /* @__PURE__ */ jsx(Text, { style: [styles.pillLabel, { color: ink }], children: words }),
116
+ /* @__PURE__ */ jsx(Text, { style: [styles.pillLabel, { color: error ? theme.color.dangerOnSoft : ink }], children: typeof error === "string" && error ? error : words }),
117
+ count !== void 0 && !error ? /* @__PURE__ */ jsx(Text, { style: [styles.pillCode, { color: ink }], children: count }) : null,
104
118
  showCode ? /* @__PURE__ */ jsx(Text, { style: [styles.pillCode, { color: ink }], children: state }) : null
105
119
  ] })
106
120
  }
@@ -115,6 +129,7 @@ function ProcessingStepRow({
115
129
  }) {
116
130
  const theme = useLoamTheme("payment-status");
117
131
  const { styles } = useStyles(sheet);
132
+ const panelTone = React.useContext(PanelToneContext);
118
133
  const currentAttr = status === "active" ? { "aria-current": "step" } : {};
119
134
  return /* @__PURE__ */ jsxs(
120
135
  View,
@@ -142,7 +157,7 @@ function ProcessingStepRow({
142
157
  status === "active" ? styles.stepLabelActive : (
143
158
  // The finished step settles on a *measured* ink rather than an
144
159
  // opacity — see the module note.
145
- status === "done" ? styles.stepLabelDone : styles.stepLabelPending
160
+ status === "done" ? styles.stepLabelDone : [styles.stepLabelPending, { color: panelMutedInk(theme, panelTone) }]
146
161
  )
147
162
  ],
148
163
  children: label
@@ -165,9 +180,24 @@ function ProcessingPanel({
165
180
  reservedUntil,
166
181
  onCancel,
167
182
  cancelLabel,
183
+ variant = "default",
184
+ elevation = "default",
185
+ padding,
186
+ tone = "neutral",
187
+ density = "comfortable",
188
+ size = "xl",
189
+ label,
190
+ motion,
191
+ orientation = "vertical",
192
+ loading = false,
193
+ error,
168
194
  locale: localeProp,
195
+ roll = false,
169
196
  labels: labelsProp,
170
- style
197
+ platform,
198
+ style,
199
+ interactive = false,
200
+ onPress
171
201
  }) {
172
202
  const labels = useLabels("paymentStatus", DEFAULT_LABELS, labelsProp);
173
203
  const providerLocale = useLoamLocale();
@@ -177,48 +207,104 @@ function ProcessingPanel({
177
207
  const resolvedHeadline = headline ?? (isAsync ? labels.headlineAsync : labels.headlineSync);
178
208
  const active = steps.find((step) => step.status === "active");
179
209
  const showAsyncBlock = isAsync && Boolean(asyncNote || reference || reservedUntil);
180
- return /* @__PURE__ */ jsxs(View, { role: "region", accessibilityLabel: resolvedHeadline, style: [styles.panel, style], children: [
181
- /* @__PURE__ */ jsx(Spinner, { size: "xl", accessibilityLabel: labels.inProgress }),
182
- /* @__PURE__ */ jsxs(View, { style: styles.centred, children: [
183
- /* @__PURE__ */ jsx(Text, { accessibilityRole: "header", style: styles.headline, children: resolvedHeadline }),
184
- eta ? /* @__PURE__ */ jsx(Text, { style: styles.eta, children: eta }) : null
185
- ] }),
186
- /* @__PURE__ */ jsxs(View, { style: styles.centred, children: [
187
- /* @__PURE__ */ jsx(Amount, { minor: amount, currency, size: "lg", weight: "bold", locale }),
188
- /* @__PURE__ */ jsx(Text, { style: styles.method, children: methodLabel })
189
- ] }),
190
- steps.length > 0 ? /* @__PURE__ */ jsx(View, { role: "list", accessibilityRole: "list", style: styles.ladder, children: steps.map((step) => /* @__PURE__ */ jsx(ProcessingStepRow, { label: step.label, status: step.status }, step.label)) }) : null,
191
- showAsyncBlock ? /* @__PURE__ */ jsxs(View, { style: styles.asyncBlock, children: [
192
- asyncNote ? /* @__PURE__ */ jsx(Text, { style: styles.asyncBody, children: asyncNote }) : null,
193
- reference ? /* @__PURE__ */ jsxs(View, { style: styles.referenceRow, children: [
194
- /* @__PURE__ */ jsx(Text, { style: styles.asyncOverline, children: labels.reference }),
195
- /* @__PURE__ */ jsx(Text, { selectable: true, style: styles.reference, children: reference })
196
- ] }) : null,
197
- reservedUntil ? /* @__PURE__ */ jsxs(View, { style: styles.reservedRow, children: [
198
- /* @__PURE__ */ jsx(Icon, { name: "clock", size: theme.icon.xs, color: theme.color.infoOnSoft }),
199
- /* @__PURE__ */ jsx(Text, { style: styles.reserved, children: reservedUntil })
200
- ] }) : null
201
- ] }) : null,
202
- onCancel ? /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onPress: onCancel, children: cancelLabel ?? labels.cancelPayment }) : null,
203
- /* @__PURE__ */ jsx(
204
- View,
205
- {
206
- role: "status",
207
- accessibilityLiveRegion: "polite",
208
- style: styles.srOnly,
209
- ...{ "aria-live": "polite" },
210
- children: /* @__PURE__ */ jsx(Text, { style: styles.srOnly, children: active ? labels.processingStatus(resolvedHeadline, active.label) : resolvedHeadline })
211
- }
212
- )
213
- ] });
210
+ return /* @__PURE__ */ jsxs(
211
+ PanelRoot,
212
+ {
213
+ interactive,
214
+ onPress,
215
+ role: "region",
216
+ accessibilityLabel: resolvedHeadline,
217
+ "aria-busy": loading || void 0,
218
+ style: [
219
+ styles.panel,
220
+ density === "compact" ? styles.panelCompact : null,
221
+ panelSurface(theme, { variant, elevation, padding, tone, error }),
222
+ style
223
+ ],
224
+ children: [
225
+ /* @__PURE__ */ jsx(
226
+ Spinner,
227
+ {
228
+ size,
229
+ motion,
230
+ color: tone !== "neutral" ? softToneSkin(theme, tone).edge : void 0,
231
+ accessibilityLabel: label ?? labels.inProgress
232
+ }
233
+ ),
234
+ /* @__PURE__ */ jsxs(View, { style: styles.centred, children: [
235
+ /* @__PURE__ */ jsx(
236
+ Text,
237
+ {
238
+ accessibilityRole: "header",
239
+ style: [
240
+ styles.headline,
241
+ resolveTextRole(theme, "surfaceTitle", isAndroidIdiom(theme, platform))
242
+ ],
243
+ children: resolvedHeadline
244
+ }
245
+ ),
246
+ eta ? /* @__PURE__ */ jsx(Text, { style: styles.eta, children: eta }) : null
247
+ ] }),
248
+ /* @__PURE__ */ jsxs(View, { style: styles.centred, children: [
249
+ /* @__PURE__ */ jsx(
250
+ Amount,
251
+ {
252
+ minor: amount,
253
+ currency,
254
+ size: "lg",
255
+ weight: "bold",
256
+ locale,
257
+ roll,
258
+ motion
259
+ }
260
+ ),
261
+ /* @__PURE__ */ jsx(Text, { style: [styles.method, { color: panelMutedInk(theme, tone) }], children: methodLabel })
262
+ ] }),
263
+ steps.length > 0 ? /* @__PURE__ */ jsx(
264
+ View,
265
+ {
266
+ role: "list",
267
+ accessibilityRole: "list",
268
+ style: [styles.ladder, orientation === "horizontal" ? styles.ladderRow : null],
269
+ children: /* @__PURE__ */ jsx(PanelToneContext.Provider, { value: tone, children: steps.map((step) => /* @__PURE__ */ jsx(ProcessingStepRow, { label: step.label, status: step.status }, step.label)) })
270
+ }
271
+ ) : null,
272
+ /* @__PURE__ */ jsx(PanelFooter, { loading, error, tone }),
273
+ showAsyncBlock ? /* @__PURE__ */ jsxs(View, { style: styles.asyncBlock, children: [
274
+ asyncNote ? /* @__PURE__ */ jsx(Text, { style: styles.asyncBody, children: asyncNote }) : null,
275
+ reference ? /* @__PURE__ */ jsxs(View, { style: styles.referenceRow, children: [
276
+ /* @__PURE__ */ jsx(Text, { style: styles.asyncOverline, children: labels.reference }),
277
+ /* @__PURE__ */ jsx(Text, { selectable: true, style: styles.reference, children: reference })
278
+ ] }) : null,
279
+ reservedUntil ? /* @__PURE__ */ jsxs(View, { style: styles.reservedRow, children: [
280
+ /* @__PURE__ */ jsx(Icon, { name: "clock", size: theme.icon.xs, color: theme.color.infoOnSoft }),
281
+ /* @__PURE__ */ jsx(Text, { style: styles.reserved, children: reservedUntil })
282
+ ] }) : null
283
+ ] }) : null,
284
+ onCancel ? /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onPress: onCancel, children: cancelLabel ?? labels.cancelPayment }) : null,
285
+ /* @__PURE__ */ jsx(
286
+ View,
287
+ {
288
+ role: "status",
289
+ accessibilityLiveRegion: "polite",
290
+ style: styles.srOnly,
291
+ ...{ "aria-live": "polite" },
292
+ children: /* @__PURE__ */ jsx(Text, { style: styles.srOnly, children: active ? labels.processingStatus(resolvedHeadline, active.label) : resolvedHeadline })
293
+ }
294
+ )
295
+ ]
296
+ }
297
+ );
214
298
  }
215
299
  var sheet = createStyleSheet((theme) => ({
216
300
  pillRow: { flexDirection: "row", alignItems: "center", gap: theme.space.s1 },
217
301
  pillLabel: {
218
302
  fontFamily: theme.font.sans,
219
- fontWeight: theme.fontWeight.semibold,
220
- fontSize: theme.type.caption1.fontSize,
221
- lineHeight: theme.type.caption1.lineHeight
303
+ fontWeight: theme.fontWeight.bold,
304
+ fontSize: theme.fontSize[11],
305
+ lineHeight: theme.type.caption2.lineHeight,
306
+ textTransform: "uppercase",
307
+ letterSpacing: theme.fontSize[11] * theme.tracking.caps
222
308
  },
223
309
  pillCode: {
224
310
  fontFamily: theme.font.mono,
@@ -254,7 +340,7 @@ var sheet = createStyleSheet((theme) => ({
254
340
  panel: {
255
341
  alignItems: "center",
256
342
  gap: theme.space.s5,
257
- padding: theme.space.s5,
343
+ padding: theme.space[24],
258
344
  borderRadius: theme.radius.lg,
259
345
  borderWidth: theme.borderWidth.base,
260
346
  borderColor: theme.color.border,
@@ -284,6 +370,13 @@ var sheet = createStyleSheet((theme) => ({
284
370
  color: theme.color.text3
285
371
  },
286
372
  ladder: { alignSelf: "stretch", gap: theme.space.s2 },
373
+ ladderRow: {
374
+ flexDirection: "row",
375
+ flexWrap: "wrap",
376
+ justifyContent: "center",
377
+ columnGap: theme.space.s4
378
+ },
379
+ panelCompact: { gap: theme.space.s3 },
287
380
  asyncBlock: {
288
381
  alignSelf: "stretch",
289
382
  gap: theme.space.s2,
@@ -301,12 +394,8 @@ var sheet = createStyleSheet((theme) => ({
301
394
  color: theme.color.infoOnSoft
302
395
  },
303
396
  asyncOverline: {
397
+ ...theme.type.overline,
304
398
  fontFamily: theme.font.sans,
305
- fontWeight: theme.fontWeight.bold,
306
- fontSize: theme.type.caption2.fontSize,
307
- lineHeight: theme.type.caption2.lineHeight,
308
- letterSpacing: theme.tracking.caps,
309
- textTransform: "uppercase",
310
399
  color: theme.color.infoOnSoft
311
400
  },
312
401
  referenceRow: {
@@ -318,9 +407,10 @@ var sheet = createStyleSheet((theme) => ({
318
407
  reference: {
319
408
  fontFamily: theme.font.mono,
320
409
  fontVariant: ["tabular-nums"],
321
- fontSize: theme.type.footnote.fontSize,
322
- lineHeight: theme.type.footnote.lineHeight,
323
- color: theme.color.infoOnSoft
410
+ fontWeight: theme.fontWeight.medium,
411
+ fontSize: theme.type.caption1.fontSize,
412
+ lineHeight: theme.type.caption1.lineHeight,
413
+ color: theme.color.text2
324
414
  },
325
415
  reservedRow: { flexDirection: "row", alignItems: "center", gap: theme.space.s1 },
326
416
  reserved: {
@@ -338,41 +428,84 @@ var sheet = createStyleSheet((theme) => ({
338
428
  overflow: "hidden"
339
429
  }
340
430
  }));
341
- function formatTime(seconds) {
342
- const s = Number.isFinite(seconds) && seconds > 0 ? Math.floor(seconds) : 0;
343
- const m = Math.floor(s / 60);
344
- return `${m}:${String(s % 60).padStart(2, "0")}`;
345
- }
346
431
  function ThreeDSFrame({
347
432
  origin,
348
433
  secondsLeft,
349
434
  timeoutNote,
350
435
  chromeLabel: chromeLabelProp,
351
436
  cancelLabel: cancelLabelProp,
437
+ elevation = "default",
438
+ loading = false,
439
+ variant = "default",
440
+ padding,
441
+ tone = "neutral",
442
+ error,
352
443
  children,
353
444
  labels: labelsProp,
354
445
  style,
355
- onCancel
446
+ onCancel,
447
+ interactive = false,
448
+ onPress
356
449
  }) {
357
450
  const labels = useLabels("paymentStatus", DEFAULT_LABELS, labelsProp);
358
451
  const chromeLabel = chromeLabelProp ?? labels.chromeLabel;
359
452
  const cancelLabel = cancelLabelProp ?? labels.cancelAndGoBack;
360
453
  const theme = useLoamTheme("payment-status");
361
- const { styles } = useStyles(sheet2);
454
+ const { styles } = useStyles(sheet2, {
455
+ elevation: elevation === "default" ? void 0 : elevation
456
+ });
362
457
  const clamped = Math.max(0, Math.min(secondsLeft, THREE_DS_TIMEOUT_SECONDS));
363
- return /* @__PURE__ */ jsxs(View, { role: "region", accessibilityLabel: chromeLabel, style: [styles.frame, style], children: [
364
- /* @__PURE__ */ jsxs(View, { style: styles.chrome, children: [
365
- /* @__PURE__ */ jsx(SecurePayLabel, { label: chromeLabel }),
366
- /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: styles.origin, children: origin }),
367
- /* @__PURE__ */ jsx(View, { style: styles.pushEnd, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onPress: onCancel, children: cancelLabel }) })
368
- ] }),
369
- /* @__PURE__ */ jsx(View, { children }),
370
- /* @__PURE__ */ jsxs(View, { style: styles.footer, children: [
371
- /* @__PURE__ */ jsx(Icon, { name: "clock", size: theme.icon.xs, color: theme.color.text3 }),
372
- /* @__PURE__ */ jsx(Text, { role: "timer", style: styles.clock, children: formatTime(clamped) }),
373
- timeoutNote ? /* @__PURE__ */ jsx(Text, { style: styles.timeoutNote, children: timeoutNote }) : null
374
- ] })
375
- ] });
458
+ return /* @__PURE__ */ jsxs(
459
+ PanelRoot,
460
+ {
461
+ interactive,
462
+ onPress,
463
+ role: "region",
464
+ accessibilityLabel: chromeLabel,
465
+ accessibilityState: loading ? { busy: true } : void 0,
466
+ "aria-busy": loading || void 0,
467
+ style: [
468
+ styles.frame,
469
+ panelSurface(theme, {
470
+ variant,
471
+ padding: padding === "none" ? void 0 : padding,
472
+ tone,
473
+ error
474
+ }),
475
+ style
476
+ ],
477
+ children: [
478
+ /* @__PURE__ */ jsxs(
479
+ View,
480
+ {
481
+ style: [
482
+ styles.chrome,
483
+ tone !== "neutral" ? { backgroundColor: softToneSkin(theme, tone).fill } : null
484
+ ],
485
+ children: [
486
+ /* @__PURE__ */ jsx(SecurePayLabel, { label: chromeLabel }),
487
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.origin, { color: panelMutedInk(theme, tone) }], children: origin }),
488
+ /* @__PURE__ */ jsx(View, { style: styles.pushEnd, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onPress: onCancel, children: cancelLabel }) })
489
+ ]
490
+ }
491
+ ),
492
+ /* @__PURE__ */ jsxs(View, { children: [
493
+ children,
494
+ loading ? /* @__PURE__ */ jsxs(View, { testID: "threeds-loading", style: styles.loading, children: [
495
+ /* @__PURE__ */ jsx(View, { style: { width: "40%" }, children: /* @__PURE__ */ jsx(Skeleton, { variant: "text", decorative: true }) }),
496
+ /* @__PURE__ */ jsx(View, { style: { width: "70%" }, children: /* @__PURE__ */ jsx(Skeleton, { variant: "text", decorative: true }) }),
497
+ /* @__PURE__ */ jsx(Skeleton, { variant: "rect", height: theme.ctl.lg, decorative: true })
498
+ ] }) : null
499
+ ] }),
500
+ error ? /* @__PURE__ */ jsx(View, { style: styles.errorWrap, children: /* @__PURE__ */ jsx(PanelFooter, { error, tone }) }) : null,
501
+ /* @__PURE__ */ jsxs(View, { style: styles.footer, children: [
502
+ /* @__PURE__ */ jsx(Icon, { name: "clock", size: theme.icon.xs, color: panelMutedInk(theme, tone) }),
503
+ /* @__PURE__ */ jsx(Text, { role: "timer", style: styles.clock, children: formatTime(clamped) }),
504
+ timeoutNote ? /* @__PURE__ */ jsx(Text, { style: [styles.timeoutNote, { color: panelMutedInk(theme, tone) }], children: timeoutNote }) : null
505
+ ] })
506
+ ]
507
+ }
508
+ );
376
509
  }
377
510
  function ChallengeSurface({
378
511
  bankName,
@@ -384,18 +517,37 @@ function ChallengeSurface({
384
517
  busy = false,
385
518
  note,
386
519
  submitLabel,
520
+ variant = "default",
521
+ elevation = "default",
522
+ padding,
523
+ tone = "neutral",
524
+ density = "comfortable",
525
+ size = "lg",
526
+ disabled = false,
387
527
  labels: labelsProp,
388
528
  style,
389
529
  onChangeCode,
390
- onSubmit
530
+ onSubmit,
531
+ interactive = false,
532
+ onPress
391
533
  }) {
392
534
  const labels = useLabels("paymentStatus", DEFAULT_LABELS, labelsProp);
535
+ const theme = useLoamTheme("payment-status");
393
536
  const { styles } = useStyles(sheet2);
394
- const errorId = React4.useId();
395
537
  return /* @__PURE__ */ jsxs(
396
- View,
538
+ PanelRoot,
397
539
  {
398
- style: [styles.challenge, style],
540
+ interactive,
541
+ onPress,
542
+ "aria-disabled": disabled || void 0,
543
+ pointerEvents: disabled ? "none" : void 0,
544
+ style: [
545
+ styles.challenge,
546
+ density === "compact" ? styles.challengeCompact : null,
547
+ panelSurface(theme, { variant, elevation, padding, tone }),
548
+ disabled ? { opacity: theme.state.disabledOpacity } : null,
549
+ style
550
+ ],
399
551
  children: [
400
552
  /* @__PURE__ */ jsxs(View, { style: styles.challengeHead, children: [
401
553
  /* @__PURE__ */ jsx(Text, { style: styles.bankName, children: bankName }),
@@ -403,30 +555,21 @@ function ChallengeSurface({
403
555
  /* @__PURE__ */ jsx(Text, { style: styles.authorise, children: labels.authorise }),
404
556
  amountLabel
405
557
  ] }),
406
- /* @__PURE__ */ jsx(Text, { style: styles.sentTo, children: labels.codeSent(maskedContact) })
558
+ /* @__PURE__ */ jsx(Text, { style: [styles.sentTo, { color: panelMutedInk(theme, tone) }], children: labels.codeSent(maskedContact) })
407
559
  ] }),
408
- /* @__PURE__ */ jsx(View, { role: "group", "aria-describedby": error ? errorId : void 0, children: /* @__PURE__ */ jsx(
560
+ /* @__PURE__ */ jsx(View, { role: "group", children: /* @__PURE__ */ jsx(
409
561
  OTP,
410
562
  {
411
563
  length: digits,
412
564
  value: code,
413
- error: error !== void 0,
565
+ error,
566
+ disabled,
414
567
  accessibilityLabel: labels.codeGroup(digits),
415
568
  onChangeText: onChangeCode
416
569
  }
417
570
  ) }),
418
- error ? /* @__PURE__ */ jsx(
419
- Text,
420
- {
421
- nativeID: errorId,
422
- role: "alert",
423
- accessibilityLiveRegion: "assertive",
424
- style: styles.error,
425
- children: error
426
- }
427
- ) : null,
428
- /* @__PURE__ */ jsx(Button, { size: "lg", fullWidth: true, loading: busy, onPress: () => onSubmit(code), children: submitLabel ?? labels.approve }),
429
- note ? /* @__PURE__ */ jsx(Text, { style: styles.note, children: note }) : null
571
+ /* @__PURE__ */ jsx(Button, { size, fullWidth: true, loading: busy, onPress: () => onSubmit(code), children: submitLabel ?? labels.approve }),
572
+ note ? /* @__PURE__ */ jsx(Text, { style: [styles.note, { color: panelMutedInk(theme, tone) }], children: note }) : null
430
573
  ]
431
574
  }
432
575
  );
@@ -438,8 +581,22 @@ var sheet2 = createStyleSheet((theme) => ({
438
581
  borderRadius: theme.radius.lg,
439
582
  borderWidth: theme.borderWidth.base,
440
583
  borderColor: theme.color.border,
584
+ backgroundColor: theme.color.surface,
585
+ variants: {
586
+ elevation: {
587
+ flat: {},
588
+ raised: { ...theme.shadow.lg }
589
+ }
590
+ }
591
+ },
592
+ // The skeleton sits over the bank's surface until the page has loaded.
593
+ loading: {
594
+ ...StyleSheet.absoluteFillObject,
595
+ gap: theme.space.s3,
596
+ padding: theme.space.s5,
441
597
  backgroundColor: theme.color.surface
442
598
  },
599
+ errorWrap: { padding: theme.space.s3 },
443
600
  chrome: {
444
601
  flexDirection: "row",
445
602
  flexWrap: "wrap",
@@ -488,6 +645,7 @@ var sheet2 = createStyleSheet((theme) => ({
488
645
  padding: theme.space.s5,
489
646
  backgroundColor: theme.color.surface
490
647
  },
648
+ challengeCompact: { gap: theme.space.s2 },
491
649
  challengeHead: { gap: theme.space.s1 },
492
650
  bankName: {
493
651
  fontFamily: theme.font.sans,
@@ -514,13 +672,6 @@ var sheet2 = createStyleSheet((theme) => ({
514
672
  lineHeight: theme.type.caption1.lineHeight,
515
673
  color: theme.color.text3
516
674
  },
517
- error: {
518
- fontFamily: theme.font.sans,
519
- fontWeight: theme.fontWeight.bold,
520
- fontSize: theme.type.footnote.fontSize,
521
- lineHeight: theme.type.footnote.lineHeight,
522
- color: theme.color.danger
523
- },
524
675
  note: {
525
676
  fontFamily: theme.font.sans,
526
677
  fontSize: theme.type.caption1.fontSize,
@@ -551,53 +702,133 @@ function DeclineNotice({
551
702
  showSupportDetails = false,
552
703
  detailsLabel,
553
704
  nextLabel,
705
+ variant = "default",
706
+ size = "md",
707
+ density = "comfortable",
708
+ icon,
709
+ orientation = "horizontal",
710
+ align,
711
+ disabled = false,
712
+ loading = false,
713
+ error,
714
+ dismissible = false,
715
+ motion,
716
+ onDismiss,
554
717
  labels: labelsProp,
718
+ platform,
555
719
  style,
556
720
  onAction,
557
721
  onToggleDetails
558
722
  }) {
559
723
  const theme = useLoamTheme("payment-status");
724
+ const android = isAndroidIdiom(theme, platform);
560
725
  const { styles } = useStyles(sheet3);
561
726
  const labels = useLabels("paymentStatus", DEFAULT_LABELS, labelsProp);
562
727
  const pay = usePayLabels(labelsProp);
563
728
  const text = declineText(decline, pay);
564
- const detailsId = React4.useId();
729
+ const detailsId = React.useId();
565
730
  const ladder = actions ?? recoveryActions(decline, pay);
566
731
  const headline = declineHeadline(decline, pay);
732
+ const animated = motion === "full" || motion === "reduced";
733
+ const opacity = React.useRef(new Animated.Value(animated ? 0 : 1)).current;
734
+ React.useEffect(() => {
735
+ if (!animated) return;
736
+ const anim = motion === "full" && !theme.reduceMotion ? Animated.spring(opacity, {
737
+ ...springConfig(theme, "ds"),
738
+ toValue: 1,
739
+ useNativeDriver: true
740
+ }) : Animated.timing(opacity, {
741
+ ...motionTiming("reduced"),
742
+ toValue: 1,
743
+ useNativeDriver: true
744
+ });
745
+ anim.start();
746
+ return () => anim.stop();
747
+ }, []);
567
748
  return /* @__PURE__ */ jsxs(
568
- View,
749
+ Animated.View,
569
750
  {
570
751
  role: "alert",
571
752
  accessibilityLiveRegion: "assertive",
572
753
  accessibilityLabel: headline,
573
754
  testID: `decline-${decline.route}-${decline.soft ? "soft" : "hard"}`,
574
- style: [styles.notice, style],
755
+ "aria-busy": loading || void 0,
756
+ style: [
757
+ styles.notice,
758
+ variant === "outline" ? { backgroundColor: theme.color.surface } : null,
759
+ variant === "elevated" ? theme.shadow.md : null,
760
+ size === "compact" ? styles.noticeCompact : null,
761
+ style,
762
+ animated ? { opacity } : null
763
+ ],
575
764
  children: [
576
765
  /* @__PURE__ */ jsxs(View, { style: styles.headRow, children: [
577
- /* @__PURE__ */ jsx(Icon, { name: "alert-circle", size: theme.icon.md, color: theme.color.dangerOnSoft }),
766
+ /* @__PURE__ */ jsx(Icon, { name: icon ?? "alert-circle", size: theme.icon.md, color: theme.color.dangerOnSoft }),
578
767
  /* @__PURE__ */ jsxs(View, { style: styles.headBody, children: [
579
- /* @__PURE__ */ jsx(Text, { accessibilityRole: "header", style: styles.headline, children: headline }),
768
+ /* @__PURE__ */ jsx(
769
+ Text,
770
+ {
771
+ accessibilityRole: "header",
772
+ style: [styles.headline, resolveTextRole(theme, "surfaceTitle", android)],
773
+ children: headline
774
+ }
775
+ ),
580
776
  /* @__PURE__ */ jsxs(Text, { style: styles.explain, children: [
581
777
  `${text.user} `,
582
778
  /* @__PURE__ */ jsx(Text, { style: styles.nothingCharged, children: nothingChargedText(pay) })
583
779
  ] })
584
- ] })
780
+ ] }),
781
+ dismissible || onDismiss ? /* @__PURE__ */ jsx(
782
+ DismissButton,
783
+ {
784
+ label: labels.dismiss,
785
+ onPress: () => onDismiss?.(),
786
+ color: theme.color.dangerOnSoft
787
+ }
788
+ ) : null
585
789
  ] }),
586
790
  /* @__PURE__ */ jsxs(View, { style: styles.nextBox, children: [
587
791
  /* @__PURE__ */ jsx(Text, { style: styles.overline, children: nextLabel ?? labels.nextStep }),
588
792
  /* @__PURE__ */ jsx(Text, { style: styles.nextBody, children: text.next })
589
793
  ] }),
590
- /* @__PURE__ */ jsx(View, { style: styles.ladder, children: ladder.map((action) => /* @__PURE__ */ jsx(
591
- Button,
794
+ error ? /* @__PURE__ */ jsx(PanelFooter, { error }) : null,
795
+ /* @__PURE__ */ jsx(
796
+ View,
592
797
  {
593
- variant: action.kind === "primary" ? "primary" : "outline",
594
- size: "sm",
595
- leadingIcon: recoveryIcon(action.icon),
596
- onPress: () => onAction(action),
597
- children: action.label
598
- },
599
- `${action.kind}-${action.label}`
600
- )) }),
798
+ style: [
799
+ styles.ladder,
800
+ android ? styles.ladderEnd : null,
801
+ density === "compact" ? styles.ladderCompact : null,
802
+ orientation === "vertical" ? styles.ladderVertical : null,
803
+ align ? {
804
+ justifyContent: align === "start" ? "flex-start" : align === "end" ? "flex-end" : "center"
805
+ } : null
806
+ ],
807
+ children: (android ? [
808
+ ...ladder.filter((a) => a.kind !== "primary"),
809
+ ...ladder.filter((a) => a.kind === "primary")
810
+ ] : ladder).map((action) => /* @__PURE__ */ jsx(
811
+ View,
812
+ {
813
+ style: android || orientation === "vertical" ? orientation === "vertical" ? styles.ladderStack : null : styles.ladderShare,
814
+ children: /* @__PURE__ */ jsx(
815
+ Button,
816
+ {
817
+ fullWidth: !android,
818
+ variant: action.kind === "primary" ? "primary" : "outline",
819
+ size: "sm",
820
+ loading,
821
+ disabled,
822
+ leadingIcon: recoveryIcon(action.icon),
823
+ onPress: () => onAction(action),
824
+ children: action.label
825
+ }
826
+ )
827
+ },
828
+ `${action.kind}-${action.label}`
829
+ ))
830
+ }
831
+ ),
601
832
  onToggleDetails ? /* @__PURE__ */ jsxs(View, { style: styles.drawer, children: [
602
833
  /* @__PURE__ */ jsxs(
603
834
  Pressable,
@@ -606,6 +837,7 @@ function DeclineNotice({
606
837
  accessibilityState: { expanded: showSupportDetails },
607
838
  ...expandedProps(showSupportDetails),
608
839
  "aria-controls": detailsId,
840
+ disabled,
609
841
  onPress: () => onToggleDetails(!showSupportDetails),
610
842
  style: styles.drawerTrigger,
611
843
  children: [
@@ -614,7 +846,7 @@ function DeclineNotice({
614
846
  {
615
847
  name: showSupportDetails ? "chevron-up" : "chevron-down",
616
848
  size: theme.icon.xs,
617
- color: theme.color.text2
849
+ color: theme.color.accentStrong
618
850
  }
619
851
  ),
620
852
  /* @__PURE__ */ jsx(Text, { style: styles.drawerLabel, children: detailsLabel ?? labels.detailsForSupport })
@@ -624,7 +856,14 @@ function DeclineNotice({
624
856
  showSupportDetails ? /* @__PURE__ */ jsxs(View, { nativeID: detailsId, style: styles.details, children: [
625
857
  /* @__PURE__ */ jsx(DetailRow, { term: labels.declineCode, value: decline.code }),
626
858
  /* @__PURE__ */ jsx(DetailRow, { term: labels.network, value: decline.soft ? labels.soft : labels.hard }),
627
- /* @__PURE__ */ jsx(DetailRow, { term: labels.attempt, value: labels.attemptOf(attempt, attemptsAllowed), tabular: true }),
859
+ /* @__PURE__ */ jsx(
860
+ DetailRow,
861
+ {
862
+ term: labels.attempt,
863
+ value: labels.attemptOf(attempt, attemptsAllowed),
864
+ tabular: true
865
+ }
866
+ ),
628
867
  /* @__PURE__ */ jsx(DetailRow, { term: labels.intent, value: intentId })
629
868
  ] }) : null
630
869
  ] }) : null
@@ -669,12 +908,8 @@ var sheet3 = createStyleSheet((theme) => ({
669
908
  backgroundColor: theme.color.surface
670
909
  },
671
910
  overline: {
911
+ ...theme.type.overline,
672
912
  fontFamily: theme.font.sans,
673
- fontWeight: theme.fontWeight.bold,
674
- fontSize: theme.type.caption2.fontSize,
675
- lineHeight: theme.type.caption2.lineHeight,
676
- letterSpacing: theme.tracking.caps,
677
- textTransform: "uppercase",
678
913
  color: theme.color.text3
679
914
  },
680
915
  nextBody: {
@@ -684,6 +919,14 @@ var sheet3 = createStyleSheet((theme) => ({
684
919
  color: theme.color.text
685
920
  },
686
921
  ladder: { flexDirection: "row", flexWrap: "wrap", alignItems: "center", gap: theme.space.s2 },
922
+ // iOS: the actions share the width (F30); Android: end-aligned, outline at
923
+ // the start and primary at the end.
924
+ ladderShare: { flexGrow: 1, flexBasis: "auto" },
925
+ ladderCompact: { gap: theme.space.s1 },
926
+ ladderVertical: { flexDirection: "column", alignItems: "stretch" },
927
+ ladderStack: { alignSelf: "stretch" },
928
+ noticeCompact: { padding: theme.space.s3, gap: theme.space.s2 },
929
+ ladderEnd: { justifyContent: "flex-end" },
687
930
  drawer: { gap: theme.space.s2 },
688
931
  drawerTrigger: {
689
932
  flexDirection: "row",
@@ -694,10 +937,11 @@ var sheet3 = createStyleSheet((theme) => ({
694
937
  },
695
938
  drawerLabel: {
696
939
  fontFamily: theme.font.sans,
940
+ // F39: the reason toggle is the link Button at sm — accent-strong, the sm
941
+ // control label.
697
942
  fontWeight: theme.fontWeight.semibold,
698
- fontSize: theme.type.caption1.fontSize,
699
- lineHeight: theme.type.caption1.lineHeight,
700
- color: theme.color.text2
943
+ fontSize: theme.ctl.fs.sm,
944
+ color: theme.color.accentStrong
701
945
  },
702
946
  details: {
703
947
  gap: theme.space.s1,
@@ -735,22 +979,43 @@ function ReceiptPanel({
735
979
  nextNote,
736
980
  actions,
737
981
  motion = "full",
982
+ variant = "default",
983
+ elevation = "default",
984
+ padding,
985
+ tone = "neutral",
986
+ density = "comfortable",
987
+ size = "hero",
988
+ roll,
989
+ unit,
990
+ delta,
991
+ caption,
992
+ orientation = "vertical",
993
+ align = "center",
994
+ loading = false,
995
+ error,
738
996
  locale: localeProp,
739
997
  labels: labelsProp,
998
+ platform,
740
999
  style,
741
- onAction
1000
+ onAction,
1001
+ interactive = false,
1002
+ onPress
742
1003
  }) {
743
1004
  const labels = useLabels("paymentStatus", DEFAULT_LABELS, labelsProp);
744
1005
  const providerLocale = useLoamLocale();
745
1006
  const locale = localeProp ?? providerLocale;
746
1007
  const title = titleProp ?? labels.receiptTitle;
747
1008
  const theme = useLoamTheme("payment-status");
1009
+ const tinted = tone !== "neutral";
1010
+ const deltaSign = delta?.trim().charAt(0);
1011
+ const deltaInk = tone === "good" && deltaSign === "+" ? theme.color.goodOnSoft : tone === "danger" && (deltaSign === "-" || deltaSign === "\u2212") ? theme.color.dangerOnSoft : theme.color.text2;
1012
+ const android = isAndroidIdiom(theme, platform);
748
1013
  const { styles } = useStyles(sheet4);
749
1014
  const resolved = useResolvedMotion(motion, "payment-status");
750
1015
  const drawing = resolved === "full";
751
- const plate = React4.useRef(new Animated.Value(drawing ? 0 : 1)).current;
752
- const ring = React4.useRef(new Animated.Value(0)).current;
753
- React4.useEffect(() => {
1016
+ const plate = React.useRef(new Animated.Value(drawing ? 0 : 1)).current;
1017
+ const ring = React.useRef(new Animated.Value(0)).current;
1018
+ React.useEffect(() => {
754
1019
  if (!drawing) {
755
1020
  plate.setValue(1);
756
1021
  ring.setValue(0);
@@ -783,68 +1048,109 @@ function ReceiptPanel({
783
1048
  }
784
1049
  ];
785
1050
  if (email) facts.push({ term: labels.sentTo, description: email });
786
- return /* @__PURE__ */ jsxs(View, { role: "region", accessibilityLabel: title, style: [styles.panel, style], children: [
787
- /* @__PURE__ */ jsxs(
788
- View,
789
- {
790
- style: styles.mark,
791
- "aria-hidden": true,
792
- accessibilityElementsHidden: true,
793
- importantForAccessibility: "no-hide-descendants",
794
- children: [
795
- drawing ? /* @__PURE__ */ jsx(
796
- Animated.View,
1051
+ return /* @__PURE__ */ jsxs(
1052
+ PanelRoot,
1053
+ {
1054
+ interactive,
1055
+ onPress,
1056
+ role: "region",
1057
+ accessibilityLabel: title,
1058
+ "aria-busy": loading || void 0,
1059
+ style: [
1060
+ styles.panel,
1061
+ density === "compact" ? styles.panelCompact : null,
1062
+ align === "start" ? styles.panelStart : null,
1063
+ panelSurface(theme, { variant, elevation, padding, tone, error }),
1064
+ style
1065
+ ],
1066
+ children: [
1067
+ /* @__PURE__ */ jsxs(View, { style: orientation === "horizontal" ? styles.headRowH : styles.headRowV, children: [
1068
+ /* @__PURE__ */ jsxs(
1069
+ View,
797
1070
  {
798
- style: [
799
- styles.ring,
800
- {
801
- opacity: ring.interpolate({ inputRange: [0, 1], outputRange: [1, 0] }),
802
- transform: [
803
- { scale: ring.interpolate({ inputRange: [0, 1], outputRange: [1, RING_TO] }) }
804
- ]
805
- }
1071
+ style: styles.mark,
1072
+ "aria-hidden": true,
1073
+ accessibilityElementsHidden: true,
1074
+ importantForAccessibility: "no-hide-descendants",
1075
+ children: [
1076
+ drawing ? /* @__PURE__ */ jsx(
1077
+ Animated.View,
1078
+ {
1079
+ style: [
1080
+ styles.ring,
1081
+ {
1082
+ opacity: ring.interpolate({ inputRange: [0, 1], outputRange: [1, 0] }),
1083
+ transform: [
1084
+ { scale: ring.interpolate({ inputRange: [0, 1], outputRange: [1, RING_TO] }) }
1085
+ ]
1086
+ }
1087
+ ]
1088
+ }
1089
+ ) : null,
1090
+ /* @__PURE__ */ jsx(Animated.View, { style: [styles.plate, { transform: [{ scale: plate }] }], children: /* @__PURE__ */ jsx(
1091
+ Icon,
1092
+ {
1093
+ name: "check",
1094
+ size: theme.icon.lg,
1095
+ color: theme.color.goodOnSoft,
1096
+ strokeWidth: theme.icon.strokeBold
1097
+ }
1098
+ ) })
806
1099
  ]
807
1100
  }
808
- ) : null,
809
- /* @__PURE__ */ jsx(Animated.View, { style: [styles.plate, { transform: [{ scale: plate }] }], children: /* @__PURE__ */ jsx(
810
- Icon,
811
- {
812
- name: "check",
813
- size: theme.icon.lg,
814
- color: theme.color.goodOnSoft,
815
- strokeWidth: theme.icon.strokeBold
816
- }
817
- ) })
818
- ]
819
- }
820
- ),
821
- /* @__PURE__ */ jsxs(View, { style: styles.head, children: [
822
- /* @__PURE__ */ jsx(Text, { accessibilityRole: "header", style: styles.title, children: title }),
823
- /* @__PURE__ */ jsx(Amount, { minor: amount, currency, size: "hero", locale })
824
- ] }),
825
- /* @__PURE__ */ jsx(View, { style: styles.facts, children: /* @__PURE__ */ jsx(DescriptionList, { layout: "inline", density: "compact", items: facts }) }),
826
- nextNote ? /* @__PURE__ */ jsx(Text, { style: styles.nextNote, children: nextNote }) : null,
827
- actions && actions.length > 0 ? /* @__PURE__ */ jsx(View, { style: styles.actions, children: actions.map((action) => /* @__PURE__ */ jsx(
828
- Button,
829
- {
830
- variant: action.kind === "primary" ? "primary" : "outline",
831
- leadingIcon: action.icon && Object.prototype.hasOwnProperty.call(icons, action.icon) ? action.icon : void 0,
832
- onPress: () => onAction?.(action),
833
- children: action.label
834
- },
835
- action.id
836
- )) }) : null,
837
- /* @__PURE__ */ jsx(
838
- View,
839
- {
840
- role: "status",
841
- accessibilityLiveRegion: "polite",
842
- style: styles.srOnly,
843
- ...{ "aria-live": "polite" },
844
- children: /* @__PURE__ */ jsx(Text, { style: styles.srOnly, children: labels.receiptStatus(title, receiptId) })
845
- }
846
- )
847
- ] });
1101
+ ),
1102
+ /* @__PURE__ */ jsxs(View, { style: [styles.head, align === "start" ? styles.headStart : null], children: [
1103
+ /* @__PURE__ */ jsx(
1104
+ Text,
1105
+ {
1106
+ accessibilityRole: "header",
1107
+ style: [styles.title, resolveTextRole(theme, "surfaceTitle", android)],
1108
+ children: title
1109
+ }
1110
+ ),
1111
+ /* @__PURE__ */ jsx(
1112
+ Amount,
1113
+ {
1114
+ minor: amount,
1115
+ currency,
1116
+ size,
1117
+ locale,
1118
+ roll,
1119
+ unit,
1120
+ delta: tinted ? void 0 : delta,
1121
+ caption: tinted ? void 0 : caption
1122
+ }
1123
+ ),
1124
+ tinted && delta ? /* @__PURE__ */ jsx(Text, { style: [styles.delta, { color: deltaInk }], children: delta }) : null,
1125
+ tinted && caption ? /* @__PURE__ */ jsx(Text, { style: styles.caption, children: caption }) : null
1126
+ ] })
1127
+ ] }),
1128
+ /* @__PURE__ */ jsx(View, { style: styles.facts, children: /* @__PURE__ */ jsx(DescriptionList, { layout: "inline", density: "compact", items: facts }) }),
1129
+ /* @__PURE__ */ jsx(PanelFooter, { loading, error, tone }),
1130
+ nextNote ? /* @__PURE__ */ jsx(Text, { style: styles.nextNote, children: nextNote }) : null,
1131
+ actions && actions.length > 0 ? /* @__PURE__ */ jsx(View, { style: [styles.actions, android ? styles.actionsEnd : null], children: footerOrder(actions, android).map((action) => /* @__PURE__ */ jsx(View, { style: android ? null : styles.actionShare, children: /* @__PURE__ */ jsx(
1132
+ Button,
1133
+ {
1134
+ fullWidth: !android,
1135
+ variant: action.kind === "primary" ? "primary" : "outline",
1136
+ leadingIcon: action.icon && Object.prototype.hasOwnProperty.call(icons, action.icon) ? action.icon : void 0,
1137
+ onPress: () => onAction?.(action),
1138
+ children: action.label
1139
+ }
1140
+ ) }, action.id)) }) : null,
1141
+ /* @__PURE__ */ jsx(
1142
+ View,
1143
+ {
1144
+ role: "status",
1145
+ accessibilityLiveRegion: "polite",
1146
+ style: styles.srOnly,
1147
+ ...{ "aria-live": "polite" },
1148
+ children: /* @__PURE__ */ jsx(Text, { style: styles.srOnly, children: labels.receiptStatus(title, receiptId) })
1149
+ }
1150
+ )
1151
+ ]
1152
+ }
1153
+ );
848
1154
  }
849
1155
  var sheet4 = createStyleSheet((theme) => ({
850
1156
  panel: {
@@ -883,6 +1189,18 @@ var sheet4 = createStyleSheet((theme) => ({
883
1189
  backgroundColor: theme.color.goodSoft
884
1190
  },
885
1191
  head: { alignItems: "center", gap: theme.space.s2 },
1192
+ delta: {
1193
+ fontFamily: theme.font.sans,
1194
+ fontVariant: ["tabular-nums"],
1195
+ fontWeight: theme.fontWeight.medium,
1196
+ fontSize: theme.fontSize[13]
1197
+ },
1198
+ caption: { fontFamily: theme.font.sans, fontSize: theme.fontSize[12], color: theme.color.text2 },
1199
+ headStart: { alignItems: "flex-start" },
1200
+ headRowV: { alignItems: "center", gap: theme.space.s5 },
1201
+ headRowH: { flexDirection: "row", alignItems: "center", gap: theme.space.s4 },
1202
+ panelCompact: { gap: theme.space.s3 },
1203
+ panelStart: { alignItems: "flex-start" },
886
1204
  title: {
887
1205
  fontFamily: theme.font.display,
888
1206
  fontWeight: theme.font.displayWeight,
@@ -907,6 +1225,10 @@ var sheet4 = createStyleSheet((theme) => ({
907
1225
  color: theme.color.text2,
908
1226
  textAlign: "center"
909
1227
  },
1228
+ // iOS: the footer actions share the width (F29); Android: end-aligned,
1229
+ // outline at the start and primary at the end.
1230
+ actionShare: { flexGrow: 1, flexBasis: "auto" },
1231
+ actionsEnd: { justifyContent: "flex-end" },
910
1232
  actions: {
911
1233
  flexDirection: "row",
912
1234
  flexWrap: "wrap",
@@ -921,5 +1243,9 @@ var sheet4 = createStyleSheet((theme) => ({
921
1243
  overflow: "hidden"
922
1244
  }
923
1245
  }));
1246
+ function footerOrder(list, android) {
1247
+ if (!android) return [...list];
1248
+ return [...list.filter((a) => a.kind !== "primary"), ...list.filter((a) => a.kind === "primary")];
1249
+ }
924
1250
 
925
1251
  export { ChallengeSurface, DeclineNotice, ProcessingPanel, ProcessingStepRow, ReceiptPanel, StatePill, ThreeDSFrame, recoveryIcon };