@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,11 +1,87 @@
1
- import { Thinking } from './chunk-XXXEFXY5.js';
2
- import { Spinner } from './chunk-O7AE6DAF.js';
3
- import { Icon } from './chunk-TKVFVF5D.js';
1
+ import { IconTile } from './chunk-XBXUBBJZ.js';
2
+ import { Thinking } from './chunk-LUZFCCSD.js';
3
+ import { Button } from './chunk-5DTKORLI.js';
4
+ import { Spinner } from './chunk-G7H3NX3G.js';
5
+ import { stateLayout } from './chunk-TH4PW2WU.js';
6
+ import { useLabels } from './chunk-APCWFOZW.js';
7
+ import { Icon } from './chunk-PCEFCOLN.js';
8
+ import { useResolvedMotion, springConfig } from './chunk-J64KGCGX.js';
4
9
  import * as React from 'react';
5
- import { StyleSheet, View, Text, Pressable } from 'react-native';
10
+ import { StyleSheet, View, Text, Pressable, Animated, AppState } from 'react-native';
6
11
  import { createStyleSheet, useStyles, useLoamTheme } from '@btndprojects/loam-theme-native';
12
+ import { MOTION_MOVE } from '@btndprojects/loam-tokens';
7
13
  import { jsxs, jsx } from 'react/jsx-runtime';
8
14
 
