@btndprojects/loam-ui-native 0.1.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 (412) hide show
  1. package/dist/accordion/index.js +7 -3
  2. package/dist/adaptive/index.js +16 -2
  3. package/dist/address-block/index.js +23 -0
  4. package/dist/alert/index.js +8 -2
  5. package/dist/analyzer/index.js +17 -6
  6. package/dist/announcement/index.js +18 -5
  7. package/dist/appearance-picker/index.js +15 -0
  8. package/dist/audio-player/index.js +29 -3
  9. package/dist/avatar/index.js +5 -2
  10. package/dist/avatar-group/index.js +9 -3
  11. package/dist/badge/index.js +10 -4
  12. package/dist/banner/index.js +6 -2
  13. package/dist/board/index.js +18 -6
  14. package/dist/button/index.js +9 -3
  15. package/dist/camera-permission/index.js +23 -12
  16. package/dist/capture-result/index.js +30 -17
  17. package/dist/card/index.js +10 -3
  18. package/dist/card-form/index.js +19 -9
  19. package/dist/carousel/index.js +6 -2
  20. package/dist/chart/index.js +18 -5
  21. package/dist/charts/index.js +21 -6
  22. package/dist/chat/index.js +41 -0
  23. package/dist/checkbox/index.js +9 -5
  24. package/dist/checklist/index.js +20 -8
  25. package/dist/checkout/index.js +30 -12
  26. package/dist/chip/index.js +11 -5
  27. package/dist/chunk-2BZD3NAP.js +1110 -0
  28. package/dist/chunk-2YKVID2V.js +35 -0
  29. package/dist/{chunk-JUAMLEHX.js → chunk-36DA3IPO.js} +137 -37
  30. package/dist/chunk-3A56MIAN.js +599 -0
  31. package/dist/chunk-3SCKCWF5.js +298 -0
  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-4CZMQDQL.js +192 -0
  36. package/dist/chunk-5DTKORLI.js +255 -0
  37. package/dist/{chunk-LOE5YNN3.js → chunk-5J4WFXFA.js} +68 -24
  38. package/dist/chunk-5KJ7TEQ6.js +305 -0
  39. package/dist/chunk-5NU33TXK.js +529 -0
  40. package/dist/chunk-5Z5ZYMOJ.js +1 -0
  41. package/dist/chunk-6KSUS7DF.js +690 -0
  42. package/dist/chunk-6RV6UW2J.js +349 -0
  43. package/dist/chunk-6RZM7RP2.js +520 -0
  44. package/dist/{chunk-4BXMXBJO.js → chunk-75BDCC7K.js} +24 -11
  45. package/dist/{chunk-PZXZJBMP.js → chunk-7CGJBQUA.js} +357 -32
  46. package/dist/{chunk-CJ5EOYZE.js → chunk-7IVF6JLJ.js} +24 -7
  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-7NGMUVNU.js +245 -0
  51. package/dist/chunk-7PBSIXT7.js +355 -0
  52. package/dist/chunk-7QOYGENL.js +443 -0
  53. package/dist/{chunk-H6NIOQHK.js → chunk-A7SWYDE5.js} +66 -15
  54. package/dist/chunk-ADHPJALR.js +3051 -0
  55. package/dist/chunk-ALJYZLNQ.js +509 -0
  56. package/dist/chunk-APCWFOZW.js +28 -0
  57. package/dist/chunk-AQ5FIG74.js +419 -0
  58. package/dist/chunk-AWKQIE5I.js +139 -0
  59. package/dist/chunk-B2MMZZQB.js +426 -0
  60. package/dist/{chunk-ZVFE5QGU.js → chunk-B7JZ3N5G.js} +174 -97
  61. package/dist/chunk-BL37SW6G.js +1314 -0
  62. package/dist/chunk-BTRMA7GC.js +21 -0
  63. package/dist/chunk-C7IUWIUZ.js +643 -0
  64. package/dist/chunk-CA3DUVYD.js +10 -0
  65. package/dist/{chunk-S7F6XLTK.js → chunk-CBCJSO2B.js} +213 -54
  66. package/dist/chunk-CHPX4MFI.js +239 -0
  67. package/dist/chunk-CLGAMIOT.js +648 -0
  68. package/dist/chunk-CUE7VML6.js +1141 -0
  69. package/dist/chunk-CVU6S2E5.js +1587 -0
  70. package/dist/{chunk-AZRX6SAC.js → chunk-CXPQMA6Z.js} +112 -37
  71. package/dist/chunk-D2LN4I7I.js +581 -0
  72. package/dist/{chunk-UWFLYMAR.js → chunk-D34LNBO5.js} +635 -238
  73. package/dist/chunk-D4BCQICM.js +765 -0
  74. package/dist/chunk-EABKIIA4.js +1 -0
  75. package/dist/chunk-EICSYRAG.js +341 -0
  76. package/dist/chunk-EMWAJMAS.js +83 -0
  77. package/dist/chunk-EOLZWRV6.js +149 -0
  78. package/dist/chunk-EOQVTGB6.js +350 -0
  79. package/dist/{chunk-BEDBFJND.js → chunk-ESGUHNB2.js} +119 -43
  80. package/dist/{chunk-Q72LJOVE.js → chunk-F2KNBPKY.js} +74 -18
  81. package/dist/{chunk-O7AE6DAF.js → chunk-G7H3NX3G.js} +57 -24
  82. package/dist/chunk-GM7YIPB7.js +1052 -0
  83. package/dist/chunk-GVQQG435.js +581 -0
  84. package/dist/chunk-HE43OMEL.js +1056 -0
  85. package/dist/chunk-HHOMFQ7R.js +2535 -0
  86. package/dist/chunk-HJFFOOJ4.js +1 -0
  87. package/dist/chunk-HNAKS4Z3.js +207 -0
  88. package/dist/chunk-HP6ST2OW.js +352 -0
  89. package/dist/chunk-HW3OWDTU.js +1 -0
  90. package/dist/{chunk-3ENTMPQY.js → chunk-HZDB44K4.js} +102 -52
  91. package/dist/chunk-I2KLQ2HA.js +19 -0
  92. package/dist/chunk-I6CUP2LW.js +1155 -0
  93. package/dist/chunk-ICV4Y2WY.js +27 -0
  94. package/dist/chunk-IHSIENOE.js +3950 -0
  95. package/dist/{chunk-CUMUNPXY.js → chunk-IMMALLRU.js} +68 -32
  96. package/dist/chunk-J64KGCGX.js +55 -0
  97. package/dist/{chunk-IVNRBPGC.js → chunk-JA6TK7H2.js} +255 -84
  98. package/dist/{chunk-OOPPQH27.js → chunk-JAVZ5JPV.js} +83 -29
  99. package/dist/chunk-JCMTP3E4.js +1251 -0
  100. package/dist/{chunk-U7TFM2JA.js → chunk-JCXFFK64.js} +75 -18
  101. package/dist/chunk-JWCVBFDU.js +236 -0
  102. package/dist/chunk-JXRTD5RI.js +414 -0
  103. package/dist/chunk-JYIUZUIQ.js +1567 -0
  104. package/dist/chunk-K3TK3GIV.js +219 -0
  105. package/dist/chunk-KEVZIHM2.js +1511 -0
  106. package/dist/chunk-KHZDNQQD.js +171 -0
  107. package/dist/chunk-KL4GDV4V.js +131 -0
  108. package/dist/chunk-KNILMM4H.js +225 -0
  109. package/dist/chunk-KRBUZV45.js +25 -0
  110. package/dist/{chunk-ITTYJZWX.js → chunk-KXLDK6HB.js} +161 -45
  111. package/dist/chunk-KZ3X7TSL.js +196 -0
  112. package/dist/chunk-L2WMOA2V.js +474 -0
  113. package/dist/chunk-L4D5LHCH.js +109 -0
  114. package/dist/chunk-LAUJPLDB.js +853 -0
  115. package/dist/{chunk-SBMNWWBV.js → chunk-LGNTP5XA.js} +89 -17
  116. package/dist/chunk-LUZFCCSD.js +271 -0
  117. package/dist/{chunk-HPPW424V.js → chunk-LXJCP4PL.js} +129 -37
  118. package/dist/chunk-MCOZJWPU.js +731 -0
  119. package/dist/chunk-MG4SKWLL.js +2587 -0
  120. package/dist/chunk-MPEPTSER.js +414 -0
  121. package/dist/chunk-MWPJ4YGP.js +1 -0
  122. package/dist/{chunk-TKQYWZ5V.js → chunk-N7AX4OA4.js} +108 -41
  123. package/dist/chunk-NHSLM6SE.js +523 -0
  124. package/dist/chunk-NNCOFLNE.js +24 -0
  125. package/dist/{chunk-J7Q7VCVC.js → chunk-NNJLVA7M.js} +54 -15
  126. package/dist/chunk-NZG75DGA.js +282 -0
  127. package/dist/chunk-O76QXRBV.js +431 -0
  128. package/dist/chunk-OANH27AK.js +223 -0
  129. package/dist/chunk-OCHPK5YV.js +609 -0
  130. package/dist/chunk-OMHVEVX4.js +436 -0
  131. package/dist/{chunk-YF4NSSMT.js → chunk-ONKQUJWD.js} +220 -65
  132. package/dist/chunk-OVTK7A6T.js +615 -0
  133. package/dist/chunk-PCEFCOLN.js +120 -0
  134. package/dist/chunk-PFLNFIVB.js +186 -0
  135. package/dist/chunk-PHSZY37H.js +300 -0
  136. package/dist/chunk-PJLTKDVY.js +18 -0
  137. package/dist/{chunk-4YIP3CWS.js → chunk-PK7BN3MI.js} +89 -19
  138. package/dist/{chunk-KMI5ML5I.js → chunk-PWFRDRGS.js} +155 -29
  139. package/dist/chunk-PYPMD46W.js +707 -0
  140. package/dist/chunk-Q6CCHDI7.js +331 -0
  141. package/dist/chunk-QFA5WS2A.js +750 -0
  142. package/dist/chunk-QJMMM4RC.js +124 -0
  143. package/dist/chunk-QNZII37O.js +10 -0
  144. package/dist/chunk-QYWEVAM6.js +407 -0
  145. package/dist/chunk-R5T4VZ7Z.js +126 -0
  146. package/dist/chunk-R77HFLZD.js +1 -0
  147. package/dist/{chunk-YC6WORFL.js → chunk-RAESDNU5.js} +228 -102
  148. package/dist/chunk-RBYQUXNL.js +1 -0
  149. package/dist/chunk-RCM3DT5E.js +1 -0
  150. package/dist/chunk-RGNY56L7.js +282 -0
  151. package/dist/chunk-RIK6UX2K.js +344 -0
  152. package/dist/{chunk-LAECSR4H.js → chunk-RJA3RXO3.js} +75 -60
  153. package/dist/chunk-RJYRJ3LD.js +1 -0
  154. package/dist/chunk-RMA3NOY4.js +599 -0
  155. package/dist/{chunk-DM5QUKKO.js → chunk-RSWKKAHK.js} +160 -66
  156. package/dist/chunk-RVOIIX3V.js +204 -0
  157. package/dist/chunk-SA2RRBGT.js +1077 -0
  158. package/dist/chunk-SG3J4R45.js +1428 -0
  159. package/dist/chunk-SPUK7JD4.js +238 -0
  160. package/dist/chunk-SWXV2K5N.js +434 -0
  161. package/dist/chunk-SYJEPXP6.js +1303 -0
  162. package/dist/{chunk-N32RGOA5.js → chunk-SZLI34TA.js} +93 -28
  163. package/dist/{chunk-4GBOGOTV.js → chunk-T77WJA74.js} +143 -18
  164. package/dist/chunk-TDWWVJA4.js +630 -0
  165. package/dist/chunk-TFHI5XDR.js +610 -0
  166. package/dist/chunk-TH4PW2WU.js +17 -0
  167. package/dist/chunk-TTQ24HQX.js +12 -0
  168. package/dist/chunk-TUACVJNG.js +12 -0
  169. package/dist/{chunk-CYRBHQQZ.js → chunk-TUL5RUIA.js} +201 -59
  170. package/dist/{chunk-4ZAHCY44.js → chunk-TYOSA7JG.js} +74 -38
  171. package/dist/chunk-TYQTMMEV.js +1 -0
  172. package/dist/chunk-TZO6YDS7.js +346 -0
  173. package/dist/chunk-U3ETF22F.js +328 -0
  174. package/dist/chunk-U6BYHD2N.js +213 -0
  175. package/dist/{chunk-WSW6ZFAQ.js → chunk-UF6EJXPQ.js} +20 -5
  176. package/dist/chunk-UNNQIPGK.js +792 -0
  177. package/dist/chunk-UQEN55EY.js +1 -0
  178. package/dist/chunk-UQVO6AJV.js +171 -0
  179. package/dist/chunk-VFDQAAIW.js +351 -0
  180. package/dist/chunk-VIUE3VQT.js +1 -0
  181. package/dist/chunk-VJLSSSGC.js +438 -0
  182. package/dist/chunk-VLMT6KYT.js +350 -0
  183. package/dist/chunk-VMHGBUGS.js +35 -0
  184. package/dist/{chunk-7O2FMUPT.js → chunk-VQKPBYW6.js} +400 -139
  185. package/dist/{chunk-EJBDRVIH.js → chunk-VSSTWLC5.js} +61 -16
  186. package/dist/chunk-VZYYZRPN.js +1992 -0
  187. package/dist/chunk-W23G6JLF.js +37 -0
  188. package/dist/chunk-WAIJCD2V.js +480 -0
  189. package/dist/chunk-WFMQ3WKM.js +378 -0
  190. package/dist/chunk-WJ2KDRMY.js +66 -0
  191. package/dist/chunk-WKFZJO54.js +437 -0
  192. package/dist/{chunk-SYNOJOQO.js → chunk-WVVD3XOV.js} +189 -93
  193. package/dist/chunk-XAIWMSLB.js +1 -0
  194. package/dist/chunk-XBXUBBJZ.js +98 -0
  195. package/dist/chunk-XCU7MYBJ.js +1 -0
  196. package/dist/chunk-XHE4PGCI.js +717 -0
  197. package/dist/chunk-XRSJ32M3.js +331 -0
  198. package/dist/chunk-XTCVOEAW.js +1 -0
  199. package/dist/chunk-XWGXVQF6.js +58 -0
  200. package/dist/{chunk-35OFI3JG.js → chunk-Y3XKKO5K.js} +258 -123
  201. package/dist/chunk-Y4QNMBLO.js +533 -0
  202. package/dist/chunk-Y5H4CTKO.js +1 -0
  203. package/dist/chunk-YBQIN75A.js +403 -0
  204. package/dist/chunk-YJ5PXOX3.js +158 -0
  205. package/dist/{chunk-AWJOCGFZ.js → chunk-YLRSRUPS.js} +81 -55
  206. package/dist/chunk-YM6MPJ4A.js +1 -0
  207. package/dist/chunk-YV7KZENV.js +200 -0
  208. package/dist/chunk-Z7I4ZSO6.js +316 -0
  209. package/dist/chunk-ZIRMWD2B.js +555 -0
  210. package/dist/chunk-ZPMG3FWU.js +75 -0
  211. package/dist/{chunk-QWCMU5B2.js → chunk-ZTXMK2G7.js} +289 -115
  212. package/dist/chunk-ZVJCWXAL.js +541 -0
  213. package/dist/{chunk-P23EQNRQ.js → chunk-ZYQ23DPT.js} +215 -49
  214. package/dist/coachmark/index.js +10 -3
  215. package/dist/code-block/index.js +6 -3
  216. package/dist/color-field/index.js +15 -5
  217. package/dist/color-picker/index.js +23 -0
  218. package/dist/commerce/index.js +31 -17
  219. package/dist/confirm/index.js +31 -0
  220. package/dist/connection-card/index.js +34 -0
  221. package/dist/connectivity/index.js +6 -2
  222. package/dist/context-menu/index.js +13 -3
  223. package/dist/copy-button/index.js +5 -2
  224. package/dist/data-grid/index.js +35 -17
  225. package/dist/date-range-picker/index.js +22 -9
  226. package/dist/description-list/index.js +6 -1
  227. package/dist/device-frame/index.js +30 -0
  228. package/dist/dialog/index.js +10 -2
  229. package/dist/divider/index.js +2 -0
  230. package/dist/empty-state/index.js +15 -2
  231. package/dist/error-summary/index.js +9 -2
  232. package/dist/fab/index.js +7 -2
  233. package/dist/file-manager/index.js +44 -0
  234. package/dist/file-upload/index.js +16 -7
  235. package/dist/filter-bar/index.js +14 -7
  236. package/dist/flow-run/index.js +23 -13
  237. package/dist/form/index.js +32 -3
  238. package/dist/gallery/index.js +8 -2
  239. package/dist/hold-to-confirm/index.js +6 -2
  240. package/dist/hover-card/index.js +18 -0
  241. package/dist/icon-tile/index.js +10 -0
  242. package/dist/image/index.js +9 -0
  243. package/dist/index.d.ts +30789 -12332
  244. package/dist/index.js +424 -135
  245. package/dist/infinite-list/index.js +6 -2
  246. package/dist/inline-edit/index.js +8 -5
  247. package/dist/input/index.js +7 -4
  248. package/dist/interactions/index.js +5 -1
  249. package/dist/invoice/index.js +22 -9
  250. package/dist/job-row/index.js +22 -0
  251. package/dist/json-inspector/index.js +20 -0
  252. package/dist/kbd/index.js +5 -1
  253. package/dist/keyboard/index.js +9 -2
  254. package/dist/level-meter/index.js +9 -0
  255. package/dist/list-row/index.js +14 -4
  256. package/dist/log-viewer/index.js +11 -2
  257. package/dist/map-view/index.js +16 -3
  258. package/dist/markdown/index.js +12 -6
  259. package/dist/metric/index.js +10 -4
  260. package/dist/metric-strip/index.js +12 -0
  261. package/dist/money/index.js +16 -3
  262. package/dist/nav-drawer/index.js +8 -2
  263. package/dist/nav-header/index.js +15 -0
  264. package/dist/navigation/index.js +32 -2
  265. package/dist/notification-center/index.js +28 -12
  266. package/dist/number-roll/index.js +7 -2
  267. package/dist/onboarding-pager/index.js +22 -0
  268. package/dist/one-handed/index.js +5 -3
  269. package/dist/os-surfaces/index.js +9 -3
  270. package/dist/otp/index.js +9 -5
  271. package/dist/page-header/index.js +3 -1
  272. package/dist/pagination/index.js +8 -0
  273. package/dist/payment-method/index.js +21 -11
  274. package/dist/payment-status/index.js +26 -15
  275. package/dist/permission/index.js +21 -2
  276. package/dist/picker/index.js +22 -6
  277. package/dist/progress/index.js +11 -3
  278. package/dist/provenance/index.js +16 -0
  279. package/dist/pull-to-refresh/index.js +4 -2
  280. package/dist/qr-code/index.js +16 -0
  281. package/dist/query-builder/index.js +30 -0
  282. package/dist/radio-group/index.js +9 -5
  283. package/dist/rating/index.js +10 -2
  284. package/dist/receivables/index.js +35 -17
  285. package/dist/recording-indicator/index.js +21 -0
  286. package/dist/refund/index.js +28 -15
  287. package/dist/repeatable-rows/index.js +19 -0
  288. package/dist/save-status/index.js +7 -3
  289. package/dist/screen/index.js +3 -0
  290. package/dist/scroll-area/index.js +3 -1
  291. package/dist/search-field/index.js +13 -0
  292. package/dist/secret-field/index.js +19 -0
  293. package/dist/section-header/index.js +4 -0
  294. package/dist/segmented-control/index.js +4 -3
  295. package/dist/sheet/index.js +11 -3
  296. package/dist/shortcuts-sheet/index.js +2 -0
  297. package/dist/sign-in-screen/index.js +25 -0
  298. package/dist/skeleton/index.js +5 -1
  299. package/dist/slider/index.js +5 -2
  300. package/dist/sortable/index.js +8 -0
  301. package/dist/spinner/index.js +4 -1
  302. package/dist/split-button/index.js +21 -6
  303. package/dist/spotlight/index.js +9 -1
  304. package/dist/stack/index.js +2 -0
  305. package/dist/stage-timeline/index.js +8 -3
  306. package/dist/status-dot/index.js +8 -2
  307. package/dist/stepper/index.js +11 -4
  308. package/dist/streaming-text/index.js +4 -2
  309. package/dist/survey/index.js +29 -16
  310. package/dist/switch/index.js +9 -3
  311. package/dist/system-state/index.js +15 -4
  312. package/dist/tab-bar/index.js +13 -2
  313. package/dist/tabs/index.js +12 -2
  314. package/dist/tags-input/index.js +13 -0
  315. package/dist/text/index.js +4 -0
  316. package/dist/textarea/index.js +8 -5
  317. package/dist/thinking/index.js +6 -1
  318. package/dist/tile-rail/index.js +10 -0
  319. package/dist/time-field/index.js +20 -0
  320. package/dist/time-range-control/index.js +36 -0
  321. package/dist/timeline/index.js +4 -2
  322. package/dist/toast/index.js +6 -2
  323. package/dist/toolbar/index.js +5 -2
  324. package/dist/tour/index.js +15 -10
  325. package/dist/transcript/index.js +28 -0
  326. package/dist/truncation-notice/index.js +5 -2
  327. package/dist/update-notice/index.js +19 -9
  328. package/dist/video-player/index.js +29 -2
  329. package/dist/viewfinder/index.js +15 -5
  330. package/dist/widget/index.js +14 -4
  331. package/dist/wizard/index.js +10 -4
  332. package/package.json +13 -12
  333. package/dist/chunk-223Q2T2Q.js +0 -229
  334. package/dist/chunk-2A5NIQAK.js +0 -254
  335. package/dist/chunk-2GK6PHGE.js +0 -363
  336. package/dist/chunk-2ZZ7TDJ4.js +0 -324
  337. package/dist/chunk-3ARE4TES.js +0 -195
  338. package/dist/chunk-3NMD74ZU.js +0 -4
  339. package/dist/chunk-3WPW4KUN.js +0 -182
  340. package/dist/chunk-423B7SPN.js +0 -993
  341. package/dist/chunk-47FWHGUN.js +0 -394
  342. package/dist/chunk-4DS5ZWVC.js +0 -83
  343. package/dist/chunk-4SZYY6AN.js +0 -99
  344. package/dist/chunk-4YQOR7JM.js +0 -204
  345. package/dist/chunk-52X2VYTD.js +0 -228
  346. package/dist/chunk-5YNTNN5A.js +0 -177
  347. package/dist/chunk-6HT2LP62.js +0 -504
  348. package/dist/chunk-6N33LFQA.js +0 -35
  349. package/dist/chunk-6X6PQ443.js +0 -432
  350. package/dist/chunk-7CFF4HXS.js +0 -126
  351. package/dist/chunk-AI4DWZCD.js +0 -162
  352. package/dist/chunk-BTTFCMKG.js +0 -166
  353. package/dist/chunk-BV3B2HYZ.js +0 -1635
  354. package/dist/chunk-C2NTXVWM.js +0 -98
  355. package/dist/chunk-CDRZHT42.js +0 -424
  356. package/dist/chunk-DHWADYZX.js +0 -144
  357. package/dist/chunk-F5XNPWS7.js +0 -1024
  358. package/dist/chunk-FMYDDECK.js +0 -1521
  359. package/dist/chunk-GDKZTW34.js +0 -395
  360. package/dist/chunk-GL7B2DOW.js +0 -134
  361. package/dist/chunk-GNNJ4GCC.js +0 -471
  362. package/dist/chunk-HET4LLMX.js +0 -129
  363. package/dist/chunk-HZ6CNMAF.js +0 -870
  364. package/dist/chunk-IIQTAY3J.js +0 -715
  365. package/dist/chunk-JNH2TYIN.js +0 -96
  366. package/dist/chunk-JNY4ZHAR.js +0 -634
  367. package/dist/chunk-JXJB2X6M.js +0 -131
  368. package/dist/chunk-LRJNDEIA.js +0 -302
  369. package/dist/chunk-LSS54GLJ.js +0 -116
  370. package/dist/chunk-LZLHELAG.js +0 -137
  371. package/dist/chunk-MOUJOP55.js +0 -425
  372. package/dist/chunk-NKB7BZYK.js +0 -167
  373. package/dist/chunk-NQYBUO3K.js +0 -1795
  374. package/dist/chunk-O4AEHWII.js +0 -464
  375. package/dist/chunk-OETCUXQP.js +0 -134
  376. package/dist/chunk-OPXFZ4Y5.js +0 -204
  377. package/dist/chunk-PJXUJYS6.js +0 -248
  378. package/dist/chunk-PUPM2YGF.js +0 -376
  379. package/dist/chunk-QCDXZBC5.js +0 -247
  380. package/dist/chunk-QDYDBCFP.js +0 -197
  381. package/dist/chunk-QJJ6MADV.js +0 -274
  382. package/dist/chunk-QKXCPTFS.js +0 -349
  383. package/dist/chunk-RIBDXGUG.js +0 -108
  384. package/dist/chunk-RJQOOHT2.js +0 -214
  385. package/dist/chunk-RNGLIHFA.js +0 -191
  386. package/dist/chunk-RQ3HASCC.js +0 -6
  387. package/dist/chunk-RSOJT5YW.js +0 -124
  388. package/dist/chunk-RUZHTGKB.js +0 -237
  389. package/dist/chunk-RW6ZL2FQ.js +0 -284
  390. package/dist/chunk-TKVFVF5D.js +0 -95
  391. package/dist/chunk-TOXAGRDQ.js +0 -144
  392. package/dist/chunk-TUTI5HOZ.js +0 -112
  393. package/dist/chunk-UC2WGUP3.js +0 -627
  394. package/dist/chunk-UYG5L34B.js +0 -87
  395. package/dist/chunk-VBOXAEPI.js +0 -336
  396. package/dist/chunk-VCDBXW5H.js +0 -188
  397. package/dist/chunk-VEAYTRPX.js +0 -414
  398. package/dist/chunk-VQHPQEUH.js +0 -273
  399. package/dist/chunk-VXDZFJGP.js +0 -874
  400. package/dist/chunk-XNUVB5OL.js +0 -375
  401. package/dist/chunk-XOSCY2CW.js +0 -242
  402. package/dist/chunk-XXXEFXY5.js +0 -99
  403. package/dist/chunk-YDGVJETP.js +0 -60
  404. package/dist/chunk-YG3ZJHGU.js +0 -223
  405. package/dist/chunk-YTFKPRUK.js +0 -845
  406. package/dist/chunk-Z7H7VSFZ.js +0 -323
  407. package/dist/header/index.js +0 -5
  408. package/dist/search-bar/index.js +0 -5
  409. /package/dist/{chunk-3ECPOSKO.js → chunk-3BKLBYPK.js} +0 -0
  410. /package/dist/{chunk-JRLTGLN4.js → chunk-3UG6JUCV.js} +0 -0
  411. /package/dist/{chunk-RTIKSY6A.js → chunk-4QCR3K2J.js} +0 -0
  412. /package/dist/{chunk-VFCUIDRT.js → chunk-5WWRTEPS.js} +0 -0
