@oxyhq/bloom 0.26.1 → 0.28.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 (300) hide show
  1. package/lib/commonjs/animated-check/AnimatedCheck.js +162 -0
  2. package/lib/commonjs/animated-check/AnimatedCheck.js.map +1 -0
  3. package/lib/commonjs/animated-check/index.js +13 -0
  4. package/lib/commonjs/animated-check/index.js.map +1 -0
  5. package/lib/commonjs/avatar/Avatar.js +67 -96
  6. package/lib/commonjs/avatar/Avatar.js.map +1 -1
  7. package/lib/commonjs/avatar/AvatarRing.js +183 -0
  8. package/lib/commonjs/avatar/AvatarRing.js.map +1 -0
  9. package/lib/commonjs/avatar/index.js.map +1 -1
  10. package/lib/commonjs/avatar/squircle-path.js +14 -0
  11. package/lib/commonjs/avatar/squircle-path.js.map +1 -0
  12. package/lib/commonjs/avatar/svg-module.js +15 -0
  13. package/lib/commonjs/avatar/svg-module.js.map +1 -0
  14. package/lib/commonjs/dialog/placement.js +9 -7
  15. package/lib/commonjs/dialog/placement.js.map +1 -1
  16. package/lib/commonjs/fill/index.js.map +1 -1
  17. package/lib/commonjs/hooks/index.js +20 -0
  18. package/lib/commonjs/hooks/index.js.map +1 -1
  19. package/lib/commonjs/hooks/useGutters.js +106 -0
  20. package/lib/commonjs/hooks/useGutters.js.map +1 -0
  21. package/lib/commonjs/hooks/useHaptics.js +69 -0
  22. package/lib/commonjs/hooks/useHaptics.js.map +1 -0
  23. package/lib/commonjs/hooks/useInteractionState.js +8 -2
  24. package/lib/commonjs/hooks/useInteractionState.js.map +1 -1
  25. package/lib/commonjs/index.js +155 -63
  26. package/lib/commonjs/index.js.map +1 -1
  27. package/lib/commonjs/index.web.js +155 -63
  28. package/lib/commonjs/index.web.js.map +1 -1
  29. package/lib/commonjs/media-inset-border/MediaInsetBorder.js +50 -0
  30. package/lib/commonjs/media-inset-border/MediaInsetBorder.js.map +1 -0
  31. package/lib/commonjs/media-inset-border/index.js +13 -0
  32. package/lib/commonjs/media-inset-border/index.js.map +1 -0
  33. package/lib/commonjs/motion/ScreenTransition.js +46 -0
  34. package/lib/commonjs/motion/ScreenTransition.js.map +1 -0
  35. package/lib/commonjs/motion/index.js +32 -0
  36. package/lib/commonjs/motion/index.js.map +1 -0
  37. package/lib/commonjs/motion/motion.js +93 -0
  38. package/lib/commonjs/motion/motion.js.map +1 -0
  39. package/lib/commonjs/pressable-scale/PressableScale.js +75 -0
  40. package/lib/commonjs/pressable-scale/PressableScale.js.map +1 -0
  41. package/lib/commonjs/pressable-scale/index.js +13 -0
  42. package/lib/commonjs/pressable-scale/index.js.map +1 -0
  43. package/lib/commonjs/pressable-with-hover/PressableWithHover.js +36 -0
  44. package/lib/commonjs/pressable-with-hover/PressableWithHover.js.map +1 -0
  45. package/lib/commonjs/pressable-with-hover/index.js +13 -0
  46. package/lib/commonjs/pressable-with-hover/index.js.map +1 -0
  47. package/lib/commonjs/styles/breakpoints.js +24 -0
  48. package/lib/commonjs/styles/breakpoints.js.map +1 -0
  49. package/lib/commonjs/styles/index.js +7 -0
  50. package/lib/commonjs/styles/index.js.map +1 -1
  51. package/lib/commonjs/subtle-hover/SubtleHover.js +69 -0
  52. package/lib/commonjs/subtle-hover/SubtleHover.js.map +1 -0
  53. package/lib/commonjs/subtle-hover/index.js +13 -0
  54. package/lib/commonjs/subtle-hover/index.js.map +1 -0
  55. package/lib/commonjs/theme/build-theme.js +2 -0
  56. package/lib/commonjs/theme/build-theme.js.map +1 -1
  57. package/lib/commonjs/theme/gradients.js +39 -0
  58. package/lib/commonjs/theme/gradients.js.map +1 -0
  59. package/lib/commonjs/theme/index.js +7 -0
  60. package/lib/commonjs/theme/index.js.map +1 -1
  61. package/lib/module/animated-check/AnimatedCheck.js +157 -0
  62. package/lib/module/animated-check/AnimatedCheck.js.map +1 -0
  63. package/lib/module/animated-check/index.js +4 -0
  64. package/lib/module/animated-check/index.js.map +1 -0
  65. package/lib/module/avatar/Avatar.js +66 -96
  66. package/lib/module/avatar/Avatar.js.map +1 -1
  67. package/lib/module/avatar/AvatarRing.js +177 -0
  68. package/lib/module/avatar/AvatarRing.js.map +1 -0
  69. package/lib/module/avatar/index.js.map +1 -1
  70. package/lib/module/avatar/squircle-path.js +10 -0
  71. package/lib/module/avatar/squircle-path.js.map +1 -0
  72. package/lib/module/avatar/svg-module.js +11 -0
  73. package/lib/module/avatar/svg-module.js.map +1 -0
  74. package/lib/module/dialog/placement.js +9 -7
  75. package/lib/module/dialog/placement.js.map +1 -1
  76. package/lib/module/fill/index.js.map +1 -1
  77. package/lib/module/hooks/index.js +2 -0
  78. package/lib/module/hooks/index.js.map +1 -1
  79. package/lib/module/hooks/useGutters.js +103 -0
  80. package/lib/module/hooks/useGutters.js.map +1 -0
  81. package/lib/module/hooks/useHaptics.js +65 -0
  82. package/lib/module/hooks/useHaptics.js.map +1 -0
  83. package/lib/module/hooks/useInteractionState.js +10 -3
  84. package/lib/module/hooks/useInteractionState.js.map +1 -1
  85. package/lib/module/index.js +10 -1
  86. package/lib/module/index.js.map +1 -1
  87. package/lib/module/index.web.js +10 -1
  88. package/lib/module/index.web.js.map +1 -1
  89. package/lib/module/media-inset-border/MediaInsetBorder.js +47 -0
  90. package/lib/module/media-inset-border/MediaInsetBorder.js.map +1 -0
  91. package/lib/module/media-inset-border/index.js +4 -0
  92. package/lib/module/media-inset-border/index.js.map +1 -0
  93. package/lib/module/motion/ScreenTransition.js +40 -0
  94. package/lib/module/motion/ScreenTransition.js.map +1 -0
  95. package/lib/module/motion/index.js +5 -0
  96. package/lib/module/motion/index.js.map +1 -0
  97. package/lib/module/motion/motion.js +87 -0
  98. package/lib/module/motion/motion.js.map +1 -0
  99. package/lib/module/pressable-scale/PressableScale.js +72 -0
  100. package/lib/module/pressable-scale/PressableScale.js.map +1 -0
  101. package/lib/module/pressable-scale/index.js +4 -0
  102. package/lib/module/pressable-scale/index.js.map +1 -0
  103. package/lib/module/pressable-with-hover/PressableWithHover.js +31 -0
  104. package/lib/module/pressable-with-hover/PressableWithHover.js.map +1 -0
  105. package/lib/module/pressable-with-hover/index.js +4 -0
  106. package/lib/module/pressable-with-hover/index.js.map +1 -0
  107. package/lib/module/styles/breakpoints.js +20 -0
  108. package/lib/module/styles/breakpoints.js.map +1 -0
  109. package/lib/module/styles/index.js +1 -0
  110. package/lib/module/styles/index.js.map +1 -1
  111. package/lib/module/subtle-hover/SubtleHover.js +66 -0
  112. package/lib/module/subtle-hover/SubtleHover.js.map +1 -0
  113. package/lib/module/subtle-hover/index.js +4 -0
  114. package/lib/module/subtle-hover/index.js.map +1 -0
  115. package/lib/module/theme/build-theme.js +2 -0
  116. package/lib/module/theme/build-theme.js.map +1 -1
  117. package/lib/module/theme/gradients.js +35 -0
  118. package/lib/module/theme/gradients.js.map +1 -0
  119. package/lib/module/theme/index.js +1 -0
  120. package/lib/module/theme/index.js.map +1 -1
  121. package/lib/typescript/commonjs/animated-check/AnimatedCheck.d.ts +18 -0
  122. package/lib/typescript/commonjs/animated-check/AnimatedCheck.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/animated-check/index.d.ts +3 -0
  124. package/lib/typescript/commonjs/animated-check/index.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/avatar/Avatar.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/avatar/AvatarRing.d.ts +27 -0
  127. package/lib/typescript/commonjs/avatar/AvatarRing.d.ts.map +1 -0
  128. package/lib/typescript/commonjs/avatar/index.d.ts +1 -1
  129. package/lib/typescript/commonjs/avatar/index.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/avatar/squircle-path.d.ts +8 -0
  131. package/lib/typescript/commonjs/avatar/squircle-path.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/avatar/svg-module.d.ts +8 -0
  133. package/lib/typescript/commonjs/avatar/svg-module.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/avatar/types.d.ts +30 -0
  135. package/lib/typescript/commonjs/avatar/types.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/dialog/placement.d.ts +8 -7
  137. package/lib/typescript/commonjs/dialog/placement.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/fill/index.d.ts +2 -2
  139. package/lib/typescript/commonjs/fill/index.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/hooks/index.d.ts +4 -0
  141. package/lib/typescript/commonjs/hooks/index.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/hooks/useGutters.d.ts +32 -0
  143. package/lib/typescript/commonjs/hooks/useGutters.d.ts.map +1 -0
  144. package/lib/typescript/commonjs/hooks/useHaptics.d.ts +28 -0
  145. package/lib/typescript/commonjs/hooks/useHaptics.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/hooks/useInteractionState.d.ts +6 -0
  147. package/lib/typescript/commonjs/hooks/useInteractionState.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/index.d.ts +16 -0
  149. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/index.web.d.ts +16 -0
  151. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/media-inset-border/MediaInsetBorder.d.ts +26 -0
  153. package/lib/typescript/commonjs/media-inset-border/MediaInsetBorder.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/media-inset-border/index.d.ts +3 -0
  155. package/lib/typescript/commonjs/media-inset-border/index.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/motion/ScreenTransition.d.ts +33 -0
  157. package/lib/typescript/commonjs/motion/ScreenTransition.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/motion/index.d.ts +4 -0
  159. package/lib/typescript/commonjs/motion/index.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/motion/motion.d.ts +24 -0
  161. package/lib/typescript/commonjs/motion/motion.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/pressable-scale/PressableScale.d.ts +21 -0
  163. package/lib/typescript/commonjs/pressable-scale/PressableScale.d.ts.map +1 -0
  164. package/lib/typescript/commonjs/pressable-scale/index.d.ts +3 -0
  165. package/lib/typescript/commonjs/pressable-scale/index.d.ts.map +1 -0
  166. package/lib/typescript/commonjs/pressable-with-hover/PressableWithHover.d.ts +18 -0
  167. package/lib/typescript/commonjs/pressable-with-hover/PressableWithHover.d.ts.map +1 -0
  168. package/lib/typescript/commonjs/pressable-with-hover/index.d.ts +3 -0
  169. package/lib/typescript/commonjs/pressable-with-hover/index.d.ts.map +1 -0
  170. package/lib/typescript/commonjs/styles/breakpoints.d.ts +18 -0
  171. package/lib/typescript/commonjs/styles/breakpoints.d.ts.map +1 -0
  172. package/lib/typescript/commonjs/styles/index.d.ts +2 -0
  173. package/lib/typescript/commonjs/styles/index.d.ts.map +1 -1
  174. package/lib/typescript/commonjs/subtle-hover/SubtleHover.d.ts +32 -0
  175. package/lib/typescript/commonjs/subtle-hover/SubtleHover.d.ts.map +1 -0
  176. package/lib/typescript/commonjs/subtle-hover/index.d.ts +3 -0
  177. package/lib/typescript/commonjs/subtle-hover/index.d.ts.map +1 -0
  178. package/lib/typescript/commonjs/theme/build-theme.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/theme/gradients.d.ts +12 -0
  180. package/lib/typescript/commonjs/theme/gradients.d.ts.map +1 -0
  181. package/lib/typescript/commonjs/theme/index.d.ts +2 -1
  182. package/lib/typescript/commonjs/theme/index.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/theme/types.d.ts +11 -0
  184. package/lib/typescript/commonjs/theme/types.d.ts.map +1 -1
  185. package/lib/typescript/module/animated-check/AnimatedCheck.d.ts +18 -0
  186. package/lib/typescript/module/animated-check/AnimatedCheck.d.ts.map +1 -0
  187. package/lib/typescript/module/animated-check/index.d.ts +3 -0
  188. package/lib/typescript/module/animated-check/index.d.ts.map +1 -0
  189. package/lib/typescript/module/avatar/Avatar.d.ts.map +1 -1
  190. package/lib/typescript/module/avatar/AvatarRing.d.ts +27 -0
  191. package/lib/typescript/module/avatar/AvatarRing.d.ts.map +1 -0
  192. package/lib/typescript/module/avatar/index.d.ts +1 -1
  193. package/lib/typescript/module/avatar/index.d.ts.map +1 -1
  194. package/lib/typescript/module/avatar/squircle-path.d.ts +8 -0
  195. package/lib/typescript/module/avatar/squircle-path.d.ts.map +1 -0
  196. package/lib/typescript/module/avatar/svg-module.d.ts +8 -0
  197. package/lib/typescript/module/avatar/svg-module.d.ts.map +1 -0
  198. package/lib/typescript/module/avatar/types.d.ts +30 -0
  199. package/lib/typescript/module/avatar/types.d.ts.map +1 -1
  200. package/lib/typescript/module/dialog/placement.d.ts +8 -7
  201. package/lib/typescript/module/dialog/placement.d.ts.map +1 -1
  202. package/lib/typescript/module/fill/index.d.ts +2 -2
  203. package/lib/typescript/module/fill/index.d.ts.map +1 -1
  204. package/lib/typescript/module/hooks/index.d.ts +4 -0
  205. package/lib/typescript/module/hooks/index.d.ts.map +1 -1
  206. package/lib/typescript/module/hooks/useGutters.d.ts +32 -0
  207. package/lib/typescript/module/hooks/useGutters.d.ts.map +1 -0
  208. package/lib/typescript/module/hooks/useHaptics.d.ts +28 -0
  209. package/lib/typescript/module/hooks/useHaptics.d.ts.map +1 -0
  210. package/lib/typescript/module/hooks/useInteractionState.d.ts +6 -0
  211. package/lib/typescript/module/hooks/useInteractionState.d.ts.map +1 -1
  212. package/lib/typescript/module/index.d.ts +16 -0
  213. package/lib/typescript/module/index.d.ts.map +1 -1
  214. package/lib/typescript/module/index.web.d.ts +16 -0
  215. package/lib/typescript/module/index.web.d.ts.map +1 -1
  216. package/lib/typescript/module/media-inset-border/MediaInsetBorder.d.ts +26 -0
  217. package/lib/typescript/module/media-inset-border/MediaInsetBorder.d.ts.map +1 -0
  218. package/lib/typescript/module/media-inset-border/index.d.ts +3 -0
  219. package/lib/typescript/module/media-inset-border/index.d.ts.map +1 -0
  220. package/lib/typescript/module/motion/ScreenTransition.d.ts +33 -0
  221. package/lib/typescript/module/motion/ScreenTransition.d.ts.map +1 -0
  222. package/lib/typescript/module/motion/index.d.ts +4 -0
  223. package/lib/typescript/module/motion/index.d.ts.map +1 -0
  224. package/lib/typescript/module/motion/motion.d.ts +24 -0
  225. package/lib/typescript/module/motion/motion.d.ts.map +1 -0
  226. package/lib/typescript/module/pressable-scale/PressableScale.d.ts +21 -0
  227. package/lib/typescript/module/pressable-scale/PressableScale.d.ts.map +1 -0
  228. package/lib/typescript/module/pressable-scale/index.d.ts +3 -0
  229. package/lib/typescript/module/pressable-scale/index.d.ts.map +1 -0
  230. package/lib/typescript/module/pressable-with-hover/PressableWithHover.d.ts +18 -0
  231. package/lib/typescript/module/pressable-with-hover/PressableWithHover.d.ts.map +1 -0
  232. package/lib/typescript/module/pressable-with-hover/index.d.ts +3 -0
  233. package/lib/typescript/module/pressable-with-hover/index.d.ts.map +1 -0
  234. package/lib/typescript/module/styles/breakpoints.d.ts +18 -0
  235. package/lib/typescript/module/styles/breakpoints.d.ts.map +1 -0
  236. package/lib/typescript/module/styles/index.d.ts +2 -0
  237. package/lib/typescript/module/styles/index.d.ts.map +1 -1
  238. package/lib/typescript/module/subtle-hover/SubtleHover.d.ts +32 -0
  239. package/lib/typescript/module/subtle-hover/SubtleHover.d.ts.map +1 -0
  240. package/lib/typescript/module/subtle-hover/index.d.ts +3 -0
  241. package/lib/typescript/module/subtle-hover/index.d.ts.map +1 -0
  242. package/lib/typescript/module/theme/build-theme.d.ts.map +1 -1
  243. package/lib/typescript/module/theme/gradients.d.ts +12 -0
  244. package/lib/typescript/module/theme/gradients.d.ts.map +1 -0
  245. package/lib/typescript/module/theme/index.d.ts +2 -1
  246. package/lib/typescript/module/theme/index.d.ts.map +1 -1
  247. package/lib/typescript/module/theme/types.d.ts +11 -0
  248. package/lib/typescript/module/theme/types.d.ts.map +1 -1
  249. package/package.json +73 -1
  250. package/src/__tests__/AnimatedCheck.test.tsx +31 -0
  251. package/src/__tests__/MediaInsetBorder.test.tsx +36 -0
  252. package/src/__tests__/Motion.test.tsx +58 -0
  253. package/src/__tests__/PressableScale.test.tsx +29 -0
  254. package/src/__tests__/PressableWithHover.test.tsx +48 -0
  255. package/src/__tests__/SubtleHover.test.tsx +42 -0
  256. package/src/__tests__/theme-gradients.test.ts +31 -0
  257. package/src/__tests__/theme.test.ts +3 -0
  258. package/src/__tests__/useGutters.test.ts +58 -0
  259. package/src/__tests__/useHaptics.test.tsx +58 -0
  260. package/src/__tests__/useInteractionState.test.ts +27 -0
  261. package/src/animated-check/AnimatedCheck.stories.tsx +60 -0
  262. package/src/animated-check/AnimatedCheck.tsx +173 -0
  263. package/src/animated-check/index.ts +2 -0
  264. package/src/avatar/Avatar.stories.tsx +95 -0
  265. package/src/avatar/Avatar.tsx +61 -110
  266. package/src/avatar/AvatarRing.tsx +170 -0
  267. package/src/avatar/index.ts +6 -1
  268. package/src/avatar/squircle-path.ts +11 -0
  269. package/src/avatar/svg-module.ts +11 -0
  270. package/src/avatar/types.ts +32 -0
  271. package/src/dialog/placement.ts +10 -7
  272. package/src/fill/index.tsx +2 -2
  273. package/src/hooks/index.ts +4 -0
  274. package/src/hooks/useGutters.ts +99 -0
  275. package/src/hooks/useHaptics.tsx +69 -0
  276. package/src/hooks/useInteractionState.ts +8 -2
  277. package/src/index.ts +20 -0
  278. package/src/index.web.ts +20 -0
  279. package/src/media-inset-border/MediaInsetBorder.stories.tsx +60 -0
  280. package/src/media-inset-border/MediaInsetBorder.tsx +72 -0
  281. package/src/media-inset-border/index.ts +2 -0
  282. package/src/motion/Motion.stories.tsx +99 -0
  283. package/src/motion/ScreenTransition.tsx +71 -0
  284. package/src/motion/index.ts +3 -0
  285. package/src/motion/motion.ts +75 -0
  286. package/src/pressable-scale/PressableScale.stories.tsx +71 -0
  287. package/src/pressable-scale/PressableScale.tsx +103 -0
  288. package/src/pressable-scale/index.ts +2 -0
  289. package/src/pressable-with-hover/PressableWithHover.stories.tsx +43 -0
  290. package/src/pressable-with-hover/PressableWithHover.tsx +43 -0
  291. package/src/pressable-with-hover/index.ts +2 -0
  292. package/src/styles/breakpoints.ts +18 -0
  293. package/src/styles/index.ts +2 -0
  294. package/src/subtle-hover/SubtleHover.stories.tsx +72 -0
  295. package/src/subtle-hover/SubtleHover.tsx +90 -0
  296. package/src/subtle-hover/index.ts +2 -0
  297. package/src/theme/build-theme.ts +2 -0
  298. package/src/theme/gradients.ts +61 -0
  299. package/src/theme/index.ts +2 -1
  300. package/src/theme/types.ts +13 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaInsetBorder.d.ts","sourceRoot":"","sources":["../../../../src/media-inset-border/MediaInsetBorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AActB,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAelF;yBAfe,gBAAgB"}
