@btndprojects/loam-ui-native 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/dist/accordion/index.js +4 -2
  2. package/dist/adaptive/index.js +12 -2
  3. package/dist/address-block/index.js +23 -0
  4. package/dist/alert/index.js +5 -2
  5. package/dist/analyzer/index.js +13 -5
  6. package/dist/announcement/index.js +15 -5
  7. package/dist/appearance-picker/index.js +15 -0
  8. package/dist/audio-player/index.js +26 -2
  9. package/dist/avatar/index.js +2 -2
  10. package/dist/avatar-group/index.js +5 -3
  11. package/dist/badge/index.js +6 -3
  12. package/dist/banner/index.js +3 -2
  13. package/dist/board/index.js +13 -6
  14. package/dist/button/index.js +6 -3
  15. package/dist/camera-permission/index.js +19 -11
  16. package/dist/capture-result/index.js +26 -16
  17. package/dist/card/index.js +7 -3
  18. package/dist/card-form/index.js +15 -9
  19. package/dist/carousel/index.js +3 -1
  20. package/dist/chart/index.js +15 -5
  21. package/dist/charts/index.js +18 -5
  22. package/dist/chat/index.js +35 -10
  23. package/dist/checkbox/index.js +6 -4
  24. package/dist/checklist/index.js +16 -7
  25. package/dist/checkout/index.js +25 -12
  26. package/dist/chip/index.js +7 -4
  27. package/dist/chunk-2BZD3NAP.js +1110 -0
  28. package/dist/chunk-2YKVID2V.js +35 -0
  29. package/dist/{chunk-H7DWSL4O.js → chunk-36DA3IPO.js} +115 -27
  30. package/dist/chunk-3A56MIAN.js +599 -0
  31. package/dist/{chunk-AEB7KCHQ.js → chunk-3SCKCWF5.js} +39 -28
  32. package/dist/chunk-3TZNDHKO.js +187 -0
  33. package/dist/chunk-43K3BLXV.js +9 -0
  34. package/dist/chunk-46ZJIQ2Z.js +208 -0
  35. package/dist/{chunk-PMMTGBBS.js → chunk-4CZMQDQL.js} +75 -22
  36. package/dist/chunk-4QCR3K2J.js +1 -0
  37. package/dist/{chunk-E2E3I5W2.js → chunk-5DTKORLI.js} +54 -45
  38. package/dist/{chunk-5VFZRGVD.js → chunk-5J4WFXFA.js} +32 -15
  39. package/dist/{chunk-JBMLWFSJ.js → chunk-5KJ7TEQ6.js} +83 -48
  40. package/dist/chunk-5NU33TXK.js +529 -0
  41. package/dist/chunk-6KSUS7DF.js +690 -0
  42. package/dist/{chunk-3WEZCGHX.js → chunk-6RV6UW2J.js} +140 -56
  43. package/dist/chunk-6RZM7RP2.js +520 -0
  44. package/dist/{chunk-JJLPBRVZ.js → chunk-75BDCC7K.js} +2 -0
  45. package/dist/{chunk-U5NLHYV6.js → chunk-7CGJBQUA.js} +333 -22
  46. package/dist/{chunk-I4FHVKEC.js → chunk-7IVF6JLJ.js} +16 -5
  47. package/dist/chunk-7IWCGXYA.js +143 -0
  48. package/dist/chunk-7LM4ASFH.js +172 -0
  49. package/dist/chunk-7MCEJFWV.js +341 -0
  50. package/dist/{chunk-2SY63FCH.js → chunk-7NGMUVNU.js} +66 -30
  51. package/dist/chunk-7PBSIXT7.js +355 -0
  52. package/dist/chunk-7QOYGENL.js +443 -0
  53. package/dist/{chunk-TDMG26JI.js → chunk-A7SWYDE5.js} +40 -9
  54. package/dist/chunk-ADHPJALR.js +3051 -0
  55. package/dist/{chunk-ZLTO5VQI.js → chunk-ALJYZLNQ.js} +131 -61
  56. package/dist/{chunk-GDKVKNR2.js → chunk-AQ5FIG74.js} +110 -30
  57. package/dist/chunk-B2MMZZQB.js +426 -0
  58. package/dist/{chunk-QYPE5JX3.js → chunk-B7JZ3N5G.js} +142 -105
  59. package/dist/{chunk-QHTVYA65.js → chunk-BL37SW6G.js} +388 -102
  60. package/dist/chunk-BTRMA7GC.js +21 -0
  61. package/dist/{chunk-FUMHAAF3.js → chunk-C7IUWIUZ.js} +243 -92
  62. package/dist/chunk-CA3DUVYD.js +10 -0
  63. package/dist/{chunk-FYWNRX4F.js → chunk-CBCJSO2B.js} +143 -13
  64. package/dist/chunk-CHPX4MFI.js +239 -0
  65. package/dist/chunk-CLGAMIOT.js +648 -0
  66. package/dist/chunk-CUE7VML6.js +1141 -0
  67. package/dist/{chunk-D5N5QWI7.js → chunk-CVU6S2E5.js} +497 -235
  68. package/dist/{chunk-U23FYWME.js → chunk-CXPQMA6Z.js} +101 -34
  69. package/dist/{chunk-36EC2T6P.js → chunk-D2LN4I7I.js} +1 -1
  70. package/dist/{chunk-TLCIR6RG.js → chunk-D34LNBO5.js} +411 -155
  71. package/dist/{chunk-FV6HMP7W.js → chunk-D4BCQICM.js} +207 -65
  72. package/dist/chunk-EABKIIA4.js +1 -0
  73. package/dist/chunk-EICSYRAG.js +341 -0
  74. package/dist/chunk-EMWAJMAS.js +83 -0
  75. package/dist/chunk-EOLZWRV6.js +149 -0
  76. package/dist/chunk-EOQVTGB6.js +350 -0
  77. package/dist/{chunk-ZVATDZOM.js → chunk-ESGUHNB2.js} +106 -28
  78. package/dist/{chunk-46MMSDGL.js → chunk-F2KNBPKY.js} +104 -73
  79. package/dist/{chunk-KQZ3GLHR.js → chunk-G7H3NX3G.js} +40 -17
  80. package/dist/{chunk-3QMEOFW5.js → chunk-GM7YIPB7.js} +421 -207
  81. package/dist/{chunk-QHAITQIF.js → chunk-GVQQG435.js} +256 -86
  82. package/dist/chunk-HE43OMEL.js +1056 -0
  83. package/dist/{chunk-XIDTBCBA.js → chunk-HHOMFQ7R.js} +1049 -207
  84. package/dist/chunk-HNAKS4Z3.js +207 -0
  85. package/dist/chunk-HP6ST2OW.js +352 -0
  86. package/dist/chunk-HW3OWDTU.js +1 -0
  87. package/dist/{chunk-QP3KMOVF.js → chunk-HZDB44K4.js} +24 -14
  88. package/dist/chunk-I6CUP2LW.js +1155 -0
  89. package/dist/chunk-ICV4Y2WY.js +27 -0
  90. package/dist/chunk-IHSIENOE.js +3950 -0
  91. package/dist/{chunk-T5LTPKX6.js → chunk-IMMALLRU.js} +53 -25
  92. package/dist/{chunk-C4GTDLRC.js → chunk-JA6TK7H2.js} +154 -67
  93. package/dist/{chunk-EVOIGUBI.js → chunk-JAVZ5JPV.js} +43 -13
  94. package/dist/{chunk-CPTOADB2.js → chunk-JCMTP3E4.js} +527 -201
  95. package/dist/{chunk-OJQUBQWA.js → chunk-JCXFFK64.js} +73 -16
  96. package/dist/{chunk-V2OEB75Z.js → chunk-JWCVBFDU.js} +75 -35
  97. package/dist/chunk-JXRTD5RI.js +414 -0
  98. package/dist/chunk-JYIUZUIQ.js +1567 -0
  99. package/dist/chunk-K3TK3GIV.js +219 -0
  100. package/dist/chunk-KEVZIHM2.js +1511 -0
  101. package/dist/{chunk-VAOAKWUK.js → chunk-KHZDNQQD.js} +42 -8
  102. package/dist/chunk-KL4GDV4V.js +131 -0
  103. package/dist/{chunk-Q6NKEPRE.js → chunk-KNILMM4H.js} +73 -28
  104. package/dist/chunk-KRBUZV45.js +25 -0
  105. package/dist/{chunk-7BUIKDD6.js → chunk-KXLDK6HB.js} +91 -30
  106. package/dist/chunk-KZ3X7TSL.js +196 -0
  107. package/dist/{chunk-5UTRIXQ6.js → chunk-L2WMOA2V.js} +187 -43
  108. package/dist/chunk-L4D5LHCH.js +109 -0
  109. package/dist/{chunk-W63AJTM7.js → chunk-LAUJPLDB.js} +236 -71
  110. package/dist/{chunk-TN2ZNJUI.js → chunk-LGNTP5XA.js} +47 -13
  111. package/dist/chunk-LUZFCCSD.js +271 -0
  112. package/dist/{chunk-XTORZWRF.js → chunk-LXJCP4PL.js} +111 -30
  113. package/dist/chunk-MCOZJWPU.js +731 -0
  114. package/dist/{chunk-SATMR6SG.js → chunk-MG4SKWLL.js} +780 -142
  115. package/dist/{chunk-JUYWSSKW.js → chunk-MPEPTSER.js} +95 -16
  116. package/dist/chunk-MWPJ4YGP.js +1 -0
  117. package/dist/{chunk-LUMVGO2K.js → chunk-N7AX4OA4.js} +80 -29
  118. package/dist/chunk-NHSLM6SE.js +523 -0
  119. package/dist/{chunk-IT6FUXXG.js → chunk-NNJLVA7M.js} +43 -11
  120. package/dist/{chunk-TQVAIKFD.js → chunk-NZG75DGA.js} +102 -62
  121. package/dist/chunk-O76QXRBV.js +431 -0
  122. package/dist/chunk-OANH27AK.js +223 -0
  123. package/dist/chunk-OCHPK5YV.js +609 -0
  124. package/dist/chunk-OMHVEVX4.js +436 -0
  125. package/dist/{chunk-SWS5JQIF.js → chunk-ONKQUJWD.js} +187 -60
  126. package/dist/chunk-OVTK7A6T.js +615 -0
  127. package/dist/{chunk-UXGIW7OK.js → chunk-PCEFCOLN.js} +5 -1
  128. package/dist/{chunk-QIKT7LIB.js → chunk-PFLNFIVB.js} +91 -23
  129. package/dist/chunk-PHSZY37H.js +300 -0
  130. package/dist/chunk-PJLTKDVY.js +18 -0
  131. package/dist/{chunk-SHHY5OMK.js → chunk-PK7BN3MI.js} +83 -15
  132. package/dist/{chunk-YXOAPXMU.js → chunk-PWFRDRGS.js} +101 -14
  133. package/dist/{chunk-TY4MTKQJ.js → chunk-PYPMD46W.js} +332 -66
  134. package/dist/chunk-Q6CCHDI7.js +331 -0
  135. package/dist/chunk-QFA5WS2A.js +750 -0
  136. package/dist/chunk-QJMMM4RC.js +124 -0
  137. package/dist/chunk-QYWEVAM6.js +407 -0
  138. package/dist/chunk-R5T4VZ7Z.js +126 -0
  139. package/dist/chunk-R77HFLZD.js +1 -0
  140. package/dist/{chunk-LMPHCVJJ.js → chunk-RAESDNU5.js} +162 -68
  141. package/dist/chunk-RBYQUXNL.js +1 -0
  142. package/dist/chunk-RCM3DT5E.js +1 -0
  143. package/dist/chunk-RGNY56L7.js +282 -0
  144. package/dist/chunk-RIK6UX2K.js +344 -0
  145. package/dist/{chunk-5LAAAXFP.js → chunk-RJA3RXO3.js} +63 -54
  146. package/dist/chunk-RJYRJ3LD.js +1 -0
  147. package/dist/chunk-RMA3NOY4.js +599 -0
  148. package/dist/{chunk-VDPK5CY4.js → chunk-RSWKKAHK.js} +143 -61
  149. package/dist/{chunk-B7N4ASYE.js → chunk-RVOIIX3V.js} +17 -45
  150. package/dist/chunk-SA2RRBGT.js +1077 -0
  151. package/dist/{chunk-7OVVSVEZ.js → chunk-SG3J4R45.js} +440 -169
  152. package/dist/chunk-SPUK7JD4.js +238 -0
  153. package/dist/chunk-SWXV2K5N.js +434 -0
  154. package/dist/chunk-SYJEPXP6.js +1303 -0
  155. package/dist/{chunk-LKFC4CS7.js → chunk-SZLI34TA.js} +18 -9
  156. package/dist/{chunk-NBEF4EPJ.js → chunk-T77WJA74.js} +131 -16
  157. package/dist/chunk-TDWWVJA4.js +630 -0
  158. package/dist/chunk-TFHI5XDR.js +610 -0
  159. package/dist/chunk-TH4PW2WU.js +17 -0
  160. package/dist/chunk-TTQ24HQX.js +12 -0
  161. package/dist/chunk-TUACVJNG.js +12 -0
  162. package/dist/{chunk-F5B3UINI.js → chunk-TUL5RUIA.js} +171 -62
  163. package/dist/{chunk-C6APNDVA.js → chunk-TYOSA7JG.js} +63 -34
  164. package/dist/chunk-TYQTMMEV.js +1 -0
  165. package/dist/{chunk-DW3L54DQ.js → chunk-TZO6YDS7.js} +53 -12
  166. package/dist/{chunk-67IZZ2MJ.js → chunk-U3ETF22F.js} +75 -30
  167. package/dist/{chunk-EDCBJV7J.js → chunk-U6BYHD2N.js} +87 -31
  168. package/dist/{chunk-ENP3BMZU.js → chunk-UF6EJXPQ.js} +16 -1
  169. package/dist/{chunk-IPUNJMAQ.js → chunk-UNNQIPGK.js} +304 -68
  170. package/dist/chunk-UQVO6AJV.js +171 -0
  171. package/dist/{chunk-FZGAAOKS.js → chunk-VFDQAAIW.js} +138 -32
  172. package/dist/chunk-VIUE3VQT.js +1 -0
  173. package/dist/{chunk-5RENVKBQ.js → chunk-VJLSSSGC.js} +126 -30
  174. package/dist/chunk-VLMT6KYT.js +350 -0
  175. package/dist/chunk-VMHGBUGS.js +35 -0
  176. package/dist/{chunk-4IZXHVFJ.js → chunk-VQKPBYW6.js} +228 -172
  177. package/dist/{chunk-G6UESEVN.js → chunk-VSSTWLC5.js} +49 -11
  178. package/dist/{chunk-TRGFFU6A.js → chunk-VZYYZRPN.js} +866 -330
  179. package/dist/{chunk-JLC6PM5S.js → chunk-WAIJCD2V.js} +128 -54
  180. package/dist/chunk-WFMQ3WKM.js +378 -0
  181. package/dist/chunk-WJ2KDRMY.js +66 -0
  182. package/dist/chunk-WKFZJO54.js +437 -0
  183. package/dist/{chunk-QEYFDRHR.js → chunk-WVVD3XOV.js} +146 -84
  184. package/dist/chunk-XAIWMSLB.js +1 -0
  185. package/dist/chunk-XBXUBBJZ.js +98 -0
  186. package/dist/chunk-XCU7MYBJ.js +1 -0
  187. package/dist/chunk-XHE4PGCI.js +717 -0
  188. package/dist/chunk-XRSJ32M3.js +331 -0
  189. package/dist/chunk-XTCVOEAW.js +1 -0
  190. package/dist/chunk-XWGXVQF6.js +58 -0
  191. package/dist/{chunk-MKSNFG7H.js → chunk-Y3XKKO5K.js} +191 -109
  192. package/dist/chunk-Y4QNMBLO.js +533 -0
  193. package/dist/chunk-Y5H4CTKO.js +1 -0
  194. package/dist/chunk-YBQIN75A.js +403 -0
  195. package/dist/{chunk-PNF3NKB5.js → chunk-YJ5PXOX3.js} +28 -11
  196. package/dist/{chunk-M656FYNH.js → chunk-YLRSRUPS.js} +63 -49
  197. package/dist/chunk-YM6MPJ4A.js +1 -0
  198. package/dist/chunk-YV7KZENV.js +200 -0
  199. package/dist/chunk-Z7I4ZSO6.js +316 -0
  200. package/dist/{chunk-EY4DD67D.js → chunk-ZIRMWD2B.js} +199 -126
  201. package/dist/chunk-ZPMG3FWU.js +75 -0
  202. package/dist/{chunk-QRUMA22E.js → chunk-ZTXMK2G7.js} +92 -43
  203. package/dist/{chunk-2OLKPG4E.js → chunk-ZVJCWXAL.js} +189 -87
  204. package/dist/{chunk-YAAHPATV.js → chunk-ZYQ23DPT.js} +49 -34
  205. package/dist/coachmark/index.js +7 -3
  206. package/dist/code-block/index.js +4 -3
  207. package/dist/color-field/index.js +12 -4
  208. package/dist/color-picker/index.js +23 -0
  209. package/dist/commerce/index.js +27 -16
  210. package/dist/confirm/index.js +31 -0
  211. package/dist/connection-card/index.js +34 -0
  212. package/dist/connectivity/index.js +3 -2
  213. package/dist/context-menu/index.js +10 -2
  214. package/dist/copy-button/index.js +3 -2
  215. package/dist/data-grid/index.js +30 -17
  216. package/dist/date-range-picker/index.js +19 -9
  217. package/dist/description-list/index.js +4 -1
  218. package/dist/device-frame/index.js +30 -0
  219. package/dist/dialog/index.js +8 -2
  220. package/dist/divider/index.js +2 -0
  221. package/dist/empty-state/index.js +13 -2
  222. package/dist/error-summary/index.js +7 -2
  223. package/dist/fab/index.js +4 -2
  224. package/dist/file-manager/index.js +33 -17
  225. package/dist/file-upload/index.js +12 -6
  226. package/dist/filter-bar/index.js +10 -6
  227. package/dist/flow-run/index.js +19 -12
  228. package/dist/form/index.js +30 -3
  229. package/dist/gallery/index.js +5 -2
  230. package/dist/hold-to-confirm/index.js +4 -2
  231. package/dist/hover-card/index.js +18 -0
  232. package/dist/icon-tile/index.js +10 -0
  233. package/dist/image/index.js +9 -0
  234. package/dist/index.d.ts +29826 -17941
  235. package/dist/index.js +197 -141
  236. package/dist/infinite-list/index.js +4 -2
  237. package/dist/inline-edit/index.js +5 -4
  238. package/dist/input/index.js +4 -3
  239. package/dist/interactions/index.js +4 -1
  240. package/dist/invoice/index.js +18 -9
  241. package/dist/job-row/index.js +22 -0
  242. package/dist/json-inspector/index.js +20 -0
  243. package/dist/kbd/index.js +2 -2
  244. package/dist/keyboard/index.js +7 -2
  245. package/dist/level-meter/index.js +9 -0
  246. package/dist/list-row/index.js +11 -3
  247. package/dist/log-viewer/index.js +9 -2
  248. package/dist/map-view/index.js +13 -2
  249. package/dist/markdown/index.js +8 -5
  250. package/dist/metric/index.js +6 -3
  251. package/dist/metric-strip/index.js +12 -0
  252. package/dist/money/index.js +11 -4
  253. package/dist/nav-drawer/index.js +6 -2
  254. package/dist/nav-header/index.js +10 -4
  255. package/dist/navigation/index.js +29 -2
  256. package/dist/notification-center/index.js +24 -10
  257. package/dist/number-roll/index.js +3 -1
  258. package/dist/onboarding-pager/index.js +22 -0
  259. package/dist/one-handed/index.js +2 -2
  260. package/dist/os-surfaces/index.js +6 -3
  261. package/dist/otp/index.js +5 -4
  262. package/dist/page-header/index.js +2 -1
  263. package/dist/pagination/index.js +4 -2
  264. package/dist/payment-method/index.js +17 -11
  265. package/dist/payment-status/index.js +22 -14
  266. package/dist/permission/index.js +18 -2
  267. package/dist/picker/index.js +17 -6
  268. package/dist/progress/index.js +7 -2
  269. package/dist/provenance/index.js +16 -0
  270. package/dist/pull-to-refresh/index.js +2 -2
  271. package/dist/qr-code/index.js +16 -0
  272. package/dist/query-builder/index.js +30 -0
  273. package/dist/radio-group/index.js +6 -4
  274. package/dist/rating/index.js +7 -2
  275. package/dist/receivables/index.js +31 -18
  276. package/dist/recording-indicator/index.js +21 -0
  277. package/dist/refund/index.js +24 -15
  278. package/dist/repeatable-rows/index.js +19 -0
  279. package/dist/save-status/index.js +5 -3
  280. package/dist/screen/index.js +3 -0
  281. package/dist/scroll-area/index.js +1 -1
  282. package/dist/search-field/index.js +8 -3
  283. package/dist/secret-field/index.js +19 -0
  284. package/dist/section-header/index.js +4 -0
  285. package/dist/segmented-control/index.js +2 -2
  286. package/dist/sheet/index.js +9 -3
  287. package/dist/shortcuts-sheet/index.js +2 -0
  288. package/dist/sign-in-screen/index.js +25 -0
  289. package/dist/skeleton/index.js +3 -1
  290. package/dist/slider/index.js +2 -1
  291. package/dist/sortable/index.js +4 -3
  292. package/dist/spinner/index.js +2 -1
  293. package/dist/split-button/index.js +17 -5
  294. package/dist/spotlight/index.js +7 -1
  295. package/dist/stack/index.js +2 -0
  296. package/dist/stage-timeline/index.js +6 -3
  297. package/dist/status-dot/index.js +6 -2
  298. package/dist/stepper/index.js +7 -3
  299. package/dist/streaming-text/index.js +2 -1
  300. package/dist/survey/index.js +24 -14
  301. package/dist/switch/index.js +6 -2
  302. package/dist/system-state/index.js +12 -4
  303. package/dist/tab-bar/index.js +10 -2
  304. package/dist/tabs/index.js +10 -2
  305. package/dist/tags-input/index.js +8 -5
  306. package/dist/text/index.js +4 -0
  307. package/dist/textarea/index.js +5 -4
  308. package/dist/thinking/index.js +4 -1
  309. package/dist/tile-rail/index.js +10 -0
  310. package/dist/time-field/index.js +15 -7
  311. package/dist/time-range-control/index.js +26 -12
  312. package/dist/timeline/index.js +2 -2
  313. package/dist/toast/index.js +4 -2
  314. package/dist/toolbar/index.js +3 -2
  315. package/dist/tour/index.js +12 -10
  316. package/dist/transcript/index.js +28 -0
  317. package/dist/truncation-notice/index.js +2 -2
  318. package/dist/update-notice/index.js +15 -8
  319. package/dist/video-player/index.js +26 -2
  320. package/dist/viewfinder/index.js +12 -4
  321. package/dist/widget/index.js +11 -4
  322. package/dist/wizard/index.js +7 -4
  323. package/package.json +13 -13
  324. package/dist/chunk-2PKYGLQ6.js +0 -268
  325. package/dist/chunk-2SWKL3AJ.js +0 -466
  326. package/dist/chunk-2TXERVVA.js +0 -1081
  327. package/dist/chunk-3DUWIYV5.js +0 -437
  328. package/dist/chunk-3NMD74ZU.js +0 -4
  329. package/dist/chunk-4DS5ZWVC.js +0 -83
  330. package/dist/chunk-6YAQBXB3.js +0 -93
  331. package/dist/chunk-74FLKD24.js +0 -237
  332. package/dist/chunk-CMTVNF3D.js +0 -104
  333. package/dist/chunk-DN7MNQIP.js +0 -799
  334. package/dist/chunk-DVGBZ3TX.js +0 -455
  335. package/dist/chunk-F3H33DQX.js +0 -300
  336. package/dist/chunk-FAJI7BSC.js +0 -443
  337. package/dist/chunk-G3AFC24V.js +0 -60
  338. package/dist/chunk-HJLPZA4X.js +0 -369
  339. package/dist/chunk-HYEOQWT7.js +0 -647
  340. package/dist/chunk-IDM7JJMO.js +0 -110
  341. package/dist/chunk-IVKMZ7BB.js +0 -326
  342. package/dist/chunk-IXKWIFWZ.js +0 -334
  343. package/dist/chunk-JV5YOTOB.js +0 -164
  344. package/dist/chunk-KFJGFLMW.js +0 -158
  345. package/dist/chunk-LQP4KEXZ.js +0 -214
  346. package/dist/chunk-NTQ2F3AU.js +0 -257
  347. package/dist/chunk-O5V4TG3V.js +0 -329
  348. package/dist/chunk-OWAMM2DK.js +0 -280
  349. package/dist/chunk-PID3NJB7.js +0 -405
  350. package/dist/chunk-QDZGFXQD.js +0 -176
  351. package/dist/chunk-QPWDDJJ4.js +0 -385
  352. package/dist/chunk-ROCUG24E.js +0 -416
  353. package/dist/chunk-RU3ZPNL6.js +0 -1986
  354. package/dist/chunk-RXSCIO6W.js +0 -153
  355. package/dist/chunk-SKWO3SZF.js +0 -2284
  356. package/dist/chunk-UQGBTPXH.js +0 -218
  357. package/dist/chunk-UYGDJWMN.js +0 -273
  358. package/dist/chunk-W74TXYFB.js +0 -107
  359. package/dist/chunk-WRDSPUE7.js +0 -417
  360. package/dist/chunk-XBZGDDMR.js +0 -105
  361. package/dist/chunk-XN4KG3P4.js +0 -1040
  362. package/dist/chunk-XQXMLMH3.js +0 -211
  363. package/dist/chunk-ZECZOOSB.js +0 -245
  364. /package/dist/{chunk-VFCUIDRT.js → chunk-3BKLBYPK.js} +0 -0
  365. /package/dist/{chunk-GEIGMWNF.js → chunk-QNZII37O.js} +0 -0
