@oxy.so/bloom 6.0.0 → 6.2.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 (293) hide show
  1. package/README.md +1 -1
  2. package/docs/adoption-matrix.mdx +5 -3
  3. package/docs/chat-composer.mdx +5 -1
  4. package/docs/cover-header.mdx +56 -0
  5. package/docs/message-media.mdx +5 -0
  6. package/docs/sticker.mdx +64 -0
  7. package/lib/commonjs/ai-profile-card/AiProfileCard.js +186 -263
  8. package/lib/commonjs/ai-profile-card/AiProfileCard.js.map +1 -1
  9. package/lib/commonjs/chat-composer/SuggestionList.js +3 -1
  10. package/lib/commonjs/chat-composer/SuggestionList.js.map +1 -1
  11. package/lib/commonjs/chat-composer/SuggestionList.web.js +3 -1
  12. package/lib/commonjs/chat-composer/SuggestionList.web.js.map +1 -1
  13. package/lib/commonjs/chat-composer/create-suggestion-list.js +64 -10
  14. package/lib/commonjs/chat-composer/create-suggestion-list.js.map +1 -1
  15. package/lib/commonjs/chat-composer/messages.js +7 -0
  16. package/lib/commonjs/chat-composer/messages.js.map +1 -1
  17. package/lib/commonjs/cover-header/CoverHeader.js +83 -0
  18. package/lib/commonjs/cover-header/CoverHeader.js.map +1 -0
  19. package/lib/commonjs/cover-header/CoverImage.js +72 -0
  20. package/lib/commonjs/cover-header/CoverImage.js.map +1 -0
  21. package/lib/commonjs/cover-header/index.js +13 -0
  22. package/lib/commonjs/cover-header/index.js.map +1 -0
  23. package/lib/commonjs/cover-header/types.js +6 -0
  24. package/lib/commonjs/cover-header/types.js.map +1 -0
  25. package/lib/commonjs/index.js +972 -938
  26. package/lib/commonjs/index.js.map +1 -1
  27. package/lib/commonjs/index.web.js +982 -948
  28. package/lib/commonjs/index.web.js.map +1 -1
  29. package/lib/commonjs/locale/translations/ar.js +7 -0
  30. package/lib/commonjs/locale/translations/ar.js.map +1 -1
  31. package/lib/commonjs/locale/translations/bn.js +7 -0
  32. package/lib/commonjs/locale/translations/bn.js.map +1 -1
  33. package/lib/commonjs/locale/translations/ca.js +7 -0
  34. package/lib/commonjs/locale/translations/ca.js.map +1 -1
  35. package/lib/commonjs/locale/translations/de.js +7 -0
  36. package/lib/commonjs/locale/translations/de.js.map +1 -1
  37. package/lib/commonjs/locale/translations/es.js +7 -0
  38. package/lib/commonjs/locale/translations/es.js.map +1 -1
  39. package/lib/commonjs/locale/translations/fr.js +7 -0
  40. package/lib/commonjs/locale/translations/fr.js.map +1 -1
  41. package/lib/commonjs/locale/translations/hi.js +7 -0
  42. package/lib/commonjs/locale/translations/hi.js.map +1 -1
  43. package/lib/commonjs/locale/translations/id.js +7 -0
  44. package/lib/commonjs/locale/translations/id.js.map +1 -1
  45. package/lib/commonjs/locale/translations/it.js +7 -0
  46. package/lib/commonjs/locale/translations/it.js.map +1 -1
  47. package/lib/commonjs/locale/translations/ja.js +7 -0
  48. package/lib/commonjs/locale/translations/ja.js.map +1 -1
  49. package/lib/commonjs/locale/translations/pt.js +7 -0
  50. package/lib/commonjs/locale/translations/pt.js.map +1 -1
  51. package/lib/commonjs/locale/translations/ru.js +7 -0
  52. package/lib/commonjs/locale/translations/ru.js.map +1 -1
  53. package/lib/commonjs/locale/translations/tr.js +7 -0
  54. package/lib/commonjs/locale/translations/tr.js.map +1 -1
  55. package/lib/commonjs/locale/translations/zh.js +7 -0
  56. package/lib/commonjs/locale/translations/zh.js.map +1 -1
  57. package/lib/commonjs/message-media/StickerMessage.js +11 -2
  58. package/lib/commonjs/message-media/StickerMessage.js.map +1 -1
  59. package/lib/commonjs/sticker/Sticker.js +14 -0
  60. package/lib/commonjs/sticker/Sticker.js.map +1 -0
  61. package/lib/commonjs/sticker/Sticker.web.js +14 -0
  62. package/lib/commonjs/sticker/Sticker.web.js.map +1 -0
  63. package/lib/commonjs/sticker/create-sticker.js +118 -0
  64. package/lib/commonjs/sticker/create-sticker.js.map +1 -0
  65. package/lib/commonjs/sticker/index.js +26 -0
  66. package/lib/commonjs/sticker/index.js.map +1 -0
  67. package/lib/commonjs/sticker/index.web.js +26 -0
  68. package/lib/commonjs/sticker/index.web.js.map +1 -0
  69. package/lib/commonjs/sticker/lottie-module.js +97 -0
  70. package/lib/commonjs/sticker/lottie-module.js.map +1 -0
  71. package/lib/commonjs/sticker/lottie-module.web.js +96 -0
  72. package/lib/commonjs/sticker/lottie-module.web.js.map +1 -0
  73. package/lib/commonjs/sticker/types.js +6 -0
  74. package/lib/commonjs/sticker/types.js.map +1 -0
  75. package/lib/module/ai-profile-card/AiProfileCard.js +185 -262
  76. package/lib/module/ai-profile-card/AiProfileCard.js.map +1 -1
  77. package/lib/module/chat-composer/SuggestionList.js +3 -1
  78. package/lib/module/chat-composer/SuggestionList.js.map +1 -1
  79. package/lib/module/chat-composer/SuggestionList.web.js +3 -1
  80. package/lib/module/chat-composer/SuggestionList.web.js.map +1 -1
  81. package/lib/module/chat-composer/create-suggestion-list.js +64 -10
  82. package/lib/module/chat-composer/create-suggestion-list.js.map +1 -1
  83. package/lib/module/chat-composer/messages.js +7 -0
  84. package/lib/module/chat-composer/messages.js.map +1 -1
  85. package/lib/module/cover-header/CoverHeader.js +78 -0
  86. package/lib/module/cover-header/CoverHeader.js.map +1 -0
  87. package/lib/module/cover-header/CoverImage.js +68 -0
  88. package/lib/module/cover-header/CoverImage.js.map +1 -0
  89. package/lib/module/cover-header/index.js +4 -0
  90. package/lib/module/cover-header/index.js.map +1 -0
  91. package/lib/module/cover-header/types.js +4 -0
  92. package/lib/module/cover-header/types.js.map +1 -0
  93. package/lib/module/index.js +2 -0
  94. package/lib/module/index.js.map +1 -1
  95. package/lib/module/index.web.js +2 -0
  96. package/lib/module/index.web.js.map +1 -1
  97. package/lib/module/locale/translations/ar.js +7 -0
  98. package/lib/module/locale/translations/ar.js.map +1 -1
  99. package/lib/module/locale/translations/bn.js +7 -0
  100. package/lib/module/locale/translations/bn.js.map +1 -1
  101. package/lib/module/locale/translations/ca.js +7 -0
  102. package/lib/module/locale/translations/ca.js.map +1 -1
  103. package/lib/module/locale/translations/de.js +7 -0
  104. package/lib/module/locale/translations/de.js.map +1 -1
  105. package/lib/module/locale/translations/es.js +7 -0
  106. package/lib/module/locale/translations/es.js.map +1 -1
  107. package/lib/module/locale/translations/fr.js +7 -0
  108. package/lib/module/locale/translations/fr.js.map +1 -1
  109. package/lib/module/locale/translations/hi.js +7 -0
  110. package/lib/module/locale/translations/hi.js.map +1 -1
  111. package/lib/module/locale/translations/id.js +7 -0
  112. package/lib/module/locale/translations/id.js.map +1 -1
  113. package/lib/module/locale/translations/it.js +7 -0
  114. package/lib/module/locale/translations/it.js.map +1 -1
  115. package/lib/module/locale/translations/ja.js +7 -0
  116. package/lib/module/locale/translations/ja.js.map +1 -1
  117. package/lib/module/locale/translations/pt.js +7 -0
  118. package/lib/module/locale/translations/pt.js.map +1 -1
  119. package/lib/module/locale/translations/ru.js +7 -0
  120. package/lib/module/locale/translations/ru.js.map +1 -1
  121. package/lib/module/locale/translations/tr.js +7 -0
  122. package/lib/module/locale/translations/tr.js.map +1 -1
  123. package/lib/module/locale/translations/zh.js +7 -0
  124. package/lib/module/locale/translations/zh.js.map +1 -1
  125. package/lib/module/message-media/StickerMessage.js +11 -2
  126. package/lib/module/message-media/StickerMessage.js.map +1 -1
  127. package/lib/module/sticker/Sticker.js +11 -0
  128. package/lib/module/sticker/Sticker.js.map +1 -0
  129. package/lib/module/sticker/Sticker.web.js +11 -0
  130. package/lib/module/sticker/Sticker.web.js.map +1 -0
  131. package/lib/module/sticker/create-sticker.js +113 -0
  132. package/lib/module/sticker/create-sticker.js.map +1 -0
  133. package/lib/module/sticker/index.js +5 -0
  134. package/lib/module/sticker/index.js.map +1 -0
  135. package/lib/module/sticker/index.web.js +10 -0
  136. package/lib/module/sticker/index.web.js.map +1 -0
  137. package/lib/module/sticker/lottie-module.js +90 -0
  138. package/lib/module/sticker/lottie-module.js.map +1 -0
  139. package/lib/module/sticker/lottie-module.web.js +88 -0
  140. package/lib/module/sticker/lottie-module.web.js.map +1 -0
  141. package/lib/module/sticker/types.js +4 -0
  142. package/lib/module/sticker/types.js.map +1 -0
  143. package/lib/typescript/commonjs/ai-profile-card/AiProfileCard.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/chat-composer/SuggestionList.d.ts +1 -1
  145. package/lib/typescript/commonjs/chat-composer/SuggestionList.d.ts.map +1 -1
  146. package/lib/typescript/commonjs/chat-composer/SuggestionList.web.d.ts +1 -1
  147. package/lib/typescript/commonjs/chat-composer/SuggestionList.web.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/chat-composer/create-suggestion-list.d.ts +4 -2
  149. package/lib/typescript/commonjs/chat-composer/create-suggestion-list.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/chat-composer/messages.d.ts +6 -0
  151. package/lib/typescript/commonjs/chat-composer/messages.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/chat-composer/types.d.ts +17 -0
  153. package/lib/typescript/commonjs/chat-composer/types.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/cover-header/CoverHeader.d.ts +21 -0
  155. package/lib/typescript/commonjs/cover-header/CoverHeader.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/cover-header/CoverImage.d.ts +11 -0
  157. package/lib/typescript/commonjs/cover-header/CoverImage.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/cover-header/index.d.ts +3 -0
  159. package/lib/typescript/commonjs/cover-header/index.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/cover-header/types.d.ts +33 -0
  161. package/lib/typescript/commonjs/cover-header/types.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/index.d.ts +3 -0
  163. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/index.web.d.ts +3 -0
  165. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/locale/translations/ar.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/locale/translations/bn.d.ts.map +1 -1
  168. package/lib/typescript/commonjs/locale/translations/ca.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/locale/translations/de.d.ts.map +1 -1
  170. package/lib/typescript/commonjs/locale/translations/es.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/locale/translations/fr.d.ts.map +1 -1
  172. package/lib/typescript/commonjs/locale/translations/hi.d.ts.map +1 -1
  173. package/lib/typescript/commonjs/locale/translations/id.d.ts.map +1 -1
  174. package/lib/typescript/commonjs/locale/translations/it.d.ts.map +1 -1
  175. package/lib/typescript/commonjs/locale/translations/ja.d.ts.map +1 -1
  176. package/lib/typescript/commonjs/locale/translations/pt.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/locale/translations/ru.d.ts.map +1 -1
  178. package/lib/typescript/commonjs/locale/translations/tr.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/locale/translations/zh.d.ts.map +1 -1
  180. package/lib/typescript/commonjs/message-media/StickerMessage.d.ts +3 -2
  181. package/lib/typescript/commonjs/message-media/StickerMessage.d.ts.map +1 -1
  182. package/lib/typescript/commonjs/message-media/types.d.ts +3 -0
  183. package/lib/typescript/commonjs/message-media/types.d.ts.map +1 -1
  184. package/lib/typescript/commonjs/sticker/Sticker.d.ts +3 -0
  185. package/lib/typescript/commonjs/sticker/Sticker.d.ts.map +1 -0
  186. package/lib/typescript/commonjs/sticker/Sticker.web.d.ts +3 -0
  187. package/lib/typescript/commonjs/sticker/Sticker.web.d.ts.map +1 -0
  188. package/lib/typescript/commonjs/sticker/create-sticker.d.ts +23 -0
  189. package/lib/typescript/commonjs/sticker/create-sticker.d.ts.map +1 -0
  190. package/lib/typescript/commonjs/sticker/index.d.ts +4 -0
  191. package/lib/typescript/commonjs/sticker/index.d.ts.map +1 -0
  192. package/lib/typescript/commonjs/sticker/index.web.d.ts +4 -0
  193. package/lib/typescript/commonjs/sticker/index.web.d.ts.map +1 -0
  194. package/lib/typescript/commonjs/sticker/lottie-module.d.ts +23 -0
  195. package/lib/typescript/commonjs/sticker/lottie-module.d.ts.map +1 -0
  196. package/lib/typescript/commonjs/sticker/lottie-module.web.d.ts +18 -0
  197. package/lib/typescript/commonjs/sticker/lottie-module.web.d.ts.map +1 -0
  198. package/lib/typescript/commonjs/sticker/types.d.ts +43 -0
  199. package/lib/typescript/commonjs/sticker/types.d.ts.map +1 -0
  200. package/lib/typescript/module/ai-profile-card/AiProfileCard.d.ts.map +1 -1
  201. package/lib/typescript/module/chat-composer/SuggestionList.d.ts +1 -1
  202. package/lib/typescript/module/chat-composer/SuggestionList.d.ts.map +1 -1
  203. package/lib/typescript/module/chat-composer/SuggestionList.web.d.ts +1 -1
  204. package/lib/typescript/module/chat-composer/SuggestionList.web.d.ts.map +1 -1
  205. package/lib/typescript/module/chat-composer/create-suggestion-list.d.ts +4 -2
  206. package/lib/typescript/module/chat-composer/create-suggestion-list.d.ts.map +1 -1
  207. package/lib/typescript/module/chat-composer/messages.d.ts +6 -0
  208. package/lib/typescript/module/chat-composer/messages.d.ts.map +1 -1
  209. package/lib/typescript/module/chat-composer/types.d.ts +17 -0
  210. package/lib/typescript/module/chat-composer/types.d.ts.map +1 -1
  211. package/lib/typescript/module/cover-header/CoverHeader.d.ts +21 -0
  212. package/lib/typescript/module/cover-header/CoverHeader.d.ts.map +1 -0
  213. package/lib/typescript/module/cover-header/CoverImage.d.ts +11 -0
  214. package/lib/typescript/module/cover-header/CoverImage.d.ts.map +1 -0
  215. package/lib/typescript/module/cover-header/index.d.ts +3 -0
  216. package/lib/typescript/module/cover-header/index.d.ts.map +1 -0
  217. package/lib/typescript/module/cover-header/types.d.ts +33 -0
  218. package/lib/typescript/module/cover-header/types.d.ts.map +1 -0
  219. package/lib/typescript/module/index.d.ts +3 -0
  220. package/lib/typescript/module/index.d.ts.map +1 -1
  221. package/lib/typescript/module/index.web.d.ts +3 -0
  222. package/lib/typescript/module/index.web.d.ts.map +1 -1
  223. package/lib/typescript/module/locale/translations/ar.d.ts.map +1 -1
  224. package/lib/typescript/module/locale/translations/bn.d.ts.map +1 -1
  225. package/lib/typescript/module/locale/translations/ca.d.ts.map +1 -1
  226. package/lib/typescript/module/locale/translations/de.d.ts.map +1 -1
  227. package/lib/typescript/module/locale/translations/es.d.ts.map +1 -1
  228. package/lib/typescript/module/locale/translations/fr.d.ts.map +1 -1
  229. package/lib/typescript/module/locale/translations/hi.d.ts.map +1 -1
  230. package/lib/typescript/module/locale/translations/id.d.ts.map +1 -1
  231. package/lib/typescript/module/locale/translations/it.d.ts.map +1 -1
  232. package/lib/typescript/module/locale/translations/ja.d.ts.map +1 -1
  233. package/lib/typescript/module/locale/translations/pt.d.ts.map +1 -1
  234. package/lib/typescript/module/locale/translations/ru.d.ts.map +1 -1
  235. package/lib/typescript/module/locale/translations/tr.d.ts.map +1 -1
  236. package/lib/typescript/module/locale/translations/zh.d.ts.map +1 -1
  237. package/lib/typescript/module/message-media/StickerMessage.d.ts +3 -2
  238. package/lib/typescript/module/message-media/StickerMessage.d.ts.map +1 -1
  239. package/lib/typescript/module/message-media/types.d.ts +3 -0
  240. package/lib/typescript/module/message-media/types.d.ts.map +1 -1
  241. package/lib/typescript/module/sticker/Sticker.d.ts +3 -0
  242. package/lib/typescript/module/sticker/Sticker.d.ts.map +1 -0
  243. package/lib/typescript/module/sticker/Sticker.web.d.ts +3 -0
  244. package/lib/typescript/module/sticker/Sticker.web.d.ts.map +1 -0
  245. package/lib/typescript/module/sticker/create-sticker.d.ts +23 -0
  246. package/lib/typescript/module/sticker/create-sticker.d.ts.map +1 -0
  247. package/lib/typescript/module/sticker/index.d.ts +4 -0
  248. package/lib/typescript/module/sticker/index.d.ts.map +1 -0
  249. package/lib/typescript/module/sticker/index.web.d.ts +4 -0
  250. package/lib/typescript/module/sticker/index.web.d.ts.map +1 -0
  251. package/lib/typescript/module/sticker/lottie-module.d.ts +23 -0
  252. package/lib/typescript/module/sticker/lottie-module.d.ts.map +1 -0
  253. package/lib/typescript/module/sticker/lottie-module.web.d.ts +18 -0
  254. package/lib/typescript/module/sticker/lottie-module.web.d.ts.map +1 -0
  255. package/lib/typescript/module/sticker/types.d.ts +43 -0
  256. package/lib/typescript/module/sticker/types.d.ts.map +1 -0
  257. package/package.json +48 -1
  258. package/src/ai-profile-card/AiProfileCard.tsx +159 -241
  259. package/src/chat-composer/SuggestionList.tsx +2 -1
  260. package/src/chat-composer/SuggestionList.web.tsx +2 -1
  261. package/src/chat-composer/create-suggestion-list.tsx +54 -8
  262. package/src/chat-composer/messages.ts +9 -0
  263. package/src/chat-composer/types.ts +17 -0
  264. package/src/cover-header/CoverHeader.tsx +75 -0
  265. package/src/cover-header/CoverImage.tsx +60 -0
  266. package/src/cover-header/index.ts +3 -0
  267. package/src/cover-header/types.ts +30 -0
  268. package/src/index.ts +3 -0
  269. package/src/index.web.ts +3 -0
  270. package/src/locale/translations/ar.ts +3 -0
  271. package/src/locale/translations/bn.ts +3 -0
  272. package/src/locale/translations/ca.ts +3 -0
  273. package/src/locale/translations/de.ts +3 -0
  274. package/src/locale/translations/es.ts +3 -0
  275. package/src/locale/translations/fr.ts +3 -0
  276. package/src/locale/translations/hi.ts +3 -0
  277. package/src/locale/translations/id.ts +3 -0
  278. package/src/locale/translations/it.ts +3 -0
  279. package/src/locale/translations/ja.ts +3 -0
  280. package/src/locale/translations/pt.ts +3 -0
  281. package/src/locale/translations/ru.ts +3 -0
  282. package/src/locale/translations/tr.ts +3 -0
  283. package/src/locale/translations/zh.ts +3 -0
  284. package/src/message-media/StickerMessage.tsx +21 -8
  285. package/src/message-media/types.ts +3 -0
  286. package/src/sticker/Sticker.tsx +5 -0
  287. package/src/sticker/Sticker.web.tsx +5 -0
  288. package/src/sticker/create-sticker.tsx +129 -0
  289. package/src/sticker/index.ts +3 -0
  290. package/src/sticker/index.web.ts +8 -0
  291. package/src/sticker/lottie-module.ts +109 -0
  292. package/src/sticker/lottie-module.web.ts +107 -0
  293. package/src/sticker/types.ts +45 -0