@@ -0,0 +1,3 @@
1
+ export { MediaInsetBorder } from './MediaInsetBorder';
2
+ export type { MediaInsetBorderProps } from './MediaInsetBorder';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/media-inset-border/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ /** Direction the incoming screen travels. */
4
+ export type ScreenTransitionDirection = 'forward' | 'backward';
5
+ export interface ScreenTransitionProps {
6
+ /**
7
+ * `'forward'` slides the new screen in from the right, `'backward'` from the
8
+ * left — matching a push / pop navigation gesture.
9
+ */
10
+ direction: ScreenTransitionDirection;
11
+ /**
12
+ * Enable the transition on web. Off by default: Reanimated layout animations
13
+ * are fragile across web bundlers, so web opts in explicitly and gets a
14
+ * lightweight cross-fade rather than a slide.
15
+ */
16
+ enabledWeb?: boolean;
17
+ style?: StyleProp<ViewStyle>;
18
+ children?: React.ReactNode;
19
+ }
20
+ /**
21
+ * Wraps `children` in a Reanimated layout-animated view that slides in
22
+ * directionally on native and (optionally) cross-fades on web. Ported from
23
+ * Bluesky's `ScreenTransition`.
24
+ *
25
+ * On web the slide is intentionally dropped: layout animations there are
26
+ * unreliable, so `enabledWeb` gates a simple fade and the default is no
27
+ * transition at all.
28
+ */
29
+ export declare function ScreenTransition({ direction, enabledWeb, style, children, }: ScreenTransitionProps): import("react/jsx-runtime").JSX.Element;
30
+ export declare namespace ScreenTransition {
31
+ var displayName: string;
32
+ }
33
+ //# sourceMappingURL=ScreenTransition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenTransition.d.ts","sourceRoot":"","sources":["../../../../src/motion/ScreenTransition.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AASxE,6CAA6C;AAC7C,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,EAAE,yBAAyB,CAAC;IACrC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAOD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,qBAAqB,2CAoBvB;yBAzBe,gBAAgB"}
@@ -0,0 +1,4 @@
1
+ export { ScaleAndFadeIn, ScaleAndFadeOut, ShrinkAndPop } from './motion';
2
+ export { ScreenTransition } from './ScreenTransition';
3
+ export type { ScreenTransitionProps, ScreenTransitionDirection } from './ScreenTransition';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/motion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type LayoutAnimation } from 'react-native-reanimated';
2
+ /**
3
+ * Reanimated custom layout-animation presets. Each is a worklet builder
4
+ * compatible with an `Animated.View`'s `entering` / `exiting` prop:
5
+ *
6
+ * ```tsx
7
+ * <Animated.View entering={ScaleAndFadeIn} exiting={ScaleAndFadeOut} />
8
+ * ```
9
+ *
10
+ * Ported from Bluesky's custom-animation set. The `'worklet'` directive is
11
+ * preserved through Bloom's build; the consuming app's Metro + reanimated Babel
12
+ * plugin transforms it so the animation runs on the UI thread (same path the
13
+ * existing `bottom-sheet` gesture worklets rely on).
14
+ */
15
+ /** Entering: fade in while growing from 70% to full size. */
16
+ export declare const ScaleAndFadeIn: () => LayoutAnimation;
17
+ /** Exiting counterpart to {@link ScaleAndFadeIn}: fade out while shrinking to 70%. */
18
+ export declare const ScaleAndFadeOut: () => LayoutAnimation;
19
+ /**
20
+ * Exiting with a brief "pop": the scale dips to 70%, overshoots to 110%, and the
21
+ * element fades out. Good for confirming a tapped or removed item.
22
+ */
23
+ export declare const ShrinkAndPop: () => LayoutAnimation;
24
+ //# sourceMappingURL=motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../../../../src/motion/motion.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;GAYG;AAEH,6DAA6D;AAC7D,eAAO,MAAM,cAAc,EAAE,MAAM,eAYlC,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,eAAe,EAAE,MAAM,eAYnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,eAmBhC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { type PressableProps, type StyleProp, type View, type ViewStyle } from 'react-native';
3
+ export interface PressableScaleProps extends Omit<PressableProps, 'children' | 'style'> {
4
+ /** Scale applied while pressed. Defaults to `0.98`. */
5
+ targetScale?: number;
6
+ /** Style for the outer, full-size touch target (stays put while pressing). */
7
+ style?: StyleProp<ViewStyle>;
8
+ /** Style for the inner content wrapper that actually scales. */
9
+ contentContainerStyle?: StyleProp<ViewStyle>;
10
+ children?: React.ReactNode;
11
+ }
12
+ /**
13
+ * A drop-in {@link Pressable} whose content springs to a smaller scale on
14
+ * press-in and back on release. The outer pressable stays full size (so the
15
+ * touch target never shrinks) while an inner wrapper scales.
16
+ *
17
+ * Honours the OS "reduce motion" setting and disables the effect on non-touch
18
+ * web pointers.
19
+ */
20
+ export declare const PressableScale: React.ForwardRefExoticComponent<PressableScaleProps & React.RefAttributes<View>>;
21
+ //# sourceMappingURL=PressableScale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PressableScale.d.ts","sourceRoot":"","sources":["../../../../src/pressable-scale/PressableScale.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AA0BtB,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC;IAClD,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,kFA+C1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { PressableScale } from './PressableScale';
2
+ export type { PressableScaleProps } from './PressableScale';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pressable-scale/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { type PressableProps, type StyleProp, type View, type ViewStyle } from 'react-native';
3
+ export interface PressableWithHoverProps extends Omit<PressableProps, 'style'> {
4
+ /** Base style; `hoverStyle` is merged on top while the pointer is over it. */
5
+ style?: StyleProp<ViewStyle>;
6
+ /**
7
+ * Style merged over `style` while hovered. Web-only: react-native-web fires
8
+ * `onHoverIn`/`onHoverOut`, so on touch platforms this is simply never applied.
9
+ */
10
+ hoverStyle: StyleProp<ViewStyle>;
11
+ }
12
+ /**
13
+ * A {@link Pressable} that merges `hoverStyle` on top of `style` while hovered.
14
+ * Hover is a web-only affordance (native platforms have no pointer hover), so
15
+ * this behaves like a plain `Pressable` on touch devices.
16
+ */
17
+ export declare const PressableWithHover: React.ForwardRefExoticComponent<PressableWithHoverProps & React.RefAttributes<View>>;
18
+ //# sourceMappingURL=PressableWithHover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PressableWithHover.d.ts","sourceRoot":"","sources":["../../../../src/pressable-with-hover/PressableWithHover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC5E,8EAA8E;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B;;;OAGG;IACH,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,sFAc9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { PressableWithHover } from './PressableWithHover';
2
+ export type { PressableWithHoverProps } from './PressableWithHover';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pressable-with-hover/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Bloom's responsive breakpoint min-widths (px), matching the Tailwind /
3
+ * NativeWind defaults used across the design system.
4
+ *
5
+ * This is the SINGLE SOURCE OF TRUTH for breakpoint values. Anything that
6
+ * branches on viewport width — the `<Dialog>` responsive `placement` resolver,
7
+ * the `useGutters` hook — reads from here rather than hardcoding its own
8
+ * numbers, so a change here propagates everywhere.
9
+ */
10
+ export declare const BREAKPOINTS: {
11
+ readonly sm: 640;
12
+ readonly md: 768;
13
+ readonly lg: 1024;
14
+ readonly xl: 1280;
15
+ };
16
+ /** A named responsive breakpoint tier. */
17
+ export type Breakpoint = keyof typeof BREAKPOINTS;
18
+ //# sourceMappingURL=breakpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpoints.d.ts","sourceRoot":"","sources":["../../../../src/styles/breakpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,0CAA0C;AAC1C,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,WAAW,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export { atoms, flatten } from './atoms';
2
2
  export type { ViewStyleProp, TextStyleProp } from './atoms';