@@ -1,8 +1,11 @@
1
+ import { resolveTextRole } from './chunk-L4D5LHCH.js';
2
+ import { isAndroidIdiom } from './chunk-TH4PW2WU.js';
1
3
  import { useLabels } from './chunk-APCWFOZW.js';
4
+ import { Icon } from './chunk-PCEFCOLN.js';
2
5
  import * as React from 'react';
3
- import { View, Text } from 'react-native';
6
+ import { View, Text, Pressable } from 'react-native';
4
7
  import { createStyleSheet, useStyles, useLoamTheme } from '@btndprojects/loam-theme-native';
5
- import { jsx, jsxs } from 'react/jsx-runtime';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
9
 
7
10
  var DEFAULT_LABELS = {
8
11
  pair: (term, description) => `${term}, ${description}`
@@ -19,18 +22,28 @@ function DescriptionList({
19
22
  // Accepted for API consistency; static data drives no motion.
20
23
  motion: _motion,
21
24
  children,
22
- labels
25
+ labels,
26
+ platform,
27
+ align
23
28
  }) {
24
29
  const { styles } = useStyles(sheet);
25
30
  const ctx = React.useMemo(
26
- () => ({ layout, density, labels }),
27
- [layout, density, labels]
31
+ () => ({ layout, density, labels, platform, align }),
32
+ [layout, density, labels, platform, align]
28
33
  );
29
34
  const rows = [
30
- ...items?.map((entry, i) => /* @__PURE__ */ jsx(DescriptionItem, { term: entry.term, description: entry.description }, `item-${i}`)) ?? [],
35
+ ...items?.map((entry, i) => /* @__PURE__ */ jsx(
36
+ DescriptionItem,
37
+ {
38
+ term: entry.term,
39
+ description: entry.description,
40
+ onPress: entry.onPress
41
+ },
42
+ `item-${i}`
43
+ )) ?? [],
31
44
  ...React.Children.toArray(children)
32
45
  ];
33
- const content = dividers ? rows.flatMap(
46
+ const content = dividers || layout === "inline" ? rows.flatMap(
34
47
  (row, i) => i === 0 ? [row] : [/* @__PURE__ */ jsx(View, { style: styles.divider }, `divider-${i}`), row]
35
48
  ) : rows;
36
49
  return /* @__PURE__ */ jsx(DescriptionListContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx(View, { style: styles.root, children: content }) });
@@ -38,33 +51,88 @@ function DescriptionList({
38
51
  function DescriptionItem({
39
52
  term,
40
53
  description,
54
+ onPress,
41
55
  labels: labelsProp
42
56
  }) {
43
- const { layout, density, labels: ctxLabels } = React.useContext(DescriptionListContext);
57
+ const {
58
+ layout,
59
+ density,
60
+ labels: ctxLabels,
61
+ platform,
62
+ align
63
+ } = React.useContext(DescriptionListContext);
44
64
  const labels = useLabels("descriptionList", DEFAULT_LABELS, labelsProp ?? ctxLabels);
45
65
  const { styles } = useStyles(sheet, { layout, density });
46
66
  const theme = useLoamTheme("description-list");
47
67
  const isInline = layout === "inline";
68
+ const android = isAndroidIdiom(theme, platform);
69
+ const body = resolveTextRole(theme, "body", android);
70
+ const textAlign = align ? align === "center" ? "center" : align === "start" === !theme.rtl ? "left" : "right" : void 0;
71
+ const row = isInline ? { minHeight: theme.space[android ? 56 : 44], alignItems: "center" } : null;
48
72
  const pairLabel = typeof term === "string" && typeof description === "string" ? labels.pair(term, description) : void 0;
49
- return /* @__PURE__ */ jsxs(
73
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
74
+ /* @__PURE__ */ jsx(
75
+ Text,
76
+ {
77
+ style: [
78
+ styles.term,
79
+ isInline && termInlineStyle,
80
+ isInline && { ...body, color: theme.color.text },
81
+ textAlign ? { textAlign } : null
82
+ ],
83
+ children: term
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsx(
87
+ Text,
88
+ {
89
+ style: [
90
+ styles.value,
91
+ isInline && {
92
+ ...body,
93
+ color: theme.color.text2,
94
+ flexShrink: 1,
95
+ textAlign: theme.rtl ? "left" : "right"
96
+ },
97
+ textAlign ? { textAlign } : null,
98
+ onPress && isInline ? { marginStart: "auto" } : null
99
+ ],
100
+ children: description
101
+ }
102
+ ),
103
+ onPress ? /* @__PURE__ */ jsx(
104
+ Icon,
105
+ {
106
+ name: theme.rtl ? "chevron-left" : "chevron-right",
107
+ size: theme.icon.sm,
108
+ color: theme.color.text3
109
+ }
110
+ ) : null
111
+ ] });
112
+ if (onPress) {
113
+ return /* @__PURE__ */ jsx(
114
+ Pressable,
115
+ {
116
+ accessibilityRole: "button",
117
+ accessibilityLabel: pairLabel,
118
+ onPress,
119
+ style: ({ pressed }) => [
120
+ styles.container,
121
+ row,
122
+ { alignItems: "center" },
123
+ pressed ? { backgroundColor: theme.state.hover } : null
124
+ ],
125
+ children: content
126
+ }
127
+ );
128
+ }
129
+ return /* @__PURE__ */ jsx(
50
130
  View,
51
131
  {
52
- style: styles.container,
132
+ style: [styles.container, row],
53
133
  accessible: pairLabel !== void 0,
54
134
  accessibilityLabel: pairLabel,
55
- children: [
56
- /* @__PURE__ */ jsx(Text, { style: [styles.term, isInline && termInlineStyle], children: term }),
57
- /* @__PURE__ */ jsx(
58
- Text,
59
- {
60
- style: [
61
- styles.value,
62
- isInline && { flexShrink: 1, textAlign: theme.rtl ? "left" : "right" }
63
- ],
64
- children: description
65
- }
66
- )
67
- ]
135
+ children: content
68
136
  }
69
137
  );
70
138
  }
@@ -0,0 +1,300 @@
1
+ import { Badge } from './chunk-LGNTP5XA.js';
2
+ import { isAndroidIdiom } from './chunk-TH4PW2WU.js';
3
+ import { useLabels } from './chunk-APCWFOZW.js';
4
+ import { useFocusRing } from './chunk-2YKVID2V.js';
5
+ import { Icon } from './chunk-PCEFCOLN.js';
6
+ import { springConfig } from './chunk-J64KGCGX.js';
7
+ import * as React from 'react';
8
+ import { View, Animated, Pressable, Text } from 'react-native';
9
+ import { createStyleSheet, useLoamTheme, useStyles } from '@btndprojects/loam-theme-native';
10
+ import { jsx, jsxs } from 'react/jsx-runtime';
11
+
12
+ var DEFAULT_LABELS = {
13
+ tabWithBadge: (label, badge) => `${label}, ${badge}`
14
+ };
15
+ var CAPSULE_W = 56;
16
+ var CAPSULE_H = 32;
17
+ var GLYPH_SIZE = 22;
18
+ var BAR_H = { ios: 49, android: 80 };
19
+ var BADGE_MAX = 99;
20
+ function translucent(color) {
21
+ return /^#[0-9a-f]{6}$/i.test(color) ? `${color}eb` : color;
22
+ }
23
+ function Tab({
24
+ item,
25
+ selected,
26
+ onPress,
27
+ motion,
28
+ bounce,
29
+ labels,
30
+ android,
31
+ showIndicator,
32
+ compact,
33
+ badgeSolid
34
+ }) {
35
+ const theme = useLoamTheme("tab-bar");
36
+ const { styles } = useStyles(sheet);
37
+ const glyph = selected ? theme.color.accentStrong : theme.color.text2;
38
+ const ink = selected ? theme.color.text : theme.color.text2;
39
+ const scale = React.useRef(new Animated.Value(1)).current;
40
+ const spring = (to) => {
41
+ if (motion === "none" || android) return;
42
+ Animated.spring(scale, {
43
+ ...springConfig(theme, "fs"),
44
+ toValue: to,
45
+ useNativeDriver: true
46
+ }).start();
47
+ };
48
+ const badgeScale = React.useRef(new Animated.Value(1)).current;
49
+ const lastBadge = React.useRef(item.badge ?? 0);
50
+ React.useEffect(() => {
51
+ const now = item.badge ?? 0;
52
+ const rose = now > lastBadge.current;
53
+ lastBadge.current = now;
54
+ if (!rose || !bounce) return;
55
+ badgeScale.setValue(1.3);
56
+ Animated.spring(badgeScale, {
57
+ toValue: 1,
58
+ useNativeDriver: true,
59
+ speed: 20,
60
+ bounciness: 12
61
+ }).start();
62
+ }, [item.badge, bounce, badgeScale]);
63
+ const showBadge = item.badge !== void 0 && item.badge > 0;
64
+ const badgeText = item.badge !== void 0 && item.badge > BADGE_MAX ? `${BADGE_MAX}+` : `${item.badge}`;
65
+ const disabled = item.disabled === true;
66
+ const focusRing = useFocusRing(theme.radius.md);
67
+ return /* @__PURE__ */ jsx(
68
+ Pressable,
69
+ {
70
+ accessibilityRole: "tab",
71
+ accessibilityLabel: showBadge ? labels.tabWithBadge(item.label, badgeText) : item.label,
72
+ accessibilityState: { selected, disabled },
73
+ disabled,
74
+ onPress,
75
+ onPressIn: () => spring(0.9),
76
+ onPressOut: () => spring(1),
77
+ onFocus: focusRing.handlers.onFocus,
78
+ onBlur: focusRing.handlers.onBlur,
79
+ style: [styles.tab, disabled && { opacity: theme.state.disabledOpacity }, focusRing.style],
80
+ children: ({ pressed }) => /* @__PURE__ */ jsxs(
81
+ Animated.View,
82
+ {
83
+ style: [styles.tabInner, compact ? { gap: 0 } : null, { transform: [{ scale }] }],
84
+ children: [
85
+ /* @__PURE__ */ jsxs(
86
+ View,
87
+ {
88
+ testID: "tab-capsule",
89
+ style: [
90
+ styles.capsule,
91
+ selected && showIndicator && { backgroundColor: theme.state.selected },
92
+ // iOS highlights the capsule; Android ripples inside it.
93
+ pressed && !android && { backgroundColor: theme.state.pressed }
94
+ ],
95
+ children: [
96
+ android ? /* @__PURE__ */ jsx(
97
+ Pressable,
98
+ {
99
+ accessible: false,
100
+ importantForAccessibility: "no",
101
+ disabled,
102
+ onPress,
103
+ android_ripple: { color: theme.state.pressed, borderless: false },
104
+ style: [
105
+ StyleSheetAbsolute,
106
+ { borderRadius: theme.radius.full, overflow: "hidden" }
107
+ ]
108
+ }
109
+ ) : null,
110
+ /* @__PURE__ */ jsx(Icon, { name: item.icon, size: GLYPH_SIZE, color: glyph }),
111
+ showBadge ? /* @__PURE__ */ jsx(Animated.View, { style: [styles.badge, { transform: [{ scale: badgeScale }] }], children: /* @__PURE__ */ jsx(Badge, { size: "sm", variant: "danger", solid: badgeSolid, count: item.badge, max: BADGE_MAX }) }) : null
112
+ ]
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsx(
116
+ Text,
117
+ {
118
+ style: [styles.label, android ? styles.labelAndroid : styles.labelIos, { color: ink }],
119
+ numberOfLines: 1,
120
+ children: item.label
121
+ }
122
+ )
123
+ ]
124
+ }
125
+ )
126
+ }
127
+ );
128
+ }
129
+ var StyleSheetAbsolute = {
130
+ position: "absolute",
131
+ top: 0,
132
+ right: 0,
133
+ bottom: 0,
134
+ left: 0
135
+ };
136
+ function CenterAction({
137
+ action,
138
+ android
139
+ }) {
140
+ const theme = useLoamTheme("tab-bar");
141
+ const { styles } = useStyles(sheet);
142
+ const disabled = action.disabled === true;
143
+ const focusRing = useFocusRing(theme.radius.md);
144
+ return /* @__PURE__ */ jsx(View, { style: styles.tab, children: /* @__PURE__ */ jsx(
145
+ Pressable,
146
+ {
147
+ accessibilityRole: "button",
148
+ accessibilityLabel: action.accessibilityLabel,
149
+ accessibilityHint: disabled ? action.disabledReason : void 0,
150
+ accessibilityState: { disabled },
151
+ onPress: disabled ? action.onDisabledPress : action.onPress,
152
+ android_ripple: android ? { color: theme.state.pressed, borderless: false } : void 0,
153
+ onFocus: focusRing.handlers.onFocus,
154
+ onBlur: focusRing.handlers.onBlur,
155
+ style: ({ pressed }) => [
156
+ styles.center,
157
+ focusRing.style,
158
+ android ? { width: CAPSULE_W, height: theme.space[40] } : { width: theme.ctl.lg, height: theme.ctl.lg },
159
+ {
160
+ backgroundColor: pressed && !android && !disabled ? theme.color.accentFillPress : theme.color.accent
161
+ },
162
+ disabled && { opacity: theme.state.disabledOpacity }
163
+ ],
164
+ children: /* @__PURE__ */ jsx(Icon, { name: action.icon, size: GLYPH_SIZE, color: theme.color.accentInk })
165
+ }
166
+ ) });
167
+ }
168
+ function TabBar({
169
+ items,
170
+ value,
171
+ onValueChange,
172
+ onReselect,
173
+ centerAction,
174
+ bottomInset = 0,
175
+ showIndicator = true,
176
+ motion = "full",
177
+ size = "md",
178
+ density = "comfortable",
179
+ variant = "default",
180
+ orientation = "horizontal",
181
+ disabled = false,
182
+ accessibilityLabel,
183
+ labels: labelsProp,
184
+ platform,
185
+ badgeSolid = false
186
+ }) {
187
+ const theme = useLoamTheme("tab-bar");
188
+ const labels = useLabels("tabBar", DEFAULT_LABELS, labelsProp);
189
+ const { styles } = useStyles(sheet);
190
+ const android = isAndroidIdiom(theme, platform);
191
+ const select = (next) => {
192
+ if (next === value && onReselect) onReselect(next);
193
+ else onValueChange?.(next);
194
+ };
195
+ const cells = items.map((item) => /* @__PURE__ */ jsx(
196
+ Tab,
197
+ {
198
+ item,
199
+ selected: item.value === value,
200
+ onPress: () => select(item.value),
201
+ motion,
202
+ bounce: motion !== "none" && !theme.reduceMotion,
203
+ labels,
204
+ android,
205
+ showIndicator,
206
+ compact: density === "compact",
207
+ badgeSolid
208
+ },
209
+ item.value
210
+ ));
211
+ if (centerAction) {
212
+ cells.splice(
213
+ Math.ceil(items.length / 2),
214
+ 0,
215
+ /* @__PURE__ */ jsx(CenterAction, { action: centerAction, android }, "__center")
216
+ );
217
+ }
218
+ return /* @__PURE__ */ jsx(
219
+ View,
220
+ {
221
+ accessibilityRole: "tablist",
222
+ accessibilityLabel,
223
+ "aria-disabled": disabled || void 0,
224
+ pointerEvents: disabled ? "none" : void 0,
225
+ style: [
226
+ styles.bar,
227
+ orientation === "vertical" ? { flexDirection: "column" } : null,
228
+ variant === "floating" ? {
229
+ margin: theme.space.s3,
230
+ borderRadius: theme.radius.full,
231
+ overflow: "hidden",
232
+ ...theme.shadow.md
233
+ } : null,
234
+ disabled ? { opacity: theme.state.disabledOpacity } : null,
235
+ android ? { backgroundColor: theme.color.surface2 } : {
236
+ backgroundColor: translucent(theme.color.surface),
237
+ borderTopWidth: theme.borderWidth.hair,
238
+ borderTopColor: theme.color.border
239
+ },
240
+ {
241
+ // The theme's `layout.tabbarH` when its platform matches; otherwise the OS height.
242
+ minHeight: orientation === "vertical" ? void 0 : size === "sm" ? theme.hit.lg : (android === (theme.platform === "Android") ? theme.layout.tabbarH : BAR_H[android ? "android" : "ios"]) + (size === "lg" ? theme.space.s2 : 0),
243
+ paddingBottom: bottomInset
244
+ },
245
+ variant === "flat" ? { backgroundColor: theme.color.surface, borderTopWidth: 0 } : null,
246
+ orientation === "vertical" ? { borderTopWidth: 0, borderEndWidth: theme.borderWidth.hair, borderEndColor: theme.color.border } : null
247
+ ],
248
+ children: cells
249
+ }
250
+ );
251
+ }
252
+ var sheet = createStyleSheet((theme) => ({
253
+ bar: {
254
+ flexDirection: "row",
255
+ alignItems: "stretch"
256
+ },
257
+ tab: {
258
+ flex: 1,
259
+ alignItems: "center",
260
+ justifyContent: "center"
261
+ },
262
+ tabInner: {
263
+ alignItems: "center",
264
+ gap: theme.space[2]
265
+ },
266
+ capsule: {
267
+ width: CAPSULE_W,
268
+ height: CAPSULE_H,
269
+ borderRadius: theme.radius.full,
270
+ alignItems: "center",
271
+ justifyContent: "center",
272
+ overflow: "visible",
273
+ position: "relative"
274
+ },
275
+ center: {
276
+ borderRadius: theme.space[12],
277
+ alignItems: "center",
278
+ justifyContent: "center",
279
+ overflow: "hidden"
280
+ },
281
+ badge: {
282
+ position: "absolute",
283
+ top: 0,
284
+ left: CAPSULE_W / 2 + theme.space[4]
285
+ },
286
+ label: {
287
+ fontFamily: theme.font.sans,
288
+ fontWeight: theme.fontWeight.medium
289
+ },
290
+ labelIos: {
291
+ fontSize: theme.fontSize[10],
292
+ lineHeight: theme.space[12]
293
+ },
294
+ labelAndroid: {
295
+ fontSize: theme.fontSize[12],
296
+ lineHeight: theme.space[16]
297
+ }
298
+ }));
299
+
300
+ export { TabBar };
@@ -0,0 +1,18 @@
1
+ // src/lib/tone-skin.ts
2
+ function softToneSkin(theme, tone) {
3
+ const c = theme.color;
4
+ switch (tone) {
5
+ case "accent":
6
+ return { fill: c.accentSoft, edge: c.accent, ink: c.accentOnSoft };
7
+ case "good":
8
+ return { fill: c.goodSoft, edge: c.good, ink: c.goodOnSoft };
9
+ case "warn":
10
+ return { fill: c.warnSoft, edge: c.warn, ink: c.warnOnSoft };
11
+ case "danger":
12
+ return { fill: c.dangerSoft, edge: c.danger, ink: c.dangerOnSoft };
13
+ case "info":
14
+ return { fill: c.infoSoft, edge: c.info, ink: c.infoOnSoft };
15
+ }
16
+ }
17
+
18
+ export { softToneSkin };
@@ -1,7 +1,10 @@
1
- import { useColorTransition } from './chunk-7BUIKDD6.js';
1
+ import { FieldMessage } from './chunk-BTRMA7GC.js';
2
+ import { useColorTransition } from './chunk-KXLDK6HB.js';
3
+ import { useFocusRing } from './chunk-2YKVID2V.js';
4
+ import { Icon } from './chunk-PCEFCOLN.js';
2
5
  import { useResolvedMotion } from './chunk-J64KGCGX.js';
3
6
  import * as React from 'react';
4
- import { View, Text, Easing, Animated, Pressable } from 'react-native';
7
+ import { Platform, View, Text, Easing, Animated, Pressable } from 'react-native';
5
8
  import { createStyleSheet, useStyles, useLoamTheme } from '@btndprojects/loam-theme-native';
6
9
  import { jsx, jsxs } from 'react/jsx-runtime';
7
10
 
@@ -19,9 +22,13 @@ function RadioGroup({
19
22
  onValueChange,
20
23
  size = "md",
21
24
  motion = "full",
25
+ platform,
22
26
  disabled = false,
23
27
  label,
24
28
  accessibilityLabel,
29
+ error = false,
30
+ hint,
31
+ tone = "accent",
25
32
  children
26
33
  }) {
27
34
  const isControlled = value !== void 0;
@@ -29,7 +36,10 @@ function RadioGroup({
29
36
  const selected = isControlled ? value : internal;
30
37
  const { styles } = useStyles(sheet, { size, disabled });
31
38
  const theme = useLoamTheme("radio-group");
39
+ const os = platform ?? (Platform.OS === "ios" ? "ios" : Platform.OS === "android" ? "android" : theme.platform === "iOS" ? "ios" : "android");
32
40
  const labelId = React.useId();
41
+ const invalid = Boolean(error);
42
+ const message = typeof error === "string" && error ? error : hint;
33
43
  const itemsRef = React.useRef([]);
34
44
  const [, bump] = React.useReducer((c) => c + 1, 0);
35
45
  const register = React.useCallback((entry) => {
@@ -83,12 +93,27 @@ function RadioGroup({
83
93
  select,
84
94
  size,
85
95
  motion,
96
+ os,
86
97
  disabled,
98
+ invalid,
99
+ tone,
87
100
  activeValue,
88
101
  register,
89
102
  onItemKeyDown
90
103
  }),
91
- [selected, select, size, motion, disabled, activeValue, register, onItemKeyDown]
104
+ [
105
+ selected,
106
+ select,
107
+ size,
108
+ motion,
109
+ os,
110
+ disabled,
111
+ invalid,
112
+ tone,
113
+ activeValue,
114
+ register,
115
+ onItemKeyDown
116
+ ]
92
117
  );
93
118
  return /* @__PURE__ */ jsx(RadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
94
119
  label ? /* @__PURE__ */ jsx(Text, { nativeID: labelId, style: styles.groupLabel, children: label }) : null,
@@ -98,10 +123,12 @@ function RadioGroup({
98
123
  accessibilityRole: "radiogroup",
99
124
  accessibilityLabel: label ? void 0 : accessibilityLabel,
100
125
  ...label ? { "aria-labelledby": labelId } : null,
126
+ "aria-invalid": invalid || void 0,
101
127
  style: styles.group,
102
128
  children
103
129
  }
104
- )
130
+ ),
131
+ message ? /* @__PURE__ */ jsx(FieldMessage, { invalid: invalid && typeof error === "string", children: message }) : null
105
132
  ] }) });
106
133
  }
107
134
  function RadioGroupItem({
@@ -114,7 +141,14 @@ function RadioGroupItem({
114
141
  const theme = useLoamTheme("radio-group");
115
142
  const selected = ctx.value === value;
116
143
  const isDisabled = ctx.disabled || disabled;
117
- const { styles } = useStyles(sheet, { size: ctx.size, disabled: isDisabled });
144
+ const { styles } = useStyles(sheet, {
145
+ size: ctx.size,
146
+ disabled: isDisabled,
147
+ os: ctx.os,
148
+ selected
149
+ });
150
+ const ios = ctx.os === "ios";
151
+ const focusRing = useFocusRing(theme.radius.sm);
118
152
  const nodeRef = React.useRef(null);
119
153
  const entryRef = React.useRef({ value, disabled: isDisabled, focus: () => {
120
154
  } });
@@ -128,7 +162,7 @@ function RadioGroupItem({
128
162
  const animateDot = resolvedMotion === "full";
129
163
  const easing = React.useMemo(() => Easing.bezier(...theme.easing.base), [theme.easing.base]);
130
164
  const borderColor = useColorTransition(
131
- selected ? theme.color.accent : theme.color.borderStrong,
165
+ selected ? theme.color[ctx.tone] : ctx.invalid ? theme.color.danger : theme.color.text3,
132
166
  theme.duration.fast,
133
167
  easing,
134
168
  animateEdge
@@ -164,10 +198,32 @@ function RadioGroupItem({
164
198
  "aria-checked": selected,
165
199
  disabled: isDisabled,
166
200
  onPress: isDisabled ? void 0 : () => ctx.select(value),
167
- style: styles.item,
201
+ style: [styles.item, focusRing.style],
202
+ onFocus: focusRing.handlers.onFocus,
203
+ onBlur: focusRing.handlers.onBlur,
168
204
  ...webProps,
169
205
  children: [
170
- /* @__PURE__ */ jsx(Animated.View, { testID: "radio-indicator", style: [styles.indicator, { borderColor }], children: /* @__PURE__ */ jsx(Animated.View, { style: [styles.dot, { transform: [{ scale: dotScale }] }] }) }),
206
+ ios ? (
207
+ // The check column is always reserved so labels never shift.
208
+ /* @__PURE__ */ jsx(View, { testID: "radio-check", style: styles.checkColumn, children: selected ? /* @__PURE__ */ jsx(View, { testID: "radio-check-mark", children: /* @__PURE__ */ jsx(
209
+ Icon,
210
+ {
211
+ name: "check",
212
+ size: theme.icon.sm,
213
+ color: ctx.tone === "accent" ? theme.color.accentStrong : theme.color[ctx.tone],
214
+ strokeWidth: theme.icon.strokeBold
215
+ }
216
+ ) }) : null })
217
+ ) : /* @__PURE__ */ jsx(Animated.View, { testID: "radio-indicator", style: [styles.indicator, { borderColor }], children: /* @__PURE__ */ jsx(
218
+ Animated.View,
219
+ {
220
+ style: [
221
+ styles.dot,
222
+ ctx.tone === "accent" ? null : { backgroundColor: theme.color[ctx.tone] },
223
+ { transform: [{ scale: dotScale }] }
224
+ ]
225
+ }
226
+ ) }),
171
227
  label ? /* @__PURE__ */ jsx(Text, { style: styles.label, children: label }) : null
172
228
  ]
173
229
  }
@@ -177,22 +233,34 @@ var sheet = createStyleSheet((theme) => ({
177
233
  // Stacks the optional group label above the radios.
178
234
  root: { gap: theme.space.s2 },
179
235
  group: { gap: theme.space.s3 },
236
+ // Group label 13 / 600 text (R11), on the OS label role.
180
237
  groupLabel: {
238
+ ...theme.ctl.label.sm,
181
239
  fontFamily: theme.font.sans,
182
- fontWeight: theme.fontWeight.semibold,
183
- fontSize: theme.fontSize[14],
184
- color: theme.color.text2
240
+ color: theme.color.text
185
241
  },
186
242
  item: {
187
243
  flexDirection: "row",
188
244
  alignItems: "center",
189
- gap: theme.space.s3,
245
+ // Label 10 from the mark (R10).
246
+ gap: theme.space[10],
247
+ paddingHorizontal: theme.space[12],
248
+ borderRadius: theme.ctl.r.md,
190
249
  // The row is the hit area: never shorter than the minimum tap target.
191
250
  minHeight: theme.tapMin,
192
251
  variants: {
252
+ // iOS check rows sit on the tap minimum; Android radio rows are 56 (F7).
253
+ os: { ios: {}, android: { minHeight: theme.space[56] } },
254
+ selected: { true: { backgroundColor: theme.state.selected }, false: {} },
193
255
  disabled: { true: { opacity: theme.state.disabledOpacity }, false: {} }
194
256
  }
195
257
  },
258
+ checkColumn: {
259
+ width: theme.space[24],
260
+ alignItems: "center",
261
+ justifyContent: "center",
262
+ variants: { size: { sm: {}, md: {} }, disabled: { true: {}, false: {} } }
263
+ },
196
264
  // `borderColor` is supplied at the use site as an animated value so the edge
197
265
  // can travel over `duration.fast`. The fill stays transparent — the reference
198
266
  // gives the indicator a border and nothing else.
@@ -204,10 +272,10 @@ var sheet = createStyleSheet((theme) => ({
204
272
  backgroundColor: "transparent",
205
273
  borderRadius: theme.radius.full,
206
274
  variants: {
207
- // The dot is always half the indicator (reference: 11px inside 22px).
275
+ // The dot is always half the indicator (10px inside 20px).
208
276
  size: {
209
277
  sm: { width: theme.space[16], height: theme.space[16] },
210
- md: { width: theme.space[22], height: theme.space[22] }
278
+ md: { width: theme.space[20], height: theme.space[20] }
211
279
  },
212
280
  disabled: { true: {}, false: {} }
213
281
  }
@@ -218,7 +286,7 @@ var sheet = createStyleSheet((theme) => ({
218
286
  variants: {
219
287
  size: {
220
288
  sm: { width: theme.space[8], height: theme.space[8] },
221
- md: { width: theme.space[11], height: theme.space[11] }
289
+ md: { width: theme.space[10], height: theme.space[10] }
222
290
  },
223
291
  disabled: { true: {}, false: {} }
224
292
  }