15
+ function backoffDelay(n, base = 5e3, factor = 2, max = 6e4) {
16
+ return Math.min(max, base * factor ** n);
17
+ }
18
+ function useAutoRetry({
19
+ active,
20
+ onRetry,
21
+ baseDelay = 5e3,
22
+ maxDelay = 6e4,
23
+ factor = 2,
24
+ maxAttempts = Infinity,
25
+ retryOnForeground = true
26
+ }) {
27
+ const [attempt, setAttempt] = React.useState(0);
28
+ const [dueAt, setDueAt] = React.useState(null);
29
+ const [now, setNow] = React.useState(() => Date.now());
30
+ const [retrying, setRetrying] = React.useState(false);
31
+ const cb = React.useRef(onRetry);
32
+ cb.current = onRetry;
33
+ const run = React.useCallback(() => {
34
+ setDueAt(null);
35
+ setRetrying(true);
36
+ let result;
37
+ try {
38
+ result = cb.current();
39
+ } catch {
40
+ result = void 0;
41
+ }
42
+ const done = () => {
43
+ setRetrying(false);
44
+ setAttempt((a) => a + 1);
45
+ };
46
+ if (result && typeof result.then === "function") {
47
+ result.then(done, done);
48
+ } else {
49
+ done();
50
+ }
51
+ }, []);
52
+ React.useEffect(() => {
53
+ if (active) return;
54
+ setAttempt(0);
55
+ setDueAt(null);
56
+ setRetrying(false);
57
+ }, [active]);
58
+ React.useEffect(() => {
59
+ if (!active || retrying || attempt >= maxAttempts) return void 0;
60
+ const wait = backoffDelay(attempt, baseDelay, factor, maxDelay);
61
+ const due = Date.now() + wait;
62
+ setDueAt(due);
63
+ setNow(Date.now());
64
+ const fire = setTimeout(run, wait);
65
+ const tick = setInterval(() => setNow(Date.now()), 1e3);
66
+ return () => {
67
+ clearTimeout(fire);
68
+ clearInterval(tick);
69
+ };
70
+ }, [active, retrying, attempt, maxAttempts, baseDelay, factor, maxDelay, run]);
71
+ React.useEffect(() => {
72
+ if (!active || !retryOnForeground) return void 0;
73
+ const sub = AppState.addEventListener("change", (next) => {
74
+ if (next === "active") run();
75
+ });
76
+ return () => sub.remove();
77
+ }, [active, retryOnForeground, run]);
78
+ return {
79
+ secondsLeft: active && dueAt !== null ? Math.max(0, Math.ceil((dueAt - now) / 1e3)) : null,
80
+ attempt,
81
+ retrying,
82
+ retryNow: run
83
+ };
84
+ }
9
85
  var SYSTEM_STATE_META = {
10
86
  "404": { tone: "muted", icon: "search", code: "404" },
11
87
  "403": { tone: "warn", icon: "lock", code: "403" },
@@ -13,8 +89,19 @@ var SYSTEM_STATE_META = {
13
89
  maintenance: { tone: "warn", icon: "wrench", code: "Soon" },
14
90
  offline: { tone: "info", icon: "wifi-off", code: "Offline" }
15
91
  };
92
+ var DEFAULT_LABELS = {
93
+ copyErrorId: (id) => `Copy error id ${id}`,
94
+ soon: "Soon",
95
+ offline: "Offline"
96
+ };
97
+ var TONE_TILE = {
98
+ muted: "neutral",
99
+ danger: "danger",
100
+ warn: "warn",
101
+ info: "info"
102
+ };
16
103
  function useTone(tone) {
17
- const theme = useLoamTheme();
104
+ const theme = useLoamTheme("system-state");
18
105
  switch (tone) {
19
106
  case "danger":
20
107
  return theme.color.dangerOnSoft;
@@ -37,59 +124,74 @@ function SystemState({
37
124
  secondaryLabel,
38
125
  onSecondary,
39
126
  errorId,
40
- onCopyErrorId
127
+ onCopyErrorId,
128
+ layout = "fullScreen",
129
+ platform,
130
+ tone: toneProp,
131
+ size,
132
+ iconShape,
133
+ labels: labelsProp
41
134
  }) {
135
+ const labels = useLabels("systemState", DEFAULT_LABELS, labelsProp);
42
136
  const meta = SYSTEM_STATE_META[variant];
43
- const { styles } = useStyles(sheet, { tone: meta.tone });
44
- const theme = useLoamTheme();
45
- const tone = useTone(meta.tone);
137
+ const variantCode = variant === "maintenance" ? labels.soon : variant === "offline" ? labels.offline : meta.code;
138
+ const { styles } = useStyles(sheet);
139
+ const theme = useLoamTheme("system-state");
140
+ const resolvedTone = toneProp ?? meta.tone;
141
+ const tone = useTone(resolvedTone);
142
+ const geo = stateLayout(theme, layout, platform);
143
+ const full = layout === "fullScreen";
144
+ const chipHit = Math.max(0, Math.round((theme.tapMin - theme.ctl.sm) / 2));
46
145
  if (process.env.NODE_ENV !== "production" && !primaryLabel && !secondaryLabel) {
47
146
  console.warn(
48
147
  `[loam] <SystemState variant="${variant}"> has no action. Every system state must offer a route back to a working screen.`
49
148
  );
50
149
  }
51
- return /* @__PURE__ */ jsxs(View, { style: styles.base, accessibilityRole: "alert", children: [
52
- /* @__PURE__ */ jsxs(View, { style: styles.body, children: [
53
- /* @__PURE__ */ jsx(View, { style: styles.tile, children: /* @__PURE__ */ jsx(Icon, { name: icon ?? meta.icon, size: theme.icon.xl, color: tone }) }),
54
- /* @__PURE__ */ jsx(Text, { style: [styles.code, { color: tone }], children: code ?? meta.code }),
55
- /* @__PURE__ */ jsx(Text, { style: styles.title, children: title }),
56
- description ? /* @__PURE__ */ jsx(Text, { style: styles.description, children: description }) : null,
57
- errorId ? /* @__PURE__ */ jsxs(
58
- Pressable,
150
+ return /* @__PURE__ */ jsxs(View, { style: full ? styles.base : styles.inline, accessibilityRole: "alert", children: [
151
+ /* @__PURE__ */ jsxs(View, { style: full ? styles.body : styles.inlineBody, children: [
152
+ /* @__PURE__ */ jsx(
153
+ IconTile,
59
154
  {
60
- accessibilityRole: "button",
61
- accessibilityLabel: `Copy error id ${errorId}`,
62
- onPress: onCopyErrorId ? () => onCopyErrorId(errorId) : void 0,
63
- style: ({ pressed }) => [styles.errorChip, pressed && styles.pressed],
64
- children: [
65
- /* @__PURE__ */ jsx(Icon, { name: "copy", size: theme.icon.xs, color: theme.color.text2 }),
66
- /* @__PURE__ */ jsx(Text, { style: styles.errorId, children: errorId })
67
- ]
155
+ icon: icon ?? meta.icon,
156
+ tone: TONE_TILE[resolvedTone],
157
+ size: size ?? geo.tile,
158
+ shape: iconShape
68
159
  }
160
+ ),
161
+ /* @__PURE__ */ jsx(Text, { style: [styles.code, { color: tone }], children: code ?? variantCode }),
162
+ /* @__PURE__ */ jsx(Text, { style: [styles.title, geo.title], children: title }),
163
+ description ? /* @__PURE__ */ jsx(Text, { style: styles.description, children: description }) : null,
164
+ errorId ? (
165
+ // Final 03: the error code is an sm-tier chip — 30 high, r 8, px 10, mono.
166
+ /* @__PURE__ */ jsxs(
167
+ Pressable,
168
+ {
169
+ accessibilityRole: "button",
170
+ accessibilityLabel: labels.copyErrorId(errorId),
171
+ onPress: onCopyErrorId ? () => onCopyErrorId(errorId) : void 0,
172
+ hitSlop: chipHit,
173
+ style: ({ pressed }) => [styles.errorChip, pressed && styles.pressed],
174
+ children: [
175
+ /* @__PURE__ */ jsx(Icon, { name: "copy", size: theme.icon.xs, color: theme.color.text2 }),
176
+ /* @__PURE__ */ jsx(Text, { style: styles.errorId, children: errorId })
177
+ ]
178
+ }
179
+ )
69
180
  ) : null
70
181
  ] }),
71
- /* @__PURE__ */ jsxs(View, { style: styles.actions, children: [
72
- primaryLabel ? /* @__PURE__ */ jsx(
73
- Pressable,
74
- {
75
- accessibilityRole: "button",
76
- accessibilityLabel: primaryLabel,
77
- onPress: onPrimary,
78
- style: ({ pressed }) => [styles.primary, pressed && styles.pressed],
79
- children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: primaryLabel })
80
- }
81
- ) : null,
182
+ primaryLabel || secondaryLabel ? /* @__PURE__ */ jsxs(View, { style: full ? styles.actions : styles.inlineActions, children: [
183
+ primaryLabel ? /* @__PURE__ */ jsx(Button, { size: geo.button, onPress: onPrimary, accessibilityLabel: primaryLabel, children: primaryLabel }) : null,
82
184
  secondaryLabel ? /* @__PURE__ */ jsx(
83
- Pressable,
185
+ Button,
84
186
  {
85
- accessibilityRole: "button",
86
- accessibilityLabel: secondaryLabel,
187
+ variant: "ghost",
188
+ size: geo.button,
87
189
  onPress: onSecondary,
88
- style: ({ pressed }) => [styles.secondary, pressed && styles.pressed],
89
- children: /* @__PURE__ */ jsx(Text, { style: styles.secondaryLabel, children: secondaryLabel })
190
+ accessibilityLabel: secondaryLabel,
191
+ children: secondaryLabel
90
192
  }
91
193
  ) : null
92
- ] })
194
+ ] }) : null
93
195
  ] });
94
196
  }
95
197
  var sheet = createStyleSheet((theme) => ({
@@ -106,42 +208,32 @@ var sheet = createStyleSheet((theme) => ({
106
208
  justifyContent: "center",
107
209
  gap: theme.space.s3
108
210
  },
109
- // The tone tile: a soft tint plus an `edge` outline. At normal contrast the
110
- // edge is transparent; under high contrast the tint collapses to the surface
111
- // and the outline is what carries the meaning.
112
- tile: {
113
- width: theme.space.s8 + theme.space.s3,
114
- height: theme.space.s8 + theme.space.s3,
115
- borderRadius: theme.radius.full,
211
+ // Inline: the empty-state rhythm — gap 12, padding 40 / 32, min-h 240.
212
+ inline: {
116
213
  alignItems: "center",
117
214
  justifyContent: "center",
118
- borderWidth: theme.borderWidth.base,
119
- variants: {
120
- tone: {
121
- muted: { backgroundColor: theme.color.surface2, borderColor: theme.edge.neutral },
122
- danger: { backgroundColor: theme.color.dangerSoft, borderColor: theme.edge.danger },
123
- warn: { backgroundColor: theme.color.warnSoft, borderColor: theme.edge.warn },
124
- info: { backgroundColor: theme.color.infoSoft, borderColor: theme.edge.info }
125
- }
126
- }
215
+ gap: theme.space.s3,
216
+ minHeight: theme.space[120] * 2,
217
+ paddingVertical: theme.space[40],
218
+ paddingHorizontal: theme.space[32]
219
+ },
220
+ inlineBody: { alignItems: "center", gap: theme.space.s3 },
221
+ inlineActions: {
222
+ flexDirection: "row",
223
+ flexWrap: "wrap",
224
+ justifyContent: "center",
225
+ gap: theme.space.s2,
226
+ marginTop: theme.space.s2
127
227
  },
128
228
  code: {
129
- fontFamily: theme.font.mono,
130
- fontSize: theme.type.caption2.fontSize,
131
- lineHeight: theme.type.caption2.lineHeight,
229
+ ...theme.type.overline,
230
+ fontFamily: theme.font.mono
132
231
  // `tracking` steps are `em` multiples, so they have to be multiplied by the
133
232
  // size — the previous literal was the same value written out by hand.
134
- letterSpacing: theme.type.caption2.fontSize * theme.tracking.caps,
135
- textTransform: "uppercase"
136
233
  },
137
- // `type.title2`, not a hand-written 24/1.15: 24 is not a step on either ramp
138
- // and the ratio was a raw multiplier rather than a `lineHeight` token.
234
+ // Size, line height and weight come from `stateLayout` (the OS ramp, R14).
139
235
  title: {
140
- fontFamily: theme.font.display,
141
- fontWeight: theme.font.displayWeight,
142
- fontSize: theme.type.title2.fontSize,
143
- lineHeight: theme.type.title2.lineHeight,
144
- letterSpacing: theme.type.title2.letterSpacing,
236
+ fontFamily: theme.font.sans,
145
237
  color: theme.color.text,
146
238
  textAlign: "center"
147
239
  },
@@ -156,9 +248,9 @@ var sheet = createStyleSheet((theme) => ({
156
248
  flexDirection: "row",
157
249
  alignItems: "center",
158
250
  gap: theme.space.s2,
159
- minHeight: theme.tapMin,
160
- paddingHorizontal: theme.space.s3,
161
- borderRadius: theme.radius.md,
251
+ height: theme.ctl.sm,
252
+ paddingHorizontal: theme.space[10],
253
+ borderRadius: theme.radius.sm,
162
254
  borderWidth: theme.borderWidth.base,
163
255
  borderColor: theme.color.border,
164
256
  backgroundColor: theme.color.surface2
@@ -169,38 +261,7 @@ var sheet = createStyleSheet((theme) => ({
169
261
  lineHeight: theme.type.footnote.lineHeight,
170
262
  color: theme.color.text2
171
263
  },
172
- actions: { gap: theme.space.s3 },
173
- primary: {
174
- minHeight: theme.tapMin,
175
- alignItems: "center",
176
- justifyContent: "center",
177
- borderRadius: theme.radius.md,
178
- backgroundColor: theme.color.accent,
179
- paddingHorizontal: theme.space.s4
180
- },
181
- primaryLabel: {
182
- fontFamily: theme.font.sans,
183
- fontWeight: theme.fontWeight.bold,
184
- fontSize: theme.type.subheadline.fontSize,
185
- lineHeight: theme.type.subheadline.lineHeight,
186
- color: theme.color.accentInk
187
- },
188
- secondary: {
189
- minHeight: theme.tapMin,
190
- alignItems: "center",
191
- justifyContent: "center",
192
- borderRadius: theme.radius.md,
193
- borderWidth: theme.borderWidth.strong,
194
- borderColor: theme.color.borderStrong,
195
- paddingHorizontal: theme.space.s4
196
- },
197
- secondaryLabel: {
198
- fontFamily: theme.font.sans,
199
- fontWeight: theme.fontWeight.semibold,
200
- fontSize: theme.type.subheadline.fontSize,
201
- lineHeight: theme.type.subheadline.lineHeight,
202
- color: theme.color.text
203
- },
264
+ actions: { gap: theme.space.s2 },
204
265
  pressed: { opacity: theme.state.pressedOpacity }
205
266
  }));
206
267
  function useLoadingFloor(active, floor) {
@@ -244,36 +305,93 @@ function useLate(active, after) {
244
305
  }, [active, after]);
245
306
  return late;
246
307
  }
308
+ var AREA_DEFAULT_LABELS = {
309
+ loading: "Loading",
310
+ late: "Still working\u2026",
311
+ errorTitle: "Couldn\u2019t load this",
312
+ retry: "Try again",
313
+ retryNow: "Retry now",
314
+ retryingIn: (seconds) => `Retrying in ${seconds}s`,
315
+ refresh: "Refresh",
316
+ refreshing: (refresh) => `${refresh}\u2026`,
317
+ empty: "Nothing here yet."
318
+ };
247
319
  function AreaState({
248
320
  state = "idle",
249
321
  children,
250
- minHeight = 160,
322
+ minHeight: minHeightProp,
251
323
  loadingContent,
252
- loadingLabel = "Loading",
253
- lateLabel = "Still working\u2026",
324
+ loadingLabel: loadingLabelProp,
325
+ lateLabel: lateLabelProp,
254
326
  loadingFloor,
255
327
  lateAfter,
256
328
  empty,
257
329
  error,
258
- errorTitle = "Couldn\u2019t load this",
330
+ errorTitle: errorTitleProp,
259
331
  errorDescription,
260
- retryLabel = "Try again",
332
+ retryLabel: retryLabelProp,
261
333
  onRetry,
334
+ autoRetry = false,
262
335
  staleLabel,
263
- refreshLabel = "Refresh",
336
+ refreshLabel: refreshLabelProp,
264
337
  onRefresh,
265
338
  refreshing = false,
266
339
  idle,
267
- motion = "full"
340
+ motion = "full",
341
+ tone: toneProp,
342
+ icon: iconProp,
343
+ size,
344
+ variant = "plain",
345
+ label,
346
+ labels: labelsProp
268
347
  }) {
269
- const theme = useLoamTheme();
348
+ const theme = useLoamTheme("system-state");
349
+ const labels = useLabels("areaState", AREA_DEFAULT_LABELS, labelsProp);
350
+ const loadingLabel = loadingLabelProp ?? labels.loading;
351
+ const lateLabel = lateLabelProp ?? labels.late;
352
+ const errorTitle = errorTitleProp ?? labels.errorTitle;
353
+ const retryLabel = retryLabelProp ?? labels.retry;
354
+ const refreshLabel = refreshLabelProp ?? labels.refresh;
270
355
  const { styles } = useStyles(areaSheet);
356
+ const minHeight = minHeightProp ?? (size === "sm" ? theme.space[120] : size === "lg" ? theme.space[120] * 2 : 160);
357
+ const customTile = toneProp !== void 0 || iconProp !== void 0 || size !== void 0;
358
+ const retry = useAutoRetry({
359
+ active: autoRetry && state === "error" && Boolean(onRetry),
360
+ onRetry: onRetry ?? (() => {
361
+ })
362
+ });
271
363
  const floor = loadingFloor ?? theme.timing.loadingFloor;
272
364
  const lateMs = lateAfter ?? theme.timing.lateAfter;
273
365
  const isLoading = state === "loading";
274
366
  const showLoading = useLoadingFloor(isLoading, floor);
275
367
  const late = useLate(isLoading, lateMs);
276
368
  const busy = isLoading || showLoading;
369
+ const level = useResolvedMotion(motion, "system-state");
370
+ const phase = showLoading ? "loading" : state === "stale" ? "ready" : state;
371
+ const shownPhase = React.useRef(phase);
372
+ const through = React.useRef(new Animated.Value(1)).current;
373
+ React.useEffect(() => {
374
+ if (shownPhase.current === phase) return;
375
+ shownPhase.current = phase;
376
+ if (level === "none") return;
377
+ through.setValue(0);
378
+ Animated.spring(through, {
379
+ ...springConfig(theme, "de"),
380
+ toValue: 1,
381
+ useNativeDriver: true
382
+ }).start();
383
+ }, [phase, level, through, theme]);
384
+ const throughStyle = {
385
+ opacity: through,
386
+ transform: level === "full" ? [
387
+ {
388
+ scale: through.interpolate({
389
+ inputRange: [0, 1],
390
+ outputRange: [1 - MOTION_MOVE.scaleIn, 1]
391
+ })
392
+ }
393
+ ] : []
394
+ };
277
395
  const loadingView = /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
278
396
  loadingContent ?? /* @__PURE__ */ jsx(Spinner, { size: "lg", accessibilityLabel: loadingLabel, motion }),
279
397
  late ? (
@@ -284,22 +402,30 @@ function AreaState({
284
402
  ) : null
285
403
  ] });
286
404
  const errorView = error ?? /* @__PURE__ */ jsxs(View, { accessibilityRole: "alert", style: styles.center, children: [
287
- /* @__PURE__ */ jsx(View, { style: styles.errorTile, children: /* @__PURE__ */ jsx(Icon, { name: "alert-triangle", size: theme.icon.lg, color: theme.color.dangerOnSoft }) }),
405
+ customTile ? /* @__PURE__ */ jsx(
406
+ IconTile,
407
+ {
408
+ icon: iconProp ?? "alert-triangle",
409
+ tone: TONE_TILE[toneProp ?? "danger"],
410
+ size: size === "sm" ? "md" : size === "lg" ? "xl" : "lg"
411
+ }
412
+ ) : /* @__PURE__ */ jsx(View, { style: styles.errorTile, children: /* @__PURE__ */ jsx(Icon, { name: "alert-triangle", size: theme.icon.lg, color: theme.color.dangerOnSoft }) }),
288
413
  /* @__PURE__ */ jsx(Text, { style: styles.errorTitle, children: errorTitle }),
289
414
  errorDescription ? /* @__PURE__ */ jsx(Text, { style: styles.errorBody, children: errorDescription }) : null,
290
415
  onRetry ? /* @__PURE__ */ jsxs(
291
416
  Pressable,
292
417
  {
293
418
  accessibilityRole: "button",
294
- accessibilityLabel: retryLabel,
295
- onPress: onRetry,
419
+ accessibilityLabel: autoRetry ? labels.retryNow : retryLabel,
420
+ onPress: autoRetry ? retry.retryNow : () => void onRetry(),
296
421
  style: ({ pressed }) => [styles.retry, pressed && styles.pressed],
297
422
  children: [
298
423
  /* @__PURE__ */ jsx(Icon, { name: "refresh", size: theme.icon.sm, color: theme.color.accentInk }),
299
- /* @__PURE__ */ jsx(Text, { style: styles.retryLabel, children: retryLabel })
424
+ /* @__PURE__ */ jsx(Text, { style: styles.retryLabel, children: autoRetry ? labels.retryNow : retryLabel })
300
425
  ]
301
426
  }
302
- ) : null
427
+ ) : null,
428
+ autoRetry && onRetry && retry.secondsLeft !== null ? /* @__PURE__ */ jsx(Text, { style: [styles.errorBody, styles.retryCountdown], children: labels.retryingIn(retry.secondsLeft) }) : null
303
429
  ] });
304
430
  let body;
305
431
  if (showLoading) {
@@ -310,7 +436,7 @@ function AreaState({
310
436
  body = /* @__PURE__ */ jsx(View, { style: styles.fill });
311
437
  break;
312
438
  case "empty":
313
- body = empty ?? /* @__PURE__ */ jsx(View, { style: styles.center, children: /* @__PURE__ */ jsx(Text, { style: styles.errorBody, children: "Nothing here yet." }) });
439
+ body = empty ?? /* @__PURE__ */ jsx(View, { style: styles.center, children: /* @__PURE__ */ jsx(Text, { style: styles.errorBody, children: labels.empty }) });
314
440
  break;
315
441
  case "error":
316
442
  body = errorView;
@@ -333,13 +459,13 @@ function AreaState({
333
459
  Pressable,
334
460
  {
335
461
  accessibilityRole: "button",
336
- accessibilityLabel: refreshing ? `${refreshLabel}\u2026` : refreshLabel,
462
+ accessibilityLabel: refreshing ? labels.refreshing(refreshLabel) : refreshLabel,
337
463
  accessibilityState: { busy: refreshing, disabled: refreshing },
338
464
  disabled: refreshing,
339
465
  onPress: refreshing ? void 0 : onRefresh,
340
466
  style: ({ pressed }) => [styles.refresh, pressed && styles.pressed],
341
467
  children: [
342
- refreshing ? /* @__PURE__ */ jsx(Spinner, { size: "sm", accessibilityLabel: `${refreshLabel}\u2026` }) : /* @__PURE__ */ jsx(Icon, { name: "refresh", size: theme.icon.xs, color: theme.color.text }),
468
+ refreshing ? /* @__PURE__ */ jsx(Spinner, { size: "sm", accessibilityLabel: labels.refreshing(refreshLabel) }) : /* @__PURE__ */ jsx(Icon, { name: "refresh", size: theme.icon.xs, color: theme.color.text }),
343
469
  /* @__PURE__ */ jsx(Text, { style: styles.refreshLabel, children: refreshLabel })
344
470
  ]
345
471
  }
@@ -359,12 +485,18 @@ function AreaState({
359
485
  return /* @__PURE__ */ jsx(
360
486
  View,
361
487
  {
362
- style: [styles.base, { minHeight }],
488
+ style: [
489
+ styles.base,
490
+ variant === "outline" && styles.outline,
491
+ variant === "filled" && styles.filled,
492
+ { minHeight }
493
+ ],
494
+ accessibilityLabel: label,
363
495
  accessibilityLiveRegion: "polite",
364
496
  "aria-busy": busy,
365
497
  accessibilityState: { busy },
366
498
  ...{ "aria-live": "polite" },
367
- children: body
499
+ children: /* @__PURE__ */ jsx(Animated.View, { style: [styles.fill, throughStyle], children: body })
368
500
  }
369
501
  );
370
502
  }
@@ -374,6 +506,8 @@ var areaSheet = createStyleSheet((theme) => ({
374
506
  backgroundColor: theme.color.surface,
375
507
  borderRadius: theme.radius.lg
376
508
  },
509
+ outline: { borderWidth: theme.borderWidth.base, borderColor: theme.color.border },
510
+ filled: { backgroundColor: theme.color.surface2 },
377
511
  fill: { flex: 1 },
378
512
  center: {
379
513
  flex: 1,
@@ -435,6 +569,7 @@ var areaSheet = createStyleSheet((theme) => ({
435
569
  borderRadius: theme.radius.md,
436
570
  backgroundColor: theme.color.accent
437
571
  },
572
+ retryCountdown: { fontVariant: ["tabular-nums"], color: theme.color.text3 },
438
573
  retryLabel: {
439
574
  fontFamily: theme.font.sans,
440
575
  fontWeight: theme.fontWeight.bold,