3
3
  export * as tokens from './tokens';
4
+ export { BREAKPOINTS } from './breakpoints';
5
+ export type { Breakpoint } from './breakpoints';
4
6
  export { Z_INDEX, zIndex } from './z-index';
5
7
  export { web, native, ios, android, platform, select } from './platform';
6
8
  export { SUPPORTS_NATIVE_DRIVER } from './native-driver';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/styles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/styles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type StyleProp, type ViewStyle } from 'react-native';
2
+ export interface SubtleHoverProps {
3
+ /** Whether the parent is currently hovered. Drives the overlay opacity. */
4
+ hover: boolean;
5
+ /**
6
+ * Overlay opacity when hovered. Defaults to a mode-tuned value (0.4 dark /
7
+ * 0.5 light) that reads as a gentle contrast wash.
8
+ */
9
+ opacity?: number;
10
+ /** Extra style merged last — e.g. `borderRadius` to match the parent. */
11
+ style?: StyleProp<ViewStyle>;
12
+ /**
13
+ * Opt in to rendering on native. Off by default: hover is a pointer
14
+ * affordance, so this is a web-only overlay unless a native surface wants the
15
+ * same wash driven by another interaction (e.g. press).
16
+ */
17
+ native?: boolean;
18
+ }
19
+ /**
20
+ * An absolutely-positioned, non-interactive contrast wash that fades in while
21
+ * its parent is hovered. Ported from Bluesky's `SubtleHover`. Pairs naturally
22
+ * with {@link useInteractionState} — pass its `state` as `hover`.
23
+ *
24
+ * Renders nothing on touch-web (no hovering pointer) and on native unless
25
+ * `native` is set. Color comes from the theme's `contrast50` token so the wash
26
+ * tracks the active preset and light/dark mode.
27
+ */
28
+ export declare function SubtleHover({ hover, opacity, style, native }: SubtleHoverProps): import("react/jsx-runtime").JSX.Element | null;
29
+ export declare namespace SubtleHover {
30
+ var displayName: string;
31
+ }
32
+ //# sourceMappingURL=SubtleHover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubtleHover.d.ts","sourceRoot":"","sources":["../../../../src/subtle-hover/SubtleHover.tsx"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AA4B1F,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE,gBAAgB,kDAoBtF;yBApBe,WAAW"}
@@ -0,0 +1,3 @@
1
+ export { SubtleHover } from './SubtleHover';
2
+ export type { SubtleHoverProps } from './SubtleHover';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/subtle-hover/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"build-theme.d.ts","sourceRoot":"","sources":["../../../../src/theme/build-theme.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,SAAS,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAyFX;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,UAAU,GAAE,OAAe,GAC1B,KAAK,CAUP"}
1
+ {"version":3,"file":"build-theme.d.ts","sourceRoot":"","sources":["../../../../src/theme/build-theme.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIvE,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,SAAS,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAyFX;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,UAAU,GAAE,OAAe,GAC1B,KAAK,CAWP"}
@@ -0,0 +1,12 @@
1
+ import type { ThemeGradients } from './types';
2
+ /**
3
+ * Brand-neutral named linear-gradient palettes shared across the design system —
4
+ * decorative avatar rings, hero surfaces, empty-state art, and similar accents.
5
+ *
6
+ * Each entry lists ordered `[offset, color]` stops where `offset` is a `0–1`
7
+ * position along the gradient axis. These are intentionally theme-agnostic (the
8
+ * same values are exposed in light and dark mode) and not tied to any single
9
+ * app's brand, so components can reference them by a stable, descriptive name.
10
+ */
11
+ export declare const THEME_GRADIENTS: ThemeGradients;
12
+ //# sourceMappingURL=gradients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradients.d.ts","sourceRoot":"","sources":["../../../../src/theme/gradients.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,cAiD7B,CAAC"}
@@ -3,10 +3,11 @@ export type { BloomThemeProviderProps, BloomThemeContextValue, } from './BloomTh
3
3
  export { BloomColorScope, useColorScopeStyle } from './color-scope';
4
4
  export type { BloomColorScopeProps } from './color-scope';
5
5
  export { buildTheme, STATUS_COLORS } from './build-theme';
6
+ export { THEME_GRADIENTS } from './gradients';
6
7
  export { useTheme, useThemeColor, useBloomTheme } from './use-theme';
7
8
  export { useNavigationTheme } from './use-navigation-theme';
8
9
  export type { NavigationTheme, NavigationThemeFont } from './use-navigation-theme';
9
- export type { Theme, ThemeColors, ThemeMode } from './types';
10
+ export type { Theme, ThemeColors, ThemeMode, ThemeGradient, ThemeGradients } from './types';
10
11
  export type { AppColorName, AppColorPreset, PresetTokens } from './color-presets';
11
12
  export { APP_COLOR_NAMES, PREMIUM_COLOR_NAMES, APP_COLOR_PRESETS, HEX_TO_APP_COLOR, hexToAppColorName, } from './color-presets';
12
13
  export { getPresetVars, applyPresetVarsToDocument } from './preset-vars';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -34,9 +34,20 @@ export interface ThemeColors {
34
34
  shadow: string;
35
35
  overlay: string;
36
36
  }
37
+ /**
38
+ * A single named gradient: an ordered list of `[offset, color]` stops where
39
+ * `offset` runs 0–1 along the gradient axis and `color` is any RN/CSS color.
40
+ */
41
+ export interface ThemeGradient {
42
+ values: Array<[number, string]>;
43
+ }
44
+ /** Map of named gradients exposed on the theme (`theme.gradients`). */
45
+ export type ThemeGradients = Record<string, ThemeGradient>;
37
46
  export interface Theme {
38
47
  mode: 'light' | 'dark';
39
48
  colors: ThemeColors;
49
+ /** Brand-neutral named linear-gradient palettes. Theme-agnostic (same in light/dark). */
50
+ gradients: ThemeGradients;
40
51
  isDark: boolean;
41
52
  isLight: boolean;
42
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/theme/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAE3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IAEpB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAElB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IAEnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IAEb,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IAEnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/theme/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAE3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IAEpB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAElB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IAEnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IAEb,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IAEnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjC;AAED,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE3D,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,yFAAyF;IACzF,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.26.1",
3
+ "version": "0.28.0",
4
4
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -371,6 +371,72 @@
371
371
  "default": "./lib/commonjs/fill/index.js"
372
372
  }
373
373
  },