@@ -1,19 +1,54 @@
1
- import { NO_UA_FOCUS_RING } from './chunk-3NMD74ZU.js';
2
- import { useResolvedMotion } from './chunk-6N33LFQA.js';
3
- import { Icon } from './chunk-TKVFVF5D.js';
4
- import * as React from 'react';
5
- import { Animated, Easing, View, TextInput, ActivityIndicator, Text } from 'react-native';
6
- import { createStyleSheet, useStyles, useLoamTheme } from '@btndprojects/loam-theme-native';
1
+ import { fieldSurfaceFill } from './chunk-43K3BLXV.js';
2
+ import { useLabels } from './chunk-APCWFOZW.js';
3
+ import { NO_UA_FOCUS_RING } from './chunk-2YKVID2V.js';
4
+ import { Icon } from './chunk-PCEFCOLN.js';
5
+ import { useResolvedMotion } from './chunk-J64KGCGX.js';
6
+ import * as React2 from 'react';
7
+ import { Animated, Platform, Easing, View, TextInput, ActivityIndicator, Pressable, Text } from 'react-native';
8
+ import { createStyleSheet, useLoamTheme, useStyles } from '@btndprojects/loam-theme-native';
7
9
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
10
 
11
+ function useFieldValidation({
12
+ validate,
13
+ error,
14
+ success,
15
+ value,
16
+ onBlur,
17
+ onChangeText
18
+ }) {
19
+ const [touched, setTouched] = React2.useState(false);
20
+ const [verdict, setVerdict] = React2.useState(null);
21
+ const lastText = React2.useRef(value ?? "");
22
+ if (value !== void 0) lastText.current = value;
23
+ const run = (text) => {
24
+ const message = validate?.(text);
25
+ setVerdict({ message: message ? String(message) : void 0, filled: text !== "" });
26
+ };
27
+ if (!validate) return { error, success, onBlur, onChangeText };
28
+ const shownError = error ?? verdict?.message;
29
+ return {
30
+ error: shownError,
31
+ success: success ?? (verdict !== null && !shownError && verdict.filled ? true : void 0),
32
+ onBlur: (event) => {
33
+ setTouched(true);
34
+ run(lastText.current);
35
+ onBlur?.(event);
36
+ },
37
+ onChangeText: (text) => {
38
+ lastText.current = text;
39
+ if (touched) run(text);
40
+ onChangeText?.(text);
41
+ }
42
+ };
43
+ }
9
44
  function useColorTransition(target, duration, easing, animate = true) {
10
- const progress = React.useRef(new Animated.Value(1)).current;
11
- const [range, setRange] = React.useState([target, target]);
12
- React.useEffect(() => {
45
+ const progress = React2.useRef(new Animated.Value(1)).current;
46
+ const [range, setRange] = React2.useState([target, target]);
47
+ React2.useEffect(() => {
13
48
  setRange((prev) => prev[1] === target ? prev : [prev[1], target]);
14
49
  }, [target]);
15
50
  const [from, to] = range;
16
- React.useEffect(() => {
51
+ React2.useEffect(() => {
17
52
  if (from === to) return;
18
53
  if (!animate) {
19
54
  progress.setValue(1);
@@ -24,46 +59,81 @@ function useColorTransition(target, duration, easing, animate = true) {
24
59
  }, [from, to, progress, duration, easing, animate]);
25
60
  return progress.interpolate({ inputRange: [0, 1], outputRange: [from, to] });
26
61
  }
62
+ function useInputPlatform(explicit) {
63
+ const theme = useLoamTheme("input");
64
+ if (explicit) return explicit;
65
+ if (Platform.OS === "ios") return "ios";
66
+ if (Platform.OS === "android") return "android";
67
+ return theme.platform === "iOS" ? "ios" : "android";
68
+ }
69
+ var DEFAULT_LABELS = {
70
+ validating: "Validating",
71
+ valid: "Valid",
72
+ invalid: "Invalid",
73
+ clear: "Clear"
74
+ };
27
75
  function Input({
28
- size = "md",
76
+ size = "lg",
77
+ platform,
29
78
  error = false,
30
79
  success = false,
31
80
  loading = false,
32
81
  leadingIcon,
33
82
  trailingIcon,
34
83
  validationState = "default",
84
+ surface = "filled",
85
+ clearable = false,
35
86
  message,
36
87
  showStatusIcon = true,
37
88
  motion = "full",
38
89
  editable = true,
39
90
  onFocus,
40
91
  onBlur,
92
+ onChangeText,
41
93
  style,
42
94
  containerStyle,
95
+ labels: labelsProp,
43
96
  ...rest
44
97
  }) {
45
- const [focused, setFocused] = React.useState(false);
46
- const animateColour = useResolvedMotion(motion) === "full";
98
+ const labels = useLabels("input", DEFAULT_LABELS, labelsProp);
99
+ const [focused, setFocused] = React2.useState(false);
100
+ const inputRef = React2.useRef(null);
101
+ const [typed, setTyped] = React2.useState(String(rest.defaultValue ?? ""));
102
+ const text = rest.value !== void 0 ? rest.value : typed;
103
+ const handleChangeText = (next) => {
104
+ setTyped(next);
105
+ onChangeText?.(next);
106
+ };
107
+ const clearText = () => {
108
+ inputRef.current?.clear();
109
+ handleChangeText("");
110
+ inputRef.current?.focus();
111
+ };
112
+ const animateColour = useResolvedMotion(motion, "input") === "full";
47
113
  const disabled = editable === false;
48
114
  const isLoading = loading && !disabled;
49
115
  const valid = !isLoading && (validationState === "valid" || success);
50
116
  const invalid = !isLoading && (validationState === "invalid" || error);
117
+ const os = useInputPlatform(platform);
51
118
  const { styles } = useStyles(sheet, { size, disabled });
52
- const theme = useLoamTheme();
119
+ const theme = useLoamTheme("input");
53
120
  const iconSize = theme.ctl.icon[size];
54
121
  const iconColor = theme.color.text3;
122
+ const valueFont = size === "lg" ? { fontSize: theme.fontSize[os === "ios" ? 17 : 16] } : null;
55
123
  const slopY = Math.max(0, (theme.hit[size] - theme.ctl[size]) / 2);
56
- const tone = disabled ? { border: theme.color.border, fill: theme.color.surface3 } : isLoading ? { border: theme.focus.ringColor, fill: theme.color.surface } : invalid ? { border: theme.color.danger, fill: theme.color.dangerSoft } : valid ? { border: theme.color.good, fill: theme.color.goodSoft } : focused ? { border: theme.focus.ringColor, fill: theme.color.surface } : { border: theme.color.borderStrong, fill: theme.color.surface2 };
57
- const easing = React.useMemo(() => Easing.bezier(...theme.easing.base), [theme.easing.base]);
124
+ const restFill = fieldSurfaceFill(theme, surface);
125
+ const tone = disabled ? { border: theme.color.borderStrong, fill: restFill } : isLoading ? { border: theme.focus.ringColor, fill: theme.color.surface } : invalid ? { border: theme.color.danger, fill: focused ? theme.color.surface : restFill } : focused ? { border: theme.focus.ringColor, fill: theme.color.surface } : { border: theme.color.borderStrong, fill: restFill };
126
+ const easing = React2.useMemo(() => Easing.bezier(...theme.easing.base), [theme.easing.base]);
58
127
  const borderColor = useColorTransition(tone.border, theme.duration.base, easing, animateColour);
59
128
  const backgroundColor = useColorTransition(tone.fill, theme.duration.base, easing, animateColour);
60
129
  const statusIconName = valid ? "check-circle" : invalid ? "alert-triangle" : void 0;
61
- const statusColor = valid ? theme.color.goodOnSoft : theme.color.dangerOnSoft;
130
+ const statusColor = valid ? theme.color.good : theme.color.danger;
62
131
  const showStatus = showStatusIcon && statusIconName !== void 0;
63
- const messageColor = invalid ? theme.color.danger : valid ? theme.color.goodOnSoft : theme.color.text2;
132
+ const showClear = clearable && !disabled && !isLoading && text.length > 0;
133
+ const messageColor = invalid ? theme.color.dangerOnSoft : valid ? theme.color.goodOnSoft : theme.color.text2;
64
134
  const showMessageRow = validationState !== "default" || message !== void 0;
65
- const statusOpacity = React.useRef(new Animated.Value(0)).current;
66
- React.useEffect(() => {
135
+ const statusOpacity = React2.useRef(new Animated.Value(0)).current;
136
+ React2.useEffect(() => {
67
137
  const toValue = showStatus ? 1 : 0;
68
138
  if (!animateColour) {
69
139
  statusOpacity.setValue(toValue);
@@ -89,7 +159,18 @@ function Input({
89
159
  Animated.View,
90
160
  {
91
161
  testID: "input-container",
92
- style: [styles.container, { borderColor, backgroundColor }],
162
+ style: [
163
+ styles.container,
164
+ // A multiline field wraps rather than clips: the ramp height becomes
165
+ // a floor and the box grows with its text.
166
+ rest.multiline ? {
167
+ height: "auto",
168
+ minHeight: theme.ctl.lg * 2,
169
+ alignItems: "flex-start",
170
+ paddingVertical: theme.space[8]
171
+ } : null,
172
+ { borderColor, backgroundColor }
173
+ ],
93
174
  accessibilityState: { disabled },
94
175
  children: [
95
176
  leadingIcon ? /* @__PURE__ */ jsx(Icon, { name: leadingIcon, size: iconSize, color: iconColor }) : null,
@@ -97,13 +178,18 @@ function Input({
97
178
  TextInput,
98
179
  {
99
180
  ...rest,
181
+ ref: inputRef,
182
+ numberOfLines: rest.numberOfLines ?? (rest.multiline ? 4 : void 0),
183
+ onChangeText: handleChangeText,
100
184
  editable,
185
+ "aria-disabled": disabled || void 0,
101
186
  "aria-busy": isLoading || void 0,
187
+ clearButtonMode: rest.clearButtonMode ?? (os === "ios" && !clearable ? "while-editing" : "never"),
102
188
  placeholderTextColor: theme.color.text3,
103
189
  onFocus: handleFocus,
104
190
  onBlur: handleBlur,
105
191
  hitSlop: { top: slopY, bottom: slopY },
106
- style: [styles.input, NO_UA_FOCUS_RING, style]
192
+ style: [styles.input, valueFont, NO_UA_FOCUS_RING, style]
107
193
  }
108
194
  ),
109
195
  isLoading ? (
@@ -115,17 +201,28 @@ function Input({
115
201
  testID: "input-spinner",
116
202
  size: "small",
117
203
  color: theme.color.accent,
118
- accessibilityLabel: "Validating"
204
+ accessibilityLabel: labels.validating
119
205
  }
120
206
  )
121
207
  ) : /* @__PURE__ */ jsxs(Fragment, { children: [
208
+ showClear ? /* @__PURE__ */ jsx(
209
+ Pressable,
210
+ {
211
+ testID: "input-clear",
212
+ accessibilityRole: "button",
213
+ accessibilityLabel: labels.clear,
214
+ onPress: clearText,
215
+ hitSlop: Math.max(0, (theme.tapMin - iconSize) / 2),
216
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: iconSize, color: iconColor })
217
+ }
218
+ ) : null,
122
219
  trailingIcon ? /* @__PURE__ */ jsx(Icon, { name: trailingIcon, size: iconSize, color: iconColor }) : null,
123
220
  showStatus ? /* @__PURE__ */ jsx(
124
221
  Animated.View,
125
222
  {
126
223
  testID: "input-status-icon",
127
224
  accessibilityRole: "image",
128
- accessibilityLabel: valid ? "Valid" : "Invalid",
225
+ accessibilityLabel: valid ? labels.valid : labels.invalid,
129
226
  style: { opacity: statusOpacity },
130
227
  children: /* @__PURE__ */ jsx(Icon, { name: statusIconName, size: iconSize, color: statusColor })
131
228
  }
@@ -140,22 +237,37 @@ function Input({
140
237
  function TextField({
141
238
  label,
142
239
  hint,
143
- error,
240
+ error: errorProp,
241
+ success: successProp,
242
+ validate,
144
243
  containerStyle,
244
+ onBlur,
245
+ onChangeText,
145
246
  ...inputProps
146
247
  }) {
147
- const { styles } = useStyles(fieldSheet);
148
- const labelId = React.useId();
248
+ const os = useInputPlatform(inputProps.platform);
249
+ const { styles } = useStyles(fieldSheet, { os });
250
+ const { error, success, ...handlers } = useFieldValidation({
251
+ validate,
252
+ error: errorProp,
253
+ success: successProp,
254
+ value: inputProps.value,
255
+ onBlur,
256
+ onChangeText
257
+ });
258
+ const labelId = React2.useId();
149
259
  return (
150
260
  // The caller's sizing goes here rather than on the inner `Input`: a label and
151
261
  // a helper line that did not follow the field's width would read as a
152
262
  // different control.
153
263
  /* @__PURE__ */ jsxs(View, { style: [styles.field, containerStyle], children: [
154
- label ? /* @__PURE__ */ jsx(Text, { nativeID: labelId, style: styles.label, children: label }) : null,
264
+ label ? /* @__PURE__ */ jsx(Text, { nativeID: labelId, style: [styles.label, error ? styles.labelError : null], children: label }) : null,
155
265
  /* @__PURE__ */ jsx(
156
266
  Input,
157
267
  {
158
268
  ...inputProps,
269
+ ...handlers,
270
+ success,
159
271
  "aria-labelledby": label ? labelId : inputProps["aria-labelledby"],
160
272
  error: Boolean(error)
161
273
  }
@@ -202,14 +314,11 @@ var sheet = createStyleSheet((theme) => ({
202
314
  borderRadius: theme.ctl.r.lg
203
315
  }
204
316
  },
205
- // A blanket `opacity` here dimmed the value text with it: react-native-web
206
- // renders `editable={false}` as `readonly` (not `disabled`, which WCAG
207
- // exempts), so axe checks the text and the 0.38 opacity dropped it to
208
- // ~2.2:1. The disabled state now reads from the muted `surface3` fill,
209
- // plain `border` edge and `text2` value colour instead — all AA on their
210
- // own, no opacity dim on the text. (Same shape as the launch-screen fix.)
317
+ // Final 02 R5: the whole shell, value included, sits at
318
+ // `state.disabledOpacity`; the field is announced disabled, which WCAG
319
+ // exempts from contrast.
211
320
  disabled: {
212
- true: {},
321
+ true: { opacity: theme.state.disabledOpacity },
213
322
  false: {}
214
323
  }
215
324
  }
@@ -231,11 +340,11 @@ var sheet = createStyleSheet((theme) => ({
231
340
  xs: { fontSize: theme.fontSize[14] },
232
341
  sm: { fontSize: theme.fontSize[14] },
233
342
  md: { fontSize: theme.fontSize[16] },
234
- lg: { fontSize: theme.fontSize[16] }
343
+ // The lg value is the platform body, set at the use site: 17 on iOS,
344
+ // 16 on Android.
345
+ lg: {}
235
346
  },
236
- // Solid value colour for the locked field — the locked look reads from the
237
- // `surface3` fill and plain edge, not a dimmed ink. `text2` measures only
238
- // 4.4:1 on `surface3` (WCAG fail), so the value keeps primary `text`.
347
+ // The value keeps primary `text`; the shell's opacity does the dimming.
239
348
  disabled: {
240
349
  true: { color: theme.color.text },
241
350
  false: {}
@@ -249,13 +358,20 @@ var sheet = createStyleSheet((theme) => ({
249
358
  }
250
359
  }));
251
360
  var fieldSheet = createStyleSheet((theme) => ({
252
- field: { gap: theme.space.s2 },
361
+ field: { gap: theme.space[6] },
362
+ // R11: the label sits in `text`, 6 above the shell — 13 / 600 on iOS,
363
+ // 14 / 500 on Android; it turns `dangerOnSoft` with the error.
253
364
  label: {
254
365
  fontFamily: theme.font.sans,
255
- fontWeight: theme.fontWeight.semibold,
256
- fontSize: theme.fontSize[14],
257
- color: theme.color.text2
366
+ color: theme.color.text,
367
+ variants: {
368
+ os: {
369
+ ios: { fontSize: theme.fontSize[13], fontWeight: theme.fontWeight.semibold },
370
+ android: { fontSize: theme.fontSize[14], fontWeight: theme.fontWeight.medium }
371
+ }
372
+ }
258
373
  },
374
+ labelError: { color: theme.color.dangerOnSoft },
259
375
  hint: {
260
376
  fontFamily: theme.font.sans,
261
377
  fontSize: theme.fontSize[12],
@@ -264,8 +380,8 @@ var fieldSheet = createStyleSheet((theme) => ({
264
380
  error: {
265
381
  fontFamily: theme.font.sans,
266
382
  fontSize: theme.fontSize[12],
267
- color: theme.color.danger
383
+ color: theme.color.dangerOnSoft
268
384
  }
269
385
  }));
270
386
 
271
- export { Input, TextField, useColorTransition };
387
+ export { Input, TextField, useColorTransition, useFieldValidation, useInputPlatform };
@@ -0,0 +1,196 @@
1
+ import { Skeleton } from './chunk-YJ5PXOX3.js';
2
+ import { isAndroidIdiom } from './chunk-TH4PW2WU.js';
3
+ import { useLabels } from './chunk-APCWFOZW.js';
4
+ import { Icon } from './chunk-PCEFCOLN.js';
5
+ import { motionTiming } from './chunk-J64KGCGX.js';
6
+ import * as React from 'react';
7
+ import { StyleSheet, Animated, View, Pressable, Text, Image as Image$1 } from 'react-native';
8
+ import { createStyleSheet, useLoamTheme, useStyles } from '@btndprojects/loam-theme-native';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ // src/lib/blurhash.ts
12
+ var DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~";
13
+ function decode83(str) {
14
+ let value = 0;
15
+ for (const c of str) {
16
+ const digit = DIGITS.indexOf(c);
17
+ if (digit < 0) throw new Error("blurhash: invalid character");
18
+ value = value * 83 + digit;
19
+ }
20
+ return value;
21
+ }
22
+ function blurhashAverage(hash) {
23
+ if (hash.length < 6) return void 0;
24
+ try {
25
+ const v = decode83(hash.slice(2, 6));
26
+ return `rgb(${v >> 16} ${v >> 8 & 255} ${v & 255})`;
27
+ } catch {
28
+ return void 0;
29
+ }
30
+ }
31
+ var DEFAULT_LABELS = { error: "Couldn\u2019t load", retry: "Retry" };
32
+ var SMALL_W = 96;
33
+ function Image({
34
+ src,
35
+ fallbackSrc,
36
+ alt,
37
+ ratio,
38
+ fit = "cover",
39
+ placeholder,
40
+ inactive = false,
41
+ onError,
42
+ onLoad,
43
+ platform,
44
+ labels: labelsProp,
45
+ style,
46
+ testID
47
+ }) {
48
+ const labels = useLabels("image", DEFAULT_LABELS, labelsProp);
49
+ const theme = useLoamTheme("image");
50
+ const { styles } = useStyles(sheet);
51
+ const android = isAndroidIdiom(theme, platform);
52
+ const sources = React.useMemo(
53
+ () => [src, ...fallbackSrc ?? []].filter((s) => !!s),
54
+ [src, fallbackSrc]
55
+ );
56
+ const [index, setIndex] = React.useState(0);
57
+ const [attempt, setAttempt] = React.useState(0);
58
+ const [status, setStatus] = React.useState(sources.length ? "loading" : "missing");
59
+ const [size, setSize] = React.useState();
60
+ const width = size?.width;
61
+ const [showAlt, setShowAlt] = React.useState(false);
62
+ const fade = React.useRef(new Animated.Value(0)).current;
63
+ const key = sources.join("\n");
64
+ React.useEffect(() => {
65
+ setIndex(0);
66
+ setStatus(sources.length ? "loading" : "missing");
67
+ fade.setValue(0);
68
+ }, [key]);
69
+ const retry = () => {
70
+ setIndex(0);
71
+ setAttempt((a) => a + 1);
72
+ setStatus("loading");
73
+ setShowAlt(false);
74
+ fade.setValue(0);
75
+ };
76
+ const handleError = () => {
77
+ if (index + 1 < sources.length) {
78
+ setIndex(index + 1);
79
+ return;
80
+ }
81
+ setStatus("error");
82
+ onError?.();
83
+ };
84
+ const handleLoad = () => {
85
+ setStatus("loaded");
86
+ onLoad?.();
87
+ Animated.timing(fade, {
88
+ toValue: 1,
89
+ ...motionTiming(theme.reduceMotion ? "none" : "full"),
90
+ useNativeDriver: true
91
+ }).start();
92
+ };
93
+ const small = width !== void 0 && width < SMALL_W;
94
+ const current = sources[index];
95
+ let placeholderNode = null;
96
+ let placeholderColor;
97
+ if (placeholder === "skeleton") {
98
+ placeholderNode = /* @__PURE__ */ jsx(View, { style: StyleSheet.absoluteFill, children: size ? /* @__PURE__ */ jsx(Skeleton, { variant: "rect", width: size.width, height: size.height, style: { borderRadius: 0 } }) : null });
99
+ } else if (placeholder && typeof placeholder === "object" && "color" in placeholder) {
100
+ placeholderColor = placeholder.color;
101
+ } else if (placeholder && typeof placeholder === "object" && "blurhash" in placeholder) {
102
+ placeholderColor = blurhashAverage(placeholder.blurhash);
103
+ } else if (placeholder != null) {
104
+ placeholderNode = placeholder;
105
+ }
106
+ const boxStyle = [
107
+ styles.box,
108
+ ratio ? { aspectRatio: ratio } : null,
109
+ status === "loading" && placeholderColor ? { backgroundColor: placeholderColor } : null,
110
+ style
111
+ ];
112
+ const onLayout = (e) => setSize({ width: e.nativeEvent.layout.width, height: e.nativeEvent.layout.height });
113
+ if (status === "error") {
114
+ return /* @__PURE__ */ jsx(
115
+ Pressable,
116
+ {
117
+ testID,
118
+ accessibilityRole: "button",
119
+ accessibilityLabel: [labels.error, alt].filter(Boolean).join(", "),
120
+ accessibilityHint: labels.retry,
121
+ onPress: retry,
122
+ onLongPress: () => setShowAlt(true),
123
+ android_ripple: android ? { color: theme.state.pressed, foreground: true } : void 0,
124
+ onLayout,
125
+ style: ({ pressed }) => [
126
+ boxStyle,
127
+ styles.center,
128
+ !android && pressed ? { backgroundColor: theme.state.pressed } : null
129
+ ],
130
+ children: small && showAlt && alt ? /* @__PURE__ */ jsx(Text, { numberOfLines: 3, style: styles.errorAlt, children: alt }) : small ? /* @__PURE__ */ jsx(Icon, { name: "image", size: 16, color: theme.color.text3 }) : /* @__PURE__ */ jsxs(View, { style: styles.errorBody, children: [
131
+ /* @__PURE__ */ jsx(Icon, { name: "image", size: 24, color: theme.color.text3 }),
132
+ /* @__PURE__ */ jsx(Text, { style: styles.errorTitle, children: labels.error }),
133
+ alt ? /* @__PURE__ */ jsx(Text, { numberOfLines: 2, style: styles.errorAlt, children: alt }) : null
134
+ ] })
135
+ }
136
+ );
137
+ }
138
+ return /* @__PURE__ */ jsxs(View, { testID, onLayout, style: boxStyle, children: [
139
+ status === "loading" ? placeholderNode : null,
140
+ status === "missing" ? /* @__PURE__ */ jsx(View, { style: [StyleSheet.absoluteFill, styles.center], accessibilityElementsHidden: true, children: /* @__PURE__ */ jsx(Icon, { name: "image", size: small ? 16 : 24, color: theme.color.text3 }) }) : null,
141
+ current ? /* @__PURE__ */ jsxs(Animated.View, { style: [StyleSheet.absoluteFill, { opacity: fade }], children: [
142
+ /* @__PURE__ */ jsx(
143
+ Image$1,
144
+ {
145
+ source: { uri: current },
146
+ resizeMode: fit,
147
+ accessible: !!alt,
148
+ accessibilityRole: alt ? "image" : void 0,
149
+ accessibilityLabel: alt || void 0,
150
+ onLoad: handleLoad,
151
+ onError: handleError,
152
+ style: StyleSheet.absoluteFill
153
+ },
154
+ `${current}#${attempt}`
155
+ ),
156
+ inactive ? /* @__PURE__ */ jsx(View, { testID: "image-inactive", style: styles.inactive }) : null
157
+ ] }) : null
158
+ ] });
159
+ }
160
+ var sheet = createStyleSheet((theme) => ({
161
+ box: {
162
+ overflow: "hidden",
163
+ backgroundColor: theme.color.surface3
164
+ },
165
+ center: {
166
+ alignItems: "center",
167
+ justifyContent: "center"
168
+ },
169
+ errorBody: {
170
+ alignItems: "center",
171
+ gap: theme.space[4],
172
+ paddingHorizontal: theme.space[12]
173
+ },
174
+ errorTitle: {
175
+ fontFamily: theme.font.sans,
176
+ fontSize: theme.fontSize[12],
177
+ fontWeight: theme.fontWeight.semibold,
178
+ color: theme.color.text2,
179
+ textAlign: "center"
180
+ },
181
+ errorAlt: {
182
+ fontFamily: theme.font.sans,
183
+ fontSize: theme.fontSize[12],
184
+ color: theme.color.text3,
185
+ textAlign: "center"
186
+ },
187
+ // RN has no CSS filter on every platform: a neutral overlay blended in
188
+ // `saturation` mode drops the picture's chroma, the web's greyscale (A07).
189
+ inactive: {
190
+ ...StyleSheet.absoluteFillObject,
191
+ backgroundColor: theme.color.surface2,
192
+ mixBlendMode: "saturation"
193
+ }
194
+ }));
195
+
196
+ export { Image };