@oxyhq/bloom 0.50.2 → 0.51.0

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 (536) hide show
  1. package/NOTICE +89 -0
  2. package/README.md +12 -7
  3. package/lib/commonjs/avatar-group/AvatarGroup.web.js +2 -1
  4. package/lib/commonjs/avatar-group/AvatarGroup.web.js.map +1 -1
  5. package/lib/commonjs/bottom-sheet/index.web.js +2 -1
  6. package/lib/commonjs/bottom-sheet/index.web.js.map +1 -1
  7. package/lib/commonjs/context-menu/index.web.js +3 -2
  8. package/lib/commonjs/context-menu/index.web.js.map +1 -1
  9. package/lib/commonjs/dialog/Dialog.web.js +4 -3
  10. package/lib/commonjs/dialog/Dialog.web.js.map +1 -1
  11. package/lib/commonjs/index.js +90 -83
  12. package/lib/commonjs/index.js.map +1 -1
  13. package/lib/commonjs/index.web.js +116 -109
  14. package/lib/commonjs/index.web.js.map +1 -1
  15. package/lib/commonjs/menu/index.web.js +2 -1
  16. package/lib/commonjs/menu/index.web.js.map +1 -1
  17. package/lib/commonjs/popover/index.web.js +3 -2
  18. package/lib/commonjs/popover/index.web.js.map +1 -1
  19. package/lib/commonjs/portal/index.js +4 -1
  20. package/lib/commonjs/portal/index.js.map +1 -1
  21. package/lib/commonjs/progressive-blur/index.js +79 -0
  22. package/lib/commonjs/progressive-blur/index.js.map +1 -0
  23. package/lib/commonjs/progressive-blur/index.web.js +67 -0
  24. package/lib/commonjs/progressive-blur/index.web.js.map +1 -0
  25. package/lib/commonjs/progressive-blur/shared.js +66 -0
  26. package/lib/commonjs/progressive-blur/shared.js.map +1 -0
  27. package/lib/commonjs/progressive-blur/types.js +6 -0
  28. package/lib/commonjs/progressive-blur/types.js.map +1 -0
  29. package/lib/commonjs/select/index.web.js +2 -1
  30. package/lib/commonjs/select/index.web.js.map +1 -1
  31. package/lib/commonjs/styles/web-view-style.js +26 -0
  32. package/lib/commonjs/styles/web-view-style.js.map +1 -0
  33. package/lib/commonjs/tab-bar/TabBarBase.js +415 -0
  34. package/lib/commonjs/tab-bar/TabBarBase.js.map +1 -0
  35. package/lib/commonjs/tab-bar/expo-router/RouterTabBar.js +83 -0
  36. package/lib/commonjs/tab-bar/expo-router/RouterTabBar.js.map +1 -0
  37. package/lib/commonjs/tab-bar/expo-router/fading-tab-screen.js +119 -0
  38. package/lib/commonjs/tab-bar/expo-router/fading-tab-screen.js.map +1 -0
  39. package/lib/commonjs/tab-bar/expo-router/index.js +26 -0
  40. package/lib/commonjs/tab-bar/expo-router/index.js.map +1 -0
  41. package/lib/commonjs/tab-bar/glyph.js +43 -0
  42. package/lib/commonjs/tab-bar/glyph.js.map +1 -0
  43. package/lib/commonjs/tab-bar/glyph.native.js +55 -0
  44. package/lib/commonjs/tab-bar/glyph.native.js.map +1 -0
  45. package/lib/commonjs/tab-bar/index.js +65 -0
  46. package/lib/commonjs/tab-bar/index.js.map +1 -0
  47. package/lib/commonjs/tab-bar/index.web.js +67 -0
  48. package/lib/commonjs/tab-bar/index.web.js.map +1 -0
  49. package/lib/commonjs/tab-bar/minimize-context.js +127 -0
  50. package/lib/commonjs/tab-bar/minimize-context.js.map +1 -0
  51. package/lib/commonjs/tab-bar/shared.js +139 -0
  52. package/lib/commonjs/tab-bar/shared.js.map +1 -0
  53. package/lib/commonjs/tab-bar/surface.js +50 -0
  54. package/lib/commonjs/tab-bar/surface.js.map +1 -0
  55. package/lib/commonjs/tab-bar/surface.native.js +56 -0
  56. package/lib/commonjs/tab-bar/surface.native.js.map +1 -0
  57. package/lib/commonjs/tab-bar/surface.web.js +59 -0
  58. package/lib/commonjs/tab-bar/surface.web.js.map +1 -0
  59. package/lib/commonjs/tab-bar/types.js +6 -0
  60. package/lib/commonjs/tab-bar/types.js.map +1 -0
  61. package/lib/commonjs/toast/Positioner.js +117 -0
  62. package/lib/commonjs/toast/Positioner.js.map +1 -0
  63. package/lib/commonjs/toast/ToastContent.js +301 -0
  64. package/lib/commonjs/toast/ToastContent.js.map +1 -0
  65. package/lib/commonjs/toast/ToastHost.js +69 -0
  66. package/lib/commonjs/toast/ToastHost.js.map +1 -0
  67. package/lib/commonjs/toast/ToastHost.native.js +44 -0
  68. package/lib/commonjs/toast/ToastHost.native.js.map +1 -0
  69. package/lib/commonjs/toast/ToastIcon.js +57 -0
  70. package/lib/commonjs/toast/ToastIcon.js.map +1 -0
  71. package/lib/commonjs/toast/ToastRow.js +411 -0
  72. package/lib/commonjs/toast/ToastRow.js.map +1 -0
  73. package/lib/commonjs/toast/ToastSwipeHandler.js +189 -0
  74. package/lib/commonjs/toast/ToastSwipeHandler.js.map +1 -0
  75. package/lib/commonjs/toast/Toaster.js +205 -0
  76. package/lib/commonjs/toast/Toaster.js.map +1 -0
  77. package/lib/commonjs/toast/animations.js +274 -0
  78. package/lib/commonjs/toast/animations.js.map +1 -0
  79. package/lib/commonjs/toast/constants.js +56 -0
  80. package/lib/commonjs/toast/constants.js.map +1 -0
  81. package/lib/commonjs/toast/context.js +42 -0
  82. package/lib/commonjs/toast/context.js.map +1 -0
  83. package/lib/commonjs/toast/index.js +32 -126
  84. package/lib/commonjs/toast/index.js.map +1 -1
  85. package/lib/commonjs/toast/position-utils.js +115 -0
  86. package/lib/commonjs/toast/position-utils.js.map +1 -0
  87. package/lib/commonjs/toast/positioner-utils.js +141 -0
  88. package/lib/commonjs/toast/positioner-utils.js.map +1 -0
  89. package/lib/commonjs/toast/toast-comparator.js +28 -0
  90. package/lib/commonjs/toast/toast-comparator.js.map +1 -0
  91. package/lib/commonjs/toast/toast-fns.js +90 -0
  92. package/lib/commonjs/toast/toast-fns.js.map +1 -0
  93. package/lib/commonjs/toast/toast-store.js +352 -0
  94. package/lib/commonjs/toast/toast-store.js.map +1 -0
  95. package/lib/commonjs/toast/toast-timers.js +110 -0
  96. package/lib/commonjs/toast/toast-timers.js.map +1 -0
  97. package/lib/commonjs/toast/types.js +42 -0
  98. package/lib/commonjs/toast/types.js.map +1 -1
  99. package/lib/commonjs/toast/use-animated-target.js +57 -0
  100. package/lib/commonjs/toast/use-animated-target.js.map +1 -0
  101. package/lib/commonjs/toast/use-app-state.js +76 -0
  102. package/lib/commonjs/toast/use-app-state.js.map +1 -0
  103. package/lib/commonjs/toast/use-toast-colors.js +114 -0
  104. package/lib/commonjs/toast/use-toast-colors.js.map +1 -0
  105. package/lib/commonjs/toast/use-toast-position.js +40 -0
  106. package/lib/commonjs/toast/use-toast-position.js.map +1 -0
  107. package/lib/commonjs/tooltip/index.web.js +2 -1
  108. package/lib/commonjs/tooltip/index.web.js.map +1 -1
  109. package/lib/commonjs/zoomable-image-gallery/ZoomableImageGallery.js +20 -8
  110. package/lib/commonjs/zoomable-image-gallery/ZoomableImageGallery.js.map +1 -1
  111. package/lib/module/avatar-group/AvatarGroup.web.js +2 -1
  112. package/lib/module/avatar-group/AvatarGroup.web.js.map +1 -1
  113. package/lib/module/bottom-sheet/index.web.js +2 -1
  114. package/lib/module/bottom-sheet/index.web.js.map +1 -1
  115. package/lib/module/context-menu/index.web.js +3 -2
  116. package/lib/module/context-menu/index.web.js.map +1 -1
  117. package/lib/module/dialog/Dialog.web.js +4 -3
  118. package/lib/module/dialog/Dialog.web.js.map +1 -1
  119. package/lib/module/index.js +3 -2
  120. package/lib/module/index.js.map +1 -1
  121. package/lib/module/index.web.js +3 -2
  122. package/lib/module/index.web.js.map +1 -1
  123. package/lib/module/menu/index.web.js +2 -1
  124. package/lib/module/menu/index.web.js.map +1 -1
  125. package/lib/module/popover/index.web.js +3 -2
  126. package/lib/module/popover/index.web.js.map +1 -1
  127. package/lib/module/portal/index.js +4 -1
  128. package/lib/module/portal/index.js.map +1 -1
  129. package/lib/module/progressive-blur/index.js +74 -0
  130. package/lib/module/progressive-blur/index.js.map +1 -0
  131. package/lib/module/progressive-blur/index.web.js +62 -0
  132. package/lib/module/progressive-blur/index.web.js.map +1 -0
  133. package/lib/module/progressive-blur/shared.js +60 -0
  134. package/lib/module/progressive-blur/shared.js.map +1 -0
  135. package/lib/module/progressive-blur/types.js +4 -0
  136. package/lib/module/progressive-blur/types.js.map +1 -0
  137. package/lib/module/select/index.web.js +2 -1
  138. package/lib/module/select/index.web.js.map +1 -1
  139. package/lib/module/styles/web-view-style.js +22 -0
  140. package/lib/module/styles/web-view-style.js.map +1 -0
  141. package/lib/module/tab-bar/TabBarBase.js +408 -0
  142. package/lib/module/tab-bar/TabBarBase.js.map +1 -0
  143. package/lib/module/tab-bar/expo-router/RouterTabBar.js +78 -0
  144. package/lib/module/tab-bar/expo-router/RouterTabBar.js.map +1 -0
  145. package/lib/module/tab-bar/expo-router/fading-tab-screen.js +113 -0
  146. package/lib/module/tab-bar/expo-router/fading-tab-screen.js.map +1 -0
  147. package/lib/module/tab-bar/expo-router/index.js +15 -0
  148. package/lib/module/tab-bar/expo-router/index.js.map +1 -0
  149. package/lib/module/tab-bar/glyph.js +38 -0
  150. package/lib/module/tab-bar/glyph.js.map +1 -0
  151. package/lib/module/tab-bar/glyph.native.js +50 -0
  152. package/lib/module/tab-bar/glyph.native.js.map +1 -0
  153. package/lib/module/tab-bar/index.js +24 -0
  154. package/lib/module/tab-bar/index.js.map +1 -0
  155. package/lib/module/tab-bar/index.web.js +26 -0
  156. package/lib/module/tab-bar/index.web.js.map +1 -0
  157. package/lib/module/tab-bar/minimize-context.js +118 -0
  158. package/lib/module/tab-bar/minimize-context.js.map +1 -0
  159. package/lib/module/tab-bar/shared.js +132 -0
  160. package/lib/module/tab-bar/shared.js.map +1 -0
  161. package/lib/module/tab-bar/surface.js +44 -0
  162. package/lib/module/tab-bar/surface.js.map +1 -0
  163. package/lib/module/tab-bar/surface.native.js +50 -0
  164. package/lib/module/tab-bar/surface.native.js.map +1 -0
  165. package/lib/module/tab-bar/surface.web.js +53 -0
  166. package/lib/module/tab-bar/surface.web.js.map +1 -0
  167. package/lib/module/tab-bar/types.js +4 -0
  168. package/lib/module/tab-bar/types.js.map +1 -0
  169. package/lib/module/toast/Positioner.js +110 -0
  170. package/lib/module/toast/Positioner.js.map +1 -0
  171. package/lib/module/toast/ToastContent.js +295 -0
  172. package/lib/module/toast/ToastContent.js.map +1 -0
  173. package/lib/module/toast/ToastHost.js +63 -0
  174. package/lib/module/toast/ToastHost.js.map +1 -0
  175. package/lib/module/toast/ToastHost.native.js +38 -0
  176. package/lib/module/toast/ToastHost.native.js.map +1 -0
  177. package/lib/module/toast/ToastIcon.js +52 -0
  178. package/lib/module/toast/ToastIcon.js.map +1 -0
  179. package/lib/module/toast/ToastRow.js +407 -0
  180. package/lib/module/toast/ToastRow.js.map +1 -0
  181. package/lib/module/toast/ToastSwipeHandler.js +182 -0
  182. package/lib/module/toast/ToastSwipeHandler.js.map +1 -0
  183. package/lib/module/toast/Toaster.js +198 -0
  184. package/lib/module/toast/Toaster.js.map +1 -0
  185. package/lib/module/toast/animations.js +261 -0
  186. package/lib/module/toast/animations.js.map +1 -0
  187. package/lib/module/toast/constants.js +52 -0
  188. package/lib/module/toast/constants.js.map +1 -0
  189. package/lib/module/toast/context.js +34 -0
  190. package/lib/module/toast/context.js.map +1 -0
  191. package/lib/module/toast/index.js +27 -103
  192. package/lib/module/toast/index.js.map +1 -1
  193. package/lib/module/toast/position-utils.js +107 -0
  194. package/lib/module/toast/position-utils.js.map +1 -0
  195. package/lib/module/toast/positioner-utils.js +134 -0
  196. package/lib/module/toast/positioner-utils.js.map +1 -0
  197. package/lib/module/toast/toast-comparator.js +22 -0
  198. package/lib/module/toast/toast-comparator.js.map +1 -0
  199. package/lib/module/toast/toast-fns.js +85 -0
  200. package/lib/module/toast/toast-fns.js.map +1 -0
  201. package/lib/module/toast/toast-store.js +346 -0
  202. package/lib/module/toast/toast-store.js.map +1 -0
  203. package/lib/module/toast/toast-timers.js +104 -0
  204. package/lib/module/toast/toast-timers.js.map +1 -0
  205. package/lib/module/toast/types.js +38 -0
  206. package/lib/module/toast/types.js.map +1 -1
  207. package/lib/module/toast/use-animated-target.js +52 -0
  208. package/lib/module/toast/use-animated-target.js.map +1 -0
  209. package/lib/module/toast/use-app-state.js +70 -0
  210. package/lib/module/toast/use-app-state.js.map +1 -0
  211. package/lib/module/toast/use-toast-colors.js +109 -0
  212. package/lib/module/toast/use-toast-colors.js.map +1 -0
  213. package/lib/module/toast/use-toast-position.js +35 -0
  214. package/lib/module/toast/use-toast-position.js.map +1 -0
  215. package/lib/module/tooltip/index.web.js +2 -1
  216. package/lib/module/tooltip/index.web.js.map +1 -1
  217. package/lib/module/zoomable-image-gallery/ZoomableImageGallery.js +20 -8
  218. package/lib/module/zoomable-image-gallery/ZoomableImageGallery.js.map +1 -1
  219. package/lib/typescript/commonjs/avatar-group/AvatarGroup.web.d.ts.map +1 -1
  220. package/lib/typescript/commonjs/bottom-sheet/index.web.d.ts.map +1 -1
  221. package/lib/typescript/commonjs/context-menu/index.web.d.ts.map +1 -1
  222. package/lib/typescript/commonjs/dialog/Dialog.web.d.ts.map +1 -1
  223. package/lib/typescript/commonjs/index.d.ts +2 -1
  224. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  225. package/lib/typescript/commonjs/index.web.d.ts +2 -1
  226. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  227. package/lib/typescript/commonjs/menu/index.web.d.ts.map +1 -1
  228. package/lib/typescript/commonjs/popover/index.web.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/portal/index.d.ts.map +1 -1
  230. package/lib/typescript/commonjs/progressive-blur/index.d.ts +23 -0
  231. package/lib/typescript/commonjs/progressive-blur/index.d.ts.map +1 -0
  232. package/lib/typescript/commonjs/progressive-blur/index.web.d.ts +30 -0
  233. package/lib/typescript/commonjs/progressive-blur/index.web.d.ts.map +1 -0
  234. package/lib/typescript/commonjs/progressive-blur/shared.d.ts +35 -0
  235. package/lib/typescript/commonjs/progressive-blur/shared.d.ts.map +1 -0
  236. package/lib/typescript/commonjs/progressive-blur/types.d.ts +21 -0
  237. package/lib/typescript/commonjs/progressive-blur/types.d.ts.map +1 -0
  238. package/lib/typescript/commonjs/select/index.web.d.ts.map +1 -1
  239. package/lib/typescript/commonjs/styles/web-view-style.d.ts +21 -0
  240. package/lib/typescript/commonjs/styles/web-view-style.d.ts.map +1 -0
  241. package/lib/typescript/commonjs/tab-bar/TabBarBase.d.ts +36 -0
  242. package/lib/typescript/commonjs/tab-bar/TabBarBase.d.ts.map +1 -0
  243. package/lib/typescript/commonjs/tab-bar/expo-router/RouterTabBar.d.ts +59 -0
  244. package/lib/typescript/commonjs/tab-bar/expo-router/RouterTabBar.d.ts.map +1 -0
  245. package/lib/typescript/commonjs/tab-bar/expo-router/fading-tab-screen.d.ts +11 -0
  246. package/lib/typescript/commonjs/tab-bar/expo-router/fading-tab-screen.d.ts.map +1 -0
  247. package/lib/typescript/commonjs/tab-bar/expo-router/index.d.ts +14 -0
  248. package/lib/typescript/commonjs/tab-bar/expo-router/index.d.ts.map +1 -0
  249. package/lib/typescript/commonjs/tab-bar/glyph.d.ts +6 -0
  250. package/lib/typescript/commonjs/tab-bar/glyph.d.ts.map +1 -0
  251. package/lib/typescript/commonjs/tab-bar/glyph.native.d.ts +6 -0
  252. package/lib/typescript/commonjs/tab-bar/glyph.native.d.ts.map +1 -0
  253. package/lib/typescript/commonjs/tab-bar/index.d.ts +12 -0
  254. package/lib/typescript/commonjs/tab-bar/index.d.ts.map +1 -0
  255. package/lib/typescript/commonjs/tab-bar/index.web.d.ts +12 -0
  256. package/lib/typescript/commonjs/tab-bar/index.web.d.ts.map +1 -0
  257. package/lib/typescript/commonjs/tab-bar/minimize-context.d.ts +51 -0
  258. package/lib/typescript/commonjs/tab-bar/minimize-context.d.ts.map +1 -0
  259. package/lib/typescript/commonjs/tab-bar/shared.d.ts +93 -0
  260. package/lib/typescript/commonjs/tab-bar/shared.d.ts.map +1 -0
  261. package/lib/typescript/commonjs/tab-bar/surface.d.ts +6 -0
  262. package/lib/typescript/commonjs/tab-bar/surface.d.ts.map +1 -0
  263. package/lib/typescript/commonjs/tab-bar/surface.native.d.ts +6 -0
  264. package/lib/typescript/commonjs/tab-bar/surface.native.d.ts.map +1 -0
  265. package/lib/typescript/commonjs/tab-bar/surface.web.d.ts +6 -0
  266. package/lib/typescript/commonjs/tab-bar/surface.web.d.ts.map +1 -0
  267. package/lib/typescript/commonjs/tab-bar/types.d.ts +85 -0
  268. package/lib/typescript/commonjs/tab-bar/types.d.ts.map +1 -0
  269. package/lib/typescript/commonjs/toast/Positioner.d.ts +21 -0
  270. package/lib/typescript/commonjs/toast/Positioner.d.ts.map +1 -0
  271. package/lib/typescript/commonjs/toast/ToastContent.d.ts +14 -0
  272. package/lib/typescript/commonjs/toast/ToastContent.d.ts.map +1 -0
  273. package/lib/typescript/commonjs/toast/ToastHost.d.ts +6 -0
  274. package/lib/typescript/commonjs/toast/ToastHost.d.ts.map +1 -0
  275. package/lib/typescript/commonjs/toast/ToastHost.native.d.ts +6 -0
  276. package/lib/typescript/commonjs/toast/ToastHost.native.d.ts.map +1 -0
  277. package/lib/typescript/commonjs/toast/ToastIcon.d.ts +9 -0
  278. package/lib/typescript/commonjs/toast/ToastIcon.d.ts.map +1 -0
  279. package/lib/typescript/commonjs/toast/ToastRow.d.ts +80 -0
  280. package/lib/typescript/commonjs/toast/ToastRow.d.ts.map +1 -0
  281. package/lib/typescript/commonjs/toast/ToastSwipeHandler.d.ts +30 -0
  282. package/lib/typescript/commonjs/toast/ToastSwipeHandler.d.ts.map +1 -0
  283. package/lib/typescript/commonjs/toast/Toaster.d.ts +19 -0
  284. package/lib/typescript/commonjs/toast/Toaster.d.ts.map +1 -0
  285. package/lib/typescript/commonjs/toast/animations.d.ts +62 -0
  286. package/lib/typescript/commonjs/toast/animations.d.ts.map +1 -0
  287. package/lib/typescript/commonjs/toast/constants.d.ts +39 -0
  288. package/lib/typescript/commonjs/toast/constants.d.ts.map +1 -0
  289. package/lib/typescript/commonjs/toast/context.d.ts +19 -0
  290. package/lib/typescript/commonjs/toast/context.d.ts.map +1 -0
  291. package/lib/typescript/commonjs/toast/index.d.ts +23 -76
  292. package/lib/typescript/commonjs/toast/index.d.ts.map +1 -1
  293. package/lib/typescript/commonjs/toast/position-utils.d.ts +30 -0
  294. package/lib/typescript/commonjs/toast/position-utils.d.ts.map +1 -0
  295. package/lib/typescript/commonjs/toast/positioner-utils.d.ts +72 -0
  296. package/lib/typescript/commonjs/toast/positioner-utils.d.ts.map +1 -0
  297. package/lib/typescript/commonjs/toast/toast-comparator.d.ts +12 -0
  298. package/lib/typescript/commonjs/toast/toast-comparator.d.ts.map +1 -0
  299. package/lib/typescript/commonjs/toast/toast-fns.d.ts +3 -0
  300. package/lib/typescript/commonjs/toast/toast-fns.d.ts.map +1 -0
  301. package/lib/typescript/commonjs/toast/toast-store.d.ts +52 -0
  302. package/lib/typescript/commonjs/toast/toast-store.d.ts.map +1 -0
  303. package/lib/typescript/commonjs/toast/toast-timers.d.ts +24 -0
  304. package/lib/typescript/commonjs/toast/toast-timers.d.ts.map +1 -0
  305. package/lib/typescript/commonjs/toast/types.d.ts +222 -5
  306. package/lib/typescript/commonjs/toast/types.d.ts.map +1 -1
  307. package/lib/typescript/commonjs/toast/use-animated-target.d.ts +7 -0
  308. package/lib/typescript/commonjs/toast/use-animated-target.d.ts.map +1 -0
  309. package/lib/typescript/commonjs/toast/use-app-state.d.ts +18 -0
  310. package/lib/typescript/commonjs/toast/use-app-state.d.ts.map +1 -0
  311. package/lib/typescript/commonjs/toast/use-toast-colors.d.ts +22 -0
  312. package/lib/typescript/commonjs/toast/use-toast-colors.d.ts.map +1 -0
  313. package/lib/typescript/commonjs/toast/use-toast-position.d.ts +37 -0
  314. package/lib/typescript/commonjs/toast/use-toast-position.d.ts.map +1 -0
  315. package/lib/typescript/commonjs/tooltip/index.web.d.ts.map +1 -1
  316. package/lib/typescript/commonjs/zoomable-image-gallery/ZoomableImageGallery.d.ts.map +1 -1
  317. package/lib/typescript/module/avatar-group/AvatarGroup.web.d.ts.map +1 -1
  318. package/lib/typescript/module/bottom-sheet/index.web.d.ts.map +1 -1
  319. package/lib/typescript/module/context-menu/index.web.d.ts.map +1 -1
  320. package/lib/typescript/module/dialog/Dialog.web.d.ts.map +1 -1
  321. package/lib/typescript/module/index.d.ts +2 -1
  322. package/lib/typescript/module/index.d.ts.map +1 -1
  323. package/lib/typescript/module/index.web.d.ts +2 -1
  324. package/lib/typescript/module/index.web.d.ts.map +1 -1
  325. package/lib/typescript/module/menu/index.web.d.ts.map +1 -1
  326. package/lib/typescript/module/popover/index.web.d.ts.map +1 -1
  327. package/lib/typescript/module/portal/index.d.ts.map +1 -1
  328. package/lib/typescript/module/progressive-blur/index.d.ts +23 -0
  329. package/lib/typescript/module/progressive-blur/index.d.ts.map +1 -0
  330. package/lib/typescript/module/progressive-blur/index.web.d.ts +30 -0
  331. package/lib/typescript/module/progressive-blur/index.web.d.ts.map +1 -0
  332. package/lib/typescript/module/progressive-blur/shared.d.ts +35 -0
  333. package/lib/typescript/module/progressive-blur/shared.d.ts.map +1 -0
  334. package/lib/typescript/module/progressive-blur/types.d.ts +21 -0
  335. package/lib/typescript/module/progressive-blur/types.d.ts.map +1 -0
  336. package/lib/typescript/module/select/index.web.d.ts.map +1 -1
  337. package/lib/typescript/module/styles/web-view-style.d.ts +21 -0
  338. package/lib/typescript/module/styles/web-view-style.d.ts.map +1 -0
  339. package/lib/typescript/module/tab-bar/TabBarBase.d.ts +36 -0
  340. package/lib/typescript/module/tab-bar/TabBarBase.d.ts.map +1 -0
  341. package/lib/typescript/module/tab-bar/expo-router/RouterTabBar.d.ts +59 -0
  342. package/lib/typescript/module/tab-bar/expo-router/RouterTabBar.d.ts.map +1 -0
  343. package/lib/typescript/module/tab-bar/expo-router/fading-tab-screen.d.ts +11 -0
  344. package/lib/typescript/module/tab-bar/expo-router/fading-tab-screen.d.ts.map +1 -0
  345. package/lib/typescript/module/tab-bar/expo-router/index.d.ts +14 -0
  346. package/lib/typescript/module/tab-bar/expo-router/index.d.ts.map +1 -0
  347. package/lib/typescript/module/tab-bar/glyph.d.ts +6 -0
  348. package/lib/typescript/module/tab-bar/glyph.d.ts.map +1 -0
  349. package/lib/typescript/module/tab-bar/glyph.native.d.ts +6 -0
  350. package/lib/typescript/module/tab-bar/glyph.native.d.ts.map +1 -0
  351. package/lib/typescript/module/tab-bar/index.d.ts +12 -0
  352. package/lib/typescript/module/tab-bar/index.d.ts.map +1 -0
  353. package/lib/typescript/module/tab-bar/index.web.d.ts +12 -0
  354. package/lib/typescript/module/tab-bar/index.web.d.ts.map +1 -0
  355. package/lib/typescript/module/tab-bar/minimize-context.d.ts +51 -0
  356. package/lib/typescript/module/tab-bar/minimize-context.d.ts.map +1 -0
  357. package/lib/typescript/module/tab-bar/shared.d.ts +93 -0
  358. package/lib/typescript/module/tab-bar/shared.d.ts.map +1 -0
  359. package/lib/typescript/module/tab-bar/surface.d.ts +6 -0
  360. package/lib/typescript/module/tab-bar/surface.d.ts.map +1 -0
  361. package/lib/typescript/module/tab-bar/surface.native.d.ts +6 -0
  362. package/lib/typescript/module/tab-bar/surface.native.d.ts.map +1 -0
  363. package/lib/typescript/module/tab-bar/surface.web.d.ts +6 -0
  364. package/lib/typescript/module/tab-bar/surface.web.d.ts.map +1 -0
  365. package/lib/typescript/module/tab-bar/types.d.ts +85 -0
  366. package/lib/typescript/module/tab-bar/types.d.ts.map +1 -0
  367. package/lib/typescript/module/toast/Positioner.d.ts +21 -0
  368. package/lib/typescript/module/toast/Positioner.d.ts.map +1 -0
  369. package/lib/typescript/module/toast/ToastContent.d.ts +14 -0
  370. package/lib/typescript/module/toast/ToastContent.d.ts.map +1 -0
  371. package/lib/typescript/module/toast/ToastHost.d.ts +6 -0
  372. package/lib/typescript/module/toast/ToastHost.d.ts.map +1 -0
  373. package/lib/typescript/module/toast/ToastHost.native.d.ts +6 -0
  374. package/lib/typescript/module/toast/ToastHost.native.d.ts.map +1 -0
  375. package/lib/typescript/module/toast/ToastIcon.d.ts +9 -0
  376. package/lib/typescript/module/toast/ToastIcon.d.ts.map +1 -0
  377. package/lib/typescript/module/toast/ToastRow.d.ts +80 -0
  378. package/lib/typescript/module/toast/ToastRow.d.ts.map +1 -0
  379. package/lib/typescript/module/toast/ToastSwipeHandler.d.ts +30 -0
  380. package/lib/typescript/module/toast/ToastSwipeHandler.d.ts.map +1 -0
  381. package/lib/typescript/module/toast/Toaster.d.ts +19 -0
  382. package/lib/typescript/module/toast/Toaster.d.ts.map +1 -0
  383. package/lib/typescript/module/toast/animations.d.ts +62 -0
  384. package/lib/typescript/module/toast/animations.d.ts.map +1 -0
  385. package/lib/typescript/module/toast/constants.d.ts +39 -0
  386. package/lib/typescript/module/toast/constants.d.ts.map +1 -0
  387. package/lib/typescript/module/toast/context.d.ts +19 -0
  388. package/lib/typescript/module/toast/context.d.ts.map +1 -0
  389. package/lib/typescript/module/toast/index.d.ts +23 -76
  390. package/lib/typescript/module/toast/index.d.ts.map +1 -1
  391. package/lib/typescript/module/toast/position-utils.d.ts +30 -0
  392. package/lib/typescript/module/toast/position-utils.d.ts.map +1 -0
  393. package/lib/typescript/module/toast/positioner-utils.d.ts +72 -0
  394. package/lib/typescript/module/toast/positioner-utils.d.ts.map +1 -0
  395. package/lib/typescript/module/toast/toast-comparator.d.ts +12 -0
  396. package/lib/typescript/module/toast/toast-comparator.d.ts.map +1 -0
  397. package/lib/typescript/module/toast/toast-fns.d.ts +3 -0
  398. package/lib/typescript/module/toast/toast-fns.d.ts.map +1 -0
  399. package/lib/typescript/module/toast/toast-store.d.ts +52 -0
  400. package/lib/typescript/module/toast/toast-store.d.ts.map +1 -0
  401. package/lib/typescript/module/toast/toast-timers.d.ts +24 -0
  402. package/lib/typescript/module/toast/toast-timers.d.ts.map +1 -0
  403. package/lib/typescript/module/toast/types.d.ts +222 -5
  404. package/lib/typescript/module/toast/types.d.ts.map +1 -1
  405. package/lib/typescript/module/toast/use-animated-target.d.ts +7 -0
  406. package/lib/typescript/module/toast/use-animated-target.d.ts.map +1 -0
  407. package/lib/typescript/module/toast/use-app-state.d.ts +18 -0
  408. package/lib/typescript/module/toast/use-app-state.d.ts.map +1 -0
  409. package/lib/typescript/module/toast/use-toast-colors.d.ts +22 -0
  410. package/lib/typescript/module/toast/use-toast-colors.d.ts.map +1 -0
  411. package/lib/typescript/module/toast/use-toast-position.d.ts +37 -0
  412. package/lib/typescript/module/toast/use-toast-position.d.ts.map +1 -0
  413. package/lib/typescript/module/tooltip/index.web.d.ts.map +1 -1
  414. package/lib/typescript/module/zoomable-image-gallery/ZoomableImageGallery.d.ts.map +1 -1
  415. package/package.json +63 -25
  416. package/src/__tests__/TabBar.test.tsx +342 -0
  417. package/src/__tests__/TabBarReanimatedDeps.test.ts +130 -0
  418. package/src/__tests__/TabBarWebFork.test.ts +197 -0
  419. package/src/__tests__/ToastContent.test.tsx +192 -0
  420. package/src/__tests__/ToastHostWebFork.test.ts +155 -0
  421. package/src/__tests__/Toaster.test.tsx +527 -0
  422. package/src/__tests__/animated-style-deps.test.ts +156 -0
  423. package/src/__tests__/toast-animations.test.ts +98 -0
  424. package/src/__tests__/toast-comparator.test.ts +131 -0
  425. package/src/__tests__/toast-enter-driver.test.ts +147 -0
  426. package/src/__tests__/toast-fns.test.ts +240 -0
  427. package/src/__tests__/toast-position-utils.test.ts +259 -0
  428. package/src/__tests__/toast-positioner-utils.test.ts +214 -0
  429. package/src/__tests__/toast-store.test.ts +622 -0
  430. package/src/__tests__/toast-timers.test.ts +163 -0
  431. package/src/__tests__/use-animated-target.test.tsx +60 -0
  432. package/src/__tests__/use-app-state.test.tsx +127 -0
  433. package/src/__tests__/use-toast-colors.test.tsx +189 -0
  434. package/src/__tests__/web-position-fixed.test.ts +70 -0
  435. package/src/avatar-group/AvatarGroup.web.tsx +2 -1
  436. package/src/bottom-sheet/index.web.tsx +3 -2
  437. package/src/context-menu/index.web.tsx +3 -2
  438. package/src/dialog/Dialog.web.tsx +4 -3
  439. package/src/index.ts +4 -1
  440. package/src/index.web.ts +4 -1
  441. package/src/menu/index.web.tsx +2 -1
  442. package/src/popover/index.web.tsx +3 -2
  443. package/src/portal/index.tsx +4 -1
  444. package/src/progressive-blur/index.tsx +78 -0
  445. package/src/progressive-blur/index.web.tsx +65 -0
  446. package/src/progressive-blur/shared.ts +81 -0
  447. package/src/progressive-blur/types.ts +21 -0
  448. package/src/select/index.web.tsx +2 -1
  449. package/src/styles/web-view-style.ts +21 -0
  450. package/src/tab-bar/TabBar.stories.tsx +217 -0
  451. package/src/tab-bar/TabBarBase.tsx +517 -0
  452. package/src/tab-bar/expo-router/RouterTabBar.tsx +80 -0
  453. package/src/tab-bar/expo-router/fading-tab-screen.tsx +109 -0
  454. package/src/tab-bar/expo-router/index.ts +13 -0
  455. package/src/tab-bar/glyph.native.tsx +46 -0
  456. package/src/tab-bar/glyph.tsx +31 -0
  457. package/src/tab-bar/index.ts +32 -0
  458. package/src/tab-bar/index.web.tsx +34 -0
  459. package/src/tab-bar/minimize-context.tsx +117 -0
  460. package/src/tab-bar/shared.ts +159 -0
  461. package/src/tab-bar/surface.native.tsx +60 -0
  462. package/src/tab-bar/surface.tsx +47 -0
  463. package/src/tab-bar/surface.web.tsx +56 -0
  464. package/src/tab-bar/types.ts +88 -0
  465. package/src/toast/Positioner.tsx +121 -0
  466. package/src/toast/Toast.stories.tsx +292 -65
  467. package/src/toast/ToastContent.tsx +405 -0
  468. package/src/toast/ToastHost.native.tsx +31 -0
  469. package/src/toast/ToastHost.tsx +67 -0
  470. package/src/toast/ToastIcon.tsx +55 -0
  471. package/src/toast/ToastRow.tsx +485 -0
  472. package/src/toast/ToastSwipeHandler.tsx +222 -0
  473. package/src/toast/Toaster.tsx +259 -0
  474. package/src/toast/animations.ts +313 -0
  475. package/src/toast/constants.ts +76 -0
  476. package/src/toast/context.tsx +44 -0
  477. package/src/toast/index.tsx +47 -123
  478. package/src/toast/position-utils.ts +149 -0
  479. package/src/toast/positioner-utils.ts +142 -0
  480. package/src/toast/toast-comparator.ts +41 -0
  481. package/src/toast/toast-fns.ts +104 -0
  482. package/src/toast/toast-store.ts +432 -0
  483. package/src/toast/toast-timers.ts +124 -0
  484. package/src/toast/types.ts +301 -5
  485. package/src/toast/use-animated-target.ts +61 -0
  486. package/src/toast/use-app-state.ts +77 -0
  487. package/src/toast/use-toast-colors.ts +133 -0
  488. package/src/toast/use-toast-position.ts +46 -0
  489. package/src/tooltip/index.web.tsx +2 -1
  490. package/src/zoomable-image-gallery/ZoomableImageGallery.stories.tsx +134 -0
  491. package/src/zoomable-image-gallery/ZoomableImageGallery.tsx +50 -27
  492. package/lib/commonjs/toast/Toast.js +0 -267
  493. package/lib/commonjs/toast/Toast.js.map +0 -1
  494. package/lib/commonjs/toast/const.js +0 -8
  495. package/lib/commonjs/toast/const.js.map +0 -1
  496. package/lib/commonjs/toast/index.web.js +0 -114
  497. package/lib/commonjs/toast/index.web.js.map +0 -1
  498. package/lib/commonjs/toast/sonner/index.js +0 -9
  499. package/lib/commonjs/toast/sonner/index.js.map +0 -1
  500. package/lib/commonjs/toast/sonner/index.web.js +0 -9
  501. package/lib/commonjs/toast/sonner/index.web.js.map +0 -1
  502. package/lib/module/toast/Toast.js +0 -258
  503. package/lib/module/toast/Toast.js.map +0 -1
  504. package/lib/module/toast/const.js +0 -4
  505. package/lib/module/toast/const.js.map +0 -1
  506. package/lib/module/toast/index.web.js +0 -74
  507. package/lib/module/toast/index.web.js.map +0 -1
  508. package/lib/module/toast/sonner/index.js +0 -5
  509. package/lib/module/toast/sonner/index.js.map +0 -1
  510. package/lib/module/toast/sonner/index.web.js +0 -5
  511. package/lib/module/toast/sonner/index.web.js.map +0 -1
  512. package/lib/typescript/commonjs/toast/Toast.d.ts +0 -23
  513. package/lib/typescript/commonjs/toast/Toast.d.ts.map +0 -1
  514. package/lib/typescript/commonjs/toast/const.d.ts +0 -2
  515. package/lib/typescript/commonjs/toast/const.d.ts.map +0 -1
  516. package/lib/typescript/commonjs/toast/index.web.d.ts +0 -29
  517. package/lib/typescript/commonjs/toast/index.web.d.ts.map +0 -1
  518. package/lib/typescript/commonjs/toast/sonner/index.d.ts +0 -2
  519. package/lib/typescript/commonjs/toast/sonner/index.d.ts.map +0 -1
  520. package/lib/typescript/commonjs/toast/sonner/index.web.d.ts +0 -2
  521. package/lib/typescript/commonjs/toast/sonner/index.web.d.ts.map +0 -1
  522. package/lib/typescript/module/toast/Toast.d.ts +0 -23
  523. package/lib/typescript/module/toast/Toast.d.ts.map +0 -1
  524. package/lib/typescript/module/toast/const.d.ts +0 -2
  525. package/lib/typescript/module/toast/const.d.ts.map +0 -1
  526. package/lib/typescript/module/toast/index.web.d.ts +0 -29
  527. package/lib/typescript/module/toast/index.web.d.ts.map +0 -1
  528. package/lib/typescript/module/toast/sonner/index.d.ts +0 -2
  529. package/lib/typescript/module/toast/sonner/index.d.ts.map +0 -1
  530. package/lib/typescript/module/toast/sonner/index.web.d.ts +0 -2
  531. package/lib/typescript/module/toast/sonner/index.web.d.ts.map +0 -1
  532. package/src/toast/Toast.tsx +0 -269
  533. package/src/toast/const.ts +0 -1
  534. package/src/toast/index.web.tsx +0 -101
  535. package/src/toast/sonner/index.ts +0 -3
  536. package/src/toast/sonner/index.web.ts +0 -3
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createTabBar = createTabBar;
7
+ exports.createTabBarButton = createTabBarButton;
8
+ var _react = require("react");
9
+ var _reactNative = require("react-native");
10
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
11
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
12
+ var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
13
+ var _useHaptics = require("../hooks/useHaptics.js");
14
+ var _minimizeContext = require("./minimize-context.js");
15
+ var _shared = require("./shared.js");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
18
+ /**
19
+ * Ported from expo-glass-tabs v0.1.1 — src/glass-tab-bar.tsx
20
+ * (MIT © 2026 David Mokos). See the top-level NOTICE.
21
+ *
22
+ * The platform-agnostic body of the floating tab bar: gestures, springs, every
23
+ * animated style, the highlight geometry and the button. The only pieces that
24
+ * differ per platform are injected as component props — the capsule `Surface`
25
+ * (liquid glass on iOS 26, backdrop-filter on web, a solid fill everywhere
26
+ * else), the `Blur` behind the bar, and the `Glyph` (SF Symbol on iOS, the
27
+ * item's own icon node elsewhere). Same shape as `BottomSheetBase`'s `Shell`.
28
+ *
29
+ * Nothing here imports expo-glass-effect, expo-symbols, expo-router or
30
+ * react-native-screens, so this file is safe in a web bundle and in a
31
+ * consumer's type-check.
32
+ */
33
+
34
+ /**
35
+ * What a `TabBarButton` needs from the bar it sits in. `null` when a button is
36
+ * rendered standalone, which keeps a lone button usable (it just falls back to
37
+ * its own `isFocused` for tinting and has no highlight to drive).
38
+ */
39
+
40
+ const BarContext = /*#__PURE__*/(0, _react.createContext)(null);
41
+ /**
42
+ * Floating tab bar with Revolut-style minimize-on-scroll, a sliding highlight
43
+ * and finger scrubbing.
44
+ */
45
+ function TabBarBody({
46
+ Surface,
47
+ Blur,
48
+ children,
49
+ activeIndex,
50
+ onIndexChange,
51
+ theme: themeOverrides,
52
+ haptics = true,
53
+ style,
54
+ ...viewProps
55
+ }) {
56
+ const insets = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
57
+ const {
58
+ width: windowWidth
59
+ } = (0, _reactNative.useWindowDimensions)();
60
+ const minimized = (0, _minimizeContext.useMinimizeState)();
61
+ const progress = minimized.progress;
62
+ const slideIndex = (0, _reactNativeReanimated.useSharedValue)(0);
63
+ const isDragging = (0, _reactNativeReanimated.useSharedValue)(false);
64
+ const lastTicked = (0, _reactNativeReanimated.useSharedValue)(-1);
65
+ const tabCount = Math.max(_react.Children.count(children), 1);
66
+ const theme = (0, _shared.useTabBarTheme)(themeOverrides);
67
+ const impact = (0, _useHaptics.useHaptics)();
68
+
69
+ // Picker-style tick while the highlight crosses tab boundaries mid-drag.
70
+ // `useHaptics` already no-ops on web, when the optional `expo-haptics` peer
71
+ // is absent, and when a `BloomHapticsProvider` has haptics turned off — so
72
+ // the only decision left here is the caller's own `haptics` prop.
73
+ const tick = (0, _react.useCallback)(() => {
74
+ if (haptics) impact('light');
75
+ }, [haptics, impact]);
76
+
77
+ // Navigation happens only on release — switching screens live while
78
+ // scrubbing makes the content jump under the finger.
79
+ const selectIndex = (0, _react.useCallback)(index => onIndexChange?.(index), [onIndexChange]);
80
+
81
+ // CONTROLLED path: the bar owns the highlight when `activeIndex` is provided,
82
+ // so it tracks the prop even when a consumer renders custom children instead
83
+ // of `TabBarButton`s. Syncing an imperative animation to a controlled prop is
84
+ // a legitimate effect (external-system sync), the same shape `Tabs` uses for
85
+ // its underline. The focus-driven path is handled per-button instead — see
86
+ // `TabBarButtonBody`.
87
+ (0, _react.useEffect)(() => {
88
+ if (activeIndex === undefined) return;
89
+ // While scrubbing the finger owns the highlight; never fight it.
90
+ if (isDragging.value) return;
91
+ slideIndex.value = (0, _reactNativeReanimated.withSpring)(activeIndex, _shared.SLIDE_SPRING);
92
+ }, [activeIndex, slideIndex, isDragging]);
93
+
94
+ // Scrubbing: the highlight tracks the finger 1:1 while dragging (no spring —
95
+ // it must feel attached), haptic ticks fire on boundary crossings, and
96
+ // navigation happens only on release. Taps are handled by a Tap gesture
97
+ // racing the pan — the detector consumes the bar's touches, so the inner
98
+ // Pressables never receive them.
99
+ const gesture = (0, _react.useMemo)(() => {
100
+ const indexAtX = (x, minimizedValue) => {
101
+ 'worklet';
102
+
103
+ const sideInset = (0, _reactNativeReanimated.interpolate)(minimizedValue, [0, 1], [0, _shared.MINIMIZED_INSET], _reactNativeReanimated.Extrapolation.CLAMP);
104
+ const barWidth = windowWidth - _shared.BAR_MARGIN * 2 - sideInset * 2;
105
+ const itemWidth = (barWidth - _shared.ROW_PAD_H * 2) / tabCount;
106
+ const raw = (x - _shared.ROW_PAD_H) / itemWidth - 0.5;
107
+ return Math.min(Math.max(raw, 0), tabCount - 1);
108
+ };
109
+ const pan = _reactNativeGestureHandler.Gesture.Pan().activeOffsetX([-6, 6]).failOffsetY([-14, 14]).onStart(() => {
110
+ isDragging.value = true;
111
+ lastTicked.value = Math.round(slideIndex.value);
112
+ // Scrubbing is a deliberate bar interaction — surface the labels.
113
+ (0, _minimizeContext.setMinimized)(minimized, 0);
114
+ }).onUpdate(event => {
115
+ const index = indexAtX(event.x, progress.value);
116
+ slideIndex.value = index;
117
+ const rounded = Math.round(index);
118
+ if (rounded !== lastTicked.value) {
119
+ lastTicked.value = rounded;
120
+ (0, _reactNativeReanimated.runOnJS)(tick)();
121
+ }
122
+ }).onFinalize(() => {
123
+ // Fires on failure too (e.g. the touch was a tap) — only act when the
124
+ // pan actually activated, or we'd stomp the tap's navigation.
125
+ if (!isDragging.value) {
126
+ return;
127
+ }
128
+ const rounded = Math.round(slideIndex.value);
129
+ slideIndex.value = (0, _reactNativeReanimated.withSpring)(rounded, _shared.SLIDE_SPRING);
130
+ (0, _reactNativeReanimated.runOnJS)(selectIndex)(rounded);
131
+ isDragging.value = false;
132
+ });
133
+ const tap = _reactNativeGestureHandler.Gesture.Tap()
134
+ // Real fingers drift a few points — the default tolerance (~2pt) makes
135
+ // ordinary taps fail. Past 6pt horizontal the pan takes over.
136
+ .maxDistance(16).maxDuration(400).onEnd((event, success) => {
137
+ if (!success) {
138
+ return;
139
+ }
140
+ const index = Math.round(indexAtX(event.x, progress.value));
141
+ slideIndex.value = (0, _reactNativeReanimated.withSpring)(index, _shared.SLIDE_SPRING);
142
+ (0, _minimizeContext.setMinimized)(minimized, 0);
143
+ (0, _reactNativeReanimated.runOnJS)(selectIndex)(index);
144
+ });
145
+ return _reactNativeGestureHandler.Gesture.Race(pan, tap);
146
+ }, [windowWidth, tabCount, selectIndex, tick, isDragging, lastTicked, slideIndex, minimized, progress]);
147
+
148
+ // CRITICAL — every shared value and every scalar a mapper READS must appear
149
+ // in its dependency array. On web WITHOUT the react-native-worklets babel
150
+ // plugin (what every Oxy RN-Web app ships) reanimated cannot auto-detect a
151
+ // worklet's reads, so it drives the mapper off the deps array instead: with a
152
+ // missing or incomplete array the mapper runs ONCE and freezes at the first
153
+ // frame while the shared values keep animating underneath — the bar would
154
+ // never minimize and the highlight would never move, with no error anywhere.
155
+ // Native (plugin present) auto-tracks and ignores the extra deps, so listing
156
+ // them is correct on both platforms. Same rule as `BottomSheetBase` and
157
+ // `ZoomableImageGallery`. Do NOT strip these.
158
+ const barStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
159
+ const height = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [_shared.EXPANDED_HEIGHT, _shared.MINIMIZED_HEIGHT], _reactNativeReanimated.Extrapolation.CLAMP);
160
+ return {
161
+ height,
162
+ // Revolut-style: the pill shrinks in both dimensions.
163
+ marginHorizontal: (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [0, _shared.MINIMIZED_INSET], _reactNativeReanimated.Extrapolation.CLAMP)
164
+ };
165
+ }, [progress]);
166
+
167
+ // The capsule shape lives on the surface itself: iOS 26 glass renders its own
168
+ // native corner configuration (true squircle + rim lighting). Clipping a
169
+ // rectangular glass with an RN mask breaks that.
170
+ const shapeStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
171
+ const height = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [_shared.EXPANDED_HEIGHT, _shared.MINIMIZED_HEIGHT], _reactNativeReanimated.Extrapolation.CLAMP);
172
+ return {
173
+ borderRadius: height / 2
174
+ };
175
+ }, [progress]);
176
+
177
+ // One shared highlight that slides between tabs (transform-only → GPU). All
178
+ // geometry derives from shared values, never from layout callbacks.
179
+ const highlightStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
180
+ const barHeight = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [_shared.EXPANDED_HEIGHT, _shared.MINIMIZED_HEIGHT], _reactNativeReanimated.Extrapolation.CLAMP);
181
+ const height = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [_shared.HIGHLIGHT_EXPANDED, _shared.HIGHLIGHT_MINIMIZED], _reactNativeReanimated.Extrapolation.CLAMP);
182
+ const sideInset = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [0, _shared.MINIMIZED_INSET], _reactNativeReanimated.Extrapolation.CLAMP);
183
+ const barWidth = windowWidth - _shared.BAR_MARGIN * 2 - sideInset * 2;
184
+ const itemWidth = (barWidth - _shared.ROW_PAD_H * 2) / tabCount;
185
+ return {
186
+ height,
187
+ width: itemWidth,
188
+ borderRadius: height / 2,
189
+ top: (barHeight - height) / 2,
190
+ transform: [{
191
+ translateX: _shared.ROW_PAD_H + itemWidth * slideIndex.value
192
+ }]
193
+ };
194
+ }, [progress, slideIndex, windowWidth, tabCount]);
195
+ const bottomOffset = Math.max(insets.bottom - 16, 12);
196
+ const barContext = (0, _react.useMemo)(() => ({
197
+ slideIndex,
198
+ isDragging,
199
+ theme,
200
+ activeIndex,
201
+ selectIndex
202
+ }), [slideIndex, isDragging, theme, activeIndex, selectIndex]);
203
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
204
+ ...viewProps,
205
+ style: [styles.root, style],
206
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Blur, {
207
+ direction: "bottom",
208
+ style: {
209
+ position: 'absolute',
210
+ left: 0,
211
+ right: 0,
212
+ bottom: 0,
213
+ height: bottomOffset + _shared.EXPANDED_HEIGHT + _shared.BLUR_BLEED
214
+ }
215
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
216
+ style: [styles.barWrap, {
217
+ marginBottom: bottomOffset
218
+ }],
219
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
220
+ gesture: gesture,
221
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeReanimated.default.View, {
222
+ style: barStyle,
223
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Surface, {
224
+ theme: theme,
225
+ style: shapeStyle
226
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
227
+ style: [styles.highlight, {
228
+ backgroundColor: theme.highlight
229
+ }, highlightStyle]
230
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
231
+ accessibilityRole: "tablist",
232
+ style: styles.itemRow,
233
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BarContext.Provider, {
234
+ value: barContext,
235
+ children: children
236
+ })
237
+ })]
238
+ })
239
+ })
240
+ })]
241
+ });
242
+ }
243
+ /** One tab trigger: icon + label that fades out when the bar minimizes. */
244
+ function TabBarButtonBody({
245
+ Glyph,
246
+ item,
247
+ index,
248
+ isFocused,
249
+ onPress,
250
+ style,
251
+ ...pressableProps
252
+ }) {
253
+ const minimized = (0, _minimizeContext.useMinimizeState)();
254
+ const progress = minimized.progress;
255
+ const bar = (0, _react.useContext)(BarContext);
256
+ // Resolved outside the bar too, so a standalone button still themes itself.
257
+ const standaloneTheme = (0, _shared.useTabBarTheme)();
258
+ const theme = bar?.theme ?? standaloneTheme;
259
+ const slideIndex = bar?.slideIndex;
260
+ // The two paths meet here: an explicit `isFocused` (router adapter) wins;
261
+ // otherwise focus comes from the bar's controlled `activeIndex`.
262
+ const focused = isFocused ?? bar?.activeIndex === index;
263
+
264
+ // FOCUS-DRIVEN path only. Covers programmatic navigation too (deep links,
265
+ // back gestures) — the trigger re-renders focused and the highlight follows.
266
+ // While scrubbing, the finger owns the highlight; never fight it with a
267
+ // spring. On the controlled path the BAR drives the highlight instead, so
268
+ // this stays out of the way to avoid two writers on one shared value.
269
+ (0, _react.useEffect)(() => {
270
+ if (isFocused === undefined || !isFocused || !bar) return;
271
+ if (bar.isDragging.value) return;
272
+ bar.slideIndex.value = (0, _reactNativeReanimated.withSpring)(index, _shared.SLIDE_SPRING);
273
+ }, [isFocused, index, bar]);
274
+
275
+ // Tint follows the sliding highlight, not navigation focus: whatever the pill
276
+ // is over lights up — live while scrubbing, traveling on taps. Without a bar
277
+ // there is nothing to follow, so it falls back to plain focus.
278
+ // (Deps: see the CRITICAL note in `TabBarBody`.)
279
+ const activeGlyphStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
280
+ opacity: slideIndex ? 1 - Math.min(Math.abs(slideIndex.value - index), 1) : focused ? 1 : 0
281
+ }), [slideIndex, index, focused]);
282
+ const labelStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
283
+ opacity: (0, _reactNativeReanimated.interpolate)(progress.value, [0, 0.4], [1, 0], _reactNativeReanimated.Extrapolation.CLAMP),
284
+ color: slideIndex ? (0, _reactNativeReanimated.interpolateColor)(Math.min(Math.abs(slideIndex.value - index), 1), [0, 1], [theme.activeTint, theme.inactiveTint]) : focused ? theme.activeTint : theme.inactiveTint
285
+ }), [progress, slideIndex, index, focused, theme]);
286
+
287
+ // Height is animated EXPLICITLY (not derived from children) so the icon stays
288
+ // perfectly centered every frame — layout-driven sizing lags a frame behind
289
+ // UI-thread animation.
290
+ const boxStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
291
+ height: (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [_shared.HIGHLIGHT_EXPANDED, _shared.HIGHLIGHT_MINIMIZED], _reactNativeReanimated.Extrapolation.CLAMP)
292
+ }), [progress]);
293
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable
294
+ // Accessibility defaults come BEFORE the spread so an explicit prop — or
295
+ // one injected by a router trigger — still wins.
296
+ , {
297
+ accessibilityRole: "tab",
298
+ accessibilityState: {
299
+ selected: focused
300
+ },
301
+ accessibilityLabel: item.label,
302
+ ...pressableProps,
303
+ onPress: event => {
304
+ // The bar's GestureDetector normally consumes touches; this still fires
305
+ // for assistive-technology activation (VoiceOver) and keyboard focus.
306
+ if (bar) bar.slideIndex.value = (0, _reactNativeReanimated.withSpring)(index, _shared.SLIDE_SPRING);
307
+ (0, _minimizeContext.setMinimized)(minimized, 0);
308
+ // Controlled path only. On the focus-driven path the trigger's own
309
+ // `onPress` below performs the navigation, so reporting the selection
310
+ // here as well would navigate twice.
311
+ if (isFocused === undefined) bar?.selectIndex(index);
312
+ onPress?.(event);
313
+ }
314
+ // `Pressable`'s `style` also accepts a function of the press state; both
315
+ // forms are composed on top of the flex-share base so a caller can tint
316
+ // or scale a tab on press without losing the layout.
317
+ ,
318
+ style: typeof style === 'function' ? state => [styles.button, style(state)] : [styles.button, style],
319
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeReanimated.default.View, {
320
+ style: [styles.itemBox, boxStyle],
321
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
322
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Glyph, {
323
+ item: item,
324
+ tint: theme.inactiveTint,
325
+ size: _shared.ICON_SIZE
326
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
327
+ style: [_reactNative.StyleSheet.absoluteFill, styles.glyphLayer, activeGlyphStyle],
328
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Glyph, {
329
+ item: item,
330
+ tint: theme.activeTint,
331
+ size: _shared.ICON_SIZE
332
+ })
333
+ })]
334
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.Text, {
335
+ numberOfLines: 1,
336
+ style: [styles.label, labelStyle],
337
+ children: item.label
338
+ })]
339
+ })
340
+ });
341
+ }
342
+
343
+ /**
344
+ * Bind the platform `Surface` + `Blur` to the shared body, once per entry
345
+ * module. The returned component is created at module scope, so its identity is
346
+ * stable across renders. `index.ts` binds the native/neutral pieces and
347
+ * `index.web.tsx` binds the web pieces explicitly — the same split
348
+ * `BottomSheet` makes with its `Shell`.
349
+ */
350
+ function createTabBar(Surface, Blur) {
351
+ const TabBar = props => /*#__PURE__*/(0, _jsxRuntime.jsx)(TabBarBody, {
352
+ ...props,
353
+ Surface: Surface,
354
+ Blur: Blur
355
+ });
356
+ TabBar.displayName = 'TabBar';
357
+ return TabBar;
358
+ }
359
+
360
+ /** Bind the platform `Glyph` to the shared button body. See `createTabBar`. */
361
+ function createTabBarButton(Glyph) {
362
+ const TabBarButton = props => /*#__PURE__*/(0, _jsxRuntime.jsx)(TabBarButtonBody, {
363
+ ...props,
364
+ Glyph: Glyph
365
+ });
366
+ TabBarButton.displayName = 'TabBarButton';
367
+ return TabBarButton;
368
+ }
369
+ const styles = _reactNative.StyleSheet.create({
370
+ root: {
371
+ position: 'absolute',
372
+ left: 0,
373
+ right: 0,
374
+ bottom: 0,
375
+ // In the style object, not as a prop: RN-Web deprecated the `pointerEvents`
376
+ // prop and warns on every render when it is used.
377
+ pointerEvents: 'box-none'
378
+ },
379
+ barWrap: {
380
+ marginHorizontal: _shared.BAR_MARGIN,
381
+ pointerEvents: 'box-none'
382
+ },
383
+ highlight: {
384
+ position: 'absolute',
385
+ left: 0,
386
+ borderCurve: 'continuous'
387
+ },
388
+ itemRow: {
389
+ flex: 1,
390
+ flexDirection: 'row',
391
+ alignItems: 'center',
392
+ paddingHorizontal: _shared.ROW_PAD_H
393
+ },
394
+ button: {
395
+ flex: 1,
396
+ alignItems: 'center',
397
+ justifyContent: 'center'
398
+ },
399
+ itemBox: {
400
+ alignSelf: 'stretch',
401
+ alignItems: 'center',
402
+ paddingTop: _shared.ITEM_PAD_V,
403
+ overflow: 'hidden'
404
+ },
405
+ glyphLayer: {
406
+ alignItems: 'center',
407
+ justifyContent: 'center'
408
+ },
409
+ label: {
410
+ fontSize: _shared.LABEL_FONT_SIZE,
411
+ fontWeight: '600',
412
+ marginTop: _shared.ITEM_GAP
413
+ }
414
+ });
415
+ //# sourceMappingURL=TabBarBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_reactNativeSafeAreaContext","_useHaptics","_minimizeContext","_shared","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BarContext","createContext","TabBarBody","Surface","Blur","children","activeIndex","onIndexChange","theme","themeOverrides","haptics","style","viewProps","insets","useSafeAreaInsets","width","windowWidth","useWindowDimensions","minimized","useMinimizeState","progress","slideIndex","useSharedValue","isDragging","lastTicked","tabCount","Math","max","Children","count","useTabBarTheme","impact","useHaptics","tick","useCallback","selectIndex","index","useEffect","undefined","value","withSpring","SLIDE_SPRING","gesture","useMemo","indexAtX","x","minimizedValue","sideInset","interpolate","MINIMIZED_INSET","Extrapolation","CLAMP","barWidth","BAR_MARGIN","itemWidth","ROW_PAD_H","raw","min","pan","Gesture","Pan","activeOffsetX","failOffsetY","onStart","round","setMinimized","onUpdate","event","rounded","runOnJS","onFinalize","tap","Tap","maxDistance","maxDuration","onEnd","success","Race","barStyle","useAnimatedStyle","height","EXPANDED_HEIGHT","MINIMIZED_HEIGHT","marginHorizontal","shapeStyle","borderRadius","highlightStyle","barHeight","HIGHLIGHT_EXPANDED","HIGHLIGHT_MINIMIZED","top","transform","translateX","bottomOffset","bottom","barContext","jsxs","View","styles","root","jsx","direction","position","left","right","BLUR_BLEED","barWrap","marginBottom","GestureDetector","highlight","backgroundColor","accessibilityRole","itemRow","Provider","TabBarButtonBody","Glyph","item","isFocused","onPress","pressableProps","bar","useContext","standaloneTheme","focused","activeGlyphStyle","opacity","abs","labelStyle","color","interpolateColor","activeTint","inactiveTint","boxStyle","Pressable","accessibilityState","selected","accessibilityLabel","label","state","button","itemBox","tint","size","ICON_SIZE","StyleSheet","absoluteFill","glyphLayer","Text","numberOfLines","createTabBar","TabBar","props","displayName","createTabBarButton","TabBarButton","create","pointerEvents","borderCurve","flex","flexDirection","alignItems","paddingHorizontal","justifyContent","alignSelf","paddingTop","ITEM_PAD_V","overflow","fontSize","LABEL_FONT_SIZE","fontWeight","marginTop","ITEM_GAP"],"sourceRoot":"../../../src","sources":["tab-bar/TabBarBase.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RouterTabBar = RouterTabBar;
7
+ exports.RouterTabBarButton = RouterTabBarButton;
8
+ var _index = require("../index.js");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ /**
11
+ * Ported from expo-glass-tabs v0.1.1 — src/glass-tab-bar.tsx
12
+ * (MIT © 2026 David Mokos). See the top-level NOTICE.
13
+ *
14
+ * expo-router bindings for the tab bar. This subpath
15
+ * (`@oxyhq/bloom/tab-bar/expo-router`) is the ONLY place in Bloom that may
16
+ * import `expo-router` or `react-native-screens`, which is why it is a separate
17
+ * entry: the core `@oxyhq/bloom/tab-bar` stays usable in an app with no router
18
+ * at all, and neither optional peer is pulled into a bundle that never asks for
19
+ * it.
20
+ */
21
+
22
+ /**
23
+ * `activeIndex` is omitted deliberately: with a router the highlight is driven
24
+ * by each trigger's own focus (see `RouterTabBarButton`), which is what keeps it
25
+ * correct through deep links, back gestures and any other programmatic
26
+ * navigation. Setting both would put two writers on one shared value.
27
+ */
28
+
29
+ /**
30
+ * The bar, as expo-router's `<TabList asChild>` child.
31
+ *
32
+ * Navigation happens through `onIndexChange`, not through the triggers: the
33
+ * bar's gesture detector consumes the touches (that is what makes scrubbing
34
+ * possible), so a tap never reaches the trigger's own `Pressable`.
35
+ *
36
+ * ```tsx
37
+ * <TabList asChild>
38
+ * <RouterTabBar onIndexChange={(i) => router.navigate(TABS[i].href)}>
39
+ * {TABS.map(({ href, ...item }, index) => (
40
+ * <TabTrigger key={item.name} name={item.name} href={href} asChild>
41
+ * <RouterTabBarButton item={item} index={index} />
42
+ * </TabTrigger>
43
+ * ))}
44
+ * </RouterTabBar>
45
+ * </TabList>
46
+ * ```
47
+ */
48
+ function RouterTabBar({
49
+ // `asChild` is `TabList`'s own instruction to forward its props to this
50
+ // component instead of wrapping them in a `<View>`. It is consumed there and
51
+ // is meaningless below, so it is dropped rather than passed to a real view.
52
+ asChild: _asChild,
53
+ ...props
54
+ }) {
55
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.TabBar, {
56
+ ...props
57
+ });
58
+ }
59
+ RouterTabBar.displayName = 'RouterTabBar';
60
+
61
+ /**
62
+ * One trigger, as expo-router's `<TabTrigger asChild>` child. The trigger
63
+ * supplies `isFocused` and `onPress`; the button uses the first to drive the
64
+ * highlight and the second to navigate on keyboard / assistive-technology
65
+ * activation.
66
+ */
67
+ function RouterTabBarButton({
68
+ item,
69
+ index,
70
+ // The trigger's resolved path, injected for react-native-web's anchor
71
+ // rendering. `Pressable` has no such prop, and navigation already runs
72
+ // through the bar's `onIndexChange`, so it stops here.
73
+ href: _href,
74
+ ...props
75
+ }) {
76
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.TabBarButton, {
77
+ ...props,
78
+ item: item,
79
+ index: index
80
+ });
81
+ }
82
+ RouterTabBarButton.displayName = 'RouterTabBarButton';
83
+ //# sourceMappingURL=RouterTabBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_index","require","_jsxRuntime","RouterTabBar","asChild","_asChild","props","jsx","TabBar","displayName","RouterTabBarButton","item","index","href","_href","TabBarButton"],"sourceRoot":"../../../../src","sources":["tab-bar/expo-router/RouterTabBar.tsx"],"mappings":";;;;;;;AAaA,IAAAA,MAAA,GAAAC,OAAA;AAAgD,IAAAC,WAAA,GAAAD,OAAA;AAbhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,YAAYA,CAAC;EAC3B;EACA;EACA;EACAC,OAAO,EAAEC,QAAQ;EACjB,GAAGC;AACc,CAAC,EAAE;EACpB,oBAAO,IAAAJ,WAAA,CAAAK,GAAA,EAACP,MAAA,CAAAQ,MAAM;IAAA,GAAKF;EAAK,CAAG,CAAC;AAC9B;AAEAH,YAAY,CAACM,WAAW,GAAG,cAAc;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAAC;EACjCC,IAAI;EACJC,KAAK;EACL;EACA;EACA;EACAC,IAAI,EAAEC,KAAK;EACX,GAAGR;AACoB,CAAC,EAAE;EAC1B,oBAAO,IAAAJ,WAAA,CAAAK,GAAA,EAACP,MAAA,CAAAe,YAAY;IAAA,GAAKT,KAAK;IAAEK,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA;EAAM,CAAE,CAAC;AAC9D;AAEAF,kBAAkB,CAACD,WAAW,GAAG,oBAAoB","ignoreList":[]}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderFadingTabScreen = renderFadingTabScreen;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
10
+ var _reactNativeScreens = require("react-native-screens");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ /**
14
+ * Ported from expo-glass-tabs v0.1.1 — src/fading-tab-slot.tsx
15
+ * (MIT © 2026 David Mokos). See the top-level NOTICE.
16
+ */
17
+
18
+ /** Strong ease-out — entering content should feel instant, then settle. */
19
+ const EASE_OUT = _reactNativeReanimated.Easing.bezier(0.23, 1, 0.32, 1);
20
+ const ENTER_DURATION = 220;
21
+ /** Never enter from nothing: a whisper of depth, no zoom. */
22
+ const ENTER_SCALE = 0.985;
23
+ function FadeIn({
24
+ focused,
25
+ children
26
+ }) {
27
+ const progress = (0, _reactNativeReanimated.useSharedValue)(1);
28
+ const isFirstRender = (0, _react.useRef)(true);
29
+ (0, _react.useEffect)(() => {
30
+ // Don't animate the very first screen on app launch.
31
+ if (isFirstRender.current) {
32
+ isFirstRender.current = false;
33
+ return;
34
+ }
35
+ if (focused) {
36
+ progress.value = 0;
37
+ progress.value = (0, _reactNativeReanimated.withTiming)(1, {
38
+ duration: ENTER_DURATION,
39
+ easing: EASE_OUT
40
+ });
41
+ } else {
42
+ // Outgoing screen hides instantly (display: none) — only entries animate.
43
+ progress.value = 0;
44
+ }
45
+ }, [focused, progress]);
46
+
47
+ // `progress` must stay in the deps array — see the CRITICAL note in
48
+ // `TabBarBase`: without the worklets babel plugin (web) an omitted array
49
+ // freezes the mapper at the first frame, and every tab would enter invisible.
50
+ const style = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
51
+ opacity: progress.value,
52
+ transform: [{
53
+ scale: (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [ENTER_SCALE, 1])
54
+ }]
55
+ }), [progress]);
56
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
57
+ style: [styles.fade, style],
58
+ children: children
59
+ });
60
+ }
61
+
62
+ /**
63
+ * Drop-in for `TabSlot`'s `renderFn`: identical to expo-router's default render,
64
+ * plus a subtle fade + micro-scale on the screen becoming focused.
65
+ *
66
+ * ```tsx
67
+ * <TabSlot style={{ height: '100%' }} renderFn={renderFadingTabScreen} />
68
+ * ```
69
+ */
70
+ function renderFadingTabScreen(descriptor, {
71
+ isFocused,
72
+ loaded,
73
+ detachInactiveScreens
74
+ }) {
75
+ const {
76
+ lazy = true,
77
+ unmountOnBlur,
78
+ freezeOnBlur
79
+ } = descriptor.options;
80
+ if (unmountOnBlur && !isFocused) {
81
+ return null;
82
+ }
83
+ if (lazy && !loaded && !isFocused) {
84
+ return null;
85
+ }
86
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeScreens.Screen, {
87
+ enabled: detachInactiveScreens,
88
+ activityState: isFocused ? 2 : 0,
89
+ freezeOnBlur: freezeOnBlur,
90
+ style: [styles.screen, isFocused ? styles.focused : styles.unfocused],
91
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(FadeIn, {
92
+ focused: isFocused,
93
+ children: descriptor.render()
94
+ })
95
+ }, descriptor.route.key);
96
+ }
97
+ const styles = _reactNative.StyleSheet.create({
98
+ fade: {
99
+ flex: 1
100
+ },
101
+ screen: {
102
+ flex: 1,
103
+ position: 'relative',
104
+ height: '100%'
105
+ },
106
+ focused: {
107
+ zIndex: 1,
108
+ display: 'flex',
109
+ flexShrink: 0,
110
+ flexGrow: 1
111
+ },
112
+ unfocused: {
113
+ zIndex: -1,
114
+ display: 'none',
115
+ flexShrink: 1,
116
+ flexGrow: 0
117
+ }
118
+ });
119
+ //# sourceMappingURL=fading-tab-screen.js.map