@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,12 +1,16 @@
1
- import { Textarea } from './chunk-BTTFCMKG.js';
2
- import { KeyboardSpacer } from './chunk-HPPW424V.js';
3
- import { Sheet } from './chunk-ZVFE5QGU.js';
4
- import { Badge } from './chunk-SBMNWWBV.js';
5
- import { Button } from './chunk-3ARE4TES.js';
6
- import { Icon } from './chunk-TKVFVF5D.js';
1
+ import { KeyboardSpacer } from './chunk-LXJCP4PL.js';
2
+ import { Textarea } from './chunk-RIK6UX2K.js';
3
+ import { Sheet } from './chunk-B7JZ3N5G.js';
4
+ import { Button } from './chunk-5DTKORLI.js';
5
+ import { Badge } from './chunk-LGNTP5XA.js';
6
+ import { SkeletonText } from './chunk-YJ5PXOX3.js';
7
+ import { isAndroidIdiom } from './chunk-TH4PW2WU.js';
8
+ import { useLabels, useLoamLocale } from './chunk-APCWFOZW.js';
9
+ import { Icon } from './chunk-PCEFCOLN.js';
10
+ import { useResolvedMotion, springConfig } from './chunk-J64KGCGX.js';
7
11
  import { iconNameOr } from '@btndprojects/loam-icons';
8
- import * as React from 'react';
9
- import { View, Text, Pressable, ScrollView } from 'react-native';
12
+ import * as React4 from 'react';
13
+ import { View, Text, Animated, Easing, Pressable, ScrollView } from 'react-native';
10
14
  import { createStyleSheet, useLoamTheme, useStyles } from '@btndprojects/loam-theme-native';
11
15
  import { nodeType, SEVERITIES, rule, RUN_STATES, flowStepWalk, nodeCount, runStateFor } from '@btndprojects/loam-workflow';
12
16
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -31,6 +35,85 @@ var FLOW_TONE_BADGE = {
31
35
  good: "good",
32
36
  "text-3": "neutral"
33
37
  };
