@oxy.so/bloom 3.2.0 → 3.3.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 (496) hide show
  1. package/docs/adoption-matrix.mdx +3 -3
  2. package/docs/ai-chat.mdx +31 -3
  3. package/docs/composer-panel.mdx +23 -6
  4. package/lib/commonjs/agent-limits-card/AgentLimitsCard.js +25 -23
  5. package/lib/commonjs/agent-limits-card/AgentLimitsCard.js.map +1 -1
  6. package/lib/commonjs/ai-chat/AiChatContainer.js +122 -14
  7. package/lib/commonjs/ai-chat/AiChatContainer.js.map +1 -1
  8. package/lib/commonjs/ai-chat/AiChatShell.js +46 -6
  9. package/lib/commonjs/ai-chat/AiChatShell.js.map +1 -1
  10. package/lib/commonjs/ai-chat/context.js +5 -1
  11. package/lib/commonjs/ai-chat/context.js.map +1 -1
  12. package/lib/commonjs/ai-chat/index.js +7 -0
  13. package/lib/commonjs/ai-chat/index.js.map +1 -1
  14. package/lib/commonjs/ai-chat/index.web.js +7 -0
  15. package/lib/commonjs/ai-chat/index.web.js.map +1 -1
  16. package/lib/commonjs/app-shell/AppShellHeader.js +5 -4
  17. package/lib/commonjs/app-shell/AppShellHeader.js.map +1 -1
  18. package/lib/commonjs/app-shell/AppShellMenuButton.js +3 -2
  19. package/lib/commonjs/app-shell/AppShellMenuButton.js.map +1 -1
  20. package/lib/commonjs/app-shell/NotificationBell.js +6 -6
  21. package/lib/commonjs/app-shell/NotificationBell.js.map +1 -1
  22. package/lib/commonjs/auth-card/AuthCard.js +20 -20
  23. package/lib/commonjs/auth-card/AuthCard.js.map +1 -1
  24. package/lib/commonjs/calendar/CalendarViewEventDetails.js +27 -22
  25. package/lib/commonjs/calendar/CalendarViewEventDetails.js.map +1 -1
  26. package/lib/commonjs/calendar/CalendarViewHeader.js +6 -5
  27. package/lib/commonjs/calendar/CalendarViewHeader.js.map +1 -1
  28. package/lib/commonjs/calendar/CalendarViewInboxMenu.js +9 -7
  29. package/lib/commonjs/calendar/CalendarViewInboxMenu.js.map +1 -1
  30. package/lib/commonjs/carousel/Carousel.js +4 -3
  31. package/lib/commonjs/carousel/Carousel.js.map +1 -1
  32. package/lib/commonjs/chart-cards/BarListCard.js +10 -10
  33. package/lib/commonjs/chart-cards/BarListCard.js.map +1 -1
  34. package/lib/commonjs/chart-cards/primitives/ChartRangePill.js +10 -8
  35. package/lib/commonjs/chart-cards/primitives/ChartRangePill.js.map +1 -1
  36. package/lib/commonjs/chat-indicators/MessageStatus.js +8 -5
  37. package/lib/commonjs/chat-indicators/MessageStatus.js.map +1 -1
  38. package/lib/commonjs/composer-panel/ComposerControls.js +61 -0
  39. package/lib/commonjs/composer-panel/ComposerControls.js.map +1 -1
  40. package/lib/commonjs/composer-panel/ComposerPanelBase.js +12 -4
  41. package/lib/commonjs/composer-panel/ComposerPanelBase.js.map +1 -1
  42. package/lib/commonjs/composer-panel/ComposerPillBase.js +114 -79
  43. package/lib/commonjs/composer-panel/ComposerPillBase.js.map +1 -1
  44. package/lib/commonjs/composer-panel/EffortSlider.js +24 -15
  45. package/lib/commonjs/composer-panel/EffortSlider.js.map +1 -1
  46. package/lib/commonjs/composer-panel/ModelPickerBase.js +15 -4
  47. package/lib/commonjs/composer-panel/ModelPickerBase.js.map +1 -1
  48. package/lib/commonjs/data-table/DataTableRowActions.js +2 -2
  49. package/lib/commonjs/data-table/DataTableRowActions.js.map +1 -1
  50. package/lib/commonjs/data-table/DataTableSearch.js +8 -8
  51. package/lib/commonjs/data-table/DataTableSearch.js.map +1 -1
  52. package/lib/commonjs/date-picker/MeetingScheduler.js +23 -21
  53. package/lib/commonjs/date-picker/MeetingScheduler.js.map +1 -1
  54. package/lib/commonjs/date-picker/PickerShell.js +2 -2
  55. package/lib/commonjs/date-picker/PickerShell.js.map +1 -1
  56. package/lib/commonjs/dialog/DialogHeader.js +25 -17
  57. package/lib/commonjs/dialog/DialogHeader.js.map +1 -1
  58. package/lib/commonjs/eviction/EvictionReportCard.js +27 -20
  59. package/lib/commonjs/eviction/EvictionReportCard.js.map +1 -1
  60. package/lib/commonjs/eviction/constants.js +16 -9
  61. package/lib/commonjs/eviction/constants.js.map +1 -1
  62. package/lib/commonjs/file-upload/FileUpload.js +14 -11
  63. package/lib/commonjs/file-upload/FileUpload.js.map +1 -1
  64. package/lib/commonjs/floating/menu-rows.js +2 -2
  65. package/lib/commonjs/floating/menu-rows.js.map +1 -1
  66. package/lib/commonjs/floating/menu-sub-flyout.js +2 -2
  67. package/lib/commonjs/floating/menu-sub-flyout.js.map +1 -1
  68. package/lib/commonjs/floating/menu-sub-inline.js +3 -2
  69. package/lib/commonjs/floating/menu-sub-inline.js.map +1 -1
  70. package/lib/commonjs/listing-card/ListingCard.js +29 -28
  71. package/lib/commonjs/listing-card/ListingCard.js.map +1 -1
  72. package/lib/commonjs/listing-details/ContactCard.js +21 -17
  73. package/lib/commonjs/listing-details/ContactCard.js.map +1 -1
  74. package/lib/commonjs/listing-details/FloorPlan.js +5 -5
  75. package/lib/commonjs/listing-details/FloorPlan.js.map +1 -1
  76. package/lib/commonjs/listing-details/ListingPhotoGrid.js +4 -4
  77. package/lib/commonjs/listing-details/ListingPhotoGrid.js.map +1 -1
  78. package/lib/commonjs/listing-details/ReviewCard.js +13 -13
  79. package/lib/commonjs/listing-details/ReviewCard.js.map +1 -1
  80. package/lib/commonjs/listing-details/ReviewSummary.js +7 -7
  81. package/lib/commonjs/listing-details/ReviewSummary.js.map +1 -1
  82. package/lib/commonjs/message-bubble/CallSummaryRow.js +10 -7
  83. package/lib/commonjs/message-bubble/CallSummaryRow.js.map +1 -1
  84. package/lib/commonjs/message-bubble/SwipeToReply.js +2 -2
  85. package/lib/commonjs/message-bubble/SwipeToReply.js.map +1 -1
  86. package/lib/commonjs/message-bubble/parts.js +20 -17
  87. package/lib/commonjs/message-bubble/parts.js.map +1 -1
  88. package/lib/commonjs/notification-center/NotificationCenter.js +24 -20
  89. package/lib/commonjs/notification-center/NotificationCenter.js.map +1 -1
  90. package/lib/commonjs/page-header/PageHeader.js +9 -9
  91. package/lib/commonjs/page-header/PageHeader.js.map +1 -1
  92. package/lib/commonjs/place-reviews/PlaceReviewCard.js +20 -15
  93. package/lib/commonjs/place-reviews/PlaceReviewCard.js.map +1 -1
  94. package/lib/commonjs/place-reviews/PlaceReviewSummary.js +6 -5
  95. package/lib/commonjs/place-reviews/PlaceReviewSummary.js.map +1 -1
  96. package/lib/commonjs/place-reviews/WriteReviewPrompt.js +9 -7
  97. package/lib/commonjs/place-reviews/WriteReviewPrompt.js.map +1 -1
  98. package/lib/commonjs/property-insights/EnergyBadge.js +5 -5
  99. package/lib/commonjs/property-insights/EnergyBadge.js.map +1 -1
  100. package/lib/commonjs/property-insights/EnergyLabel.js +10 -10
  101. package/lib/commonjs/property-insights/EnergyLabel.js.map +1 -1
  102. package/lib/commonjs/property-insights/NearbyPlaces.js +6 -6
  103. package/lib/commonjs/property-insights/NearbyPlaces.js.map +1 -1
  104. package/lib/commonjs/property-insights/PriceEstimate.js +17 -16
  105. package/lib/commonjs/property-insights/PriceEstimate.js.map +1 -1
  106. package/lib/commonjs/property-insights/PriceHistoryChart.js +7 -7
  107. package/lib/commonjs/property-insights/PriceHistoryChart.js.map +1 -1
  108. package/lib/commonjs/property-insights/RentHistoryList.js +7 -7
  109. package/lib/commonjs/property-insights/RentHistoryList.js.map +1 -1
  110. package/lib/commonjs/recent-hires-card/RecentHiresCard.js +10 -9
  111. package/lib/commonjs/recent-hires-card/RecentHiresCard.js.map +1 -1
  112. package/lib/commonjs/select/Select.js +2 -2
  113. package/lib/commonjs/select/Select.js.map +1 -1
  114. package/lib/commonjs/select/Select.web.js +2 -2
  115. package/lib/commonjs/select/Select.web.js.map +1 -1
  116. package/lib/commonjs/select/shared.js +3 -2
  117. package/lib/commonjs/select/shared.js.map +1 -1
  118. package/lib/commonjs/settings-modal/SettingsFields.js +8 -8
  119. package/lib/commonjs/settings-modal/SettingsFields.js.map +1 -1
  120. package/lib/commonjs/settings-modal/SettingsModal.js +17 -14
  121. package/lib/commonjs/settings-modal/SettingsModal.js.map +1 -1
  122. package/lib/commonjs/settings-modal/SettingsStorage.js +30 -22
  123. package/lib/commonjs/settings-modal/SettingsStorage.js.map +1 -1
  124. package/lib/commonjs/settings-modal/SettingsTools.js +18 -17
  125. package/lib/commonjs/settings-modal/SettingsTools.js.map +1 -1
  126. package/lib/commonjs/sidebar/Sidebar.js +19 -17
  127. package/lib/commonjs/sidebar/Sidebar.js.map +1 -1
  128. package/lib/commonjs/sidebar/SidebarFolder.js +7 -6
  129. package/lib/commonjs/sidebar/SidebarFolder.js.map +1 -1
  130. package/lib/commonjs/sidebar/SidebarUserMenu.js +8 -7
  131. package/lib/commonjs/sidebar/SidebarUserMenu.js.map +1 -1
  132. package/lib/commonjs/task-list/TaskList.js +6 -6
  133. package/lib/commonjs/task-list/TaskList.js.map +1 -1
  134. package/lib/commonjs/tenancy/DocumentList.js +10 -8
  135. package/lib/commonjs/tenancy/DocumentList.js.map +1 -1
  136. package/lib/commonjs/tenancy/MaintenanceRequestCard.js +9 -9
  137. package/lib/commonjs/tenancy/MaintenanceRequestCard.js.map +1 -1
  138. package/lib/commonjs/tenancy/RentPaymentList.js +19 -19
  139. package/lib/commonjs/tenancy/RentPaymentList.js.map +1 -1
  140. package/lib/commonjs/tenancy/constants.js +18 -10
  141. package/lib/commonjs/tenancy/constants.js.map +1 -1
  142. package/lib/commonjs/text-field/TextField.js +11 -11
  143. package/lib/commonjs/text-field/TextField.js.map +1 -1
  144. package/lib/commonjs/theme-toggle/ThemeToggle.js +7 -6
  145. package/lib/commonjs/theme-toggle/ThemeToggle.js.map +1 -1
  146. package/lib/commonjs/web-search/WebSearch.js +8 -8
  147. package/lib/commonjs/web-search/WebSearch.js.map +1 -1
  148. package/lib/commonjs/zoomable-media-gallery/ZoomableMediaGallery.js +19 -14
  149. package/lib/commonjs/zoomable-media-gallery/ZoomableMediaGallery.js.map +1 -1
  150. package/lib/module/agent-limits-card/AgentLimitsCard.js +3 -1
  151. package/lib/module/agent-limits-card/AgentLimitsCard.js.map +1 -1
  152. package/lib/module/ai-chat/AiChatContainer.js +122 -14
  153. package/lib/module/ai-chat/AiChatContainer.js.map +1 -1
  154. package/lib/module/ai-chat/AiChatShell.js +46 -6
  155. package/lib/module/ai-chat/AiChatShell.js.map +1 -1
  156. package/lib/module/ai-chat/context.js +5 -1
  157. package/lib/module/ai-chat/context.js.map +1 -1
  158. package/lib/module/ai-chat/index.js +1 -0
  159. package/lib/module/ai-chat/index.js.map +1 -1
  160. package/lib/module/ai-chat/index.web.js +1 -0
  161. package/lib/module/ai-chat/index.web.js.map +1 -1
  162. package/lib/module/app-shell/AppShellHeader.js +2 -1
  163. package/lib/module/app-shell/AppShellHeader.js.map +1 -1
  164. package/lib/module/app-shell/AppShellMenuButton.js +2 -1
  165. package/lib/module/app-shell/AppShellMenuButton.js.map +1 -1
  166. package/lib/module/app-shell/NotificationBell.js +1 -1
  167. package/lib/module/app-shell/NotificationBell.js.map +1 -1
  168. package/lib/module/auth-card/AuthCard.js +1 -1
  169. package/lib/module/auth-card/AuthCard.js.map +1 -1
  170. package/lib/module/calendar/CalendarViewEventDetails.js +6 -1
  171. package/lib/module/calendar/CalendarViewEventDetails.js.map +1 -1
  172. package/lib/module/calendar/CalendarViewHeader.js +2 -1
  173. package/lib/module/calendar/CalendarViewHeader.js.map +1 -1
  174. package/lib/module/calendar/CalendarViewInboxMenu.js +3 -1
  175. package/lib/module/calendar/CalendarViewInboxMenu.js.map +1 -1
  176. package/lib/module/carousel/Carousel.js +2 -1
  177. package/lib/module/carousel/Carousel.js.map +1 -1
  178. package/lib/module/chart-cards/BarListCard.js +1 -1
  179. package/lib/module/chart-cards/BarListCard.js.map +1 -1
  180. package/lib/module/chart-cards/primitives/ChartRangePill.js +3 -1
  181. package/lib/module/chart-cards/primitives/ChartRangePill.js.map +1 -1
  182. package/lib/module/chat-indicators/MessageStatus.js +4 -1
  183. package/lib/module/chat-indicators/MessageStatus.js.map +1 -1
  184. package/lib/module/composer-panel/ComposerControls.js +60 -0
  185. package/lib/module/composer-panel/ComposerControls.js.map +1 -1
  186. package/lib/module/composer-panel/ComposerPanelBase.js +13 -5
  187. package/lib/module/composer-panel/ComposerPanelBase.js.map +1 -1
  188. package/lib/module/composer-panel/ComposerPillBase.js +115 -80
  189. package/lib/module/composer-panel/ComposerPillBase.js.map +1 -1
  190. package/lib/module/composer-panel/EffortSlider.js +24 -15
  191. package/lib/module/composer-panel/EffortSlider.js.map +1 -1
  192. package/lib/module/composer-panel/ModelPickerBase.js +15 -4
  193. package/lib/module/composer-panel/ModelPickerBase.js.map +1 -1
  194. package/lib/module/data-table/DataTableRowActions.js +1 -1
  195. package/lib/module/data-table/DataTableRowActions.js.map +1 -1
  196. package/lib/module/data-table/DataTableSearch.js +1 -1
  197. package/lib/module/data-table/DataTableSearch.js.map +1 -1
  198. package/lib/module/date-picker/MeetingScheduler.js +3 -1
  199. package/lib/module/date-picker/MeetingScheduler.js.map +1 -1
  200. package/lib/module/date-picker/PickerShell.js +1 -1
  201. package/lib/module/date-picker/PickerShell.js.map +1 -1
  202. package/lib/module/dialog/DialogHeader.js +9 -1
  203. package/lib/module/dialog/DialogHeader.js.map +1 -1
  204. package/lib/module/eviction/EvictionReportCard.js +8 -1
  205. package/lib/module/eviction/EvictionReportCard.js.map +1 -1
  206. package/lib/module/eviction/constants.js +8 -1
  207. package/lib/module/eviction/constants.js.map +1 -1
  208. package/lib/module/file-upload/FileUpload.js +4 -1
  209. package/lib/module/file-upload/FileUpload.js.map +1 -1
  210. package/lib/module/floating/menu-rows.js +1 -1
  211. package/lib/module/floating/menu-rows.js.map +1 -1
  212. package/lib/module/floating/menu-sub-flyout.js +1 -1
  213. package/lib/module/floating/menu-sub-flyout.js.map +1 -1
  214. package/lib/module/floating/menu-sub-inline.js +2 -1
  215. package/lib/module/floating/menu-sub-inline.js.map +1 -1
  216. package/lib/module/listing-card/ListingCard.js +2 -1
  217. package/lib/module/listing-card/ListingCard.js.map +1 -1
  218. package/lib/module/listing-details/ContactCard.js +5 -1
  219. package/lib/module/listing-details/ContactCard.js.map +1 -1
  220. package/lib/module/listing-details/FloorPlan.js +1 -1
  221. package/lib/module/listing-details/FloorPlan.js.map +1 -1
  222. package/lib/module/listing-details/ListingPhotoGrid.js +1 -1
  223. package/lib/module/listing-details/ListingPhotoGrid.js.map +1 -1
  224. package/lib/module/listing-details/ReviewCard.js +1 -1
  225. package/lib/module/listing-details/ReviewCard.js.map +1 -1
  226. package/lib/module/listing-details/ReviewSummary.js +1 -1
  227. package/lib/module/listing-details/ReviewSummary.js.map +1 -1
  228. package/lib/module/message-bubble/CallSummaryRow.js +4 -1
  229. package/lib/module/message-bubble/CallSummaryRow.js.map +1 -1
  230. package/lib/module/message-bubble/SwipeToReply.js +1 -1
  231. package/lib/module/message-bubble/SwipeToReply.js.map +1 -1
  232. package/lib/module/message-bubble/parts.js +4 -1
  233. package/lib/module/message-bubble/parts.js.map +1 -1
  234. package/lib/module/notification-center/NotificationCenter.js +5 -1
  235. package/lib/module/notification-center/NotificationCenter.js.map +1 -1
  236. package/lib/module/page-header/PageHeader.js +1 -1
  237. package/lib/module/page-header/PageHeader.js.map +1 -1
  238. package/lib/module/place-reviews/PlaceReviewCard.js +6 -1
  239. package/lib/module/place-reviews/PlaceReviewCard.js.map +1 -1
  240. package/lib/module/place-reviews/PlaceReviewSummary.js +2 -1
  241. package/lib/module/place-reviews/PlaceReviewSummary.js.map +1 -1
  242. package/lib/module/place-reviews/WriteReviewPrompt.js +3 -1
  243. package/lib/module/place-reviews/WriteReviewPrompt.js.map +1 -1
  244. package/lib/module/property-insights/EnergyBadge.js +1 -1
  245. package/lib/module/property-insights/EnergyBadge.js.map +1 -1
  246. package/lib/module/property-insights/EnergyLabel.js +1 -1
  247. package/lib/module/property-insights/EnergyLabel.js.map +1 -1
  248. package/lib/module/property-insights/NearbyPlaces.js +1 -1
  249. package/lib/module/property-insights/NearbyPlaces.js.map +1 -1
  250. package/lib/module/property-insights/PriceEstimate.js +2 -1
  251. package/lib/module/property-insights/PriceEstimate.js.map +1 -1
  252. package/lib/module/property-insights/PriceHistoryChart.js +1 -1
  253. package/lib/module/property-insights/PriceHistoryChart.js.map +1 -1
  254. package/lib/module/property-insights/RentHistoryList.js +1 -1
  255. package/lib/module/property-insights/RentHistoryList.js.map +1 -1
  256. package/lib/module/recent-hires-card/RecentHiresCard.js +2 -1
  257. package/lib/module/recent-hires-card/RecentHiresCard.js.map +1 -1
  258. package/lib/module/select/Select.js +1 -1
  259. package/lib/module/select/Select.js.map +1 -1
  260. package/lib/module/select/Select.web.js +1 -1
  261. package/lib/module/select/Select.web.js.map +1 -1
  262. package/lib/module/select/shared.js +2 -1
  263. package/lib/module/select/shared.js.map +1 -1
  264. package/lib/module/settings-modal/SettingsFields.js +1 -1
  265. package/lib/module/settings-modal/SettingsFields.js.map +1 -1
  266. package/lib/module/settings-modal/SettingsModal.js +4 -1
  267. package/lib/module/settings-modal/SettingsModal.js.map +1 -1
  268. package/lib/module/settings-modal/SettingsStorage.js +9 -1
  269. package/lib/module/settings-modal/SettingsStorage.js.map +1 -1
  270. package/lib/module/settings-modal/SettingsTools.js +2 -1
  271. package/lib/module/settings-modal/SettingsTools.js.map +1 -1
  272. package/lib/module/sidebar/Sidebar.js +3 -1
  273. package/lib/module/sidebar/Sidebar.js.map +1 -1
  274. package/lib/module/sidebar/SidebarFolder.js +2 -1
  275. package/lib/module/sidebar/SidebarFolder.js.map +1 -1
  276. package/lib/module/sidebar/SidebarUserMenu.js +2 -1
  277. package/lib/module/sidebar/SidebarUserMenu.js.map +1 -1
  278. package/lib/module/task-list/TaskList.js +1 -1
  279. package/lib/module/task-list/TaskList.js.map +1 -1
  280. package/lib/module/tenancy/DocumentList.js +3 -1
  281. package/lib/module/tenancy/DocumentList.js.map +1 -1
  282. package/lib/module/tenancy/MaintenanceRequestCard.js +1 -1
  283. package/lib/module/tenancy/MaintenanceRequestCard.js.map +1 -1
  284. package/lib/module/tenancy/RentPaymentList.js +1 -1
  285. package/lib/module/tenancy/RentPaymentList.js.map +1 -1
  286. package/lib/module/tenancy/constants.js +9 -1
  287. package/lib/module/tenancy/constants.js.map +1 -1
  288. package/lib/module/text-field/TextField.js +1 -1
  289. package/lib/module/text-field/TextField.js.map +1 -1
  290. package/lib/module/theme-toggle/ThemeToggle.js +2 -1
  291. package/lib/module/theme-toggle/ThemeToggle.js.map +1 -1
  292. package/lib/module/web-search/WebSearch.js +1 -1
  293. package/lib/module/web-search/WebSearch.js.map +1 -1
  294. package/lib/module/zoomable-media-gallery/ZoomableMediaGallery.js +5 -1
  295. package/lib/module/zoomable-media-gallery/ZoomableMediaGallery.js.map +1 -1
  296. package/lib/typescript/commonjs/agent-limits-card/AgentLimitsCard.d.ts.map +1 -1
  297. package/lib/typescript/commonjs/ai-chat/AiChatContainer.d.ts +28 -5
  298. package/lib/typescript/commonjs/ai-chat/AiChatContainer.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts +11 -2
  300. package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/ai-chat/context.d.ts +19 -1
  302. package/lib/typescript/commonjs/ai-chat/context.d.ts.map +1 -1
  303. package/lib/typescript/commonjs/ai-chat/index.d.ts +3 -1
  304. package/lib/typescript/commonjs/ai-chat/index.d.ts.map +1 -1
  305. package/lib/typescript/commonjs/ai-chat/index.web.d.ts +3 -1
  306. package/lib/typescript/commonjs/ai-chat/index.web.d.ts.map +1 -1
  307. package/lib/typescript/commonjs/ai-chat/types.d.ts +101 -3
  308. package/lib/typescript/commonjs/ai-chat/types.d.ts.map +1 -1
  309. package/lib/typescript/commonjs/app-shell/AppShellHeader.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/app-shell/AppShellMenuButton.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/calendar/CalendarViewEventDetails.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/calendar/CalendarViewHeader.d.ts.map +1 -1
  313. package/lib/typescript/commonjs/calendar/CalendarViewInboxMenu.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/carousel/Carousel.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/chart-cards/primitives/ChartRangePill.d.ts.map +1 -1
  316. package/lib/typescript/commonjs/chat-indicators/MessageStatus.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/composer-panel/ComposerControls.d.ts +14 -0
  318. package/lib/typescript/commonjs/composer-panel/ComposerControls.d.ts.map +1 -1
  319. package/lib/typescript/commonjs/composer-panel/ComposerPanelBase.d.ts +3 -2
  320. package/lib/typescript/commonjs/composer-panel/ComposerPanelBase.d.ts.map +1 -1
  321. package/lib/typescript/commonjs/composer-panel/ComposerPillBase.d.ts +3 -2
  322. package/lib/typescript/commonjs/composer-panel/ComposerPillBase.d.ts.map +1 -1
  323. package/lib/typescript/commonjs/composer-panel/EffortSlider.d.ts +10 -2
  324. package/lib/typescript/commonjs/composer-panel/EffortSlider.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/composer-panel/ModelPickerBase.d.ts.map +1 -1
  326. package/lib/typescript/commonjs/composer-panel/types.d.ts +61 -20
  327. package/lib/typescript/commonjs/composer-panel/types.d.ts.map +1 -1
  328. package/lib/typescript/commonjs/date-picker/MeetingScheduler.d.ts.map +1 -1
  329. package/lib/typescript/commonjs/dialog/DialogHeader.d.ts.map +1 -1
  330. package/lib/typescript/commonjs/eviction/EvictionReportCard.d.ts.map +1 -1
  331. package/lib/typescript/commonjs/eviction/constants.d.ts.map +1 -1
  332. package/lib/typescript/commonjs/file-upload/FileUpload.d.ts.map +1 -1
  333. package/lib/typescript/commonjs/floating/menu-sub-inline.d.ts.map +1 -1
  334. package/lib/typescript/commonjs/listing-card/ListingCard.d.ts.map +1 -1
  335. package/lib/typescript/commonjs/listing-details/ContactCard.d.ts.map +1 -1
  336. package/lib/typescript/commonjs/message-bubble/CallSummaryRow.d.ts.map +1 -1
  337. package/lib/typescript/commonjs/message-bubble/parts.d.ts.map +1 -1
  338. package/lib/typescript/commonjs/notification-center/NotificationCenter.d.ts.map +1 -1
  339. package/lib/typescript/commonjs/place-reviews/PlaceReviewCard.d.ts.map +1 -1
  340. package/lib/typescript/commonjs/place-reviews/PlaceReviewSummary.d.ts.map +1 -1
  341. package/lib/typescript/commonjs/place-reviews/WriteReviewPrompt.d.ts.map +1 -1
  342. package/lib/typescript/commonjs/property-insights/PriceEstimate.d.ts.map +1 -1
  343. package/lib/typescript/commonjs/recent-hires-card/RecentHiresCard.d.ts.map +1 -1
  344. package/lib/typescript/commonjs/select/shared.d.ts.map +1 -1
  345. package/lib/typescript/commonjs/settings-modal/SettingsModal.d.ts.map +1 -1
  346. package/lib/typescript/commonjs/settings-modal/SettingsStorage.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/settings-modal/SettingsTools.d.ts.map +1 -1
  348. package/lib/typescript/commonjs/sidebar/Sidebar.d.ts.map +1 -1
  349. package/lib/typescript/commonjs/sidebar/SidebarFolder.d.ts.map +1 -1
  350. package/lib/typescript/commonjs/sidebar/SidebarUserMenu.d.ts.map +1 -1
  351. package/lib/typescript/commonjs/tenancy/DocumentList.d.ts.map +1 -1
  352. package/lib/typescript/commonjs/tenancy/constants.d.ts.map +1 -1
  353. package/lib/typescript/commonjs/theme-toggle/ThemeToggle.d.ts.map +1 -1
  354. package/lib/typescript/module/agent-limits-card/AgentLimitsCard.d.ts.map +1 -1
  355. package/lib/typescript/module/ai-chat/AiChatContainer.d.ts +28 -5
  356. package/lib/typescript/module/ai-chat/AiChatContainer.d.ts.map +1 -1
  357. package/lib/typescript/module/ai-chat/AiChatShell.d.ts +11 -2
  358. package/lib/typescript/module/ai-chat/AiChatShell.d.ts.map +1 -1
  359. package/lib/typescript/module/ai-chat/context.d.ts +19 -1
  360. package/lib/typescript/module/ai-chat/context.d.ts.map +1 -1
  361. package/lib/typescript/module/ai-chat/index.d.ts +3 -1
  362. package/lib/typescript/module/ai-chat/index.d.ts.map +1 -1
  363. package/lib/typescript/module/ai-chat/index.web.d.ts +3 -1
  364. package/lib/typescript/module/ai-chat/index.web.d.ts.map +1 -1
  365. package/lib/typescript/module/ai-chat/types.d.ts +101 -3
  366. package/lib/typescript/module/ai-chat/types.d.ts.map +1 -1
  367. package/lib/typescript/module/app-shell/AppShellHeader.d.ts.map +1 -1
  368. package/lib/typescript/module/app-shell/AppShellMenuButton.d.ts.map +1 -1
  369. package/lib/typescript/module/calendar/CalendarViewEventDetails.d.ts.map +1 -1
  370. package/lib/typescript/module/calendar/CalendarViewHeader.d.ts.map +1 -1
  371. package/lib/typescript/module/calendar/CalendarViewInboxMenu.d.ts.map +1 -1
  372. package/lib/typescript/module/carousel/Carousel.d.ts.map +1 -1
  373. package/lib/typescript/module/chart-cards/primitives/ChartRangePill.d.ts.map +1 -1
  374. package/lib/typescript/module/chat-indicators/MessageStatus.d.ts.map +1 -1
  375. package/lib/typescript/module/composer-panel/ComposerControls.d.ts +14 -0
  376. package/lib/typescript/module/composer-panel/ComposerControls.d.ts.map +1 -1
  377. package/lib/typescript/module/composer-panel/ComposerPanelBase.d.ts +3 -2
  378. package/lib/typescript/module/composer-panel/ComposerPanelBase.d.ts.map +1 -1
  379. package/lib/typescript/module/composer-panel/ComposerPillBase.d.ts +3 -2
  380. package/lib/typescript/module/composer-panel/ComposerPillBase.d.ts.map +1 -1
  381. package/lib/typescript/module/composer-panel/EffortSlider.d.ts +10 -2
  382. package/lib/typescript/module/composer-panel/EffortSlider.d.ts.map +1 -1
  383. package/lib/typescript/module/composer-panel/ModelPickerBase.d.ts.map +1 -1
  384. package/lib/typescript/module/composer-panel/types.d.ts +61 -20
  385. package/lib/typescript/module/composer-panel/types.d.ts.map +1 -1
  386. package/lib/typescript/module/date-picker/MeetingScheduler.d.ts.map +1 -1
  387. package/lib/typescript/module/dialog/DialogHeader.d.ts.map +1 -1
  388. package/lib/typescript/module/eviction/EvictionReportCard.d.ts.map +1 -1
  389. package/lib/typescript/module/eviction/constants.d.ts.map +1 -1
  390. package/lib/typescript/module/file-upload/FileUpload.d.ts.map +1 -1
  391. package/lib/typescript/module/floating/menu-sub-inline.d.ts.map +1 -1
  392. package/lib/typescript/module/listing-card/ListingCard.d.ts.map +1 -1
  393. package/lib/typescript/module/listing-details/ContactCard.d.ts.map +1 -1
  394. package/lib/typescript/module/message-bubble/CallSummaryRow.d.ts.map +1 -1
  395. package/lib/typescript/module/message-bubble/parts.d.ts.map +1 -1
  396. package/lib/typescript/module/notification-center/NotificationCenter.d.ts.map +1 -1
  397. package/lib/typescript/module/place-reviews/PlaceReviewCard.d.ts.map +1 -1
  398. package/lib/typescript/module/place-reviews/PlaceReviewSummary.d.ts.map +1 -1
  399. package/lib/typescript/module/place-reviews/WriteReviewPrompt.d.ts.map +1 -1
  400. package/lib/typescript/module/property-insights/PriceEstimate.d.ts.map +1 -1
  401. package/lib/typescript/module/recent-hires-card/RecentHiresCard.d.ts.map +1 -1
  402. package/lib/typescript/module/select/shared.d.ts.map +1 -1
  403. package/lib/typescript/module/settings-modal/SettingsModal.d.ts.map +1 -1
  404. package/lib/typescript/module/settings-modal/SettingsStorage.d.ts.map +1 -1
  405. package/lib/typescript/module/settings-modal/SettingsTools.d.ts.map +1 -1
  406. package/lib/typescript/module/sidebar/Sidebar.d.ts.map +1 -1
  407. package/lib/typescript/module/sidebar/SidebarFolder.d.ts.map +1 -1
  408. package/lib/typescript/module/sidebar/SidebarUserMenu.d.ts.map +1 -1
  409. package/lib/typescript/module/tenancy/DocumentList.d.ts.map +1 -1
  410. package/lib/typescript/module/tenancy/constants.d.ts.map +1 -1
  411. package/lib/typescript/module/theme-toggle/ThemeToggle.d.ts.map +1 -1
  412. package/package.json +1 -1
  413. package/src/__tests__/support/adoption-matrix.ts +664 -0
  414. package/src/__tests__/support/collision-fixture-barrel.ts +20 -0
  415. package/src/__tests__/support/composite.ts +68 -0
  416. package/src/__tests__/support/constructed-style-sheets.ts +68 -0
  417. package/src/__tests__/support/press-host.ts +30 -0
  418. package/src/__tests__/support/rendered-style.ts +99 -0
  419. package/src/__tests__/support/unread-hook-fixture.ts +33 -0
  420. package/src/agent-limits-card/AgentLimitsCard.tsx +3 -1
  421. package/src/ai-chat/AiChatContainer.tsx +137 -16
  422. package/src/ai-chat/AiChatShell.tsx +59 -5
  423. package/src/ai-chat/context.ts +19 -1
  424. package/src/ai-chat/index.ts +3 -0
  425. package/src/ai-chat/index.web.ts +3 -0
  426. package/src/ai-chat/types.ts +104 -3
  427. package/src/app-shell/AppShellHeader.tsx +2 -1
  428. package/src/app-shell/AppShellMenuButton.tsx +2 -1
  429. package/src/app-shell/NotificationBell.tsx +1 -1
  430. package/src/auth-card/AuthCard.tsx +1 -1
  431. package/src/calendar/CalendarViewEventDetails.tsx +6 -8
  432. package/src/calendar/CalendarViewHeader.tsx +2 -1
  433. package/src/calendar/CalendarViewInboxMenu.tsx +3 -1
  434. package/src/carousel/Carousel.tsx +2 -1
  435. package/src/chart-cards/BarListCard.tsx +1 -1
  436. package/src/chart-cards/primitives/ChartRangePill.tsx +3 -1
  437. package/src/chat-indicators/MessageStatus.tsx +4 -6
  438. package/src/composer-panel/ComposerControls.tsx +54 -0
  439. package/src/composer-panel/ComposerPanelBase.tsx +13 -5
  440. package/src/composer-panel/ComposerPillBase.tsx +101 -59
  441. package/src/composer-panel/EffortSlider.tsx +38 -18
  442. package/src/composer-panel/ModelPickerBase.tsx +23 -7
  443. package/src/composer-panel/types.ts +61 -20
  444. package/src/data-table/DataTableRowActions.tsx +1 -1
  445. package/src/data-table/DataTableSearch.tsx +1 -1
  446. package/src/date-picker/MeetingScheduler.tsx +3 -1
  447. package/src/date-picker/PickerShell.tsx +1 -1
  448. package/src/dialog/DialogHeader.tsx +8 -5
  449. package/src/eviction/EvictionReportCard.tsx +8 -10
  450. package/src/eviction/constants.ts +8 -10
  451. package/src/file-upload/FileUpload.tsx +4 -6
  452. package/src/floating/menu-rows.tsx +1 -1
  453. package/src/floating/menu-sub-flyout.tsx +1 -1
  454. package/src/floating/menu-sub-inline.tsx +2 -4
  455. package/src/listing-card/ListingCard.tsx +2 -1
  456. package/src/listing-details/ContactCard.tsx +5 -1
  457. package/src/listing-details/FloorPlan.tsx +1 -1
  458. package/src/listing-details/ListingPhotoGrid.tsx +1 -1
  459. package/src/listing-details/ReviewCard.tsx +1 -1
  460. package/src/listing-details/ReviewSummary.tsx +1 -1
  461. package/src/message-bubble/CallSummaryRow.tsx +4 -6
  462. package/src/message-bubble/SwipeToReply.tsx +1 -1
  463. package/src/message-bubble/parts.tsx +4 -1
  464. package/src/notification-center/NotificationCenter.tsx +5 -7
  465. package/src/page-header/PageHeader.tsx +1 -1
  466. package/src/place-reviews/PlaceReviewCard.tsx +6 -8
  467. package/src/place-reviews/PlaceReviewSummary.tsx +2 -1
  468. package/src/place-reviews/WriteReviewPrompt.tsx +3 -1
  469. package/src/property-insights/EnergyBadge.tsx +1 -1
  470. package/src/property-insights/EnergyLabel.tsx +1 -1
  471. package/src/property-insights/NearbyPlaces.tsx +1 -1
  472. package/src/property-insights/PriceEstimate.tsx +2 -1
  473. package/src/property-insights/PriceHistoryChart.tsx +1 -1
  474. package/src/property-insights/RentHistoryList.tsx +1 -1
  475. package/src/recent-hires-card/RecentHiresCard.tsx +2 -1
  476. package/src/select/Select.tsx +1 -1
  477. package/src/select/Select.web.tsx +1 -1
  478. package/src/select/shared.tsx +2 -4
  479. package/src/settings-modal/SettingsFields.tsx +1 -1
  480. package/src/settings-modal/SettingsModal.tsx +4 -1
  481. package/src/settings-modal/SettingsStorage.tsx +9 -11
  482. package/src/settings-modal/SettingsTools.tsx +2 -1
  483. package/src/sidebar/Sidebar.tsx +3 -1
  484. package/src/sidebar/SidebarFolder.tsx +2 -1
  485. package/src/sidebar/SidebarUserMenu.tsx +2 -1
  486. package/src/task-list/TaskList.tsx +1 -1
  487. package/src/tenancy/DocumentList.tsx +3 -1
  488. package/src/tenancy/MaintenanceRequestCard.tsx +1 -1
  489. package/src/tenancy/RentPaymentList.tsx +1 -1
  490. package/src/tenancy/constants.ts +9 -11
  491. package/src/text-field/TextField.tsx +1 -1
  492. package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +7682 -0
  493. package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
  494. package/src/theme-toggle/ThemeToggle.tsx +2 -1
  495. package/src/web-search/WebSearch.tsx +1 -1
  496. package/src/zoomable-media-gallery/ZoomableMediaGallery.tsx +5 -5