374
+ "./media-inset-border": {
375
+ "react-native": "./src/media-inset-border/index.ts",
376
+ "import": {
377
+ "types": "./lib/typescript/module/media-inset-border/index.d.ts",
378
+ "default": "./lib/module/media-inset-border/index.js"
379
+ },
380
+ "require": {
381
+ "types": "./lib/typescript/commonjs/media-inset-border/index.d.ts",
382
+ "default": "./lib/commonjs/media-inset-border/index.js"
383
+ }
384
+ },
385
+ "./pressable-scale": {
386
+ "react-native": "./src/pressable-scale/index.ts",
387
+ "import": {
388
+ "types": "./lib/typescript/module/pressable-scale/index.d.ts",
389
+ "default": "./lib/module/pressable-scale/index.js"
390
+ },
391
+ "require": {
392
+ "types": "./lib/typescript/commonjs/pressable-scale/index.d.ts",
393
+ "default": "./lib/commonjs/pressable-scale/index.js"
394
+ }
395
+ },
396
+ "./pressable-with-hover": {
397
+ "react-native": "./src/pressable-with-hover/index.ts",
398
+ "import": {
399
+ "types": "./lib/typescript/module/pressable-with-hover/index.d.ts",
400
+ "default": "./lib/module/pressable-with-hover/index.js"
401
+ },
402
+ "require": {
403
+ "types": "./lib/typescript/commonjs/pressable-with-hover/index.d.ts",
404
+ "default": "./lib/commonjs/pressable-with-hover/index.js"
405
+ }
406
+ },
407
+ "./subtle-hover": {
408
+ "react-native": "./src/subtle-hover/index.ts",
409
+ "import": {
410
+ "types": "./lib/typescript/module/subtle-hover/index.d.ts",
411
+ "default": "./lib/module/subtle-hover/index.js"
412
+ },
413
+ "require": {
414
+ "types": "./lib/typescript/commonjs/subtle-hover/index.d.ts",
415
+ "default": "./lib/commonjs/subtle-hover/index.js"
416
+ }
417
+ },
418
+ "./motion": {
419
+ "react-native": "./src/motion/index.ts",
420
+ "import": {
421
+ "types": "./lib/typescript/module/motion/index.d.ts",
422
+ "default": "./lib/module/motion/index.js"
423
+ },
424
+ "require": {
425
+ "types": "./lib/typescript/commonjs/motion/index.d.ts",
426
+ "default": "./lib/commonjs/motion/index.js"
427
+ }
428
+ },
429
+ "./animated-check": {
430
+ "react-native": "./src/animated-check/index.ts",
431
+ "import": {
432
+ "types": "./lib/typescript/module/animated-check/index.d.ts",
433
+ "default": "./lib/module/animated-check/index.js"
434
+ },
435
+ "require": {
436
+ "types": "./lib/typescript/commonjs/animated-check/index.d.ts",
437
+ "default": "./lib/commonjs/animated-check/index.js"
438
+ }
439
+ },
374
440
  "./icon-circle": {
375
441
  "react-native": "./src/icon-circle/index.tsx",
376
442
  "import": {
@@ -895,6 +961,7 @@
895
961
  "typescript": "tsc --noEmit",
896
962
  "pretypescript": "node scripts/generate-font-data.mjs",
897
963
  "clean": "rm -rf lib",
964
+ "prepack": "bun run clean && bunx bob build",
898
965
  "prepare": "bob build || true",
899
966
  "release": "rm -rf lib && bun run build && release-it",
900
967
  "storybook": "storybook dev -p 6006 --no-open",
@@ -926,6 +993,7 @@
926
993
  "@types/react-native": "*",
927
994
  "@vitejs/plugin-react": "^6.0.2",
928
995
  "expo-font": "^56.0.5",
996
+ "expo-haptics": "~56.0.3",
929
997
  "expo-router": "^56.0.0",
930
998
  "jest": "^30.3.0",
931
999
  "jest-environment-jsdom": "^30.4.1",
@@ -950,6 +1018,7 @@
950
1018
  "peerDependencies": {
951
1019
  "expo": "*",
952
1020
  "expo-font": "*",
1021
+ "expo-haptics": "*",
953
1022
  "expo-router": ">=3.0.0",
954
1023
  "react": ">=18.0.0",
955
1024
  "react-dom": ">=18.0.0",
@@ -968,6 +1037,9 @@
968
1037
  "expo-font": {
969
1038
  "optional": true
970
1039
  },
1040
+ "expo-haptics": {
1041
+ "optional": true
1042
+ },
971
1043
  "expo-router": {
972
1044
  "optional": true
973
1045
  },
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { act, render } from '@testing-library/react-native';
3
+
4
+ import { BloomThemeProvider } from '../theme/BloomThemeProvider';
5
+ import { AnimatedCheck, type AnimatedCheckRef } from '../animated-check';
6
+
7
+ function renderWithTheme(ui: React.ReactElement) {
8
+ return render(
9
+ <BloomThemeProvider mode="light" colorPreset="teal">
10
+ {ui}
11
+ </BloomThemeProvider>,
12
+ );
13
+ }
14
+
15
+ describe('AnimatedCheck', () => {
16
+ it('carries a displayName', () => {
17
+ expect(AnimatedCheck.displayName).toBe('AnimatedCheck');
18
+ });
19
+
20
+ it('renders the animated SVG when react-native-svg is available', () => {
21
+ const { toJSON } = renderWithTheme(<AnimatedCheck size={48} />);
22
+ expect(toJSON()).not.toBeNull();
23
+ });
24
+
25
+ it('exposes an imperative play() that runs without throwing', () => {
26
+ const ref = React.createRef<AnimatedCheckRef>();
27
+ renderWithTheme(<AnimatedCheck ref={ref} size={48} color="#6366f1" />);
28
+ expect(ref.current).not.toBeNull();
29
+ expect(() => act(() => ref.current?.play())).not.toThrow();
30
+ });
31
+ });
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react-native';
3
+
4
+ import { BloomThemeProvider } from '../theme/BloomThemeProvider';
5
+ import { MediaInsetBorder } from '../media-inset-border';
6
+
7
+ function renderWithTheme(ui: React.ReactElement) {
8
+ return render(
9
+ <BloomThemeProvider mode="light" colorPreset="teal">
10
+ {ui}
11
+ </BloomThemeProvider>,
12
+ );
13
+ }
14
+
15
+ describe('MediaInsetBorder', () => {
16
+ it('carries a displayName', () => {
17
+ expect(MediaInsetBorder.displayName).toBe('MediaInsetBorder');
18
+ });
19
+
20
+ it('renders the softened border by default', () => {
21
+ const { UNSAFE_root } = renderWithTheme(<MediaInsetBorder />);
22
+ expect(UNSAFE_root).toBeTruthy();
23
+ });
24
+
25
+ it('renders the opaque variant', () => {
26
+ const { UNSAFE_root } = renderWithTheme(<MediaInsetBorder opaque />);
27
+ expect(UNSAFE_root).toBeTruthy();
28
+ });
29
+
30
+ it('accepts a style override for borderRadius', () => {
31
+ const { UNSAFE_root } = renderWithTheme(
32
+ <MediaInsetBorder style={{ borderRadius: 999 }} />,
33
+ );
34
+ expect(UNSAFE_root).toBeTruthy();
35
+ });
36
+ });
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { render } from '@testing-library/react-native';
4
+
5
+ import {
6
+ ScaleAndFadeIn,
7
+ ScaleAndFadeOut,
8
+ ScreenTransition,
9
+ ShrinkAndPop,
10
+ } from '../motion';
11
+
12
+ // The reanimated mock resolves `withTiming(v)` -> v, `withDelay(d, v)` -> v and
13
+ // `withSequence(...v)` -> last, so the builder output is deterministic.
14
+
15
+ describe('motion presets', () => {
16
+ it('ScaleAndFadeIn enters from 70% scale and transparent', () => {
17
+ const { initialValues, animations } = ScaleAndFadeIn();
18
+ expect(initialValues).toEqual({ opacity: 0, transform: [{ scale: 0.7 }] });
19
+ expect(animations).toEqual({ opacity: 1, transform: [{ scale: 1 }] });
20
+ });
21
+
22
+ it('ScaleAndFadeOut exits to 70% scale and transparent', () => {
23
+ const { initialValues, animations } = ScaleAndFadeOut();
24
+ expect(initialValues).toEqual({ opacity: 1, transform: [{ scale: 1 }] });
25
+ expect(animations).toEqual({ opacity: 0, transform: [{ scale: 0.7 }] });
26
+ });
27
+
28
+ it('ShrinkAndPop overshoots to 110% before leaving', () => {
29
+ const { initialValues, animations } = ShrinkAndPop();
30
+ expect(initialValues).toEqual({ opacity: 1, transform: [{ scale: 1 }] });
31
+ // withSequence resolves to its final keyframe (the 1.1 overshoot) in the mock.
32
+ expect(animations.transform).toEqual([{ scale: 1.1 }]);
33
+ });
34
+ });
35
+
36
+ describe('ScreenTransition', () => {
37
+ it('carries a displayName', () => {
38
+ expect(ScreenTransition.displayName).toBe('ScreenTransition');
39
+ });
40
+
41
+ it('renders its children for a forward transition', () => {
42
+ const { getByText } = render(
43
+ <ScreenTransition direction="forward">
44
+ <Text>Screen body</Text>
45
+ </ScreenTransition>,
46
+ );
47
+ expect(getByText('Screen body')).toBeTruthy();
48
+ });
49
+
50
+ it('renders its children for a backward transition', () => {
51
+ const { getByText } = render(
52
+ <ScreenTransition direction="backward" enabledWeb>
53
+ <Text>Back</Text>
54
+ </ScreenTransition>,
55
+ );
56
+ expect(getByText('Back')).toBeTruthy();
57
+ });
58
+ });
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { render } from '@testing-library/react-native';
4
+
5
+ import { PressableScale } from '../pressable-scale';
6
+
7
+ describe('PressableScale', () => {
8
+ it('carries a displayName', () => {
9
+ expect(PressableScale.displayName).toBe('PressableScale');
10
+ });
11
+
12
+ it('renders its children', () => {
13
+ const { getByText } = render(
14
+ <PressableScale accessibilityLabel="Press me">
15
+ <Text>Tap target</Text>
16
+ </PressableScale>,
17
+ );
18
+ expect(getByText('Tap target')).toBeTruthy();
19
+ });
20
+
21
+ it('renders with a custom target scale', () => {
22
+ const { getByText } = render(
23
+ <PressableScale targetScale={0.9} accessibilityLabel="Press me">
24
+ <Text>Scaled</Text>
25
+ </PressableScale>,
26
+ );
27
+ expect(getByText('Scaled')).toBeTruthy();
28
+ });
29
+ });