@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,10 @@
1
+ import { useOptionalConfirm } from './chunk-7QOYGENL.js';
2
+ import { alignItemsStyle } from './chunk-TUACVJNG.js';
1
3
  import { useLabels } from './chunk-APCWFOZW.js';
2
- import { Icon } from './chunk-UXGIW7OK.js';
4
+ import { Icon } from './chunk-PCEFCOLN.js';
3
5
  import { springConfig } from './chunk-J64KGCGX.js';
4
6
  import * as React from 'react';
5
- import { StyleSheet, Pressable, Text, useWindowDimensions, Animated, Easing, AccessibilityInfo, Platform, findNodeHandle, BackHandler, PanResponder, View } from 'react-native';
7
+ import { StyleSheet, Pressable, ActivityIndicator, Text, useWindowDimensions, Animated, Easing, AccessibilityInfo, Platform, findNodeHandle, BackHandler, PanResponder, View, Alert } from 'react-native';
6
8
  import { createStyleSheet, useLoamTheme, useStyles } from '@btndprojects/loam-theme-native';
7
9
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
10
 
@@ -11,7 +13,11 @@ var DEFAULT_NAVIGATION_LABELS = {
11
13
  back: "Back",
12
14
  backTo: (title) => `Back to ${title}`,
13
15
  cancel: "Cancel",
14
- dismiss: "Dismiss"
16
+ dismiss: "Dismiss",
17
+ discardTitle: "Discard changes?",
18
+ discardBody: "Your changes won\u2019t be saved.",
19
+ discard: "Discard",
20
+ keepEditing: "Keep editing"
15
21
  };
16
22
 
17
23
  // src/navigation/geometry.ts