package/README.md CHANGED
@@ -162,7 +162,7 @@ Icons go one step further: every glyph is its own subpath, `@oxy.so/bloom/icons/
162
162
  | Overlays | `dialog`, `alert-dialog`, `bottom-sheet`, `popover`, `context-menu`, `dropdown-menu`, `menubar`, `tooltip`, `overlay`, `portal`, `teleport`, `surfaces`, `settings-modal` |
163
163
  | Actions | `button`, `button-group`, `social-button`, `fab`, `frosted-icon-button`, `pressable-scale`, `subtle-hover` |
164
164
  | Forms | `text-field`, `textarea`, `phone-input`, `input-otp`, `field`, `input-group`, `label`, `select`, `command`, `checkbox`, `radio`, `switch`, `slider`, `segmented-control`, `search`, `date-picker`, `file-upload`, `auth-card`, `stepper`, `rating`, `wizard` |
165
- | Layout and lists | `grid`, `list`, `scroll`, `settings-list`, `card`, `accordion`, `aspect-ratio`, `divider`, `item`, `carousel` |
165
+ | Layout and lists | `grid`, `list`, `scroll`, `settings-list`, `card`, `cover-header`, `accordion`, `aspect-ratio`, `divider`, `item`, `carousel` |
166
166
  | Data and charts | `table`, `data-table`, `chart-cards`, `stat-cards`, `calendar`, `composition-bar`, `dot-grid-meter`, `stat-bar`, `activity-heatmap`, `recent-hires-card`, `patient-info-card`, `important-alerts-card`, `agent-limits-card`, `ai-profile-card` |
167
167
  | Music and media | `media-card`, `media-controls`, `media-header`, `media-player`, `media-shelf`, `track-list`, `queue-panel`, `lyrics`, `music-library`, `creator-studio`, `sortable-media` |
168
168
  | Housing | `home-search`, `listing-actions`, `listing-editor`, `offering-badge`, `place-reviews`, `property-insights`, `tenancy`, `eviction` |
@@ -32,7 +32,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
32
32
 
33
33
  ## Totals
34
34
 
35
- - **206 families** in `src/`, **204** published (a subpath, the root barrel, or both). **40** carry a web fork.
35
+ - **208 families** in `src/`, **206** published (a subpath, the root barrel, or both). **41** carry a web fork.
36
36
  - Docs, stories and suites are gated as a standard by `src/__tests__/family-coverage.test.ts`; the per-family counts are in the table below.
37
37
 
38
38
  | contract | applies to | reads | delegated | n/a¹ | adaptation |
@@ -163,6 +163,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
163
163
  | `contact-card` | `@oxy.so/bloom/contact-card` + barrel | universal | `contact-card.mdx` | yes | 2 | | | | |
164
164
  | `content-panel` | `@oxy.so/bloom/content-panel` + barrel | web fork | `content-panel.mdx` | yes | 8 | | | | |
165
165
  | `context-menu` | `@oxy.so/bloom/context-menu` + barrel | web fork | `context-menu.mdx` | yes | 5 | | | reads | |
166
+ | `cover-header` | `@oxy.so/bloom/cover-header` + barrel | universal | `cover-header.mdx` | yes | 1 | | | | |
166
167
  | `creator-studio` | `@oxy.so/bloom/creator-studio` + barrel | universal | `creator-studio.mdx` | yes | 4 | | n/a¹ | | **adaptation** |
167
168
  | `data-table` | `@oxy.so/bloom/data-table` + barrel | universal | `data-table.mdx` | yes | 4 | | reads | | reads |
168
169
  | `date-picker` | `@oxy.so/bloom/date-picker` + barrel | universal | `date-picker.mdx` | yes | 5 | reads | reads | | reads |
@@ -228,7 +229,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
228
229
  | `menu-item` | `@oxy.so/bloom/menu-item` + barrel | universal | `menu-item.mdx` | yes | 1 | | | | |
229
230
  | `menubar` | `@oxy.so/bloom/menubar` + barrel | web fork | `menubar.mdx` | yes | 5 | | | reads | reads |
230
231
  | `message-bubble` | `@oxy.so/bloom/message-bubble` + barrel | universal | `message-bubble.mdx` | yes | 2 | | | | |
231
- | `message-media` | `@oxy.so/bloom/message-media` + barrel | universal | `message-media.mdx` | yes | 2 | n/a¹ | | | |
232
+ | `message-media` | `@oxy.so/bloom/message-media` + barrel | universal | `message-media.mdx` | yes | 3 | n/a¹ | | | |
232
233
  | `motion` | `@oxy.so/bloom/motion` + barrel | web fork | `motion.mdx` | yes | 4 | | | | |
233
234
  | `music-library` | `@oxy.so/bloom/music-library` + barrel | universal | `music-library.mdx` | yes | 4 | n/a¹ | | | |
234
235
  | `navigation-banner` | `@oxy.so/bloom/navigation-banner` + barrel | universal | `navigation-banner.mdx` | yes | 2 | | | | |
@@ -287,6 +288,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
287
288
  | `stay-filters` | `@oxy.so/bloom/stay-filters` + barrel | universal | `stay-filters.mdx` | yes | 5 | n/a¹ | reads | | |
288
289
  | `stay-search` | `@oxy.so/bloom/stay-search` + barrel | universal | `stay-search.mdx` | yes | 5 | | | | |
289
290
  | `stepper` | `@oxy.so/bloom/stepper` + barrel | universal | `stepper.mdx` | yes | 4 | reads | reads | | |
291
+ | `sticker` | `@oxy.so/bloom/sticker` + barrel | web fork | `sticker.mdx` | yes | 1 | | | | |
290
292
  | `styles` | `@oxy.so/bloom/styles` + barrel | universal | `styles.mdx` | yes | 83 | n/a¹ | | | |
291
293
  | `subtle-hover` | `@oxy.so/bloom/subtle-hover` + barrel | universal | `subtle-hover.mdx` | yes | 1 | | | | |
292
294
  | `surface` | `@oxy.so/bloom/surface` + barrel | web fork | `surface.mdx` | yes | 37 | | | | |
@@ -302,7 +304,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
302
304
  | `tenancy` | `@oxy.so/bloom/tenancy` + barrel | universal | `tenancy.mdx` | yes | 5 | | reads | | |
303
305
  | `text-field` | `@oxy.so/bloom/text-field` + barrel | universal | `text-field.mdx` | yes | 16 | reads | reads | | |
304
306
  | `textarea` | `@oxy.so/bloom/textarea` + barrel | universal | `textarea.mdx` | yes | 4 | reads | reads | | n/a¹ |
305
- | `theme` | `@oxy.so/bloom/theme` + barrel | web fork | `theme.mdx` | yes | 343 | | | n/a¹ | reads |
307
+ | `theme` | `@oxy.so/bloom/theme` + barrel | web fork | `theme.mdx` | yes | 345 | | | n/a¹ | reads |
306
308
  | `theme-toggle` | `@oxy.so/bloom/theme-toggle` + barrel | universal | `theme-toggle.mdx` | yes | 2 | n/a¹ | | | |
307
309
  | `toast` | `@oxy.so/bloom/toast` + barrel | universal | `toast.mdx` | yes | 17 | | | | |
308
310
  | `tooltip` | `@oxy.so/bloom/tooltip` + barrel | web fork | `tooltip.mdx` | yes | 1 | | | | |
@@ -136,6 +136,10 @@ Times ("12:41", "Yesterday") never appear here. `VoiceRecorder` takes `seconds`
136
136
 
137
137
  One `SuggestionList` serves all three kinds; only the leading slot differs (an avatar, a glyph disc, the emoji). Rows are `role="option"` inside a `role="listbox"` with `aria-selected` — the spelling react-native-web reads; `accessibilityState` alone would render a list with no state on web. Each row is named by its label **and** handle, because "Ana" alone is ambiguous in a group.
138
138
 
139
+ A person marked `verified` gets the accent verified badge after the name, and the row's name says so ("Ana Restrepo, Verified, @ana"); the marker belongs to `kind="mention"` only.
140
+
141
+ The list also answers the two states a search passes through. `loading` replaces the rows with a named, busy "Searching…" line, so a list with nothing *yet* is not read as one that found nothing. An empty list still draws nothing by default — right for a composer that shows the list only while it has rows — and `showEmpty` draws the localized "No people found" line instead (`emptyLabel` replaces it), for a picker the user opened on purpose.
142
+
139
143
  The list renders **in flow** above the bar rather than in a portal. Anchoring it over the conversation is a layout decision an app makes with its own container (`position: absolute` on a wrapper); a portal here would have to guess the scroll parent.
140
144
 
141
145
  ## Voice recorder
@@ -227,7 +231,7 @@ State colours 150ms; the mic ↔ send cross-fade 220ms; the recording dot pulses
227
231
 
228
232
  `ComposerBanner` — `kind`, `title`, `preview`, `thumbnail`, `icon`, `accentColor`, `onClose`, `closeLabel`, `trailing`.
229
233
  `ComposerAttachmentStrip` — `attachments`, `onRemove`, `size` (56), `removeLabel`.
230
- `SuggestionList` — `kind`, `suggestions`, `activeIndex`, `onSelectSuggestion`, `onActiveIndexChange`, `header`, `maxHeight` (232).
234
+ `SuggestionList` — `kind`, `suggestions` (each may carry `verified`), `activeIndex`, `onSelectSuggestion`, `onActiveIndexChange`, `header`, `maxHeight` (232), `loading`, `showEmpty`, `emptyLabel`.
231
235
  `VoiceRecorder` — `state`, `seconds`, `duration`, `amplitudes`, `playing`, `onPlayToggle`, `onCancel`, `onDelete`, `onSend`, `onLock`, `slideToCancel`, `labels`.
232
236
  `AttachmentMenu` — `open`/`defaultOpen`/`onOpenChange`, `items`, `layout`, `columns`, `onSelect`, `recent`, `label`.
233
237
  `EmojiPicker` — `groups`, `onSelectEmoji`, `activeGroup`, `query`, `filter`, `frequentlyUsed`, `skinTone`, `columns` (8), `height` (288), `tabs`, `activeTab`, `labels`.
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: CoverHeader
3
+ description: A cover band with content rising into its bottom edge — a profile's banner and the avatar that overlaps it.
4
+ order: 106
5
+ ---
6
+
7
+ # CoverHeader
8
+
9
+ A cover band (a photo, or anything you draw) and a content column whose top
10
+ rises `overlap` points into the band's bottom edge. It is the geometry of a
11
+ profile page's banner-plus-avatar, and of `AiProfileCard`, which is built on it.
12
+
13
+ ```tsx
14
+ import { CoverHeader } from '@oxy.so/bloom/cover-header';
15
+
16
+ <CoverHeader coverSource={bannerUrl} coverHeight={170} overlap={45}
17
+ contentStyle={{ paddingHorizontal: 16 }}>
18
+ <Avatar size={90} source={avatarUrl} />
19
+ <Text variant="title-2-medium">Maya Collins</Text>
20
+ </CoverHeader>
21
+ ```
22
+
23
+ ## Props
24
+
25
+ | Prop | Default | |
26
+ |---|---|---|
27
+ | `coverSource` | — | photo across the band; without one the band is `background-tertiary` |
28
+ | `coverPosition` | `{ x: 0.5, y: 0.5 }` | where the crop sits, as `object-position` fractions |
29
+ | `cover` | — | drawn in the band instead of the photo |
30
+ | `coverHeight` | `170` | height of the band |
31
+ | `overlap` | `45` | how far the content rises into the band, clamped to `0..coverHeight` |
32
+ | `coverStyle` | — | the band's style (corner radii, another fill) |
33
+ | `contentStyle` | — | the content column's style; its `paddingTop` is the component's |
34
+ | `testID` | — | also names `-cover`, `-cover-image` and `-content` |
35
+
36
+ ## How the overlap is made
37
+
38
+ By layout. Nothing is moved.
39
+
40
+ - The band is the **first** child, positioned absolutely over the top `coverHeight`.
41
+ - The content is the **last** child, in flow, with `paddingTop: coverHeight - overlap`.
42
+
43
+ There is no negative margin, no transform and no `zIndex`, and each of those
44
+ has broken a profile before:
45
+
46
+ - A **transform** keeps the layout box where it was. The content paints 45pt higher,
47
+ but whatever comes next (a tab strip, a list's next row) still starts after the
48
+ un-moved box, which leaves a 45pt hole.
49
+ - A **negative margin** on the content leaves the paint order to whichever
50
+ view happens to create a stacking context first. Inside a native
51
+ virtualized cell, that has put the avatar under the banner.
52
+ - **`zIndex`** belongs to the overlay stack (`docs/overlay.mdx`), never to a component.
53
+
54
+ Because the content is the later sibling, it paints over the band on iOS,
55
+ Android and web. The measured height is the real one. A list header or
56
+ sticky section placed after a `CoverHeader` starts exactly where its content ends.
@@ -258,9 +258,14 @@ answer AND the viewer's wrong pick — hiding the right answer teaches nobody.
258
258
 
259
259
  ```tsx
