@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
@@ -0,0 +1,523 @@
1
+ import { isConnectorTraversed, resolveStepState, NODE_STATE_ICON } from './chunk-YLLCXTMC.js';
2
+ import { Button } from './chunk-5DTKORLI.js';
3
+ import { isAndroidIdiom } from './chunk-TH4PW2WU.js';
4
+ import { useLabels } from './chunk-APCWFOZW.js';
5
+ import { Icon } from './chunk-PCEFCOLN.js';
6
+ import { useResolvedMotion, springConfig } from './chunk-J64KGCGX.js';
7
+ import * as React from 'react';
8
+ import { Animated, AccessibilityInfo, Alert, BackHandler, View, Pressable, Text } from 'react-native';
9
+ import { createStyleSheet, useStyles, useLoamTheme } from '@btndprojects/loam-theme-native';
10
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
11
+
12
+ var DEFAULT_LABELS = {
13
+ back: "Back",
14
+ next: "Next",
15
+ finish: "Finish",
16
+ stepOf: (current, total, label) => `Step ${current} of ${total}${label ? `: ${label}` : ""}`,
17
+ completedStep: (label, step, hasErrors) => `${label}, completed${hasErrors ? ", has errors" : ""}. Go to step ${step}`,
18
+ hasErrors: ", has errors",
19
+ cancel: "Cancel",
20
+ close: "Close",
21
+ count: (n, c) => `${n} of ${c}`,
22
+ discardTitle: "Discard changes?",
23
+ keepEditing: "Keep editing",
24
+ discard: "Discard"
25
+ };
26
+ var DOT_SIZE = { sm: 24, md: 30, lg: 36 };
27
+ function clamp(n, lo, hi) {
28
+ return Math.min(hi, Math.max(lo, n));
29
+ }
30
+ function useDotForeground(done, active) {
31
+ const theme = useLoamTheme("wizard");
32
+ if (done) return theme.color.goodInk;
33
+ if (active) return theme.color.accentOnSoft;
34
+ return theme.color.text3;
35
+ }
36
+ function StepDot({
37
+ index,
38
+ current,
39
+ label,
40
+ hasError,
41
+ onPress,
42
+ labels,
43
+ dotSize,
44
+ indicator,
45
+ orientation,
46
+ doneTone,
47
+ errorStyle
48
+ }) {
49
+ const stepState = resolveStepState(index, current);
50
+ const done = stepState === "done";
51
+ const active = stepState === "working";
52
+ const { styles } = useStyles(sheet, { state: done ? "done" : active ? "active" : "upcoming" });
53
+ const theme = useLoamTheme("wizard");
54
+ const errorNode = hasError && errorStyle === "node";
55
+ const accentDone = done && doneTone === "accent" && !errorNode;
56
+ const dotFg = useDotForeground(done, active);
57
+ const fg = errorNode ? theme.color.dangerInk : accentDone ? theme.color.accentInk : dotFg;
58
+ const currentAttr = active ? { "aria-current": "step" } : {};
59
+ const column = /* @__PURE__ */ jsxs(Fragment, { children: [
60
+ /* @__PURE__ */ jsxs(
61
+ View,
62
+ {
63
+ style: [
64
+ styles.dot,
65
+ { width: dotSize, height: dotSize },
66
+ accentDone && { backgroundColor: theme.color.accent, borderColor: theme.color.accent },
67
+ errorNode && { backgroundColor: theme.color.danger, borderColor: theme.color.danger }
68
+ ],
69
+ ...currentAttr,
70
+ children: [
71
+ indicator === "dots" ? null : errorNode ? /* @__PURE__ */ jsx(Text, { style: [styles.dotNum, { color: fg }], children: "!" }) : done ? /* @__PURE__ */ jsx(Icon, { name: NODE_STATE_ICON.done, size: theme.icon.sm, color: fg }) : /* @__PURE__ */ jsx(Text, { style: [styles.dotNum, { color: fg }], children: index + 1 }),
72
+ hasError && !errorNode ? (
73
+ // A badge on the node rather than a recoloured node: the
74
+ // done/active/pending state stays readable underneath.
75
+ /* @__PURE__ */ jsx(View, { style: styles.errorBadge, children: /* @__PURE__ */ jsx(Icon, { name: "alert-circle", size: theme.icon.xs, color: theme.color.dangerInk }) })
76
+ ) : null
77
+ ]
78
+ }
79
+ ),
80
+ label && indicator !== "dots" ? /* @__PURE__ */ jsx(Text, { numberOfLines: 2, style: [styles.dotLabel, index !== current && styles.dotLabelRest], children: label }) : null
81
+ ] });
82
+ if (onPress) {
83
+ return /* @__PURE__ */ jsx(
84
+ Pressable,
85
+ {
86
+ accessibilityRole: "button",
87
+ accessibilityLabel: labels.completedStep(label, index + 1, hasError),
88
+ onPress,
89
+ style: [styles.dotCol, orientation === "vertical" && styles.dotColRow],
90
+ children: column
91
+ }
92
+ );
93
+ }
94
+ return /* @__PURE__ */ jsx(
95
+ View,
96
+ {
97
+ style: [styles.dotCol, orientation === "vertical" && styles.dotColRow],
98
+ accessible: hasError,
99
+ accessibilityLabel: hasError ? `${label}${labels.hasErrors}` : void 0,
100
+ children: column
101
+ }
102
+ );
103
+ }
104
+ function Wizard({
105
+ steps,
106
+ step,
107
+ defaultStep = 0,
108
+ onStepChange,
109
+ onFinish,
110
+ backLabel: backLabelProp,
111
+ nextLabel: nextLabelProp,
112
+ finishLabel: finishLabelProp,
113
+ motion = "full",
114
+ keepMounted = true,
115
+ onStepInvalid,
116
+ showHeader = true,
117
+ renderFooter,
118
+ onCancel,
119
+ loading = false,
120
+ disabled = false,
121
+ platform,
122
+ size = "md",
123
+ density = "standard",
124
+ indicator = "numbered",
125
+ variant = "default",
126
+ orientation = "horizontal",
127
+ doneTone = "good",
128
+ errorStyle = "badge",
129
+ labels: labelsProp
130
+ }) {
131
+ const labels = useLabels("wizard", DEFAULT_LABELS, labelsProp);
132
+ const backLabel = backLabelProp ?? labels.back;
133
+ const nextLabel = nextLabelProp ?? labels.next;
134
+ const finishLabel = finishLabelProp ?? labels.finish;
135
+ const isControlled = step !== void 0;
136
+ const last = Math.max(0, steps.length - 1);
137
+ const [internal, setInternal] = React.useState(() => clamp(defaultStep, 0, last));
138
+ const current = clamp(isControlled ? step : internal, 0, last);
139
+ const { styles } = useStyles(sheet);
140
+ const theme = useLoamTheme("wizard");
141
+ const android = isAndroidIdiom(theme, platform);
142
+ const activeStep = steps[current];
143
+ const isFirst = current <= 0;
144
+ const isLast = current >= last;
145
+ const prev = React.useRef(current);
146
+ const opacity = React.useRef(new Animated.Value(1)).current;
147
+ const translateX = React.useRef(new Animated.Value(0)).current;
148
+ const level = useResolvedMotion(motion, "wizard");
149
+ React.useEffect(() => {
150
+ if (prev.current === current) return;
151
+ const direction = current > prev.current ? 1 : -1;
152
+ prev.current = current;
153
+ AccessibilityInfo.announceForAccessibility?.(
154
+ labels.stepOf(current + 1, steps.length, steps[current]?.label)
155
+ );
156
+ if (level === "none") {
157
+ opacity.setValue(1);
158
+ translateX.setValue(0);
159
+ return;
160
+ }
161
+ opacity.setValue(0);
162
+ translateX.setValue(level === "full" ? direction * theme.space.s6 : 0);
163
+ Animated.parallel([
164
+ Animated.spring(opacity, {
165
+ ...springConfig(theme, "de"),
166
+ toValue: 1,
167
+ useNativeDriver: true
168
+ }),
169
+ ...level === "full" ? [
170
+ Animated.spring(translateX, {
171
+ ...springConfig(theme, "ds"),
172
+ toValue: 0,
173
+ useNativeDriver: true
174
+ })
175
+ ] : []
176
+ ]).start();
177
+ }, [current, level, opacity, translateX, theme, steps]);
178
+ const [failed, setFailed] = React.useState(() => /* @__PURE__ */ new Set());
179
+ const markFailed = (index, bad) => setFailed((prev2) => {
180
+ if (prev2.has(index) === bad) return prev2;
181
+ const nextSet = new Set(prev2);
182
+ if (bad) nextSet.add(index);
183
+ else nextSet.delete(index);
184
+ return nextSet;
185
+ });
186
+ const goTo = (next) => {
187
+ const clamped = clamp(next, 0, last);
188
+ if (clamped === current) return;
189
+ if (!isControlled) setInternal(clamped);
190
+ onStepChange?.(clamped);
191
+ };
192
+ const visited = React.useRef(/* @__PURE__ */ new Set());
193
+ if (activeStep) visited.current.add(activeStep.id);
194
+ const onNext = () => {
195
+ if (loading || disabled) return;
196
+ if (activeStep?.validate && !activeStep.validate()) {
197
+ markFailed(current, true);
198
+ onStepInvalid?.(current);
199
+ return;
200
+ }
201
+ if (activeStep?.validate) markFailed(current, false);
202
+ if (isLast) onFinish?.();
203
+ else goTo(current + 1);
204
+ };
205
+ const backRef = React.useRef(() => false);
206
+ backRef.current = () => {
207
+ if (!onCancel) return false;
208
+ if (!isFirst) {
209
+ goTo(current - 1);
210
+ return true;
211
+ }
212
+ Alert.alert(labels.discardTitle, void 0, [
213
+ { text: labels.keepEditing, style: "cancel" },
214
+ { text: labels.discard, style: "destructive", onPress: onCancel }
215
+ ]);
216
+ return true;
217
+ };
218
+ React.useEffect(() => {
219
+ if (!android) return void 0;
220
+ const sub = BackHandler.addEventListener("hardwareBackPress", () => backRef.current());
221
+ return () => sub.remove();
222
+ }, [android]);
223
+ return /* @__PURE__ */ jsxs(
224
+ View,
225
+ {
226
+ style: [
227
+ styles.container,
228
+ density === "compact" && { padding: theme.space.s2, gap: theme.space.s3 },
229
+ density === "comfortable" && { padding: theme.space.s6, gap: theme.space.s6 },
230
+ variant === "elevated" && {
231
+ backgroundColor: theme.color.surface,
232
+ borderRadius: theme.radius.lg,
233
+ ...theme.shadow.md
234
+ }
235
+ ],
236
+ children: [
237
+ onCancel ? android ? /* @__PURE__ */ jsx(View, { style: [styles.bar, styles.barAndroid], children: /* @__PURE__ */ jsx(
238
+ Pressable,
239
+ {
240
+ accessibilityRole: "button",
241
+ accessibilityLabel: labels.close,
242
+ onPress: onCancel,
243
+ android_ripple: {
244
+ color: theme.state.pressed,
245
+ borderless: true,
246
+ radius: theme.space[24]
247
+ },
248
+ style: styles.closeButton,
249
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: theme.icon.md, color: theme.color.text })
250
+ }
251
+ ) }) : /* @__PURE__ */ jsxs(View, { style: [styles.bar, styles.barIos], children: [
252
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onCancel, hitSlop: theme.space[8], children: ({ pressed }) => /* @__PURE__ */ jsx(Text, { style: [styles.cancel, pressed && { opacity: theme.state.pressedOpacity }], children: labels.cancel }) }),
253
+ /* @__PURE__ */ jsx(Text, { style: styles.count, children: labels.count(current + 1, steps.length) })
254
+ ] }) : null,
255
+ showHeader ? /* @__PURE__ */ jsx(
256
+ WizardSteps,
257
+ {
258
+ steps,
259
+ current,
260
+ errors: failed,
261
+ onStepClick: disabled ? void 0 : goTo,
262
+ labels,
263
+ size,
264
+ indicator,
265
+ orientation,
266
+ doneTone,
267
+ errorStyle
268
+ }
269
+ ) : null,
270
+ /* @__PURE__ */ jsx(Animated.View, { style: [styles.content, { opacity, transform: [{ translateX }] }], children: steps.map((s, i) => {
271
+ const isActive = i === current;
272
+ if (!isActive && !(keepMounted && visited.current.has(s.id))) return null;
273
+ return /* @__PURE__ */ jsx(
274
+ View,
275
+ {
276
+ style: isActive ? void 0 : styles.hiddenStep,
277
+ "aria-hidden": isActive ? void 0 : true,
278
+ importantForAccessibility: isActive ? "auto" : "no-hide-descendants",
279
+ children: s.content
280
+ },
281
+ s.id
282
+ );
283
+ }) }),
284
+ renderFooter ? renderFooter({
285
+ index: current,
286
+ count: steps.length,
287
+ isFirst,
288
+ isLast,
289
+ next: onNext,
290
+ back: () => {
291
+ if (!disabled) goTo(current - 1);
292
+ }
293
+ }) : /* @__PURE__ */ jsxs(View, { style: styles.footer, children: [
294
+ /* @__PURE__ */ jsx(View, { style: android ? void 0 : styles.footerShare, children: /* @__PURE__ */ jsx(
295
+ Button,
296
+ {
297
+ size: size === "md" ? void 0 : size,
298
+ variant: android ? "ghost" : "outline",
299
+ ...android ? null : { leadingIcon: "arrow-left" },
300
+ disabled: isFirst || loading || disabled,
301
+ onPress: () => goTo(current - 1),
302
+ children: backLabel
303
+ }
304
+ ) }),
305
+ /* @__PURE__ */ jsx(View, { style: android ? void 0 : styles.footerShare, children: /* @__PURE__ */ jsx(
306
+ Button,
307
+ {
308
+ size: size === "md" ? void 0 : size,
309
+ variant: "primary",
310
+ ...android ? null : { trailingIcon: isLast ? "check" : "arrow-right" },
311
+ loading,
312
+ disabled,
313
+ onPress: onNext,
314
+ children: isLast ? finishLabel : nextLabel
315
+ }
316
+ ) })
317
+ ] })
318
+ ]
319
+ }
320
+ );
321
+ }
322
+ function WizardSteps({
323
+ steps,
324
+ current,
325
+ onStepClick,
326
+ errors,
327
+ size = "md",
328
+ indicator = "numbered",
329
+ orientation = "horizontal",
330
+ doneTone = "good",
331
+ errorStyle = "badge",
332
+ labels: labelsProp
333
+ }) {
334
+ const { styles } = useStyles(sheet);
335
+ const labels = useLabels("wizard", DEFAULT_LABELS, labelsProp);
336
+ const theme = useLoamTheme("wizard");
337
+ const activeStep = steps[current];
338
+ const dotSize = indicator === "dots" ? theme.space[12] : theme.space[DOT_SIZE[size]];
339
+ const vertical = orientation === "vertical";
340
+ return /* @__PURE__ */ jsx(
341
+ View,
342
+ {
343
+ style: [styles.rail, vertical && styles.railVertical],
344
+ ...onStepClick ? { role: "group" } : {
345
+ accessibilityRole: "progressbar",
346
+ accessibilityValue: { min: 1, max: steps.length, now: current + 1 },
347
+ "aria-valuemin": 1,
348
+ "aria-valuemax": steps.length,
349
+ "aria-valuenow": current + 1
350
+ },
351
+ accessibilityLabel: labels.stepOf(current + 1, steps.length, activeStep?.label),
352
+ children: steps.map((s, i) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
353
+ i > 0 ? (
354
+ // The connector carries the state: solid in the done tone once the
355
+ // step it leaves has been traversed, muted otherwise — the shared
356
+ // rule, and the same green the completed dots now use.
357
+ /* @__PURE__ */ jsx(
358
+ View,
359
+ {
360
+ style: [
361
+ styles.line,
362
+ vertical ? {
363
+ flex: 0,
364
+ width: theme.borderWidth.heavy,
365
+ height: theme.space.s4,
366
+ marginHorizontal: 0,
367
+ marginTop: 0,
368
+ marginVertical: theme.space.s1,
369
+ marginStart: dotSize / 2 - theme.borderWidth.heavy / 2
370
+ } : { marginTop: dotSize / 2 - theme.borderWidth.heavy / 2 },
371
+ {
372
+ backgroundColor: isConnectorTraversed(resolveStepState(i - 1, current)) ? doneTone === "accent" ? theme.color.accent : theme.color.good : theme.color.surface3
373
+ }
374
+ ]
375
+ }
376
+ )
377
+ ) : null,
378
+ /* @__PURE__ */ jsx(
379
+ StepDot,
380
+ {
381
+ index: i,
382
+ current,
383
+ label: s.label,
384
+ labels,
385
+ dotSize,
386
+ indicator,
387
+ orientation,
388
+ doneTone,
389
+ errorStyle,
390
+ hasError: !!s.error || !!errors?.has(i),
391
+ onPress: onStepClick && resolveStepState(i, current) === "done" ? () => onStepClick(i) : void 0
392
+ }
393
+ )
394
+ ] }, s.id))
395
+ }
396
+ );
397
+ }
398
+ var sheet = createStyleSheet((theme) => ({
399
+ hiddenStep: { display: "none" },
400
+ // The wizard owns its own gutter: it is a whole flow, not a control dropped
401
+ // into someone else's padded box, and without one the footer buttons sat flush
402
+ // against whatever container it was placed in.
403
+ container: {
404
+ padding: theme.space.s4,
405
+ gap: theme.space.s4
406
+ },
407
+ // Step titles sit *in flow* under their dot rather than absolutely positioned:
408
+ // an absolute label is measured against the 32pt dot, so it either overflowed
409
+ // into its neighbours or (once clamped) truncated to "Acc…". The connecting
410
+ // lines stay level with the dot centres by being offset to that centre
411
+ // themselves, which is why the rail aligns to `flex-start`.
412
+ rail: {
413
+ flexDirection: "row",
414
+ alignItems: "flex-start"
415
+ },
416
+ railVertical: { flexDirection: "column", alignItems: "flex-start" },
417
+ dotColRow: { flexDirection: "row", alignItems: "center", gap: theme.space.s3 },
418
+ line: {
419
+ flex: 1,
420
+ // The 2 px connector, level with the 30 dot centres (Final 05).
421
+ height: theme.borderWidth.heavy,
422
+ borderRadius: theme.radius.full,
423
+ marginHorizontal: theme.space.s1,
424
+ marginTop: theme.space[30] / 2 - theme.borderWidth.heavy / 2
425
+ },
426
+ errorBadge: {
427
+ position: "absolute",
428
+ top: -theme.space.s1,
429
+ end: -theme.space.s1,
430
+ width: theme.icon.sm,
431
+ height: theme.icon.sm,
432
+ borderRadius: theme.radius.full,
433
+ alignItems: "center",
434
+ justifyContent: "center",
435
+ backgroundColor: theme.color.danger
436
+ },
437
+ dotCol: { alignItems: "center", flexShrink: 0, gap: theme.space.s1 },
438
+ dot: {
439
+ width: theme.space[30],
440
+ height: theme.space[30],
441
+ borderRadius: theme.radius.full,
442
+ alignItems: "center",
443
+ justifyContent: "center",
444
+ variants: {
445
+ state: {
446
+ // `done` uses the family's done tone (`status.done` === `good`), so a
447
+ // completed wizard step is the same green as a `done` Timeline/Stage node
448
+ // and matches the web wizard — the native wizard previously diverged to
449
+ // `accent` (blue) here, the one inconsistency this unification resolves.
450
+ done: {
451
+ backgroundColor: theme.status.done,
452
+ borderWidth: theme.borderWidth.thick,
453
+ borderColor: theme.status.done
454
+ },
455
+ // The active step's edge is `focus.ringColor` — the only mark of "you
456
+ // are here" once high contrast drops the `accentSoft` fill, so it owes
457
+ // SC 1.4.11's 3:1, which the raw accent misses in four palettes.
458
+ active: {
459
+ backgroundColor: theme.color.accentSoft,
460
+ borderWidth: theme.borderWidth.thick,
461
+ borderColor: theme.focus.ringColor
462
+ },
463
+ upcoming: {
464
+ backgroundColor: theme.color.surface3,
465
+ borderWidth: theme.borderWidth.thick,
466
+ borderColor: theme.color.surface3
467
+ }
468
+ }
469
+ }
470
+ },
471
+ dotNum: {
472
+ fontFamily: theme.font.sans,
473
+ fontWeight: theme.fontWeight.bold,
474
+ fontSize: theme.type.footnote.fontSize,
475
+ lineHeight: theme.type.footnote.lineHeight
476
+ },
477
+ dotLabel: {
478
+ // Wide enough for a real step name, capped so a long one wraps instead of
479
+ // shouldering the next step out of the rail.
480
+ maxWidth: theme.space.s8 + theme.space.s4,
481
+ textAlign: "center",
482
+ fontFamily: theme.font.sans,
483
+ fontWeight: theme.fontWeight.semibold,
484
+ fontSize: theme.type.caption1.fontSize,
485
+ lineHeight: theme.type.caption1.lineHeight,
486
+ color: theme.color.text
487
+ },
488
+ // Active 600 text; the others 500 text-2.
489
+ dotLabelRest: { fontWeight: theme.fontWeight.medium, color: theme.color.text2 },
490
+ content: { gap: theme.space.s3 },
491
+ footer: {
492
+ flexDirection: "row",
493
+ alignItems: "center",
494
+ justifyContent: "space-between",
495
+ gap: theme.space.s3
496
+ },
497
+ footerShare: { flex: 1, alignItems: "stretch" },
498
+ bar: { flexDirection: "row", alignItems: "center" },
499
+ // The iOS page-sheet bar: 44, Cancel 17 / 400 accent, count 15 text-2.
500
+ barIos: { height: theme.ctl.lg, justifyContent: "space-between" },
501
+ // The Android full-screen dialog bar: 64 with a 48 close target.
502
+ barAndroid: { height: theme.space[64], marginHorizontal: -theme.space[12] },
503
+ closeButton: {
504
+ width: theme.space[48],
505
+ height: theme.space[48],
506
+ alignItems: "center",
507
+ justifyContent: "center"
508
+ },
509
+ cancel: {
510
+ fontFamily: theme.font.sans,
511
+ fontSize: theme.fontSize[17],
512
+ fontWeight: theme.fontWeight.regular,
513
+ color: theme.color.accentStrong
514
+ },
515
+ count: {
516
+ fontFamily: theme.font.sans,
517
+ fontSize: theme.fontSize[15],
518
+ color: theme.color.text2,
519
+ fontVariant: ["tabular-nums"]
520
+ }
521
+ }));
522
+
523
+ export { Wizard, WizardSteps };
@@ -0,0 +1,24 @@
1
+ // src/lib/storage.ts
2
+ function storageKey(component, id, version = 1) {
3
+ return `loam.${component}.${id}.v${version}`;
4
+ }
5
+ function readStored(storage, key) {
6
+ if (!storage) return null;
7
+ try {
8
+ const raw = storage.getItem(key);
9
+ if (!raw) return null;
10
+ const parsed = JSON.parse(raw);
11
+ return parsed && typeof parsed === "object" ? parsed : null;
12
+ } catch {
13
+ return null;
14
+ }
15
+ }
16
+ function writeStored(storage, key, value) {
17
+ if (!storage) return;
18
+ try {
19
+ storage.setItem(key, JSON.stringify(value));
20
+ } catch {
21
+ }
22
+ }
23
+
24
+ export { readStored, storageKey, writeStored };
@@ -1,20 +1,26 @@
1
- import { useThinkingPulse } from './chunk-XXXEFXY5.js';
2
1
  import { NODE_STATE_WORD, NODE_STATE_ICON, NODE_STATE_SHAPE } from './chunk-YLLCXTMC.js';