@@ -106,9 +112,18 @@ function heroTransform(from, to, progress) {
106
112
  function NavBackButton({
107
113
  onPress,
108
114
  previousTitle,
115
+ labelled = false,
109
116
  platform: platformProp,
110
117
  accessibilityLabel,
111
118
  disabled = false,
119
+ variant = "ghost",
120
+ size,
121
+ tone = "default",
122
+ fullWidth = false,
123
+ leading,
124
+ trailing,
125
+ loading = false,
126
+ motion = "full",
112
127
  labels: labelsProp
113
128
  }) {
114
129
  const labels = useLabels("navigation", DEFAULT_NAVIGATION_LABELS, labelsProp);
@@ -117,32 +132,54 @@ function NavBackButton({
117
132
  const { styles } = useStyles(sheet, { platform });
118
133
  const back = theme.rtl ? "chevron-right" : "chevron-left";
119
134
  const arrow = theme.rtl ? "arrow-right" : "arrow-left";
120
- const showTitle = platform === "iOS" && previousTitle !== void 0;
135
+ const showTitle = platform === "iOS" && (previousTitle !== void 0 || labelled);
121
136
  const label = accessibilityLabel ?? (previousTitle ? labels.backTo(previousTitle) : labels.back);
137
+ const ink = tone === "danger" ? theme.color.danger : tone === "accent" ? theme.color.accentStrong : platform === "iOS" ? theme.color.accentStrong : theme.color.text;
122
138
  return /* @__PURE__ */ jsxs(
123
139
  Pressable,
124
140
  {
125
141
  accessibilityRole: "button",
126
142
  accessibilityLabel: label,
127
- accessibilityState: { disabled },
143
+ accessibilityState: { disabled, busy: loading || void 0 },
144
+ "aria-busy": loading || void 0,
128
145
  disabled,
129
- onPress: disabled ? void 0 : onPress,
130
- hitSlop: theme.space.s2,
146
+ onPress: disabled || loading ? void 0 : onPress,
147
+ android_ripple: platform === "Android" && motion === "full" && !theme.reduceMotion ? { color: theme.state.pressed, borderless: true } : void 0,
131
148
  style: ({ pressed }) => [
132
149
  styles.back,
150
+ size ? {
151
+ minHeight: theme.ctl[size],
152
+ ...platform === "Android" ? { width: theme.ctl[size], height: theme.ctl[size] } : null
153
+ } : null,
154
+ variant === "tonal" ? { backgroundColor: theme.color.accentSoft, paddingStart: theme.space.s2 } : null,
155
+ variant === "outline" ? {
156
+ borderWidth: theme.borderWidth.base,
157
+ borderColor: theme.color.borderStrong,
158
+ paddingStart: theme.space.s2
159
+ } : null,
160
+ fullWidth ? { alignSelf: "stretch", justifyContent: "center", width: void 0 } : null,
133
161
  disabled ? styles.backDisabled : null,
134
- pressed && !disabled ? styles.backPressed : null
162
+ pressed && !disabled && motion === "full" && !theme.reduceMotion ? styles.backPressed : null
135
163
  ],
136
164
  children: [
137
- /* @__PURE__ */ jsx(
165
+ leading,
166
+ loading ? /* @__PURE__ */ jsx(ActivityIndicator, { "aria-hidden": true, color: ink }) : /* @__PURE__ */ jsx(
138
167
  Icon,
139
168
  {
140
169
  name: platform === "iOS" ? back : arrow,
141
- size: theme.icon.md,
142
- color: theme.color.accentStrong
170
+ size: platform === "iOS" ? theme.icon.md : theme.icon.lg,
171
+ color: ink
143
172
  }
144
173
  ),
145
- showTitle ? /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: styles.backLabel, children: previousTitle }) : null
174
+ showTitle ? /* @__PURE__ */ jsx(
175
+ Text,
176
+ {
177
+ numberOfLines: 1,
178
+ style: [styles.backLabel, tone !== "default" ? { color: ink } : null],
179
+ children: previousTitle ?? labels.back
180
+ }
181
+ ) : null,
182
+ trailing
146
183
  ]
147
184
  }
148
185
  );
@@ -155,23 +192,40 @@ function NavBar({
155
192
  backLabel,
156
193
  labels,
157
194
  leading,
158
- trailing
195
+ trailing,
196
+ size = "md",
197
+ density = "standard",
198
+ variant = "bar",
199
+ labelled = false
159
200
  }) {
201
+ const theme = useLoamTheme("navigation");
160
202
  const { styles } = useStyles(sheet, { platform });
161
- return /* @__PURE__ */ jsxs(View, { style: styles.bar, children: [
162
- onBack ? /* @__PURE__ */ jsx(
163
- NavBackButton,
164
- {
165
- platform,
166
- previousTitle,
167
- accessibilityLabel: previousTitle ? void 0 : backLabel,
168
- labels,
169
- onPress: onBack
170
- }
171
- ) : leading,
172
- /* @__PURE__ */ jsx(Text, { accessibilityRole: "header", numberOfLines: 1, style: styles.barTitle, children: title }),
173
- trailing ? /* @__PURE__ */ jsx(View, { style: styles.barTrailing, children: trailing }) : null
174
- ] });
203
+ return /* @__PURE__ */ jsxs(
204
+ View,
205
+ {
206
+ style: [
207
+ styles.bar,
208
+ size === "compact" ? { height: theme.ctl.lg } : null,
209
+ density === "compact" ? { paddingHorizontal: theme.space.s2, gap: theme.space.s1 } : null,
210
+ variant === "borderless" ? { borderBottomWidth: 0 } : null
211
+ ],
212
+ children: [
213
+ onBack ? /* @__PURE__ */ jsx(
214
+ NavBackButton,
215
+ {
216
+ platform,
217
+ previousTitle,
218
+ labelled,
219
+ accessibilityLabel: previousTitle ? void 0 : backLabel,
220
+ labels,
221
+ onPress: onBack
222
+ }
223
+ ) : leading,
224
+ /* @__PURE__ */ jsx(Text, { accessibilityRole: "header", numberOfLines: 1, style: styles.barTitle, children: title }),
225
+ trailing ? /* @__PURE__ */ jsx(View, { style: styles.barTrailing, children: trailing }) : null
226
+ ]
227
+ }
228
+ );
175
229
  }
176
230
  function setInert(node, hidden) {
177
231
  if (Platform.OS !== "web" || node == null) return;
@@ -186,9 +240,14 @@ function NavStack({
186
240
  onExit,
187
241
  platform: platformProp,
188
242
  swipeEnabled,
243
+ orientation = "horizontal",
189
244
  backLabel: backLabelProp,
245
+ showBackLabel = false,
190
246
  labels: labelsProp,
191
247
  announce = true,
248
+ size = "md",
249
+ density = "standard",
250
+ variant = "bar",
192
251
  style
193
252
  }) {
194
253
  const labels = useLabels("navigation", DEFAULT_NAVIGATION_LABELS, labelsProp);
@@ -203,9 +262,13 @@ function NavStack({
203
262
  const top = depth > 0 ? screens[depth - 1] : void 0;
204
263
  const below = depth > 1 ? screens[depth - 2] : void 0;
205
264
  const [width, setWidth] = React.useState(window.width);
265
+ const [height, setHeight] = React.useState(window.height);
266
+ const vertical = orientation === "vertical";
206
267
  const onRootLayout = (e) => {
207
268
  const next = e.nativeEvent.layout.width;
208
269
  if (next > 0) setWidth(next);
270
+ const nextH = e.nativeEvent.layout.height;
271
+ if (nextH > 0) setHeight(nextH);
209
272
  };
210
273
  const progress = React.useRef(new Animated.Value(1)).current;
211
274
  const peek = React.useRef(new Animated.Value(0)).current;
@@ -295,7 +358,7 @@ function NavStack({
295
358
  return () => subscription?.remove();
296
359
  }, [platform]);
297
360
  const canPop = under !== void 0 && over !== void 0;
298
- const swipeActive = (swipeEnabled ?? true) && canPop && exiting === null;
361
+ const swipeActive = (swipeEnabled ?? true) && !vertical && canPop && exiting === null;
299
362
  const startXRef = React.useRef(0);
300
363
  const fromLeadingRef = React.useRef(true);
301
364
  const swipeRef = React.useRef({ active: swipeActive, page, pageEasing, platform, theme });
@@ -429,10 +492,20 @@ function NavStack({
429
492
  () => peek.interpolate({ inputRange: [0, 1], outputRange: [1, NAV_PREDICTIVE_FADE] }),
430
493
  [peek]
431
494
  );
432
- const overStyle = reduce ? { opacity: Animated.multiply(progress, peekFade) } : {
433
- transform: [{ translateX: Animated.add(overTranslateX, peekShift) }, { scale: peekScale }]
495
+ const overTranslateY = React.useMemo(
496
+ () => progress.interpolate({
497
+ inputRange: [0, 1],
498
+ outputRange: [modalTranslateY(0, height), modalTranslateY(1, height)]
499
+ }),
500
+ [progress, height]
501
+ );
502
+ const overStyle = reduce ? { opacity: Animated.multiply(progress, peekFade) } : vertical ? { transform: [{ translateY: overTranslateY }] } : {
503
+ transform: [
504
+ { translateX: Animated.add(overTranslateX, peekShift) },
505
+ { scale: peekScale }
506
+ ]
434
507
  };
435
- const underStyle = reduce ? {} : { transform: [{ translateX: Animated.multiply(underTranslateX, peekUnwind) }] };
508
+ const underStyle = reduce || vertical ? {} : { transform: [{ translateX: Animated.multiply(underTranslateX, peekUnwind) }] };
436
509
  const underDim = Animated.multiply(dimOpacity, peekUnwind);
437
510
  if (!over) return /* @__PURE__ */ jsx(View, { style: [styles.root, style] });
438
511
  const rootScreen = screens[0];
@@ -464,7 +537,11 @@ function NavStack({
464
537
  leading: under.leading,
465
538
  trailing: under.trailing,
466
539
  backLabel,
467
- labels: labelsProp
540
+ labelled: showBackLabel,
541
+ labels: labelsProp,
542
+ size,
543
+ density,
544
+ variant
468
545
  }
469
546
  ),
470
547
  /* @__PURE__ */ jsx(View, { style: styles.body, children: under.content }),
@@ -513,7 +590,11 @@ function NavStack({
513
590
  leading: over.leading,
514
591
  trailing: over.trailing,
515
592
  backLabel,
516
- labels: labelsProp
593
+ labelled: showBackLabel,
594
+ labels: labelsProp,
595
+ size,
596
+ density,
597
+ variant
517
598
  }
518
599
  ),
519
600
  /* @__PURE__ */ jsx(View, { style: styles.body, children: over.content })
@@ -572,13 +653,13 @@ var sheet = createStyleSheet((theme) => ({
572
653
  borderBottomWidth: theme.borderWidth.base,
573
654
  borderBottomColor: theme.color.border
574
655
  },
575
- // Headline is the nav-bar title role on both ramps (HIG headline / M3 title).
656
+ // iOS: headline 17/600. Android: M3 top app bar title 22/400 (Final 05, as NavHeader).
576
657
  // Android indents it, because its arrow carries no label to space it away
577
658
  // from — the reference's `margin-inline-start: 8px`.
578
659
  barTitle: {
579
660
  flex: 1,
580
661
  fontFamily: theme.font.sans,
581
- fontWeight: theme.fontWeight.bold,
662
+ fontWeight: theme.fontWeight.semibold,
582
663
  fontSize: theme.type.headline.fontSize,
583
664
  lineHeight: theme.type.headline.lineHeight,
584
665
  letterSpacing: theme.type.headline.letterSpacing,
@@ -586,7 +667,14 @@ var sheet = createStyleSheet((theme) => ({
586
667
  variants: {
587
668
  platform: {
588
669
  iOS: {},
589
- Android: { marginStart: theme.space.s2 }
670
+ // M3 top app bar title: 22 / 28 / 400 at the start (same as NavHeader).
671
+ Android: {
672
+ marginStart: theme.space.s2,
673
+ fontSize: theme.fontSize[22],
674
+ lineHeight: theme.space[28],
675
+ fontWeight: theme.fontWeight.regular,
676
+ letterSpacing: 0
677
+ }
590
678
  }
591
679
  }
592
680
  },
@@ -607,19 +695,30 @@ var sheet = createStyleSheet((theme) => ({
607
695
  // The chevron sits tight against its label; a bare arrow gets a square
608
696
  // touch target instead.
609
697
  iOS: { minWidth: theme.space.s7 },
610
- Android: { minWidth: theme.tapMin, justifyContent: "center" }
698
+ Android: {
699
+ width: theme.hit.lg,
700
+ height: theme.hit.lg,
701
+ paddingEnd: 0,
702
+ justifyContent: "center"
703
+ }
611
704
  }
612
705
  }
613
706
  },
614
707
  backPressed: {
615
- backgroundColor: theme.state.pressed
708
+ variants: {
709
+ platform: {
710
+ iOS: { opacity: theme.state.pressedOpacity },
711
+ Android: {}
712
+ }
713
+ }
616
714
  },
617
715
  backDisabled: {
618
716
  opacity: theme.state.disabledOpacity
619
717
  },
718
+ // The nav-header back (F66): body 17 / 400 accent-strong.
620
719
  backLabel: {
621
720
  fontFamily: theme.font.sans,
622
- fontWeight: theme.fontWeight.semibold,
721
+ fontWeight: theme.fontWeight.regular,
623
722
  fontSize: theme.type.body.fontSize,
624
723
  lineHeight: theme.type.body.lineHeight,
625
724
  letterSpacing: theme.type.body.letterSpacing,
@@ -633,6 +732,7 @@ var sheet = createStyleSheet((theme) => ({
633
732
  }
634
733
  }));
635
734
  var FALLBACK_PANEL_HEIGHT = 640;
735
+ var ANDROID_MODAL_BAR_H = 64;
636
736
  function setInert2(node, hidden) {
637
737
  if (Platform.OS !== "web" || node == null) return;
638
738
  node.inert = hidden;
@@ -644,6 +744,14 @@ function NavModal({
644
744
  dismissLabel: dismissLabelProp,
645
745
  confirmLabel,
646
746
  onConfirm,
747
+ confirmDisabled = false,
748
+ dirty = false,
749
+ loading = false,
750
+ tone = "accent",
751
+ size = "md",
752
+ side = "bottom",
753
+ presentation = "overlay",
754
+ platform: platformProp,
647
755
  children,
648
756
  announcement,
649
757
  scrimLabel: scrimLabelProp,
@@ -654,6 +762,40 @@ function NavModal({
654
762
  const scrimLabel = scrimLabelProp ?? labels.dismiss;
655
763
  const theme = useLoamTheme("navigation");
656
764
  const { styles } = useStyles(sheet2);
765
+ const confirmApi = useOptionalConfirm();
766
+ const android = (platformProp ?? (theme.platform === "Android" ? "Android" : "iOS")) === "Android";
767
+ const dirtyRef = React.useRef(dirty);
768
+ dirtyRef.current = dirty;
769
+ const requestDismiss = React.useCallback(() => {
770
+ if (!dirtyRef.current) {
771
+ onDismiss();
772
+ return;
773
+ }
774
+ if (confirmApi) {
775
+ void confirmApi.confirm({
776
+ title: labels.discardTitle,
777
+ body: labels.discardBody,
778
+ tone: "danger",
779
+ confirmLabel: labels.discard,
780
+ cancelLabel: labels.keepEditing
781
+ }).then((ok) => {
782
+ if (ok) onDismiss();
783
+ });
784
+ return;
785
+ }
786
+ Alert.alert(labels.discardTitle, labels.discardBody, [
787
+ { text: labels.keepEditing, style: "cancel" },
788
+ { text: labels.discard, style: "destructive", onPress: onDismiss }
789
+ ]);
790
+ }, [confirmApi, labels, onDismiss]);
791
+ React.useEffect(() => {
792
+ if (!open || Platform.OS === "web") return;
793
+ const sub = BackHandler.addEventListener("hardwareBackPress", () => {
794
+ requestDismiss();
795
+ return true;
796
+ });
797
+ return () => sub.remove();
798
+ }, [open, requestDismiss]);
657
799
  const [mounted, setMounted] = React.useState(open);
658
800
  const progress = React.useRef(new Animated.Value(0)).current;
659
801
  const heightRef = React.useRef(FALLBACK_PANEL_HEIGHT);
@@ -698,10 +840,94 @@ function NavModal({
698
840
  const translateY = React.useMemo(
699
841
  () => progress.interpolate({
700
842
  inputRange: [0, 1],
701
- outputRange: [modalTranslateY(0, panelHeight), modalTranslateY(1, panelHeight)]
843
+ outputRange: [
844
+ modalTranslateY(0, panelHeight) * (side === "top" ? -1 : 1),
845
+ modalTranslateY(1, panelHeight)
846
+ ]
702
847
  }),
703
- [progress, panelHeight]
848
+ [progress, panelHeight, side]
849
+ );
850
+ const header = /* @__PURE__ */ jsxs(
851
+ View,
852
+ {
853
+ style: [
854
+ styles.modalBar,
855
+ android ? styles.modalBarAndroid : null,
856
+ size === "compact" ? { height: theme.ctl.lg } : null
857
+ ],
858
+ children: [
859
+ android ? /* @__PURE__ */ jsx(
860
+ Pressable,
861
+ {
862
+ accessibilityRole: "button",
863
+ accessibilityLabel: dismissLabel,
864
+ onPress: requestDismiss,
865
+ android_ripple: { color: theme.state.pressed, borderless: true },
866
+ style: styles.modalClose,
867
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: theme.icon.lg, color: theme.color.text })
868
+ }
869
+ ) : /* @__PURE__ */ jsx(
870
+ Pressable,
871
+ {
872
+ accessibilityRole: "button",
873
+ accessibilityLabel: dismissLabel,
874
+ onPress: requestDismiss,
875
+ style: ({ pressed }) => [styles.modalAction, pressed ? styles.modalActionPressed : null],
876
+ children: /* @__PURE__ */ jsx(Text, { style: styles.modalDismiss, children: dismissLabel })
877
+ }
878
+ ),
879
+ /* @__PURE__ */ jsx(
880
+ Text,
881
+ {
882
+ accessibilityRole: "header",
883
+ numberOfLines: 1,
884
+ style: [styles.modalTitle, android ? styles.modalTitleAndroid : null],
885
+ children: title
886
+ }
887
+ ),
888
+ confirmLabel ? /* @__PURE__ */ jsx(
889
+ Pressable,
890
+ {
891
+ accessibilityRole: "button",
892
+ accessibilityLabel: confirmLabel,
893
+ accessibilityState: { disabled: confirmDisabled, busy: loading || void 0 },
894
+ "aria-busy": loading || void 0,
895
+ disabled: confirmDisabled,
896
+ onPress: confirmDisabled || loading ? void 0 : onConfirm,
897
+ style: ({ pressed }) => [
898
+ styles.modalAction,
899
+ styles.modalActionEnd,
900
+ pressed && !confirmDisabled ? styles.modalActionPressed : null,
901
+ confirmDisabled ? styles.modalActionDisabled : null
902
+ ],
903
+ children: loading ? /* @__PURE__ */ jsx(
904
+ ActivityIndicator,
905
+ {
906
+ "aria-hidden": true,
907
+ color: tone === "danger" ? theme.color.danger : theme.color.accentStrong
908
+ }
909
+ ) : /* @__PURE__ */ jsx(
910
+ Text,
911
+ {
912
+ style: [
913
+ styles.modalConfirm,
914
+ android ? styles.modalConfirmAndroid : null,
915
+ tone === "danger" ? { color: theme.color.danger } : null
916
+ ],
917
+ children: confirmLabel
918
+ }
919
+ )
920
+ }
921
+ ) : android ? null : /* @__PURE__ */ jsx(View, { style: styles.modalAction })
922
+ ]
923
+ }
704
924
  );
925
+ if (presentation === "inline") {
926
+ return /* @__PURE__ */ jsxs(View, { role: "dialog", accessibilityLabel: title, style: styles.inlinePanel, children: [
927
+ header,
928
+ /* @__PURE__ */ jsx(View, { style: styles.modalBody, children })
929
+ ] });
930
+ }
705
931
  if (!mounted) return /* @__PURE__ */ jsx(Fragment, {});
706
932
  return /* @__PURE__ */ jsxs(View, { style: styles.overlayRoot, pointerEvents: "box-none", children: [
707
933
  /* @__PURE__ */ jsx(Animated.View, { style: [StyleSheet.absoluteFill, styles.scrim, { opacity: progress }], children: /* @__PURE__ */ jsx(
@@ -710,7 +936,7 @@ function NavModal({
710
936
  style: StyleSheet.absoluteFill,
711
937
  accessibilityRole: "button",
712
938
  accessibilityLabel: scrimLabel,
713
- onPress: onDismiss
939
+ onPress: requestDismiss
714
940
  }
715
941
  ) }),
716
942
  /* @__PURE__ */ jsxs(
@@ -720,37 +946,13 @@ function NavModal({
720
946
  accessibilityViewIsModal: true,
721
947
  accessibilityLabel: title,
722
948
  onLayout: onPanelLayout,
723
- style: [styles.panel, { transform: [{ translateY }] }],
949
+ style: [
950
+ styles.panel,
951
+ side === "top" ? styles.panelTop : null,
952
+ { transform: [{ translateY }] }
953
+ ],
724
954
  children: [
725
- /* @__PURE__ */ jsxs(View, { style: styles.modalBar, children: [
726
- /* @__PURE__ */ jsx(
727
- Pressable,
728
- {
729
- accessibilityRole: "button",
730
- accessibilityLabel: dismissLabel,
731
- onPress: onDismiss,
732
- style: ({ pressed }) => [
733
- styles.modalAction,
734
- pressed ? styles.modalActionPressed : null
735
- ],
736
- children: /* @__PURE__ */ jsx(Text, { style: styles.modalDismiss, children: dismissLabel })
737
- }
738
- ),
739
- /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: styles.modalTitle, children: title }),
740
- confirmLabel ? /* @__PURE__ */ jsx(
741
- Pressable,
742
- {
743
- accessibilityRole: "button",
744
- accessibilityLabel: confirmLabel,
745
- onPress: onConfirm,
746
- style: ({ pressed }) => [
747
- styles.modalAction,
748
- pressed ? styles.modalActionPressed : null
749
- ],
750
- children: /* @__PURE__ */ jsx(Text, { style: styles.modalConfirm, children: confirmLabel })
751
- }
752
- ) : /* @__PURE__ */ jsx(View, { style: styles.modalAction })
753
- ] }),
955
+ header,
754
956
  /* @__PURE__ */ jsx(View, { style: styles.modalBody, children })
755
957
  ]
756
958
  }
@@ -761,12 +963,23 @@ function NavTabView({
761
963
  value,
762
964
  tabs,
763
965
  announce = true,
966
+ variant = "fade",
967
+ disabled = false,
968
+ size,
969
+ density = "standard",
970
+ orientation,
764
971
  style
765
972
  }) {
766
973
  const theme = useLoamTheme("navigation");
767
974
  const { styles } = useStyles(sheet2);
768
975
  const page = theme.motion.page;
769
976
  const pageEasing = React.useMemo(() => Easing.bezier(...page.easing), [page.easing]);
977
+ const sizePad = size ? { sm: theme.space.s2, md: theme.space.s3, lg: theme.space.s4 }[size] : void 0;
978
+ const pad = density === "compact" ? sizePad === void 0 || sizePad > theme.space.s2 ? theme.space.s2 : sizePad : sizePad;
979
+ const paneLayout = pad !== void 0 || orientation ? {
980
+ ...pad !== void 0 ? { padding: pad } : null,
981
+ ...orientation ? { flexDirection: orientation === "horizontal" ? "row" : "column" } : null
982
+ } : null;
770
983
  const active = tabs.find((tab) => tab.value === value);
771
984
  const [outgoing, setOutgoing] = React.useState(null);
772
985
  const previousRef = React.useRef(active);
@@ -779,6 +992,10 @@ function NavTabView({
779
992
  previousRef.current = active;
780
993
  if (!active || !previous || previous.value === active.value) return;
781
994
  if (announce) AccessibilityInfo.announceForAccessibility(active.announcement ?? active.title);
995
+ if (variant === "none") {
996
+ fade.setValue(1);
997
+ return;
998
+ }
782
999
  setOutgoing(previous);
783
1000
  fade.setValue(0);
784
1001
  Animated.timing(fade, {
@@ -799,28 +1016,39 @@ function NavTabView({
799
1016
  inputRange: [0, 1],
800
1017
  outputRange: [1, NAV_TAB_FADE_SCALE]
801
1018
  });
802
- return /* @__PURE__ */ jsx(View, { style: [styles.tabRoot, style], children: panes.map((pane) => {
803
- const isActive = pane.value === value;
804
- const isOutgoing = outgoing?.value === pane.value;
805
- return /* @__PURE__ */ jsx(
806
- Animated.View,
807
- {
808
- ref: (node) => setInert2(node, !isActive),
809
- role: "group",
810
- accessibilityLabel: pane.title,
811
- importantForAccessibility: isActive ? "auto" : "no-hide-descendants",
812
- pointerEvents: isActive ? "auto" : "none",
813
- style: [
814
- styles.tabPane,
815
- isActive ? { opacity: fade, transform: [{ scale: incomingScale }] } : isOutgoing ? { opacity: outgoingOpacity, transform: [{ scale: outgoingScale }] } : styles.tabPaneHidden
816
- ],
817
- children: pane.content
818
- },
819
- pane.value
820
- );
821
- }) });
1019
+ return /* @__PURE__ */ jsx(
1020
+ View,
1021
+ {
1022
+ "aria-disabled": disabled || void 0,
1023
+ pointerEvents: disabled ? "none" : void 0,
1024
+ style: [styles.tabRoot, style],
1025
+ children: panes.map((pane) => {
1026
+ const isActive = pane.value === value;
1027
+ const isOutgoing = outgoing?.value === pane.value;
1028
+ return /* @__PURE__ */ jsx(
1029
+ Animated.View,
1030
+ {
1031
+ ref: (node) => setInert2(node, !isActive),
1032
+ role: "group",
1033
+ accessibilityLabel: pane.title,
1034
+ importantForAccessibility: isActive ? "auto" : "no-hide-descendants",
1035
+ pointerEvents: isActive ? "auto" : "none",
1036
+ style: [
1037
+ styles.tabPane,
1038
+ paneLayout,
1039
+ isActive ? { opacity: fade, transform: [{ scale: incomingScale }] } : isOutgoing ? { opacity: outgoingOpacity, transform: [{ scale: outgoingScale }] } : styles.tabPaneHidden
1040
+ ],
1041
+ children: pane.content
1042
+ },
1043
+ pane.value
1044
+ );
1045
+ })
1046
+ }
1047
+ );
822
1048
  }
823
1049
  function NavHero({
1050
+ orientation,
1051
+ align,
824
1052
  active,
825
1053
  from,
826
1054
  to,
@@ -917,7 +1145,18 @@ function NavHero({
917
1145
  role: "group",
918
1146
  accessibilityLabel,
919
1147
  style: [styles.heroSurface, frame, morphStyle],
920
- children: /* @__PURE__ */ jsx(Animated.View, { style: [styles.heroContent, { opacity: contentOpacity }], children })
1148
+ children: /* @__PURE__ */ jsx(
1149
+ Animated.View,
1150
+ {
1151
+ style: [
1152
+ styles.heroContent,
1153
+ orientation ? { flexDirection: orientation === "horizontal" ? "row" : "column" } : null,
1154
+ alignItemsStyle(align),
1155
+ { opacity: contentOpacity }
1156
+ ],
1157
+ children
1158
+ }
1159
+ )
921
1160
  }
922
1161
  ) : null
923
1162
  }
@@ -952,6 +1191,20 @@ var sheet2 = createStyleSheet((theme) => ({
952
1191
  zIndex: theme.z.modal,
953
1192
  ...theme.shadow.lg
954
1193
  },
1194
+ inlinePanel: {
1195
+ backgroundColor: theme.color.surface,
1196
+ borderRadius: theme.radius["2xl"],
1197
+ overflow: "hidden",
1198
+ alignSelf: "stretch"
1199
+ },
1200
+ panelTop: {
1201
+ top: 0,
1202
+ bottom: NAV_MODAL_TOP_INSET,
1203
+ borderTopStartRadius: 0,
1204
+ borderTopEndRadius: 0,
1205
+ borderBottomStartRadius: theme.radius["2xl"],
1206
+ borderBottomEndRadius: theme.radius["2xl"]
1207
+ },
955
1208
  modalBar: {
956
1209
  flexDirection: "row",
957
1210
  alignItems: "center",
@@ -962,32 +1215,65 @@ var sheet2 = createStyleSheet((theme) => ({
962
1215
  borderBottomWidth: theme.borderWidth.base,
963
1216
  borderBottomColor: theme.color.border
964
1217
  },
1218
+ // The Android full-screen dialog: a 64 top app bar, no edge.
1219
+ modalBarAndroid: {
1220
+ height: ANDROID_MODAL_BAR_H,
1221
+ paddingHorizontal: theme.space[4],
1222
+ gap: theme.space[4],
1223
+ borderBottomWidth: 0
1224
+ },
1225
+ // iOS sheet bar buttons are 72-wide text links that dim on press.
965
1226
  modalAction: {
966
1227
  minHeight: theme.tapMin,
967
- minWidth: theme.space.s7,
1228
+ minWidth: theme.space[72],
968
1229
  justifyContent: "center",
969
- borderRadius: theme.radius.full,
970
- paddingHorizontal: theme.space.s1
1230
+ alignItems: "flex-start"
1231
+ },
1232
+ modalActionEnd: {
1233
+ alignItems: "flex-end"
971
1234
  },
972
1235
  modalActionPressed: {
973
- backgroundColor: theme.state.pressed
1236
+ opacity: theme.state.pressedOpacity
1237
+ },
1238
+ modalActionDisabled: {
1239
+ opacity: theme.state.disabledOpacity
1240
+ },
1241
+ modalClose: {
1242
+ width: theme.hit.lg,
1243
+ height: theme.hit.lg,
1244
+ alignItems: "center",
1245
+ justifyContent: "center",
1246
+ borderRadius: theme.radius.full
974
1247
  },
975
- // The dismiss is quieter than the confirm on purpose — it is always available,
976
- // so it does not need to compete.
1248
+ // iOS: Cancel is the regular link (17 / 400), Save the emphasised one (17 / 600).
977
1249
  modalDismiss: {
978
1250
  fontFamily: theme.font.sans,
979
- fontWeight: theme.fontWeight.semibold,
1251
+ fontWeight: theme.fontWeight.regular,
980
1252
  fontSize: theme.type.body.fontSize,
981
1253
  lineHeight: theme.type.body.lineHeight,
982
- color: theme.color.text2
1254
+ color: theme.color.accentStrong
983
1255
  },
984
1256
  modalConfirm: {
985
1257
  fontFamily: theme.font.sans,
986
- fontWeight: theme.fontWeight.bold,
1258
+ fontWeight: theme.fontWeight.semibold,
987
1259
  fontSize: theme.type.body.fontSize,
988
1260
  lineHeight: theme.type.body.lineHeight,
989
1261
  color: theme.color.accentStrong
990
1262
  },
1263
+ // Android: Save is a md link button, Material label large 14 / 500.
1264
+ modalConfirmAndroid: {
1265
+ fontWeight: theme.fontWeight.medium,
1266
+ fontSize: theme.fontSize[14],
1267
+ lineHeight: theme.space[20],
1268
+ paddingHorizontal: theme.space.s3
1269
+ },
1270
+ modalTitleAndroid: {
1271
+ textAlign: "left",
1272
+ fontWeight: theme.fontWeight.regular,
1273
+ fontSize: theme.fontSize[22],
1274
+ lineHeight: theme.space[28],
1275
+ letterSpacing: 0
1276
+ },
991
1277
  modalTitle: {
992
1278
  flex: 1,
993
1279
  textAlign: "center",