260
260
  <StickerMessage source={sticker} accessibilityLabel="Sticker: grinning sun" />
261
+ <StickerMessage source={still} animation={lottieUrl} accessibilityLabel="Sticker: waving" />
261
262
  <GifMessage source={gif} aspectRatio={1.6} />
262
263
  ```
263
264
 
265
+ Given `animation`, the sticker plays its Lottie file through
266
+ [`Sticker`](./sticker.mdx), over `source` as the still — which is also what shows
267
+ under reduced motion or when no Lottie player is installed.
268
+
264
269
  **A sticker draws NO surface** — no background, no radius, no padding. Render it
265
270
  with `message-bubble`'s `variant="bare"`: a bubble behind a sticker is a picture
266
271
  of a sticker, and its scrim turns a cut-out into a square. `resizeMode` is
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: Sticker
3
+ description: A Lottie sticker that animates where it can and stays a clean still where it cannot.
4
+ order: 140
5
+ ---
6
+
7
+ # Sticker
8
+
9
+ A sticker, animated when it can be and still when it cannot.
10
+
11
+ ```tsx
12
+ import { Sticker } from '@oxy.so/bloom/sticker';
13
+
14
+ <Sticker
15
+ animation={sticker.animation.url} // Lottie JSON or .lottie
16
+ fallback={sticker.fallback.url} // the still image of the same sticker
17
+ size={160}
18
+ accessibilityLabel="Sticker: sad bear"
19
+ />
20
+ ```
21
+
22
+ Oxy's sticker catalogue (`@oxy.so/stickers`) hands out both URLs for every
23
+ sticker, which is exactly this component's pair of props.
24
+
25
+ ## What a person sees
26
+
27
+ | situation | shown |
28
+ | --- | --- |
29
+ | the animation is still loading | the still |
30
+ | the animation loaded | the animation |
31
+ | the animation failed to load | the still, for good |
32
+ | the person asked for reduced motion | the still — the player is never mounted |
33
+ | no Lottie player is installed on this platform | the still, with one dev warning naming the package |
34
+
35
+ The still is always drawn first, so a sticker never flashes blank while its
36
+ animation arrives, and every failure mode still looks like a sticker.
37
+
38
+ ## Players are optional peers
39
+
40
+ Bloom ships no native code, so each platform's player is an OPTIONAL peer,
41
+ loaded only when a `Sticker` with an `animation` renders:
42
+
43
+ - native: `lottie-react-native` (`npx expo install lottie-react-native`)
44
+ - web: `@lottiefiles/dotlottie-react`
45
+
46
+ An app that shows no animated sticker installs neither. An app with its own
47
+ build of a player hands it in with `provideLottiePlayer(Component)`, adapted to
48
+ `LottiePlayerProps` (`uri`, `loop`, `paused`, `onLoad`, `onError`, `style`).
49
+
50
+ ## Props
51
+
52
+ | prop | decides |
53
+ | --- | --- |
54
+ | `animation` | the Lottie file; omit it for a still sticker |
55
+ | `fallback` | the still image — required |
56
+ | `size` | square edge, default 128 |
57
+ | `loop` | default true |
58
+ | `paused` | hold the frame, e.g. while scrolled out of view |
59
+ | `accessibilityLabel` | the name; a sticker IS its meaning, so pass its emotion |
60
+ | `decorative` | hide it from assistive technology when its container already names it |
61
+
62
+ Like `StickerMessage`, it draws **no surface** — no background, radius or
63
+ padding. In a chat use `StickerMessage` with `animation`, which is this plus the
64
+ press, sending and failed affordances.