@@ -35,7 +35,11 @@ export function useAiChatPlatform(): AiChatPlatform {
35
35
  return platform;
36
36
  }
37
37
 
38
- /** What `AiChatShell` hands the chat container's mobile header. */
38
+ /**
39
+ * What `AiChatShell` publishes: read it with `useAiChatShell()`. The chat
40
+ * container's mobile header runs on it, and so does anything a host needs to
41
+ * know about the frame around its own nav.
42
+ */
39
43
  export interface AiChatShellState {
40
44
  /** Below `xl`: the panel is a drawer and the mobile header shows. */
41
45
  compact: boolean;
@@ -43,7 +47,21 @@ export interface AiChatShellState {
43
47
  navCollapsed: boolean;
44
48
  hasNav: boolean;
45
49
  hasPanel: boolean;
50
+ /**
51
+ * Whether the nav is on screen at all: `true` from `lg` up (in flow) and,
52
+ * below it, only while the drawer is open.
53
+ *
54
+ * A closed drawer stays MOUNTED — it is translated offscreen, not removed —
55
+ * so a nav rendered into `mobileSidebar` is still focusable and still read by
56
+ * a screen reader unless its own tree says otherwise. This is the signal to
57
+ * hide it by: skip the tab order and mark the subtree hidden while it is
58
+ * `false`.
59
+ */
60
+ navPresented: boolean;
61
+ /** The in-flow sidebar is narrowed to its rail width (`sidebarCollapsed`). */
62
+ sidebarCollapsed: boolean;
46
63
  openNav: () => void;
64
+ closeNav: () => void;
47
65
  openPanel: () => void;
48
66
  panelLabel: string;
49
67
  panelIcon: AiChatShellIcon;
@@ -15,6 +15,8 @@ export {
15
15
  AiChatUserMessage,
16
16
  } from './AiChatMessages';
17
17
  export { AiChatMobileHeader, AiChatResizeHandle, AiChatShell } from './AiChatShell';
18
+ export { useAiChatShell } from './context';
19
+ export type { AiChatShellState } from './context';
18
20
  export type {
19
21
  AiChatAssistantMessageProps,
20
22
  AiChatBulletListProps,
@@ -41,6 +43,7 @@ export type {
41
43
  AiChatShellLabels,
42
44
  AiChatShellProps,
43
45
  AiChatStrongProps,
46
+ AiChatThreadHandle,
44
47
  AiChatThreadProps,
45
48
  AiChatUserMessageProps,
46
49
  } from './types';
@@ -17,6 +17,8 @@ export {
17
17
  AiChatUserMessage,
18
18
  } from './AiChatMessages';
19
19
  export { AiChatMobileHeader, AiChatResizeHandle, AiChatShell } from './AiChatShell';
20
+ export { useAiChatShell } from './context';
21
+ export type { AiChatShellState } from './context';
20
22
  export type {
21
23
  AiChatAssistantMessageProps,
22
24
  AiChatBulletListProps,
@@ -43,6 +45,7 @@ export type {
43
45
  AiChatShellLabels,
44
46
  AiChatShellProps,
45
47
  AiChatStrongProps,
48
+ AiChatThreadHandle,
46
49
  AiChatThreadProps,
47
50
  AiChatUserMessageProps,
48
51
  } from './types';
@@ -1,5 +1,12 @@
1
1
  import type { ComponentType, ReactNode } from 'react';
2
- import type { ImageSourcePropType, StyleProp, ViewStyle } from 'react-native';
2
+ import type {
3
+ ImageSourcePropType,
4
+ NativeScrollEvent,
5
+ NativeSyntheticEvent,
6
+ ScrollView,
7
+ StyleProp,
8
+ ViewStyle,
9
+ } from 'react-native';
3
10
 
4
11
  import type { CodeLanguage } from '../code';
5
12
  import type { BloomIconComponent } from '../icons/icon-component';
@@ -270,8 +277,12 @@ export interface AiChatContainerLabels {
270
277
  }
271
278
 
272
279
  export interface AiChatContainerProps {
273
- /** The project crumb, after its folder glyph. */
274
- project: string;
280
+ /**
281
+ * The project crumb, after its folder glyph. Omit it for a chat that belongs
282
+ * to no project: the breadcrumb is then the title alone, with no empty crumb
283
+ * and no folder glyph.
284
+ */
285
+ project?: string;
275
286
  /** The current chat crumb. */
276
287
  title: string;
277
288
  /** The project crumb's glyph. Default `RiFolderLine`. */
@@ -289,14 +300,78 @@ export interface AiChatContainerProps {
289
300
  working?: boolean;
290
301
  /** `AgentThinking`'s label. Default `'Thinking'`. */
291
302
  workingLabel?: string;
303
+ /**
304
+ * A layer filling the container, drawn ABOVE its own surface and BELOW every
305
+ * turn, header and composer — a host's wallpaper, gradient or animated field.
306
+ * It is clipped to the container's radius and never interactive
307
+ * (`pointerEvents: 'none'`), so an opaque node needs nothing else.
308
+ *
309
+ * Set `surface={false}` beside it when the node is translucent and should
310
+ * show what the container is sitting on rather than background-secondary.
311
+ */
312
+ background?: ReactNode;
313
+ /**
314
+ * Paint the container's own background-secondary surface. Default `true`;
315
+ * `false` leaves the root transparent.
316
+ */
317
+ surface?: boolean;
292
318
  labels?: AiChatContainerLabels;
293
319
  style?: StyleProp<ViewStyle>;
294
320
  testID?: string;
295
321
  }
296
322
 
323
+ /**
324
+ * What a `ref` on `AiChatThread` hands back: enough to drive the scroll a host
325
+ * cannot drive from props — a cursor jump, a restore, a follow of its own.
326
+ */
327
+ export interface AiChatThreadHandle {
328
+ /** Jump to the newest turn. `animated` defaults to `true`. */
329
+ scrollToEnd: (options?: { animated?: boolean }) => void;
330
+ /** Scroll to an absolute offset, px from the top. `animated` defaults to `false`. */
331
+ scrollToOffset: (options: { offset: number; animated?: boolean }) => void;
332
+ /** The `ScrollView` itself, for anything this handle does not cover. */
333
+ getScrollView: () => ScrollView | null;
334
+ }
335
+
297
336
  export interface AiChatThreadProps {
298
337
  /** The turns. The thread follows the newest one with a smooth scroll as it grows. */
299
338
  children: ReactNode;
339
+ /**
340
+ * Follow the newest turn as the content grows. Default `true` — the thread's
341
+ * behaviour since it shipped. `false` leaves every scroll to the host (and to
342
+ * the `ref`).
343
+ */
344
+ autoFollow?: boolean;
345
+ /** Animate the follow. Default `true`; `false` for a restore that must not be seen travelling. */
346
+ followAnimated?: boolean;
347
+ /**
348
+ * Follow only while the reader is within this many px of the bottom, measured
349
+ * before the growth. Omit to follow every growth (the default), which is what
350
+ * the thread has always done.
351
+ */
352
+ followThreshold?: number;
353
+ /**
354
+ * The reader came within `onStartReachedThreshold` of the top — a chat pages
355
+ * UPWARD, so this is its pagination signal, not `onEndReached`. It fires once
356
+ * per approach and re-arms when the reader leaves the zone.
357
+ */
358
+ onStartReached?: () => void;
359
+ /** Distance from the top that fires `onStartReached`, px. Default `300`. */
360
+ onStartReachedThreshold?: number;
361
+ /**
362
+ * Keep the reader on the same turn while a page lands ABOVE them: the growth
363
+ * that follows an `onStartReached` is added to the offset instead of moving
364
+ * the content under the reader. Default `false`, and inert without
365
+ * `onStartReached` — the thread only anchors growth it asked for.
366
+ *
367
+ * This is the web-safe half of `maintainVisibleContentPosition`, which
368
+ * react-native-web ignores.
369
+ */
370
+ maintainStartPosition?: boolean;
371
+ /** The raw scroll event, for a host tracking its own position. */
372
+ onScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
373
+ /** Default `16`. Only applied when something is listening to the scroll. */
374
+ scrollEventThrottle?: number;
300
375
  style?: StyleProp<ViewStyle>;
301
376
  testID?: string;
302
377
  }
@@ -317,6 +392,15 @@ export interface AiChatShellLabels {
317
392
  export interface AiChatShellProps {
318
393
  /** The floating sidebar shown from `lg` (1024). */
319
394
  sidebar: ReactNode;
395
+ /**
396
+ * The in-flow sidebar's column width from `lg` up. Omit and the sidebar sizes
397
+ * itself, as it always has.
398
+ */
399
+ sidebarWidth?: number;
400
+ /** Narrow the in-flow sidebar to `collapsedSidebarWidth` — a host's icon rail. Default `false`. */
401
+ sidebarCollapsed?: boolean;
402
+ /** The collapsed column's width. Default `56`. */
403
+ collapsedSidebarWidth?: number;
320
404
  /** The flat sidebar revealed under the workspace below `lg`. Default: none (no nav drawer). */
321
405
  mobileSidebar?: ReactNode;
322
406
  /** The chat container. */
@@ -337,6 +421,23 @@ export interface AiChatShellProps {
337
421
  /** Controlled panel drawer (below `xl`). */
338
422
  panelOpen?: boolean;
339
423
  onPanelOpenChange?: (open: boolean) => void;
424
+ /**
425
+ * A layer filling the shell, drawn ABOVE its own background-full and BELOW
426
+ * the sidebar, workspace and drawers. Not interactive
427
+ * (`pointerEvents: 'none'`).
428
+ *
429
+ * The workspace paints background-full of its own, so a shell background is
430
+ * covered wherever the chat sits: pass `surface={false}` with it, which drops
431
+ * the paint on both, and let the chat's own `AiChatContainer` decide what it
432
+ * paints. A `background` on the container is the closer slot when the layer
433
+ * belongs to the chat rather than to the page.
434
+ */
435
+ background?: ReactNode;
436
+ /**
437
+ * Paint the shell's own background-full, on its root and on the workspace.
438
+ * Default `true`; `false` leaves both transparent.
439
+ */
440
+ surface?: boolean;
340
441
  labels?: AiChatShellLabels;
341
442
  style?: StyleProp<ViewStyle>;
342
443
  testID?: string;
@@ -2,7 +2,8 @@ import React, { memo } from 'react';
2
2
  import { View, useWindowDimensions } from 'react-native';
3
3
 
4
4
  import { Button } from '../button';
5
- import { RiCloseLine, RiMenuLine } from '../icons/remix';
5
+ import { RiCloseLine } from '../icons/remix/RiCloseLine';
6
+ import { RiMenuLine } from '../icons/remix/RiMenuLine';
6
7
  import { BREAKPOINTS } from '../styles/breakpoints';
7
8
  import { useTheme } from '../theme/use-theme';
8
9
  import { Text } from '../typography';
@@ -1,7 +1,8 @@
1
1
  import React, { memo } from 'react';
2
2
 
3
3
  import { Button } from '../button';
4
- import { RiCloseLine, RiMenuLine } from '../icons/remix';
4
+ import { RiCloseLine } from '../icons/remix/RiCloseLine';
5
+ import { RiMenuLine } from '../icons/remix/RiMenuLine';
5
6
  import { useAppShell } from './context';
6
7
  import type { AppShellMenuButtonProps } from './types';
7
8
 
@@ -4,7 +4,7 @@ import { View } from 'react-native';
4
4
  import { Button } from '../button';
5
5
  import { colorRamp, DANGER_TABLE, resolveButtonRamps } from '../button/shared';
6
6
  import { useInteractionState } from '../hooks/use-interaction-state';
7
- import { RiNotificationLine } from '../icons/remix';
7
+ import { RiNotificationLine } from '../icons/remix/RiNotificationLine';
8
8
  import { NotificationCenter } from '../notification-center';
9
9
  import { Popover, PopoverContent, PopoverTrigger } from '../popover';
10
10
  import { borderRadius } from '../styles/tokens';
@@ -14,7 +14,7 @@ import { BUTTON_SHADOW, resolveButtonRamps } from '../button/shared';
14
14
  import { Checkbox } from '../checkbox';
15
15
  import { Divider } from '../divider';
16
16
  import { useInteractionStates } from '../hooks/use-interaction-state';
17
- import { RiMailCheckLine } from '../icons/remix';
17
+ import { RiMailCheckLine } from '../icons/remix/RiMailCheckLine';
18
18
  import { InputOtp } from '../input-otp';
19
19
  import { SocialButton } from '../social-button';
20
20
  import { BREAKPOINTS } from '../styles/breakpoints';
@@ -3,14 +3,12 @@ import { Image, View, type ViewStyle } from 'react-native';
3
3
 
4
4
  import { Avatar } from '../avatar';
5
5
  import { Button } from '../button';
6
- import {
7
- RiArrowRightLine,
8
- RiCornerDownLeftLine,
9
- RiGlobalLine,
10
- RiGroupLine,
11
- RiNotification2Line,
12
- RiTimeLine,
13
- } from '../icons/remix';
6
+ import { RiArrowRightLine } from '../icons/remix/RiArrowRightLine';
7
+ import { RiCornerDownLeftLine } from '../icons/remix/RiCornerDownLeftLine';
8
+ import { RiGlobalLine } from '../icons/remix/RiGlobalLine';
9
+ import { RiGroupLine } from '../icons/remix/RiGroupLine';
10
+ import { RiNotification2Line } from '../icons/remix/RiNotification2Line';
11
+ import { RiTimeLine } from '../icons/remix/RiTimeLine';
14
12
  import type { WebCssStyle } from '../styles/web-view-style';
15
13
  import { Text } from '../typography';
16
14
  import { useTheme } from '../theme/use-theme';
@@ -3,7 +3,8 @@ import { View } from 'react-native';
3
3
 
4
4
  import { Button } from '../button';
5
5
  import { formatMonthTitle } from '../date-picker/calendar-grid';
6
- import { RiAddFill, RiMenuLine } from '../icons/remix';
6
+ import { RiAddFill } from '../icons/remix/RiAddFill';
7
+ import { RiMenuLine } from '../icons/remix/RiMenuLine';
7
8
  import { Z_INDEX } from '../styles/z-index';
8
9
  import { Text } from '../typography';
9
10
  import { CalendarViewInboxMenu } from './CalendarViewInboxMenu';
@@ -2,7 +2,9 @@ import React, { useEffect, useMemo, useState } from 'react';
2
2
  import { Platform, Pressable, View, useWindowDimensions } from 'react-native';
3
3
 
4
4
  import { Button } from '../button';
5
- import { RiAddFill, RiInbox2Line, RiRssFill } from '../icons/remix';
5
+ import { RiAddFill } from '../icons/remix/RiAddFill';
6
+ import { RiInbox2Line } from '../icons/remix/RiInbox2Line';
7
+ import { RiRssFill } from '../icons/remix/RiRssFill';
6
8
  import { Popover, PopoverContent, PopoverTrigger } from '../popover';
7
9
  import { adoptStyleSheet } from '../styles/adopt-style-sheet';
8
10
  import type { WebCssStyle } from '../styles/web-view-style';
@@ -23,7 +23,8 @@ import { useReducedMotion } from 'react-native-reanimated';
23
23
 
24
24
  import { Button } from '../button';
25
25
  import { resolveButtonRamps } from '../button/shared';
26
- import { RiArrowLeftSLine, RiArrowRightSLine } from '../icons/remix';
26
+ import { RiArrowLeftSLine } from '../icons/remix/RiArrowLeftSLine';
27
+ import { RiArrowRightSLine } from '../icons/remix/RiArrowRightSLine';
27
28
  import { useInteractionState } from '../hooks/use-interaction-state';
28
29
  import { useInteractiveWebCss } from '../styles/interactive-web-css';
29
30
  import { borderRadius } from '../styles/tokens';
@@ -13,7 +13,7 @@ import { useReducedMotion } from 'react-native-reanimated';
13
13
  import Svg, { Defs, LinearGradient, Rect, Stop } from 'react-native-svg';
14
14
 
15
15
  import { mixColor } from '../button/shared';
16
- import { RiArrowDownSLine } from '../icons/remix';
16
+ import { RiArrowDownSLine } from '../icons/remix/RiArrowDownSLine';
17
17
  import { borderRadius } from '../styles/tokens';
18
18
  import type { WebCssStyle } from '../styles/web-view-style';
19
19
  import { Tabs, TabsTrigger } from '../tabs';
@@ -9,7 +9,9 @@ import {
9
9
  DropdownMenuRadioItem,
10
10
  DropdownMenuTrigger,
11
11
  } from '../../dropdown-menu';
12
- import { RiArrowDownSLine, RiCalendarLine, RiCheckLine } from '../../icons/remix';
12
+ import { RiArrowDownSLine } from '../../icons/remix/RiArrowDownSLine';
13
+ import { RiCalendarLine } from '../../icons/remix/RiCalendarLine';
14
+ import { RiCheckLine } from '../../icons/remix/RiCheckLine';
13
15
  import { Text } from '../../typography';
14
16
  import type { ChartRangeOption } from './use-chart-range';
15
17
  import { useChartCardPalette } from './use-chart-palette';
@@ -1,12 +1,10 @@
1
1
  import React, { memo, useMemo } from 'react';
2
2
  import { View } from 'react-native';
3
3
 
4
- import {
5
- RiCheckDoubleLine,
6
- RiCheckLine,
7
- RiErrorWarningFill,
8
- RiTimeLine,
9
- } from '../icons/remix';
4
+ import { RiCheckDoubleLine } from '../icons/remix/RiCheckDoubleLine';
5
+ import { RiCheckLine } from '../icons/remix/RiCheckLine';
6
+ import { RiErrorWarningFill } from '../icons/remix/RiErrorWarningFill';
7
+ import { RiTimeLine } from '../icons/remix/RiTimeLine';
10
8
  import { useTheme } from '../theme/use-theme';
11
9
  import { MESSAGE_STATUS_LABELS, resolveChatIndicatorPaint } from './shared';
12
10
  import type { MessageStatusProps } from './types';
@@ -16,6 +16,7 @@ import { paintToCssImage, type ButtonStatePaint } from '../button/shared';
16
16
  import { DISABLED_OPACITY } from '../styles/tokens';
17
17
  import { RiArrowUpLine } from '../icons/remix/RiArrowUpLine';
18
18
  import { RiMic2Line } from '../icons/remix/RiMic2Line';
19
+ import { RiStopFill } from '../icons/remix/RiStopFill';
19
20
  import type { WebCssStyle } from '../styles/web-view-style';
20
21
  import { CONTROL_SIZE, TRANSITION_MS, type ComposerPalette } from './shared';
21
22
  import { dataHook, IS_WEB } from './web-hooks';
@@ -239,3 +240,56 @@ export function SendButton({
239
240
  </Pressable>
240
241
  );
241
242
  }
243
+
244
+ /**
245
+ * Stop — send's other state, drawn on the same disc so the action sits where the
246
+ * reader last pressed: the accent gradient (hover and active crossfading like
247
+ * send's) with a white 20px stop mark.
248
+ *
249
+ * It takes no `disabled`. The composer's `disabled` locks the draft for the
250
+ * whole turn, and the one thing that must stay possible for that whole turn is
251
+ * cancelling it.
252
+ */
253
+ export function StopButton({
254
+ onPress,
255
+ label,
256
+ palette,
257
+ }: {
258
+ onPress?: () => void;
259
+ label: string;
260
+ palette: ComposerPalette;
261
+ }) {
262
+ const [hovered, setHovered] = useState(false);
263
+ const [pressed, setPressed] = useState(false);
264
+ const paint = palette.send;
265
+ const base = pressed ? paint.active : paint.rest;
266
+ const style: WebCssStyle = {
267
+ position: 'relative',
268
+ width: CONTROL_SIZE,
269
+ height: CONTROL_SIZE,
270
+ alignItems: 'center',
271
+ justifyContent: 'center',
272
+ borderRadius: 9999,
273
+ cursor: 'pointer',
274
+ '--bloom-composer-ring': palette.focusRing,
275
+ };
276
+ return (
277
+ <Pressable
278
+ {...dataHook('bloomComposerControl', 'stop')}
279
+ accessibilityRole="button"
280
+ accessibilityLabel={label}
281
+ onPress={onPress}
282
+ onPressIn={() => setPressed(true)}
283
+ onPressOut={() => setPressed(false)}
284
+ onHoverIn={() => setHovered(true)}
285
+ onHoverOut={() => setHovered(false)}
286
+ style={style}>
287
+ <GradientFill paint={base} />
288
+ <GradientFill paint={paint.hover} opacity={hovered && !pressed ? 1 : 0} />
289
+ {/* Its own positioned box, so it paints above the absolutely placed fills. */}
290
+ <View pointerEvents="none" style={{ position: 'relative', width: 20, height: 20 }}>
291
+ <RiStopFill width={20} height={20} fill="#ffffff" />
292
+ </View>
293
+ </Pressable>
294
+ );
295
+ }
@@ -22,7 +22,7 @@ import { useTheme } from '../theme/use-theme';
22
22
  import { TYPE_SCALE } from '../typography';
23
23
  import { AddMenu } from './AddMenu';
24
24
  import { AttachmentStrip } from './AttachmentStrip';
25
- import { MicButton, SendButton } from './ComposerControls';
25
+ import { MicButton, SendButton, StopButton } from './ComposerControls';
26
26
  import { ModelPickerBase } from './ModelPickerBase';
27
27
  import { PermissionMenu } from './PermissionMenu';
28
28
  import {
@@ -48,6 +48,7 @@ const DEFAULT_LABELS: Required<ComposerPanelLabels> = {
48
48
  learnMore: 'Learn more',
49
49
  voice: 'Voice input',
50
50
  send: 'Send message',
51
+ stop: 'Stop generating',
51
52
  remove: 'Remove',
52
53
  };
53
54
 
@@ -107,7 +108,8 @@ function Collapse({ open, children }: { open: boolean; children: React.ReactNode
107
108
  * body pt 6, prompt → controls 20
108
109
  * prompt px 6, body-regular, grows 20px a line up to 200 then scrolls
109
110
  * controls left: add + permission (8 apart); right: model picker, 16,
110
- * then mic + send (8 apart)
111
+ * then mic + send (8 apart); `busy` + `onStop` puts the stop
112
+ * control where send was, outside `disabled`'s reach
111
113
  *
112
114
  * Takes its panel implementation from the family's platform binding.
113
115
  */
@@ -116,6 +118,8 @@ export function ComposerPanelBase({
116
118
  defaultValue = '',
117
119
  onValueChange,
118
120
  onSubmit,
121
+ onStop,
122
+ busy = false,
119
123
  disabled = false,
120
124
  placeholder = 'Hi, what do you need today?',
121
125
  permissions = COMPOSER_PANEL_PERMISSIONS,
@@ -188,10 +192,10 @@ export function ComposerPanelBase({
188
192
  );
189
193
 
190
194
  const submit = useCallback(() => {
191
- if (disabled) return;
195
+ if (disabled || busy) return;
192
196
  onSubmit?.(text);
193
197
  if (value === undefined) setText('');
194
- }, [disabled, onSubmit, text, value, setText]);
198
+ }, [disabled, busy, onSubmit, text, value, setText]);
195
199
 
196
200
  const onKeyPress = useCallback(
197
201
  (event: NativeSyntheticEvent<TextInputKeyPressEventData>) => {
@@ -310,7 +314,11 @@ export function ComposerPanelBase({
310
314
  label={labels.voice}
311
315
  palette={palette}
312
316
  />
313
- <SendButton disabled={disabled} onPress={submit} label={labels.send} palette={palette} />
317
+ {busy && onStop ? (
318
+ <StopButton onPress={onStop} label={labels.stop} palette={palette} />
319
+ ) : (
320
+ <SendButton disabled={disabled} onPress={submit} label={labels.send} palette={palette} />
321
+ )}
314
322
  </View>
315
323
  </View>
316
324
  </View>