3
- import { Icon } from './chunk-TKVFVF5D.js';
2
+ import { useThinkingPulse } from './chunk-LUZFCCSD.js';
3
+ import { useLabels } from './chunk-APCWFOZW.js';
4
+ import { Icon } from './chunk-PCEFCOLN.js';
4
5
  import * as React from 'react';
5
6
  import { View, Text, ScrollView, Animated, Easing } from 'react-native';
6
7
  import { createStyleSheet, useStyles, useLoamTheme } from '@btndprojects/loam-theme-native';
7
8
  import { jsxs, jsx } from 'react/jsx-runtime';
8
9
 
10
+ var DEFAULT_LABELS = {
11
+ stage: (label, state) => `${label}: ${state}`,
12
+ states: { ...NODE_STATE_WORD }
13
+ };
9
14
  var NODE_BOX = { sm: 28, md: 36, lg: 44 };
10
15
  var NODE_ICON = { sm: 14, md: 18, lg: 22 };
11
16
  function StageNode({
12
17
  state,
13
18
  size,
14
- pulse
19
+ pulse,
20
+ outline
15
21
  }) {
16
22
  const { styles } = useStyles(sheet, { state });
17
- const theme = useLoamTheme();
23
+ const theme = useLoamTheme("stage-timeline");
18
24
  const box = NODE_BOX[size];
19
25
  const pulseStyle = useThinkingPulse(pulse);
20
26
  const glyphColor = state === "pending" ? theme.color.text3 : theme.status[state];
@@ -24,6 +30,7 @@ function StageNode({
24
30
  style: [
25
31
  styles.node,
26
32
  { width: box, height: box, borderRadius: shapeRadius(state, theme.radius.full) },
33
+ outline ? { backgroundColor: theme.color.surface } : null,
27
34
  pulseStyle
28
35
  ],
29
36
  children: /* @__PURE__ */ jsx(Icon, { name: NODE_STATE_ICON[state], size: NODE_ICON[size], color: glyphColor })
@@ -39,7 +46,7 @@ function Connector({
39
46
  motion
40
47
  }) {
41
48
  const { styles } = useStyles(sheet);
42
- const theme = useLoamTheme();
49
+ const theme = useLoamTheme("stage-timeline");
43
50
  const horizontal = orientation === "horizontal";
44
51
  const completed = from === "done";
45
52
  const animate = motion === "full" && completed && !theme.reduceMotion;
@@ -70,7 +77,7 @@ function Connector({
70
77
  {
71
78
  style: [
72
79
  horizontal ? styles.fillH : styles.fillV,
73
- { backgroundColor: theme.color.accent },
80
+ { backgroundColor: theme.color.good },
74
81
  fillStyle
75
82
  ]
76
83
  }
@@ -83,17 +90,21 @@ function StageTimeline({
83
90
  orientation = "horizontal",
84
91
  size = "md",
85
92
  motion = "full",
93
+ variant = "soft",
94
+ density = "comfortable",
95
+ labels: labelsProp,
86
96
  style,
87
97
  testID
88
98
  }) {
99
+ const labels = useLabels("stageTimeline", DEFAULT_LABELS, labelsProp);
89
100
  const { styles } = useStyles(sheet, { size });
90
- const theme = useLoamTheme();
101
+ const theme = useLoamTheme("stage-timeline");
91
102
  const horizontal = orientation === "horizontal";
92
103
  const lastIndex = stages.length - 1;
93
104
  const pulseOn = motion === "full" && !theme.reduceMotion;
94
105
  const items = stages.map((stage, index) => {
95
106
  const isWorking = stage.state === "working";
96
- const name = `${stage.label}: ${NODE_STATE_WORD[stage.state]}`;
107
+ const name = labels.stage(stage.label, labels.states[stage.state]);
97
108
  const next = stages[index + 1];
98
109
  const showConnector = index < lastIndex && next !== void 0;
99
110
  const currentAttr = isWorking ? { "aria-current": "step" } : {};
@@ -107,9 +118,17 @@ function StageTimeline({
107
118
  accessibilityLabel: name,
108
119
  "aria-label": name,
109
120
  ...currentAttr,
110
- style: styles.stageH,
121
+ style: [styles.stageH, density === "compact" && styles.stageHCompact],
111
122
  children: [
112
- /* @__PURE__ */ jsx(StageNode, { state: stage.state, size, pulse: isWorking && pulseOn }),
123
+ /* @__PURE__ */ jsx(
124
+ StageNode,
125
+ {
126
+ state: stage.state,
127
+ size,
128
+ pulse: isWorking && pulseOn,
129
+ outline: variant === "outline"
130
+ }
131
+ ),
113
132
  /* @__PURE__ */ jsx(Text, { style: styles.label, numberOfLines: 2, children: stage.label }),
114
133
  stage.detail ? /* @__PURE__ */ jsx(Text, { style: styles.detail, numberOfLines: 1, children: stage.detail }) : null
115
134
  ]
@@ -129,13 +148,32 @@ function StageTimeline({
129
148
  style: styles.stageV,
130
149
  children: [
131
150
  /* @__PURE__ */ jsxs(View, { style: styles.railV, children: [
132
- /* @__PURE__ */ jsx(StageNode, { state: stage.state, size, pulse: isWorking && pulseOn }),
151
+ /* @__PURE__ */ jsx(
152
+ StageNode,
153
+ {
154
+ state: stage.state,
155
+ size,
156
+ pulse: isWorking && pulseOn,
157
+ outline: variant === "outline"
158
+ }
159
+ ),
133
160
  showConnector ? /* @__PURE__ */ jsx(Connector, { from: stage.state, orientation, motion }) : null
134
161
  ] }),
135
- /* @__PURE__ */ jsxs(View, { style: [styles.textV, showConnector && { paddingBottom: theme.space.s5 }], children: [
136
- /* @__PURE__ */ jsx(Text, { style: styles.label, children: stage.label }),
137
- stage.detail ? /* @__PURE__ */ jsx(Text, { style: styles.detail, children: stage.detail }) : null
138
- ] })
162
+ /* @__PURE__ */ jsxs(
163
+ View,
164
+ {
165
+ style: [
166
+ styles.textV,
167
+ showConnector && {
168
+ paddingBottom: density === "compact" ? theme.space.s2 : theme.space.s5
169
+ }
170
+ ],
171
+ children: [
172
+ /* @__PURE__ */ jsx(Text, { style: styles.label, children: stage.label }),
173
+ stage.detail ? /* @__PURE__ */ jsx(Text, { style: styles.detail, children: stage.detail }) : null
174
+ ]
175
+ }
176
+ )
139
177
  ]
140
178
  },
141
179
  stage.id
@@ -175,6 +213,7 @@ var sheet = createStyleSheet((theme) => ({
175
213
  }
176
214
  }
177
215
  },
216
+ stageHCompact: { paddingHorizontal: theme.space.s1, gap: theme.space.s1 },
178
217
  stageV: { flexDirection: "row", alignItems: "stretch", gap: theme.space.s3 },
179
218
  railV: { alignItems: "center" },
180
219
  textV: { flexShrink: 1, gap: theme.space.s1, paddingTop: theme.space[2] },