38
+
39
+ // src/flow-run/flow-run-labels.ts
40
+ var FLOW_RUN_LABELS = {
41
+ failedAt: (name) => `Failed at ${name}.`,
42
+ failedBody: "The error edge is the one that fired, and the run continued along it \u2014 which is why the error path belongs in the graph rather than in node config.",
43
+ runLog: "Run log",
44
+ runLogEmpty: "Press Run. The canvas shows state; this pane shows time.",
45
+ duration: (ms) => `${ms}ms`,
46
+ stepLabel: (n, name, state, ms) => `Step ${n}: ${name}, ${state}, ${ms} milliseconds`,
47
+ failed: "failed",
48
+ running: "running",
49
+ succeeded: "succeeded",
50
+ stepList: "Flow steps",
51
+ preset: "Flow",
52
+ flowTitle: (preset) => `${preset} flow`,
53
+ stepCount: (count) => `${count} steps \xB7 read-only on a phone`,
54
+ run: "Run",
55
+ replay: "Replay",
56
+ openMap: "Open the map",
57
+ phoneNote: "Approving a run on a phone: yes. Rewiring sixteen nodes on a phone: no.",
58
+ stepName: (type, label, f) => `${type}: ${label}` + (f.decide ? " \u2014 waiting on you, tap to approve" : "") + (f.repeat ? " \u2014 repeats" : "") + (f.orphan ? " \u2014 not reachable from the trigger" : ""),
59
+ tapToDecide: "Tap to decide",
60
+ notReachable: "Not reachable",
61
+ note: "Note",
62
+ validation: "Validation",
63
+ decideApproval: "Decide this approval",
64
+ noteLabel: "Note (optional)",
65
+ configuration: "Configuration",
66
+ waitingOnYou: "Waiting on you",
67
+ reject: "Reject",
68
+ approve: "Approve"
69
+ };
70
+ function useFlowRunLabels(own) {
71
+ return useLabels("flowRun", FLOW_RUN_LABELS, own);
72
+ }
73
+ var DEFAULT_LABELS = {
74
+ nodeTypes: {},
75
+ severities: {},
76
+ rules: {},
77
+ issues: {},
78
+ runStates: {},
79
+ edgeKinds: {},
80
+ lanes: {},
81
+ routes: {}
82
+ };
83
+ function flowVocabulary(labels) {
84
+ return {
85
+ nodeLabel: (def) => labels.nodeTypes[def.id]?.label ?? def.label,
86
+ nodeBlurb: (def) => labels.nodeTypes[def.id]?.blurb ?? def.blurb,
87
+ configNote: (def, key, fallback) => labels.nodeTypes[def.id]?.config?.[key] ?? fallback,
88
+ portLabel: (def, portId, fallback) => labels.nodeTypes[def.id]?.ports?.[portId] ?? fallback,
89
+ severity: (sev, fallback) => labels.severities[sev] ?? fallback,
90
+ ruleWhy: (ruleId, fallback) => labels.rules[ruleId]?.why ?? fallback,
91
+ issue: (issue) => {
92
+ const fn = issue.code ? labels.issues[issue.code] : void 0;
93
+ return fn ? fn(issue.params ?? {}) : issue.msg;
94
+ },
95
+ runState: (state, fallback) => labels.runStates[state] ?? fallback,
96
+ edgeKind: (kind, fallback) => labels.edgeKinds[kind]?.label ?? fallback,
97
+ edgeKindBlurb: (kind, fallback) => labels.edgeKinds[kind]?.blurb ?? fallback,
98
+ laneLabel: (lane) => labels.lanes[lane.id]?.label ?? lane.label,
99
+ laneNote: (lane) => labels.lanes[lane.id]?.note ?? lane.note,
100
+ route: (style, fallback) => labels.routes[style] ?? fallback
101
+ };
102
+ }
103
+ function useFlowVocabulary(own) {
104
+ const labels = useLabels("flowVocabulary", DEFAULT_LABELS, own);
105
+ return React4.useMemo(() => flowVocabulary(labels), [labels]);
106
+ }
107
+
108
+ // src/flow-run/flow-run-sheet.ts
109
+ var FLOW_SHEET_DETENTS = {
110
+ sm: ["peek", "half"],
111
+ md: ["half", "full"],
112
+ lg: ["full"]
113
+ };
114
+ function flowSheetDetents(detents, size) {
115
+ return detents ?? FLOW_SHEET_DETENTS[size ?? "md"];
116
+ }
34
117
  function FlowApprovalSheet({
35
118
  node,
36
119
  type,
@@ -38,33 +121,51 @@ function FlowApprovalSheet({
38
121
  layout = "sheet",
39
122
  open = false,
40
123
  onOpenChange,
41
- detents = ["half", "full"],
124
+ detents: detentsProp,
125
+ size,
126
+ side,
127
+ presentation,
128
+ readOnly = false,
42
129
  noteField = false,
43
- noteLabel = "Note (optional)",
130
+ noteLabel: noteLabelProp,
44
131
  noteValue,
45
132
  onNoteChange,
46
133
  noteError,
47
134
  safeAreaBottom = 0,
48
- rejectLabel = "Reject",
49
- approveLabel = "Approve",
135
+ rejectLabel: rejectLabelProp,
136
+ approveLabel: approveLabelProp,
50
137
  motion = "full",
138
+ loading = false,
139
+ notice,
51
140
  onDecide,
52
141
  onIntent,
53
142
  style,
54
- testID
143
+ testID,
144
+ surface,
145
+ labels: labelsProp,
146
+ vocabulary
55
147
  }) {
56
- const theme = useLoamTheme();
148
+ const theme = useLoamTheme("flow-run");
57
149
  const { styles } = useStyles(sheetStyles);
58
150
  const def = type ?? nodeType(node.type);
59
- const labelId = React.useId();
60
- const errorId = React.useId();
61
- const [internalNote, setInternalNote] = React.useState("");
151
+ const detents = flowSheetDetents(detentsProp, size);
152
+ const labels = useFlowRunLabels(labelsProp);
153
+ const v = useFlowVocabulary(vocabulary);
154
+ const noteLabel = noteLabelProp ?? labels.noteLabel;
155
+ const rejectLabel = rejectLabelProp ?? labels.reject;
156
+ const approveLabel = approveLabelProp ?? labels.approve;
157
+ const labelId = React4.useId();
158
+ const errorId = React4.useId();
159
+ const [internalNote, setInternalNote] = React4.useState("");
62
160
  const note = noteValue ?? internalNote;
63
161
  const setNote = (next) => {
64
162
  if (noteValue === void 0) setInternalNote(next);
65
163
  onNoteChange?.(next);
66
164
  };
165
+ const [chosen, setChosen] = React4.useState(null);
67
166
  const decide = (decision) => {
167
+ if (loading) return;
168
+ setChosen(decision);
68
169
  const trimmed = note.trim();
69
170
  onDecide?.(decision, trimmed || void 0);
70
171
  onIntent?.({
@@ -76,21 +177,13 @@ function FlowApprovalSheet({
76
177
  onOpenChange?.(false);
77
178
  };
78
179
  const body = /* @__PURE__ */ jsxs(View, { testID, style: [styles.body, style], children: [
79
- layout === "inline" ? /* @__PURE__ */ jsx(
80
- Text,
81
- {
82
- accessibilityRole: "header",
83
- style: styles.title,
84
- ...{ "aria-level": 2 },
85
- children: context.title
86
- }
87
- ) : null,
88
- /* @__PURE__ */ jsx(Text, { style: styles.eyebrow, children: def.label }),
180
+ layout === "inline" ? /* @__PURE__ */ jsx(Text, { accessibilityRole: "header", style: styles.title, ...{ "aria-level": 2 }, children: context.title }) : null,
181
+ /* @__PURE__ */ jsx(Text, { style: styles.eyebrow, children: v.nodeLabel(def) }),
89
182
  /* @__PURE__ */ jsxs(Text, { style: styles.nodeLine, children: [
90
183
  node.label,
91
184
  node.detail ? ` \xB7 ${node.detail}` : ""
92
185
  ] }),
93
- /* @__PURE__ */ jsx(Text, { style: styles.blurb, children: def.blurb }),
186
+ /* @__PURE__ */ jsx(Text, { style: styles.blurb, children: v.nodeBlurb(def) }),
94
187
  /* @__PURE__ */ jsx(View, { style: styles.context, children: typeof context.body === "string" ? /* @__PURE__ */ jsx(Text, { style: styles.contextText, children: context.body }) : context.body }),
95
188
  /* @__PURE__ */ jsxs(View, { style: styles.section, children: [
96
189
  /* @__PURE__ */ jsx(
@@ -99,15 +192,15 @@ function FlowApprovalSheet({
99
192
  accessibilityRole: "header",
100
193
  style: styles.eyebrow,
101
194
  ...{ "aria-level": 3 },
102
- children: "Configuration"
195
+ children: labels.configuration
103
196
  }
104
197
  ),
105
198
  def.config.map(([key, description]) => /* @__PURE__ */ jsxs(View, { style: styles.configRow, children: [
106
199
  /* @__PURE__ */ jsx(Text, { style: styles.configKey, children: key }),
107
- /* @__PURE__ */ jsx(Text, { style: styles.configValue, children: description })
200
+ /* @__PURE__ */ jsx(Text, { style: styles.configValue, children: v.configNote(def, key, description) })
108
201
  ] }, key))
109
202
  ] }),
110
- /* @__PURE__ */ jsxs(View, { style: styles.waiting, children: [
203
+ notice ? /* @__PURE__ */ jsxs(View, { style: styles.waiting, children: [
111
204
  /* @__PURE__ */ jsxs(View, { style: styles.waitingHead, children: [
112
205
  /* @__PURE__ */ jsx(
113
206
  Icon,
@@ -124,19 +217,22 @@ function FlowApprovalSheet({
124
217
  accessibilityRole: "header",
125
218
  style: styles.waitingEyebrow,
126
219
  ...{ "aria-level": 3 },
127
- children: "Waiting on you"
220
+ children: labels.waitingOnYou
128
221
  }
129
222
  )
130
223
  ] }),
131
- /* @__PURE__ */ jsx(Text, { style: styles.waitingBody, children: "Approve is recorded with your name, the time and what you were shown. Reject continues the run along the rejected edge." })
132
- ] }),
224
+ typeof notice === "string" ? /* @__PURE__ */ jsx(Text, { style: styles.waitingBody, children: notice }) : notice
225
+ ] }) : null,
133
226
  noteField ? /* @__PURE__ */ jsxs(View, { style: styles.section, children: [
134
227
  /* @__PURE__ */ jsx(Text, { nativeID: labelId, style: styles.fieldLabel, children: noteLabel }),
135
228
  /* @__PURE__ */ jsx(
136
229
  Textarea,
137
230
  {
138
231
  rows: 2,
232
+ surface,
139
233
  value: note,
234
+ readOnly: readOnly || void 0,
235
+ editable: !readOnly,
140
236
  onChangeText: setNote,
141
237
  error: Boolean(noteError),
142
238
  "aria-labelledby": labelId,
@@ -146,7 +242,7 @@ function FlowApprovalSheet({
146
242
  noteError ? /* @__PURE__ */ jsx(Text, { nativeID: errorId, accessibilityLiveRegion: "polite", style: styles.fieldError, children: noteError }) : null,
147
243
  /* @__PURE__ */ jsx(KeyboardSpacer, {})
148
244
  ] }) : null,
149
- /* @__PURE__ */ jsxs(View, { style: [styles.commit, { marginBottom: safeAreaBottom }], children: [
245
+ readOnly ? null : /* @__PURE__ */ jsxs(View, { style: [styles.commit, { marginBottom: safeAreaBottom }], children: [
150
246
  /* @__PURE__ */ jsx(View, { style: styles.rejectSlot, children: /* @__PURE__ */ jsx(
151
247
  Button,
152
248
  {
@@ -155,6 +251,7 @@ function FlowApprovalSheet({
155
251
  fullWidth: true,
156
252
  leadingIcon: "x",
157
253
  accessibilityLabel: rejectLabel,
254
+ loading: loading && chosen === "rejected",
158
255
  onPress: () => decide("rejected"),
159
256
  children: rejectLabel
160
257
  }
@@ -167,6 +264,7 @@ function FlowApprovalSheet({
167
264
  fullWidth: true,
168
265
  leadingIcon: "check",
169
266
  accessibilityLabel: approveLabel,
267
+ loading: loading && chosen === "approved",
170
268
  onPress: () => decide("approved"),
171
269
  children: approveLabel
172
270
  }
@@ -180,6 +278,9 @@ function FlowApprovalSheet({
180
278
  open,
181
279
  title: context.title,
182
280
  detents,
281
+ initialDetent: detents.includes("full") ? "full" : void 0,
282
+ ...side ? { side } : null,
283
+ ...presentation ? { presentation } : null,
183
284
  motion,
184
285
  onOpenChange,
185
286
  children: body
@@ -193,8 +294,8 @@ var sheetStyles = createStyleSheet((theme) => ({
193
294
  title: {
194
295
  fontFamily: theme.font.display,
195
296
  fontWeight: theme.font.displayWeight,
196
- fontSize: theme.type.title2.fontSize,
197
- lineHeight: theme.type.title2.lineHeight,
297
+ fontSize: theme.type.title3.fontSize,
298
+ lineHeight: theme.type.title3.lineHeight,
198
299
  color: theme.color.text
199
300
  },
200
301
  eyebrow: {
@@ -290,18 +391,13 @@ var sheetStyles = createStyleSheet((theme) => ({
290
391
  alignItems: "stretch",
291
392
  gap: theme.space.s2
292
393
  },
293
- // Approve is the wider half: the decision the flow is waiting for, and the one
294
- // an approver reaches for with a thumb. The `lg` control tier already clears
295
- // the 44px touch minimum; `space[50]` is the spec's taller commit bar.
394
+ // Approve and Reject share the width (F53); the `lg` control tier (44) already
395
+ // clears the touch minimum.
296
396
  rejectSlot: {
297
- flex: 1,
298
- minHeight: theme.space[50]
397
+ flex: 1
299
398
  },
300
399
  approveSlot: {
301
- flexGrow: 1.4,
302
- flexShrink: 1,
303
- flexBasis: 0,
304
- minHeight: theme.space[50]
400
+ flex: 1
305
401
  }
306
402
  }));
307
403
  function FlowStepSheet({
@@ -311,22 +407,34 @@ function FlowStepSheet({
311
407
  issues = [],
312
408
  open,
313
409
  onOpenChange,
314
- detents = ["half", "full"],
410
+ detents: detentsProp,
411
+ size,
412
+ side,
413
+ presentation,
414
+ readOnly = false,
415
+ loading = false,
315
416
  canApprove = false,
316
- approveLabel = "Decide this approval",
417
+ approveLabel: approveLabelProp,
317
418
  onApprove,
318
419
  motion = "full",
319
420
  style,
320
- testID
421
+ testID,
422
+ labels: labelsProp,
423
+ vocabulary
321
424
  }) {
322
- const theme = useLoamTheme();
425
+ const theme = useLoamTheme("flow-run");
426
+ const labels = useFlowRunLabels(labelsProp);
427
+ const v = useFlowVocabulary(vocabulary);
428
+ const locale = useLoamLocale();
429
+ const approveLabel = approveLabelProp ?? labels.decideApproval;
323
430
  const def = type ?? (node ? nodeType(node.type) : null);
324
431
  const tone = def ? def.tone : "text-3";
325
432
  const { styles } = useStyles(sheetStyles2, { tone });
326
- const mine = React.useMemo(
433
+ const mine = React4.useMemo(
327
434
  () => node ? issues.filter((i) => i.node === node.id).slice().sort((a, b) => SEVERITIES[a.sev].rank - SEVERITIES[b.sev].rank) : [],
328
435
  [issues, node]
329
436
  );
437
+ const detents = flowSheetDetents(detentsProp, size);
330
438
  const isOpen = open ?? node != null;
331
439
  const human = def?.kind === "human";
332
440
  const body = node && def ? /* @__PURE__ */ jsxs(View, { testID, style: [styles.body, style], children: [
@@ -340,7 +448,7 @@ function FlowStepSheet({
340
448
  strokeWidth: theme.icon.stroke
341
449
  }
342
450
  ) }),
343
- /* @__PURE__ */ jsx(Text, { style: styles.eyebrow, children: def.label })
451
+ /* @__PURE__ */ jsx(Text, { style: styles.eyebrow, children: v.nodeLabel(def) })
344
452
  ] }),
345
453
  layout === "inline" ? /* @__PURE__ */ jsx(
346
454
  Text,
@@ -351,8 +459,8 @@ function FlowStepSheet({
351
459
  children: node.label
352
460
  }
353
461
  ) : null,
354
- /* @__PURE__ */ jsx(Text, { style: styles.detail, children: node.detail || def.label.toLowerCase() }),
355
- /* @__PURE__ */ jsx(Text, { style: styles.blurb, children: def.blurb }),
462
+ /* @__PURE__ */ jsx(Text, { style: styles.detail, children: node.detail || v.nodeLabel(def).toLocaleLowerCase(locale) }),
463
+ /* @__PURE__ */ jsx(Text, { style: styles.blurb, children: v.nodeBlurb(def) }),
356
464
  /* @__PURE__ */ jsxs(View, { style: styles.section, children: [
357
465
  /* @__PURE__ */ jsx(
358
466
  Text,
@@ -360,29 +468,31 @@ function FlowStepSheet({
360
468
  accessibilityRole: "header",
361
469
  style: styles.eyebrow,
362
470
  ...{ "aria-level": 3 },
363
- children: "Configuration"
471
+ children: labels.configuration
364
472
  }
365
473
  ),
366
474
  def.config.map(([key, description]) => /* @__PURE__ */ jsxs(View, { style: styles.configRow, children: [
367
475
  /* @__PURE__ */ jsx(Text, { style: styles.configKey, children: key }),
368
- /* @__PURE__ */ jsx(Text, { style: styles.configValue, children: description })
476
+ /* @__PURE__ */ jsx(Text, { style: styles.configValue, children: v.configNote(def, key, description) })
369
477
  ] }, key))
370
478
  ] }),
371
- mine.length > 0 ? /* @__PURE__ */ jsxs(View, { accessibilityLabel: "Validation", style: styles.section, children: [
479
+ mine.length > 0 ? /* @__PURE__ */ jsxs(View, { accessibilityLabel: labels.validation, style: styles.section, children: [
372
480
  /* @__PURE__ */ jsx(
373
481
  Text,
374
482
  {
375
483
  accessibilityRole: "header",
376
484
  style: styles.eyebrow,
377
485
  ...{ "aria-level": 3 },
378
- children: "Validation"
486
+ children: labels.validation
379
487
  }
380
488
  ),
381
- mine.map((issue) => /* @__PURE__ */ jsx(IssueRow, { issue }, `${issue.rule}:${issue.msg}`))
489
+ mine.map((issue) => /* @__PURE__ */ jsx(IssueRow, { issue, v }, `${issue.rule}:${issue.msg}`))
382
490
  ] }) : null,
383
- human && canApprove && onApprove ? /* @__PURE__ */ jsx(
491
+ loading ? /* @__PURE__ */ jsx(SkeletonText, { lines: 2 }) : null,
492
+ human && canApprove && onApprove && !readOnly ? /* @__PURE__ */ jsx(
384
493
  Button,
385
494
  {
495
+ loading,
386
496
  variant: "primary",
387
497
  size: "lg",
388
498
  fullWidth: true,
@@ -399,19 +509,24 @@ function FlowStepSheet({
399
509
  open: isOpen,
400
510
  title: node ? node.label : void 0,
401
511
  detents,
512
+ ...side ? { side } : null,
513
+ ...presentation ? { presentation } : null,
402
514
  motion,
403
515
  onOpenChange,
404
516
  children: body
405
517
  }
406
518
  );
407
519
  }
408
- function IssueRow({ issue }) {
520
+ function IssueRow({
521
+ issue,
522
+ v
523
+ }) {
409
524
  const sev = SEVERITIES[issue.sev];
410
525
  const { styles } = useStyles(issueSheet, { sev: sev.tone });
411
- const why = rule(issue.rule)?.why;
526
+ const why = v.ruleWhy(issue.rule, rule(issue.rule)?.why);
412
527
  return /* @__PURE__ */ jsxs(View, { style: styles.box, children: [
413
- /* @__PURE__ */ jsx(Badge, { variant: FLOW_TONE_BADGE[sev.tone], size: "sm", leadingIcon: flowIconName(sev.icon), children: sev.label }),
414
- /* @__PURE__ */ jsx(Text, { style: styles.msg, children: issue.msg }),
528
+ /* @__PURE__ */ jsx(Badge, { variant: FLOW_TONE_BADGE[sev.tone], size: "sm", leadingIcon: flowIconName(sev.icon), children: v.severity(issue.sev, sev.label) }),
529
+ /* @__PURE__ */ jsx(Text, { style: styles.msg, children: v.issue(issue) }),
415
530
  why ? /* @__PURE__ */ jsx(Text, { style: styles.why, children: why }) : null
416
531
  ] });
417
532
  }
@@ -529,7 +644,7 @@ var issueSheet = createStyleSheet((theme) => ({
529
644
  }
530
645
  }));
531
646
  function useToneInk(tone) {
532
- const theme = useLoamTheme();
647
+ const theme = useLoamTheme("flow-run");
533
648
  switch (tone) {
534
649
  case "accent":
535
650
  return theme.color.accentOnSoft;
@@ -558,11 +673,49 @@ function FlowStepRow({
558
673
  canDecide = false,
559
674
  last = false,
560
675
  onPress,
676
+ platform,
561
677
  accessibilityLabel,
562
678
  style,
563
- testID
679
+ testID,
680
+ motion = "full",
681
+ labels: labelsProp,
682
+ vocabulary
564
683
  }) {
565
- const theme = useLoamTheme();
684
+ const theme = useLoamTheme("flow-run");
685
+ const labels = useFlowRunLabels(labelsProp);
686
+ const v = useFlowVocabulary(vocabulary);
687
+ const locale = useLoamLocale();
688
+ const level = useResolvedMotion(motion, "flow-run");
689
+ const breathe = React4.useRef(new Animated.Value(1)).current;
690
+ React4.useEffect(() => {
691
+ if (runState !== "running" || level !== "full") {
692
+ breathe.setValue(1);
693
+ return;
694
+ }
695
+ const half = theme.loop.pulse / 2;
696
+ const easing = Easing.bezier(...theme.easing.inOut);
697
+ const loop = Animated.loop(
698
+ Animated.sequence([
699
+ Animated.timing(breathe, { toValue: 0.4, duration: half, easing, useNativeDriver: true }),
700
+ Animated.timing(breathe, { toValue: 1, duration: half, easing, useNativeDriver: true })
701
+ ])
702
+ );
703
+ loop.start();
704
+ return () => loop.stop();
705
+ }, [runState, level, theme.loop.pulse, theme.easing.inOut, breathe]);
706
+ const pop = React4.useRef(new Animated.Value(1)).current;
707
+ const prevRun = React4.useRef(runState);
708
+ React4.useEffect(() => {
709
+ const was = prevRun.current;
710
+ prevRun.current = runState;
711
+ if (runState !== "ok" || was === "ok" || level !== "full") return;
712
+ pop.setValue(0.5);
713
+ Animated.spring(pop, {
714
+ ...springConfig(theme, "fs"),
715
+ toValue: 1,
716
+ useNativeDriver: true
717
+ }).start();
718
+ }, [runState, level, pop, theme]);
566
719
  const def = type ?? nodeType(node.type);
567
720
  const human = def.kind === "human";
568
721
  const running = runState !== "idle";
@@ -570,8 +723,9 @@ function FlowStepRow({
570
723
  const glyph = running ? FLOW_RUN_STATE_ICON[runState] : flowIconName(def.icon);
571
724
  const { styles } = useStyles(sheet, { tone, note });
572
725
  const ink = useToneInk(tone);
573
- const detail = node.detail || def.label.toLowerCase();
574
- const name = accessibilityLabel ?? `${def.label}: ${node.label}` + (human && canDecide ? " \u2014 waiting on you, tap to approve" : "") + (repeat ? " \u2014 repeats" : "") + (orphan ? " \u2014 not reachable from the trigger" : "");
726
+ const typeName = v.nodeLabel(def);
727
+ const detail = node.detail || typeName.toLocaleLowerCase(locale);
728
+ const name = accessibilityLabel ?? labels.stepName(typeName, node.label, { decide: human && canDecide, repeat, orphan });
575
729
  return /* @__PURE__ */ jsxs(
576
730
  Pressable,
577
731
  {
@@ -584,12 +738,14 @@ function FlowStepRow({
584
738
  // The indent is the edge information: `flowStepWalk` already clamped the
585
739
  // depth, so this can never walk off the phone.
586
740
  { paddingStart: theme.space[12] + depth * theme.space[16] },
741
+ // OS list metrics (F14, F15): iOS two-line 60, Android 72.
742
+ { minHeight: isAndroidIdiom(theme, platform) ? theme.space[72] : theme.space[60] },
587
743
  pressed && styles.rowPressed,
588
744
  style
589
745
  ],
590
746
  children: [
591
747
  /* @__PURE__ */ jsxs(View, { style: styles.rail, pointerEvents: "none", children: [
592
- /* @__PURE__ */ jsx(View, { style: styles.node, children: /* @__PURE__ */ jsx(Icon, { name: glyph, size: theme.icon.xs, color: ink, strokeWidth: theme.icon.stroke }) }),
748
+ /* @__PURE__ */ jsx(Animated.View, { style: [styles.node, { opacity: breathe, transform: [{ scale: pop }] }], children: /* @__PURE__ */ jsx(Icon, { name: glyph, size: theme.icon.xs, color: ink, strokeWidth: theme.icon.stroke }) }),
593
749
  last ? null : /* @__PURE__ */ jsx(View, { style: styles.connector })
594
750
  ] }),
595
751
  /* @__PURE__ */ jsxs(View, { style: styles.card, children: [
@@ -605,13 +761,13 @@ function FlowStepRow({
605
761
  strokeWidth: theme.icon.stroke
606
762
  }
607
763
  ) : null,
608
- running ? /* @__PURE__ */ jsx(Badge, { variant: FLOW_TONE_BADGE[tone], size: "sm", leadingIcon: glyph, children: RUN_STATES[runState].label }) : null,
609
- human && canDecide ? /* @__PURE__ */ jsx(Badge, { variant: "accent", size: "sm", leadingIcon: "user", children: "Tap to decide" }) : null,
610
- orphan ? /* @__PURE__ */ jsx(Badge, { variant: "danger", size: "sm", leadingIcon: "alert-triangle", children: "Not reachable" }) : null,
611
- note ? /* @__PURE__ */ jsx(Badge, { variant: "warn", size: "sm", leadingIcon: "edit", children: "Note" }) : null
764
+ running ? /* @__PURE__ */ jsx(Badge, { variant: FLOW_TONE_BADGE[tone], size: "sm", leadingIcon: glyph, children: v.runState(runState, RUN_STATES[runState].label) }) : null,
765
+ human && canDecide ? /* @__PURE__ */ jsx(Badge, { variant: "accent", size: "sm", leadingIcon: "user", children: labels.tapToDecide }) : null,
766
+ orphan ? /* @__PURE__ */ jsx(Badge, { variant: "danger", size: "sm", leadingIcon: "alert-triangle", children: labels.notReachable }) : null,
767
+ note ? /* @__PURE__ */ jsx(Badge, { variant: "warn", size: "sm", leadingIcon: "edit", children: labels.note }) : null
612
768
  ] }),
613
- /* @__PURE__ */ jsxs(Text, { numberOfLines: 1, style: styles.sub, children: [
614
- def.label,
769
+ /* @__PURE__ */ jsxs(Text, { numberOfLines: 2, style: styles.sub, children: [
770
+ typeName,
615
771
  " \xB7 ",
616
772
  detail
617
773
  ] })
@@ -633,71 +789,86 @@ function FlowStepList({
633
789
  graph,
634
790
  steps,
635
791
  run = null,
636
- presetLabel = "Flow",
792
+ presetLabel: presetLabelProp,
637
793
  canApprove = false,
638
- label = "Flow steps",
794
+ label: labelProp,
795
+ readOnly = false,
796
+ loading = false,
639
797
  safeAreaBottom = 0,
640
798
  onStepOpen,
641
799
  onOpenMap,
642
800
  onIntent,
643
801
  style,
644
- testID
802
+ testID,
803
+ labels: labelsProp,
804
+ vocabulary
645
805
  }) {
646
- const theme = useLoamTheme();
806
+ const theme = useLoamTheme("flow-run");
807
+ const labels = useFlowRunLabels(labelsProp);
808
+ const presetLabel = presetLabelProp ?? labels.preset;
809
+ const label = labelProp ?? labels.stepList;
647
810
  const { styles } = useStyles(listSheet);
648
- const walked = React.useMemo(() => steps ?? flowStepWalk(graph), [steps, graph]);
649
- const count = React.useMemo(() => nodeCount(graph), [graph]);
811
+ const walked = React4.useMemo(() => steps ?? flowStepWalk(graph), [steps, graph]);
812
+ const count = React4.useMemo(() => nodeCount(graph), [graph]);
650
813
  return /* @__PURE__ */ jsxs(View, { accessibilityLabel: label, testID, style: [styles.root, style], children: [
651
814
  /* @__PURE__ */ jsxs(View, { style: styles.header, children: [
652
815
  /* @__PURE__ */ jsxs(View, { style: styles.headerText, children: [
653
- /* @__PURE__ */ jsxs(
816
+ /* @__PURE__ */ jsx(
654
817
  Text,
655
818
  {
656
819
  accessibilityRole: "header",
657
820
  numberOfLines: 1,
658
821
  style: styles.title,
659
822
  ...{ "aria-level": 2 },
660
- children: [
661
- presetLabel,
662
- " flow"
663
- ]
823
+ children: labels.flowTitle(presetLabel)
664
824
  }
665
825
  ),
666
- /* @__PURE__ */ jsxs(Text, { numberOfLines: 1, style: styles.headerSub, children: [
667
- count,
668
- " steps \xB7 read-only on a phone"
669
- ] })
826
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: styles.headerSub, children: labels.stepCount(count) })
670
827
  ] }),
671
- /* @__PURE__ */ jsx(
828
+ readOnly ? null : /* @__PURE__ */ jsx(
672
829
  Button,
673
830
  {
674
831
  variant: "tonal",
675
832
  size: "sm",
833
+ loading,
676
834
  leadingIcon: run ? "refresh" : "play",
677
835
  onPress: () => onIntent?.({ t: "run" }),
678
- children: run ? "Replay" : "Run"
836
+ children: run ? labels.replay : labels.run
679
837
  }
680
838
  )
681
839
  ] }),
682
- /* @__PURE__ */ jsx(ScrollView, { style: styles.scroll, contentContainerStyle: styles.scrollContent, role: "list", children: walked.map((step, i) => /* @__PURE__ */ jsx(View, { role: "listitem", children: /* @__PURE__ */ jsx(
683
- FlowStepRow,
840
+ /* @__PURE__ */ jsxs(
841
+ ScrollView,
684
842
  {
685
- node: step.node,
686
- type: step.type,
687
- depth: step.depth,
688
- ...step.branchLabel ? { branchLabel: step.branchLabel } : {},
689
- repeat: step.repeat,
690
- note: step.note,
691
- orphan: step.orphan,
692
- runState: run ? runStateFor(graph, run.trace, run.index, step.node.id) : "idle",
693
- canDecide: canApprove && step.type.kind === "human",
694
- last: i === walked.length - 1,
695
- ...onStepOpen ? { onPress: onStepOpen } : {}
843
+ style: styles.scroll,
844
+ contentContainerStyle: styles.scrollContent,
845
+ ...!loading && walked.length > 0 ? { role: "list" } : {},
846
+ children: [
847
+ loading ? /* @__PURE__ */ jsx(SkeletonText, { lines: 4 }) : null,
848
+ (loading ? [] : walked).map((step, i) => /* @__PURE__ */ jsx(View, { role: "listitem", children: /* @__PURE__ */ jsx(
849
+ FlowStepRow,
850
+ {
851
+ node: step.node,
852
+ type: step.type,
853
+ depth: step.depth,
854
+ ...step.branchLabel ? { branchLabel: step.branchLabel } : {},
855
+ repeat: step.repeat,
856
+ note: step.note,
857
+ orphan: step.orphan,
858
+ runState: run ? runStateFor(graph, run.trace, run.index, step.node.id) : "idle",
859
+ canDecide: canApprove && !readOnly && step.type.kind === "human",
860
+ last: i === walked.length - 1,
861
+ labels: labelsProp,
862
+ ...vocabulary ? { vocabulary } : {},
863
+ ...onStepOpen && !readOnly ? { onPress: onStepOpen } : {}
864
+ }
865
+ ) }, step.key))
866
+ ]
696
867
  }
697
- ) }, step.key)) }),
868
+ ),
698
869
  /* @__PURE__ */ jsxs(View, { style: [styles.footer, { paddingBottom: theme.space[12] + safeAreaBottom }], children: [
699
- onOpenMap ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "md", fullWidth: true, leadingIcon: "map-pin", onPress: onOpenMap, children: "Open the map" }) : null,
700
- /* @__PURE__ */ jsx(Text, { style: styles.footerNote, children: "Approving a run on a phone: yes. Rewiring sixteen nodes on a phone: no." })
870
+ onOpenMap ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "md", fullWidth: true, leadingIcon: "map-pin", onPress: onOpenMap, children: labels.openMap }) : null,
871
+ /* @__PURE__ */ jsx(Text, { style: styles.footerNote, children: labels.phoneNote })
701
872
  ] })
702
873
  ] });
703
874
  }
@@ -830,10 +1001,13 @@ var listSheet = createStyleSheet((theme) => ({
830
1001
  letterSpacing: theme.type.headline.letterSpacing,
831
1002
  color: theme.color.text
832
1003
  },
1004
+ // The count style: mono 12 / 500, tabular, text-2.
833
1005
  headerSub: {
834
1006
  fontFamily: theme.font.mono,
835
- fontSize: theme.fontSize[11],
836
- color: theme.color.text3
1007
+ fontSize: theme.fontSize[12],
1008
+ fontWeight: theme.fontWeight.medium,
1009
+ fontVariant: ["tabular-nums"],
1010
+ color: theme.color.text2
837
1011
  },
838
1012
  scroll: {
839
1013
  flex: 1
@@ -851,10 +1025,10 @@ var listSheet = createStyleSheet((theme) => ({
851
1025
  },
852
1026
  footerNote: {
853
1027
  fontFamily: theme.font.sans,
854
- fontSize: theme.fontSize[11],
855
- lineHeight: theme.fontSize[11] * theme.lineHeight.snug,
856
- color: theme.color.text3
1028
+ fontSize: theme.fontSize[12],
1029
+ lineHeight: theme.fontSize[12] * theme.lineHeight.snug,
1030
+ color: theme.color.text2
857
1031
  }
858
1032
  }));
859
1033
 
860
- export { FLOW_RUN_STATE_ICON, FLOW_TONE_BADGE, FlowApprovalSheet, FlowStepList, FlowStepRow, FlowStepSheet, flowIconName };
1034
+ export { FLOW_RUN_STATE_ICON, FLOW_TONE_BADGE, FlowApprovalSheet, FlowStepList, FlowStepRow, FlowStepSheet, flowIconName, flowVocabulary, useFlowRunLabels, useFlowVocabulary };