@oxy.so/bloom 4.5.0 → 4.6.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 (614) hide show
  1. package/README.md +1 -1
  2. package/docs/adoption-matrix.mdx +12 -12
  3. package/docs/code.mdx +12 -0
  4. package/docs/context-menu.mdx +2 -0
  5. package/docs/dropdown-menu.mdx +21 -0
  6. package/docs/icons.mdx +2 -2
  7. package/docs/menubar.mdx +6 -2
  8. package/docs/popover.mdx +4 -2
  9. package/docs/segmented-control.mdx +12 -0
  10. package/docs/select.mdx +19 -0
  11. package/docs/tabs.mdx +12 -0
  12. package/lib/commonjs/agent-chat/index.web.js.map +1 -1
  13. package/lib/commonjs/ai-chat/index.web.js.map +1 -1
  14. package/lib/commonjs/alert-dialog/index.web.js +10 -1
  15. package/lib/commonjs/alert-dialog/index.web.js.map +1 -1
  16. package/lib/commonjs/avatar-group/index.web.js.map +1 -1
  17. package/lib/commonjs/bottom-sheet/index.web.js.map +1 -1
  18. package/lib/commonjs/code/index.js +13 -0
  19. package/lib/commonjs/code/index.js.map +1 -1
  20. package/lib/commonjs/command/index.web.js +5 -0
  21. package/lib/commonjs/command/index.web.js.map +1 -1
  22. package/lib/commonjs/composer-loader/ComposerLoader.web.js +9 -0
  23. package/lib/commonjs/composer-loader/ComposerLoader.web.js.map +1 -1
  24. package/lib/commonjs/composer-loader/index.web.js.map +1 -1
  25. package/lib/commonjs/composer-panel/index.web.js.map +1 -1
  26. package/lib/commonjs/connection-dots/index.web.js.map +1 -1
  27. package/lib/commonjs/connection-status/index.web.js.map +1 -1
  28. package/lib/commonjs/content-panel/index.web.js.map +1 -1
  29. package/lib/commonjs/context-menu/ContextMenu.web.js +22 -4
  30. package/lib/commonjs/context-menu/ContextMenu.web.js.map +1 -1
  31. package/lib/commonjs/context-menu/context.js.map +1 -1
  32. package/lib/commonjs/context-menu/index.web.js.map +1 -1
  33. package/lib/commonjs/dialog/Dialog.web.js +14 -0
  34. package/lib/commonjs/dialog/Dialog.web.js.map +1 -1
  35. package/lib/commonjs/dialog/index.web.js.map +1 -1
  36. package/lib/commonjs/dropdown-menu/DropdownMenu.web.js +22 -2
  37. package/lib/commonjs/dropdown-menu/DropdownMenu.web.js.map +1 -1
  38. package/lib/commonjs/dropdown-menu/index.web.js.map +1 -1
  39. package/lib/commonjs/floating/FloatingPanel.js +42 -33
  40. package/lib/commonjs/floating/FloatingPanel.js.map +1 -1
  41. package/lib/commonjs/floating/escape-stack.js +90 -0
  42. package/lib/commonjs/floating/escape-stack.js.map +1 -0
  43. package/lib/commonjs/floating/menu-keyboard.js +238 -0
  44. package/lib/commonjs/floating/menu-keyboard.js.map +1 -0
  45. package/lib/commonjs/floating/menu-sub-flyout.js +28 -16
  46. package/lib/commonjs/floating/menu-sub-flyout.js.map +1 -1
  47. package/lib/commonjs/fonts/index.web.js.map +1 -1
  48. package/lib/commonjs/frosted-icon-button/FrostedIconButton.web.js +10 -0
  49. package/lib/commonjs/frosted-icon-button/FrostedIconButton.web.js.map +1 -1
  50. package/lib/commonjs/frosted-icon-button/index.web.js.map +1 -1
  51. package/lib/commonjs/hooks/roving-focus.js +192 -0
  52. package/lib/commonjs/hooks/roving-focus.js.map +1 -0
  53. package/lib/commonjs/hover-card/index.web.js.map +1 -1
  54. package/lib/commonjs/icons/remix/RiBookReadLine.js +12 -0
  55. package/lib/commonjs/icons/remix/RiBookReadLine.js.map +1 -0
  56. package/lib/commonjs/icons/remix/RiBugLine.js +12 -0
  57. package/lib/commonjs/icons/remix/RiBugLine.js.map +1 -0
  58. package/lib/commonjs/icons/remix/RiChat1Line.js +12 -0
  59. package/lib/commonjs/icons/remix/RiChat1Line.js.map +1 -0
  60. package/lib/commonjs/icons/remix/RiCloudLine.js +12 -0
  61. package/lib/commonjs/icons/remix/RiCloudLine.js.map +1 -0
  62. package/lib/commonjs/icons/remix/RiCodeLine.js +12 -0
  63. package/lib/commonjs/icons/remix/RiCodeLine.js.map +1 -0
  64. package/lib/commonjs/icons/remix/RiCpuLine.js +12 -0
  65. package/lib/commonjs/icons/remix/RiCpuLine.js.map +1 -0
  66. package/lib/commonjs/icons/remix/RiFloodLine.js +12 -0
  67. package/lib/commonjs/icons/remix/RiFloodLine.js.map +1 -0
  68. package/lib/commonjs/icons/remix/RiLockUnlockLine.js +12 -0
  69. package/lib/commonjs/icons/remix/RiLockUnlockLine.js.map +1 -0
  70. package/lib/commonjs/icons/remix/RiMoneyDollarCircleLine.js +12 -0
  71. package/lib/commonjs/icons/remix/RiMoneyDollarCircleLine.js.map +1 -0
  72. package/lib/commonjs/icons/remix/RiPlayCircleLine.js +12 -0
  73. package/lib/commonjs/icons/remix/RiPlayCircleLine.js.map +1 -0
  74. package/lib/commonjs/icons/remix/RiRocket2Line.js +12 -0
  75. package/lib/commonjs/icons/remix/RiRocket2Line.js.map +1 -0
  76. package/lib/commonjs/icons/remix/RiServerLine.js +12 -0
  77. package/lib/commonjs/icons/remix/RiServerLine.js.map +1 -0
  78. package/lib/commonjs/icons/remix/RiShareBoxLine.js +12 -0
  79. package/lib/commonjs/icons/remix/RiShareBoxLine.js.map +1 -0
  80. package/lib/commonjs/icons/remix/RiTv2Line.js +12 -0
  81. package/lib/commonjs/icons/remix/RiTv2Line.js.map +1 -0
  82. package/lib/commonjs/icons/remix/index.js +98 -0
  83. package/lib/commonjs/icons/remix/index.js.map +1 -1
  84. package/lib/commonjs/list/index.web.js.map +1 -1
  85. package/lib/commonjs/loading/Loading.js +21 -157
  86. package/lib/commonjs/loading/Loading.js.map +1 -1
  87. package/lib/commonjs/loading/Loading.web.js +23 -157
  88. package/lib/commonjs/loading/Loading.web.js.map +1 -1
  89. package/lib/commonjs/loading/LoadingBase.js +202 -0
  90. package/lib/commonjs/loading/LoadingBase.js.map +1 -0
  91. package/lib/commonjs/loading/index.web.js.map +1 -1
  92. package/lib/commonjs/media-flight/index.web.js.map +1 -1
  93. package/lib/commonjs/menubar/Menubar.js +31 -123
  94. package/lib/commonjs/menubar/Menubar.js.map +1 -1
  95. package/lib/commonjs/menubar/Menubar.web.js +33 -114
  96. package/lib/commonjs/menubar/Menubar.web.js.map +1 -1
  97. package/lib/commonjs/menubar/MenubarBase.js +154 -0
  98. package/lib/commonjs/menubar/MenubarBase.js.map +1 -0
  99. package/lib/commonjs/menubar/index.web.js.map +1 -1
  100. package/lib/commonjs/popover/index.web.js.map +1 -1
  101. package/lib/commonjs/popover/parts.js +69 -11
  102. package/lib/commonjs/popover/parts.js.map +1 -1
  103. package/lib/commonjs/popover/surface.js +39 -13
  104. package/lib/commonjs/popover/surface.js.map +1 -1
  105. package/lib/commonjs/portal/index.web.js.map +1 -1
  106. package/lib/commonjs/progressive-blur/index.web.js.map +1 -1
  107. package/lib/commonjs/scroll/index.web.js.map +1 -1
  108. package/lib/commonjs/segmented-control/SegmentedControl.js +36 -1
  109. package/lib/commonjs/segmented-control/SegmentedControl.js.map +1 -1
  110. package/lib/commonjs/select/Select.js +6 -81
  111. package/lib/commonjs/select/Select.js.map +1 -1
  112. package/lib/commonjs/select/Select.web.js +147 -85
  113. package/lib/commonjs/select/Select.web.js.map +1 -1
  114. package/lib/commonjs/select/index.js +4 -4
  115. package/lib/commonjs/select/index.js.map +1 -1
  116. package/lib/commonjs/select/index.web.js +4 -4
  117. package/lib/commonjs/select/index.web.js.map +1 -1
  118. package/lib/commonjs/select/shared.js +110 -5
  119. package/lib/commonjs/select/shared.js.map +1 -1
  120. package/lib/commonjs/sidebar/SidebarTeamMenu.js +1 -1
  121. package/lib/commonjs/sidebar/SidebarTeamMenu.js.map +1 -1
  122. package/lib/commonjs/sidebar/SidebarUserMenu.js +1 -1
  123. package/lib/commonjs/sidebar/SidebarUserMenu.js.map +1 -1
  124. package/lib/commonjs/sidebar/parts.js +9 -9
  125. package/lib/commonjs/sidebar/parts.js.map +1 -1
  126. package/lib/commonjs/surfaces/SurfaceHost.js +6 -0
  127. package/lib/commonjs/surfaces/SurfaceHost.js.map +1 -1
  128. package/lib/commonjs/surfaces/index.web.js +14 -4
  129. package/lib/commonjs/surfaces/index.web.js.map +1 -1
  130. package/lib/commonjs/tab-bar/index.web.js +13 -10
  131. package/lib/commonjs/tab-bar/index.web.js.map +1 -1
  132. package/lib/commonjs/tabs/Tabs.js +49 -2
  133. package/lib/commonjs/tabs/Tabs.js.map +1 -1
  134. package/lib/commonjs/theme/color-scope/index.web.js.map +1 -1
  135. package/lib/commonjs/theme/seed-scope/index.web.js.map +1 -1
  136. package/lib/commonjs/tooltip/index.web.js.map +1 -1
  137. package/lib/module/agent-chat/index.web.js +5 -3
  138. package/lib/module/agent-chat/index.web.js.map +1 -1
  139. package/lib/module/ai-chat/index.web.js +5 -2
  140. package/lib/module/ai-chat/index.web.js.map +1 -1
  141. package/lib/module/alert-dialog/index.web.js +10 -1
  142. package/lib/module/alert-dialog/index.web.js.map +1 -1
  143. package/lib/module/avatar-group/index.web.js +5 -0
  144. package/lib/module/avatar-group/index.web.js.map +1 -1
  145. package/lib/module/bottom-sheet/index.web.js +5 -0
  146. package/lib/module/bottom-sheet/index.web.js.map +1 -1
  147. package/lib/module/code/index.js +1 -0
  148. package/lib/module/code/index.js.map +1 -1
  149. package/lib/module/command/index.web.js +5 -0
  150. package/lib/module/command/index.web.js.map +1 -1
  151. package/lib/module/composer-loader/ComposerLoader.web.js +8 -0
  152. package/lib/module/composer-loader/ComposerLoader.web.js.map +1 -1
  153. package/lib/module/composer-loader/index.web.js +5 -2
  154. package/lib/module/composer-loader/index.web.js.map +1 -1
  155. package/lib/module/composer-panel/index.web.js +5 -3
  156. package/lib/module/composer-panel/index.web.js.map +1 -1
  157. package/lib/module/connection-dots/index.web.js +5 -0
  158. package/lib/module/connection-dots/index.web.js.map +1 -1
  159. package/lib/module/connection-status/index.web.js +5 -0
  160. package/lib/module/connection-status/index.web.js.map +1 -1
  161. package/lib/module/content-panel/index.web.js +5 -0
  162. package/lib/module/content-panel/index.web.js.map +1 -1
  163. package/lib/module/context-menu/ContextMenu.web.js +22 -4
  164. package/lib/module/context-menu/ContextMenu.web.js.map +1 -1
  165. package/lib/module/context-menu/context.js.map +1 -1
  166. package/lib/module/context-menu/index.web.js +5 -0
  167. package/lib/module/context-menu/index.web.js.map +1 -1
  168. package/lib/module/dialog/Dialog.web.js +13 -0
  169. package/lib/module/dialog/Dialog.web.js.map +1 -1
  170. package/lib/module/dialog/index.web.js +7 -11
  171. package/lib/module/dialog/index.web.js.map +1 -1
  172. package/lib/module/dropdown-menu/DropdownMenu.web.js +23 -3
  173. package/lib/module/dropdown-menu/DropdownMenu.web.js.map +1 -1
  174. package/lib/module/dropdown-menu/index.web.js +5 -0
  175. package/lib/module/dropdown-menu/index.web.js.map +1 -1
  176. package/lib/module/floating/FloatingPanel.js +42 -33
  177. package/lib/module/floating/FloatingPanel.js.map +1 -1
  178. package/lib/module/floating/escape-stack.js +85 -0
  179. package/lib/module/floating/escape-stack.js.map +1 -0
  180. package/lib/module/floating/menu-keyboard.js +227 -0
  181. package/lib/module/floating/menu-keyboard.js.map +1 -0
  182. package/lib/module/floating/menu-sub-flyout.js +28 -16
  183. package/lib/module/floating/menu-sub-flyout.js.map +1 -1
  184. package/lib/module/fonts/index.web.js +5 -20
  185. package/lib/module/fonts/index.web.js.map +1 -1
  186. package/lib/module/frosted-icon-button/FrostedIconButton.web.js +9 -0
  187. package/lib/module/frosted-icon-button/FrostedIconButton.web.js.map +1 -1
  188. package/lib/module/frosted-icon-button/index.web.js +5 -7
  189. package/lib/module/frosted-icon-button/index.web.js.map +1 -1
  190. package/lib/module/hooks/roving-focus.js +181 -0
  191. package/lib/module/hooks/roving-focus.js.map +1 -0
  192. package/lib/module/hover-card/index.web.js +5 -0
  193. package/lib/module/hover-card/index.web.js.map +1 -1
  194. package/lib/module/icons/remix/RiBookReadLine.js +9 -0
  195. package/lib/module/icons/remix/RiBookReadLine.js.map +1 -0
  196. package/lib/module/icons/remix/RiBugLine.js +9 -0
  197. package/lib/module/icons/remix/RiBugLine.js.map +1 -0
  198. package/lib/module/icons/remix/RiChat1Line.js +9 -0
  199. package/lib/module/icons/remix/RiChat1Line.js.map +1 -0
  200. package/lib/module/icons/remix/RiCloudLine.js +9 -0
  201. package/lib/module/icons/remix/RiCloudLine.js.map +1 -0
  202. package/lib/module/icons/remix/RiCodeLine.js +9 -0
  203. package/lib/module/icons/remix/RiCodeLine.js.map +1 -0
  204. package/lib/module/icons/remix/RiCpuLine.js +9 -0
  205. package/lib/module/icons/remix/RiCpuLine.js.map +1 -0
  206. package/lib/module/icons/remix/RiFloodLine.js +9 -0
  207. package/lib/module/icons/remix/RiFloodLine.js.map +1 -0
  208. package/lib/module/icons/remix/RiLockUnlockLine.js +9 -0
  209. package/lib/module/icons/remix/RiLockUnlockLine.js.map +1 -0
  210. package/lib/module/icons/remix/RiMoneyDollarCircleLine.js +9 -0
  211. package/lib/module/icons/remix/RiMoneyDollarCircleLine.js.map +1 -0
  212. package/lib/module/icons/remix/RiPlayCircleLine.js +9 -0
  213. package/lib/module/icons/remix/RiPlayCircleLine.js.map +1 -0
  214. package/lib/module/icons/remix/RiRocket2Line.js +9 -0
  215. package/lib/module/icons/remix/RiRocket2Line.js.map +1 -0
  216. package/lib/module/icons/remix/RiServerLine.js +9 -0
  217. package/lib/module/icons/remix/RiServerLine.js.map +1 -0
  218. package/lib/module/icons/remix/RiShareBoxLine.js +9 -0
  219. package/lib/module/icons/remix/RiShareBoxLine.js.map +1 -0
  220. package/lib/module/icons/remix/RiTv2Line.js +9 -0
  221. package/lib/module/icons/remix/RiTv2Line.js.map +1 -0
  222. package/lib/module/icons/remix/index.js +14 -0
  223. package/lib/module/icons/remix/index.js.map +1 -1
  224. package/lib/module/list/index.web.js +5 -0
  225. package/lib/module/list/index.web.js.map +1 -1
  226. package/lib/module/loading/Loading.js +17 -155
  227. package/lib/module/loading/Loading.js.map +1 -1
  228. package/lib/module/loading/Loading.web.js +19 -155
  229. package/lib/module/loading/Loading.web.js.map +1 -1
  230. package/lib/module/loading/LoadingBase.js +194 -0
  231. package/lib/module/loading/LoadingBase.js.map +1 -0
  232. package/lib/module/loading/index.web.js +5 -13
  233. package/lib/module/loading/index.web.js.map +1 -1
  234. package/lib/module/media-flight/index.web.js +5 -9
  235. package/lib/module/media-flight/index.web.js.map +1 -1
  236. package/lib/module/menubar/Menubar.js +15 -122
  237. package/lib/module/menubar/Menubar.js.map +1 -1
  238. package/lib/module/menubar/Menubar.web.js +18 -114
  239. package/lib/module/menubar/Menubar.web.js.map +1 -1
  240. package/lib/module/menubar/MenubarBase.js +146 -0
  241. package/lib/module/menubar/MenubarBase.js.map +1 -0
  242. package/lib/module/menubar/index.web.js +5 -0
  243. package/lib/module/menubar/index.web.js.map +1 -1
  244. package/lib/module/motion/index.web.js +5 -5
  245. package/lib/module/motion/index.web.js.map +1 -1
  246. package/lib/module/popover/index.web.js +5 -0
  247. package/lib/module/popover/index.web.js.map +1 -1
  248. package/lib/module/popover/parts.js +70 -12
  249. package/lib/module/popover/parts.js.map +1 -1
  250. package/lib/module/popover/surface.js +39 -13
  251. package/lib/module/popover/surface.js.map +1 -1
  252. package/lib/module/portal/index.web.js +6 -1
  253. package/lib/module/portal/index.web.js.map +1 -1
  254. package/lib/module/progressive-blur/index.web.js +5 -0
  255. package/lib/module/progressive-blur/index.web.js.map +1 -1
  256. package/lib/module/scroll/index.web.js +5 -0
  257. package/lib/module/scroll/index.web.js.map +1 -1
  258. package/lib/module/segmented-control/SegmentedControl.js +36 -1
  259. package/lib/module/segmented-control/SegmentedControl.js.map +1 -1
  260. package/lib/module/select/Select.js +5 -77
  261. package/lib/module/select/Select.js.map +1 -1
  262. package/lib/module/select/Select.web.js +147 -82
  263. package/lib/module/select/Select.web.js.map +1 -1
  264. package/lib/module/select/index.js +2 -2
  265. package/lib/module/select/index.js.map +1 -1
  266. package/lib/module/select/index.web.js +7 -2
  267. package/lib/module/select/index.web.js.map +1 -1
  268. package/lib/module/select/shared.js +106 -6
  269. package/lib/module/select/shared.js.map +1 -1
  270. package/lib/module/sidebar/SidebarTeamMenu.js +2 -2
  271. package/lib/module/sidebar/SidebarTeamMenu.js.map +1 -1
  272. package/lib/module/sidebar/SidebarUserMenu.js +2 -2
  273. package/lib/module/sidebar/SidebarUserMenu.js.map +1 -1
  274. package/lib/module/sidebar/parts.js +8 -8
  275. package/lib/module/sidebar/parts.js.map +1 -1
  276. package/lib/module/surfaces/SurfaceHost.js +6 -0
  277. package/lib/module/surfaces/SurfaceHost.js.map +1 -1
  278. package/lib/module/surfaces/index.web.js +14 -4
  279. package/lib/module/surfaces/index.web.js.map +1 -1
  280. package/lib/module/tab-bar/index.web.js +13 -10
  281. package/lib/module/tab-bar/index.web.js.map +1 -1
  282. package/lib/module/tabs/Tabs.js +49 -2
  283. package/lib/module/tabs/Tabs.js.map +1 -1
  284. package/lib/module/theme/color-scope/index.web.js +5 -0
  285. package/lib/module/theme/color-scope/index.web.js.map +1 -1
  286. package/lib/module/theme/seed-scope/index.web.js +5 -0
  287. package/lib/module/theme/seed-scope/index.web.js.map +1 -1
  288. package/lib/module/tooltip/index.web.js +5 -0
  289. package/lib/module/tooltip/index.web.js.map +1 -1
  290. package/lib/typescript/commonjs/agent-chat/index.web.d.ts.map +1 -1
  291. package/lib/typescript/commonjs/ai-chat/index.web.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/alert-dialog/index.web.d.ts +5 -1
  293. package/lib/typescript/commonjs/alert-dialog/index.web.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/avatar-group/index.web.d.ts.map +1 -1
  295. package/lib/typescript/commonjs/bottom-sheet/index.web.d.ts.map +1 -1
  296. package/lib/typescript/commonjs/code/index.d.ts +2 -0
  297. package/lib/typescript/commonjs/code/index.d.ts.map +1 -1
  298. package/lib/typescript/commonjs/command/index.web.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/composer-loader/ComposerLoader.web.d.ts +8 -0
  300. package/lib/typescript/commonjs/composer-loader/ComposerLoader.web.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/composer-loader/index.web.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/composer-panel/index.web.d.ts.map +1 -1
  303. package/lib/typescript/commonjs/connection-dots/index.web.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/connection-status/index.web.d.ts.map +1 -1
  305. package/lib/typescript/commonjs/content-panel/index.web.d.ts.map +1 -1
  306. package/lib/typescript/commonjs/context-menu/ContextMenu.web.d.ts.map +1 -1
  307. package/lib/typescript/commonjs/context-menu/context.d.ts +3 -0
  308. package/lib/typescript/commonjs/context-menu/context.d.ts.map +1 -1
  309. package/lib/typescript/commonjs/context-menu/index.web.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/dialog/Dialog.web.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/dialog/index.web.d.ts +2 -1
  312. package/lib/typescript/commonjs/dialog/index.web.d.ts.map +1 -1
  313. package/lib/typescript/commonjs/dropdown-menu/DropdownMenu.web.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/dropdown-menu/index.web.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/floating/FloatingPanel.d.ts +1 -1
  316. package/lib/typescript/commonjs/floating/FloatingPanel.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/floating/escape-stack.d.ts +55 -0
  318. package/lib/typescript/commonjs/floating/escape-stack.d.ts.map +1 -0
  319. package/lib/typescript/commonjs/floating/menu-keyboard.d.ts +57 -0
  320. package/lib/typescript/commonjs/floating/menu-keyboard.d.ts.map +1 -0
  321. package/lib/typescript/commonjs/floating/menu-sub-flyout.d.ts.map +1 -1
  322. package/lib/typescript/commonjs/floating/types.d.ts +11 -0
  323. package/lib/typescript/commonjs/floating/types.d.ts.map +1 -1
  324. package/lib/typescript/commonjs/fonts/index.web.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/frosted-icon-button/FrostedIconButton.web.d.ts.map +1 -1
  326. package/lib/typescript/commonjs/frosted-icon-button/index.web.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/hooks/roving-focus.d.ts +66 -0
  328. package/lib/typescript/commonjs/hooks/roving-focus.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/hover-card/index.web.d.ts.map +1 -1
  330. package/lib/typescript/commonjs/icons/remix/RiBookReadLine.d.ts +8 -0
  331. package/lib/typescript/commonjs/icons/remix/RiBookReadLine.d.ts.map +1 -0
  332. package/lib/typescript/commonjs/icons/remix/RiBugLine.d.ts +8 -0
  333. package/lib/typescript/commonjs/icons/remix/RiBugLine.d.ts.map +1 -0
  334. package/lib/typescript/commonjs/icons/remix/RiChat1Line.d.ts +8 -0
  335. package/lib/typescript/commonjs/icons/remix/RiChat1Line.d.ts.map +1 -0
  336. package/lib/typescript/commonjs/icons/remix/RiCloudLine.d.ts +8 -0
  337. package/lib/typescript/commonjs/icons/remix/RiCloudLine.d.ts.map +1 -0
  338. package/lib/typescript/commonjs/icons/remix/RiCodeLine.d.ts +8 -0
  339. package/lib/typescript/commonjs/icons/remix/RiCodeLine.d.ts.map +1 -0
  340. package/lib/typescript/commonjs/icons/remix/RiCpuLine.d.ts +8 -0
  341. package/lib/typescript/commonjs/icons/remix/RiCpuLine.d.ts.map +1 -0
  342. package/lib/typescript/commonjs/icons/remix/RiFloodLine.d.ts +8 -0
  343. package/lib/typescript/commonjs/icons/remix/RiFloodLine.d.ts.map +1 -0
  344. package/lib/typescript/commonjs/icons/remix/RiLockUnlockLine.d.ts +8 -0
  345. package/lib/typescript/commonjs/icons/remix/RiLockUnlockLine.d.ts.map +1 -0
  346. package/lib/typescript/commonjs/icons/remix/RiMoneyDollarCircleLine.d.ts +8 -0
  347. package/lib/typescript/commonjs/icons/remix/RiMoneyDollarCircleLine.d.ts.map +1 -0
  348. package/lib/typescript/commonjs/icons/remix/RiPlayCircleLine.d.ts +8 -0
  349. package/lib/typescript/commonjs/icons/remix/RiPlayCircleLine.d.ts.map +1 -0
  350. package/lib/typescript/commonjs/icons/remix/RiRocket2Line.d.ts +8 -0
  351. package/lib/typescript/commonjs/icons/remix/RiRocket2Line.d.ts.map +1 -0
  352. package/lib/typescript/commonjs/icons/remix/RiServerLine.d.ts +8 -0
  353. package/lib/typescript/commonjs/icons/remix/RiServerLine.d.ts.map +1 -0
  354. package/lib/typescript/commonjs/icons/remix/RiShareBoxLine.d.ts +8 -0
  355. package/lib/typescript/commonjs/icons/remix/RiShareBoxLine.d.ts.map +1 -0
  356. package/lib/typescript/commonjs/icons/remix/RiTv2Line.d.ts +8 -0
  357. package/lib/typescript/commonjs/icons/remix/RiTv2Line.d.ts.map +1 -0
  358. package/lib/typescript/commonjs/icons/remix/index.d.ts +14 -0
  359. package/lib/typescript/commonjs/icons/remix/index.d.ts.map +1 -1
  360. package/lib/typescript/commonjs/list/index.web.d.ts.map +1 -1
  361. package/lib/typescript/commonjs/loading/Loading.d.ts +8 -2
  362. package/lib/typescript/commonjs/loading/Loading.d.ts.map +1 -1
  363. package/lib/typescript/commonjs/loading/Loading.web.d.ts +10 -2
  364. package/lib/typescript/commonjs/loading/Loading.web.d.ts.map +1 -1
  365. package/lib/typescript/commonjs/loading/LoadingBase.d.ts +64 -0
  366. package/lib/typescript/commonjs/loading/LoadingBase.d.ts.map +1 -0
  367. package/lib/typescript/commonjs/loading/index.web.d.ts.map +1 -1
  368. package/lib/typescript/commonjs/media-flight/index.web.d.ts +0 -9
  369. package/lib/typescript/commonjs/media-flight/index.web.d.ts.map +1 -1
  370. package/lib/typescript/commonjs/menubar/Menubar.d.ts +14 -9
  371. package/lib/typescript/commonjs/menubar/Menubar.d.ts.map +1 -1
  372. package/lib/typescript/commonjs/menubar/Menubar.web.d.ts +8 -6
  373. package/lib/typescript/commonjs/menubar/Menubar.web.d.ts.map +1 -1
  374. package/lib/typescript/commonjs/menubar/MenubarBase.d.ts +5 -0
  375. package/lib/typescript/commonjs/menubar/MenubarBase.d.ts.map +1 -0
  376. package/lib/typescript/commonjs/menubar/index.web.d.ts.map +1 -1
  377. package/lib/typescript/commonjs/motion/index.web.d.ts +0 -5
  378. package/lib/typescript/commonjs/motion/index.web.d.ts.map +1 -1
  379. package/lib/typescript/commonjs/popover/index.web.d.ts.map +1 -1
  380. package/lib/typescript/commonjs/popover/parts.d.ts.map +1 -1
  381. package/lib/typescript/commonjs/popover/surface.d.ts +15 -5
  382. package/lib/typescript/commonjs/popover/surface.d.ts.map +1 -1
  383. package/lib/typescript/commonjs/portal/index.web.d.ts +1 -1
  384. package/lib/typescript/commonjs/portal/index.web.d.ts.map +1 -1
  385. package/lib/typescript/commonjs/progressive-blur/index.web.d.ts.map +1 -1
  386. package/lib/typescript/commonjs/scroll/index.web.d.ts.map +1 -1
  387. package/lib/typescript/commonjs/segmented-control/SegmentedControl.d.ts.map +1 -1
  388. package/lib/typescript/commonjs/select/Select.d.ts +2 -4
  389. package/lib/typescript/commonjs/select/Select.d.ts.map +1 -1
  390. package/lib/typescript/commonjs/select/Select.web.d.ts +2 -4
  391. package/lib/typescript/commonjs/select/Select.web.d.ts.map +1 -1
  392. package/lib/typescript/commonjs/select/index.d.ts +2 -2
  393. package/lib/typescript/commonjs/select/index.d.ts.map +1 -1
  394. package/lib/typescript/commonjs/select/index.web.d.ts +2 -2
  395. package/lib/typescript/commonjs/select/index.web.d.ts.map +1 -1
  396. package/lib/typescript/commonjs/select/shared.d.ts +52 -5
  397. package/lib/typescript/commonjs/select/shared.d.ts.map +1 -1
  398. package/lib/typescript/commonjs/select/types.d.ts +6 -0
  399. package/lib/typescript/commonjs/select/types.d.ts.map +1 -1
  400. package/lib/typescript/commonjs/sidebar/parts.d.ts +8 -2
  401. package/lib/typescript/commonjs/sidebar/parts.d.ts.map +1 -1
  402. package/lib/typescript/commonjs/surfaces/SurfaceHost.d.ts.map +1 -1
  403. package/lib/typescript/commonjs/surfaces/index.web.d.ts +9 -4
  404. package/lib/typescript/commonjs/surfaces/index.web.d.ts.map +1 -1
  405. package/lib/typescript/commonjs/tab-bar/index.web.d.ts.map +1 -1
  406. package/lib/typescript/commonjs/tabs/Tabs.d.ts.map +1 -1
  407. package/lib/typescript/commonjs/tabs/types.d.ts +6 -0
  408. package/lib/typescript/commonjs/tabs/types.d.ts.map +1 -1
  409. package/lib/typescript/commonjs/theme/color-scope/index.web.d.ts.map +1 -1
  410. package/lib/typescript/commonjs/theme/seed-scope/index.web.d.ts.map +1 -1
  411. package/lib/typescript/commonjs/tooltip/index.web.d.ts.map +1 -1
  412. package/lib/typescript/module/agent-chat/index.web.d.ts.map +1 -1
  413. package/lib/typescript/module/ai-chat/index.web.d.ts.map +1 -1
  414. package/lib/typescript/module/alert-dialog/index.web.d.ts +5 -1
  415. package/lib/typescript/module/alert-dialog/index.web.d.ts.map +1 -1
  416. package/lib/typescript/module/avatar-group/index.web.d.ts.map +1 -1
  417. package/lib/typescript/module/bottom-sheet/index.web.d.ts.map +1 -1
  418. package/lib/typescript/module/code/index.d.ts +2 -0
  419. package/lib/typescript/module/code/index.d.ts.map +1 -1
  420. package/lib/typescript/module/command/index.web.d.ts.map +1 -1
  421. package/lib/typescript/module/composer-loader/ComposerLoader.web.d.ts +8 -0
  422. package/lib/typescript/module/composer-loader/ComposerLoader.web.d.ts.map +1 -1
  423. package/lib/typescript/module/composer-loader/index.web.d.ts.map +1 -1
  424. package/lib/typescript/module/composer-panel/index.web.d.ts.map +1 -1
  425. package/lib/typescript/module/connection-dots/index.web.d.ts.map +1 -1
  426. package/lib/typescript/module/connection-status/index.web.d.ts.map +1 -1
  427. package/lib/typescript/module/content-panel/index.web.d.ts.map +1 -1
  428. package/lib/typescript/module/context-menu/ContextMenu.web.d.ts.map +1 -1
  429. package/lib/typescript/module/context-menu/context.d.ts +3 -0
  430. package/lib/typescript/module/context-menu/context.d.ts.map +1 -1
  431. package/lib/typescript/module/context-menu/index.web.d.ts.map +1 -1
  432. package/lib/typescript/module/dialog/Dialog.web.d.ts.map +1 -1
  433. package/lib/typescript/module/dialog/index.web.d.ts +2 -1
  434. package/lib/typescript/module/dialog/index.web.d.ts.map +1 -1
  435. package/lib/typescript/module/dropdown-menu/DropdownMenu.web.d.ts.map +1 -1
  436. package/lib/typescript/module/dropdown-menu/index.web.d.ts.map +1 -1
  437. package/lib/typescript/module/floating/FloatingPanel.d.ts +1 -1
  438. package/lib/typescript/module/floating/FloatingPanel.d.ts.map +1 -1
  439. package/lib/typescript/module/floating/escape-stack.d.ts +55 -0
  440. package/lib/typescript/module/floating/escape-stack.d.ts.map +1 -0
  441. package/lib/typescript/module/floating/menu-keyboard.d.ts +57 -0
  442. package/lib/typescript/module/floating/menu-keyboard.d.ts.map +1 -0
  443. package/lib/typescript/module/floating/menu-sub-flyout.d.ts.map +1 -1
  444. package/lib/typescript/module/floating/types.d.ts +11 -0
  445. package/lib/typescript/module/floating/types.d.ts.map +1 -1
  446. package/lib/typescript/module/fonts/index.web.d.ts.map +1 -1
  447. package/lib/typescript/module/frosted-icon-button/FrostedIconButton.web.d.ts.map +1 -1
  448. package/lib/typescript/module/frosted-icon-button/index.web.d.ts.map +1 -1
  449. package/lib/typescript/module/hooks/roving-focus.d.ts +66 -0
  450. package/lib/typescript/module/hooks/roving-focus.d.ts.map +1 -0
  451. package/lib/typescript/module/hover-card/index.web.d.ts.map +1 -1
  452. package/lib/typescript/module/icons/remix/RiBookReadLine.d.ts +8 -0
  453. package/lib/typescript/module/icons/remix/RiBookReadLine.d.ts.map +1 -0
  454. package/lib/typescript/module/icons/remix/RiBugLine.d.ts +8 -0
  455. package/lib/typescript/module/icons/remix/RiBugLine.d.ts.map +1 -0
  456. package/lib/typescript/module/icons/remix/RiChat1Line.d.ts +8 -0
  457. package/lib/typescript/module/icons/remix/RiChat1Line.d.ts.map +1 -0
  458. package/lib/typescript/module/icons/remix/RiCloudLine.d.ts +8 -0
  459. package/lib/typescript/module/icons/remix/RiCloudLine.d.ts.map +1 -0
  460. package/lib/typescript/module/icons/remix/RiCodeLine.d.ts +8 -0
  461. package/lib/typescript/module/icons/remix/RiCodeLine.d.ts.map +1 -0
  462. package/lib/typescript/module/icons/remix/RiCpuLine.d.ts +8 -0
  463. package/lib/typescript/module/icons/remix/RiCpuLine.d.ts.map +1 -0
  464. package/lib/typescript/module/icons/remix/RiFloodLine.d.ts +8 -0
  465. package/lib/typescript/module/icons/remix/RiFloodLine.d.ts.map +1 -0
  466. package/lib/typescript/module/icons/remix/RiLockUnlockLine.d.ts +8 -0
  467. package/lib/typescript/module/icons/remix/RiLockUnlockLine.d.ts.map +1 -0
  468. package/lib/typescript/module/icons/remix/RiMoneyDollarCircleLine.d.ts +8 -0
  469. package/lib/typescript/module/icons/remix/RiMoneyDollarCircleLine.d.ts.map +1 -0
  470. package/lib/typescript/module/icons/remix/RiPlayCircleLine.d.ts +8 -0
  471. package/lib/typescript/module/icons/remix/RiPlayCircleLine.d.ts.map +1 -0
  472. package/lib/typescript/module/icons/remix/RiRocket2Line.d.ts +8 -0
  473. package/lib/typescript/module/icons/remix/RiRocket2Line.d.ts.map +1 -0
  474. package/lib/typescript/module/icons/remix/RiServerLine.d.ts +8 -0
  475. package/lib/typescript/module/icons/remix/RiServerLine.d.ts.map +1 -0
  476. package/lib/typescript/module/icons/remix/RiShareBoxLine.d.ts +8 -0
  477. package/lib/typescript/module/icons/remix/RiShareBoxLine.d.ts.map +1 -0
  478. package/lib/typescript/module/icons/remix/RiTv2Line.d.ts +8 -0
  479. package/lib/typescript/module/icons/remix/RiTv2Line.d.ts.map +1 -0
  480. package/lib/typescript/module/icons/remix/index.d.ts +14 -0
  481. package/lib/typescript/module/icons/remix/index.d.ts.map +1 -1
  482. package/lib/typescript/module/list/index.web.d.ts.map +1 -1
  483. package/lib/typescript/module/loading/Loading.d.ts +8 -2
  484. package/lib/typescript/module/loading/Loading.d.ts.map +1 -1
  485. package/lib/typescript/module/loading/Loading.web.d.ts +10 -2
  486. package/lib/typescript/module/loading/Loading.web.d.ts.map +1 -1
  487. package/lib/typescript/module/loading/LoadingBase.d.ts +64 -0
  488. package/lib/typescript/module/loading/LoadingBase.d.ts.map +1 -0
  489. package/lib/typescript/module/loading/index.web.d.ts.map +1 -1
  490. package/lib/typescript/module/media-flight/index.web.d.ts +0 -9
  491. package/lib/typescript/module/media-flight/index.web.d.ts.map +1 -1
  492. package/lib/typescript/module/menubar/Menubar.d.ts +14 -9
  493. package/lib/typescript/module/menubar/Menubar.d.ts.map +1 -1
  494. package/lib/typescript/module/menubar/Menubar.web.d.ts +8 -6
  495. package/lib/typescript/module/menubar/Menubar.web.d.ts.map +1 -1
  496. package/lib/typescript/module/menubar/MenubarBase.d.ts +5 -0
  497. package/lib/typescript/module/menubar/MenubarBase.d.ts.map +1 -0
  498. package/lib/typescript/module/menubar/index.web.d.ts.map +1 -1
  499. package/lib/typescript/module/motion/index.web.d.ts +0 -5
  500. package/lib/typescript/module/motion/index.web.d.ts.map +1 -1
  501. package/lib/typescript/module/popover/index.web.d.ts.map +1 -1
  502. package/lib/typescript/module/popover/parts.d.ts.map +1 -1
  503. package/lib/typescript/module/popover/surface.d.ts +15 -5
  504. package/lib/typescript/module/popover/surface.d.ts.map +1 -1
  505. package/lib/typescript/module/portal/index.web.d.ts +1 -1
  506. package/lib/typescript/module/portal/index.web.d.ts.map +1 -1
  507. package/lib/typescript/module/progressive-blur/index.web.d.ts.map +1 -1
  508. package/lib/typescript/module/scroll/index.web.d.ts.map +1 -1
  509. package/lib/typescript/module/segmented-control/SegmentedControl.d.ts.map +1 -1
  510. package/lib/typescript/module/select/Select.d.ts +2 -4
  511. package/lib/typescript/module/select/Select.d.ts.map +1 -1
  512. package/lib/typescript/module/select/Select.web.d.ts +2 -4
  513. package/lib/typescript/module/select/Select.web.d.ts.map +1 -1
  514. package/lib/typescript/module/select/index.d.ts +2 -2
  515. package/lib/typescript/module/select/index.d.ts.map +1 -1
  516. package/lib/typescript/module/select/index.web.d.ts +2 -2
  517. package/lib/typescript/module/select/index.web.d.ts.map +1 -1
  518. package/lib/typescript/module/select/shared.d.ts +52 -5
  519. package/lib/typescript/module/select/shared.d.ts.map +1 -1
  520. package/lib/typescript/module/select/types.d.ts +6 -0
  521. package/lib/typescript/module/select/types.d.ts.map +1 -1
  522. package/lib/typescript/module/sidebar/parts.d.ts +8 -2
  523. package/lib/typescript/module/sidebar/parts.d.ts.map +1 -1
  524. package/lib/typescript/module/surfaces/SurfaceHost.d.ts.map +1 -1
  525. package/lib/typescript/module/surfaces/index.web.d.ts +9 -4
  526. package/lib/typescript/module/surfaces/index.web.d.ts.map +1 -1
  527. package/lib/typescript/module/tab-bar/index.web.d.ts.map +1 -1
  528. package/lib/typescript/module/tabs/Tabs.d.ts.map +1 -1
  529. package/lib/typescript/module/tabs/types.d.ts +6 -0
  530. package/lib/typescript/module/tabs/types.d.ts.map +1 -1
  531. package/lib/typescript/module/theme/color-scope/index.web.d.ts.map +1 -1
  532. package/lib/typescript/module/theme/seed-scope/index.web.d.ts.map +1 -1
  533. package/lib/typescript/module/tooltip/index.web.d.ts.map +1 -1
  534. package/package.json +1 -1
  535. package/src/agent-chat/index.web.ts +5 -3
  536. package/src/ai-chat/index.web.ts +5 -2
  537. package/src/alert-dialog/index.web.ts +10 -1
  538. package/src/avatar-group/index.web.ts +5 -0
  539. package/src/bottom-sheet/index.web.ts +5 -0
  540. package/src/code/index.ts +2 -0
  541. package/src/command/index.web.ts +5 -0
  542. package/src/composer-loader/ComposerLoader.web.tsx +8 -0
  543. package/src/composer-loader/index.web.ts +5 -2
  544. package/src/composer-panel/index.web.ts +5 -3
  545. package/src/connection-dots/index.web.ts +5 -0
  546. package/src/connection-status/index.web.ts +5 -0
  547. package/src/content-panel/index.web.ts +5 -0
  548. package/src/context-menu/ContextMenu.web.tsx +26 -3
  549. package/src/context-menu/context.ts +3 -0
  550. package/src/context-menu/index.web.ts +5 -0
  551. package/src/dialog/Dialog.web.tsx +13 -0
  552. package/src/dialog/index.web.ts +7 -11
  553. package/src/dropdown-menu/DropdownMenu.web.tsx +25 -2
  554. package/src/dropdown-menu/index.web.ts +5 -0
  555. package/src/floating/FloatingPanel.tsx +37 -38
  556. package/src/floating/escape-stack.ts +92 -0
  557. package/src/floating/menu-keyboard.ts +242 -0
  558. package/src/floating/menu-sub-flyout.tsx +22 -17
  559. package/src/floating/types.ts +11 -0
  560. package/src/fonts/index.web.ts +5 -20
  561. package/src/frosted-icon-button/FrostedIconButton.web.tsx +9 -0
  562. package/src/frosted-icon-button/index.web.ts +5 -7
  563. package/src/hooks/roving-focus.ts +204 -0
  564. package/src/hover-card/index.web.ts +5 -0
  565. package/src/icons/remix/RiBookReadLine.tsx +6 -0
  566. package/src/icons/remix/RiBugLine.tsx +6 -0
  567. package/src/icons/remix/RiChat1Line.tsx +6 -0
  568. package/src/icons/remix/RiCloudLine.tsx +6 -0
  569. package/src/icons/remix/RiCodeLine.tsx +6 -0
  570. package/src/icons/remix/RiCpuLine.tsx +6 -0
  571. package/src/icons/remix/RiFloodLine.tsx +6 -0
  572. package/src/icons/remix/RiLockUnlockLine.tsx +6 -0
  573. package/src/icons/remix/RiMoneyDollarCircleLine.tsx +6 -0
  574. package/src/icons/remix/RiPlayCircleLine.tsx +6 -0
  575. package/src/icons/remix/RiRocket2Line.tsx +6 -0
  576. package/src/icons/remix/RiServerLine.tsx +6 -0
  577. package/src/icons/remix/RiShareBoxLine.tsx +6 -0
  578. package/src/icons/remix/RiTv2Line.tsx +6 -0
  579. package/src/icons/remix/index.ts +14 -0
  580. package/src/list/index.web.ts +5 -0
  581. package/src/loading/Loading.tsx +15 -135
  582. package/src/loading/Loading.web.tsx +16 -134
  583. package/src/loading/LoadingBase.tsx +170 -0
  584. package/src/loading/index.web.ts +5 -13
  585. package/src/media-flight/index.web.ts +5 -9
  586. package/src/menubar/Menubar.tsx +16 -147
  587. package/src/menubar/Menubar.web.tsx +15 -138
  588. package/src/menubar/MenubarBase.tsx +170 -0
  589. package/src/menubar/index.web.ts +5 -0
  590. package/src/motion/index.web.ts +5 -5
  591. package/src/popover/index.web.ts +5 -0
  592. package/src/popover/parts.tsx +76 -12
  593. package/src/popover/surface.ts +68 -15
  594. package/src/portal/index.web.ts +6 -1
  595. package/src/progressive-blur/index.web.ts +5 -0
  596. package/src/scroll/index.web.ts +5 -0
  597. package/src/segmented-control/SegmentedControl.tsx +45 -1
  598. package/src/select/Select.tsx +4 -67
  599. package/src/select/Select.web.tsx +133 -69
  600. package/src/select/index.ts +3 -3
  601. package/src/select/index.web.ts +8 -3
  602. package/src/select/shared.tsx +107 -5
  603. package/src/select/types.ts +6 -0
  604. package/src/sidebar/SidebarTeamMenu.tsx +2 -2
  605. package/src/sidebar/SidebarUserMenu.tsx +2 -2
  606. package/src/sidebar/parts.tsx +8 -9
  607. package/src/surfaces/SurfaceHost.tsx +6 -0
  608. package/src/surfaces/index.web.ts +14 -4
  609. package/src/tab-bar/index.web.ts +13 -10
  610. package/src/tabs/Tabs.tsx +65 -1
  611. package/src/tabs/types.ts +6 -0
  612. package/src/theme/color-scope/index.web.ts +5 -0
  613. package/src/theme/seed-scope/index.web.ts +5 -0
  614. package/src/tooltip/index.web.ts +5 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The three `Menubar` parts that are the SAME on both platforms.
5
+ *
6
+ * A menubar forks in exactly one place — what a menu opens INTO. Native
7
+ * presents the bottom sheet every Bloom overlay resolves to; web anchors a
8
+ * `floating/FloatingPanel` under the trigger. The bar itself, the per-menu
9
+ * state and the trigger are identical, so they live here and each fork
10
+ * re-exports them rather than keeping a second copy that has to be edited
11
+ * twice.
12
+ *
13
+ * NEUTRAL by construction: everything this module reaches (`floating/*`,
14
+ * `hooks/*`, `styles/*`, `./context`, `./types`) is fork-free. That is not a
15
+ * detail — `web-fork-reachability.test.ts` only scans `.web` files, so a
16
+ * neutral module naming a forked target resolves to NATIVE in every bundler
17
+ * that is not Metro and no gate would report it.
18
+ */
19
+ import React, { useMemo, useRef } from 'react';
20
+ import { MENUBAR_CLASS, MENUBAR_TRIGGER_CLASS, MENUBAR_TRIGGER_OPEN_CLASS, MENUBAR_TRIGGER_TEXT_CLASS, MENU_TRIGGER_POPUP } from "../floating/constants.js";
21
+ import { useMenuPalette } from "../floating/menu-palette.js";
22
+ import { menuType } from "../floating/menu-type.js";
23
+ import { cx } from "../floating/shared.js";
24
+ import { TriggerSlot } from "../floating/TriggerSlot.js";
25
+ import { useMenuFocusIntent, useMenuTriggerKeys } from "../floating/menu-keyboard.js";
26
+ import { useControllableState } from "../hooks/use-controllable-state.js";
27
+ import { StyledText, StyledView } from "../styles/styled-primitives.js";
28
+ import { MenubarMenuProvider, MenubarProvider, useMenubar, useMenubarMenu } from "./context.js";
29
+ import { jsx as _jsx } from "react/jsx-runtime";
30
+ export function Menubar({
31
+ children,
32
+ value,
33
+ defaultValue,
34
+ onValueChange,
35
+ label = 'Menu bar',
36
+ className,
37
+ style,
38
+ testID
39
+ }) {
40
+ const [openValue, setValue] = useControllableState({
41
+ value,
42
+ defaultValue,
43
+ onChange: onValueChange
44
+ });
45
+ const context = useMemo(() => ({
46
+ value: openValue,
47
+ setValue
48
+ }), [openValue, setValue]);
49
+ const palette = useMenuPalette();
50
+ const barPaint = {
51
+ backgroundColor: palette.trigger.background,
52
+ borderColor: palette.trigger.border,
53
+ boxShadow: palette.trigger.shadow
54
+ };
55
+ return /*#__PURE__*/_jsx(MenubarProvider, {
56
+ value: context,
57
+ children: /*#__PURE__*/_jsx(StyledView, {
58
+ role: "menubar",
59
+ "aria-label": label,
60
+ testID: testID,
61
+ className: cx(MENUBAR_CLASS, className),
62
+ style: [barPaint, style],
63
+ children: children
64
+ })
65
+ });
66
+ }
67
+ export function MenubarMenu({
68
+ children,
69
+ value
70
+ }) {
71
+ const bar = useMenubar();
72
+ const anchorRef = useRef(null);
73
+ const {
74
+ setValue
75
+ } = bar;
76
+ const focusIntent = useMenuFocusIntent();
77
+ const context = useMemo(() => ({
78
+ open: bar.value === value,
79
+ setOpen: next => setValue(next ? value : undefined),
80
+ anchorRef,
81
+ focusIntent
82
+ }), [bar.value, value, setValue, focusIntent]);
83
+ return /*#__PURE__*/_jsx(MenubarMenuProvider, {
84
+ value: context,
85
+ children: children
86
+ });
87
+ }
88
+ export function MenubarTrigger({
89
+ children,
90
+ asChild,
91
+ disabled,
92
+ label,
93
+ className,
94
+ style,
95
+ testID
96
+ }) {
97
+ const menu = useMenubarMenu();
98
+ const palette = useMenuPalette();
99
+ // Web: Enter/Space/ArrowDown open into the first row, ArrowUp into the last,
100
+ // and focus returns here on close (`floating/menu-keyboard.ts`). Inert on
101
+ // native, where there is no DOM node to listen on.
102
+ useMenuTriggerKeys(menu.anchorRef, {
103
+ open: menu.open,
104
+ setOpen: menu.setOpen,
105
+ disabled,
106
+ intent: menu.focusIntent
107
+ });
108
+
109
+ // `flex items-center rounded-md px-2 py-1.5`, plus `bg-accent` while its menu
110
+ // is open, and `text-sm font-medium` for the label. A menubar trigger is a
111
+ // BUTTON with chrome of its own, not a bare hit box — leaving it unstyled is
112
+ // why a Bloom menubar read as loose text against a pill-per-menu bar. The
113
+ // same chrome on both platforms, so the bar reads identically. `asChild`
114
+ // still hands the whole thing to the caller.
115
+ const trigger = /*#__PURE__*/_jsx(StyledView, {
116
+ className: cx(MENUBAR_TRIGGER_CLASS, menu.open && MENUBAR_TRIGGER_OPEN_CLASS, className),
117
+ style: {
118
+ backgroundColor: menu.open ? palette.rowHighlight : 'transparent'
119
+ },
120
+ children: typeof children === 'string' ? /*#__PURE__*/_jsx(StyledText, {
121
+ className: MENUBAR_TRIGGER_TEXT_CLASS
122
+ // `text-body-medium text-text-primary`, in Inter.
123
+ ,
124
+ style: [menuType('body-medium'), {
125
+ color: palette.text
126
+ }],
127
+ children: children
128
+ }) : children
129
+ });
130
+ return /*#__PURE__*/_jsx(TriggerSlot, {
131
+ asChild: asChild,
132
+ anchorRef: menu.anchorRef,
133
+ style: style,
134
+ testID: testID,
135
+ handle: {
136
+ onPress: () => menu.setOpen(!menu.open),
137
+ disabled,
138
+ accessibilityLabel: label,
139
+ accessibilityRole: 'button',
140
+ 'aria-haspopup': MENU_TRIGGER_POPUP,
141
+ 'aria-expanded': menu.open
142
+ },
143
+ children: asChild ? children : trigger
144
+ });
145
+ }
146
+ //# sourceMappingURL=MenubarBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useMemo","useRef","MENUBAR_CLASS","MENUBAR_TRIGGER_CLASS","MENUBAR_TRIGGER_OPEN_CLASS","MENUBAR_TRIGGER_TEXT_CLASS","MENU_TRIGGER_POPUP","useMenuPalette","menuType","cx","TriggerSlot","useMenuFocusIntent","useMenuTriggerKeys","useControllableState","StyledText","StyledView","MenubarMenuProvider","MenubarProvider","useMenubar","useMenubarMenu","jsx","_jsx","Menubar","children","value","defaultValue","onValueChange","label","className","style","testID","openValue","setValue","onChange","context","palette","barPaint","backgroundColor","trigger","background","borderColor","border","boxShadow","shadow","role","MenubarMenu","bar","anchorRef","focusIntent","open","setOpen","next","undefined","MenubarTrigger","asChild","disabled","menu","intent","rowHighlight","color","text","handle","onPress","accessibilityLabel","accessibilityRole"],"sourceRoot":"../../../src","sources":["menubar/MenubarBase.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ // AUTO-GENERATED by scripts/generate-platform-exports.mjs — DO NOT EDIT.
4
+ // Source of truth: src/menubar/index.ts.
5
+ // Re-run `bun run generate:exports` (or any `bun run build`) after
6
+ // changing that barrel or the set of web-forked subpaths.
7
+
3
8
  export { Menubar, MenubarMenu, MenubarTrigger, MenubarContent, MenubarItem, MenubarCheckboxItem, MenubarRadioGroup, MenubarRadioItem, MenubarLabel, MenubarSeparator, MenubarShortcut, MenubarGroup, MenubarSub, MenubarSubTrigger, MenubarSubContent } from "./Menubar.web.js";
4
9
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Menubar","MenubarMenu","MenubarTrigger","MenubarContent","MenubarItem","MenubarCheckboxItem","MenubarRadioGroup","MenubarRadioItem","MenubarLabel","MenubarSeparator","MenubarShortcut","MenubarGroup","MenubarSub","MenubarSubTrigger","MenubarSubContent"],"sourceRoot":"../../../src","sources":["menubar/index.web.ts"],"mappings":";;AAAA,SACEA,OAAO,EACPC,WAAW,EACXC,cAAc,EACdC,cAAc,EACdC,WAAW,EACXC,mBAAmB,EACnBC,iBAAiB,EACjBC,gBAAgB,EAChBC,YAAY,EACZC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,EACZC,UAAU,EACVC,iBAAiB,EACjBC,iBAAiB,QACZ,kBAAe","ignoreList":[]}
1
+ {"version":3,"names":["Menubar","MenubarMenu","MenubarTrigger","MenubarContent","MenubarItem","MenubarCheckboxItem","MenubarRadioGroup","MenubarRadioItem","MenubarLabel","MenubarSeparator","MenubarShortcut","MenubarGroup","MenubarSub","MenubarSubTrigger","MenubarSubContent"],"sourceRoot":"../../../src","sources":["menubar/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SACEA,OAAO,EACPC,WAAW,EACXC,cAAc,EACdC,cAAc,EACdC,WAAW,EACXC,mBAAmB,EACnBC,iBAAiB,EACjBC,gBAAgB,EAChBC,YAAY,EACZC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,EACZC,UAAU,EACVC,iBAAiB,EACjBC,iBAAiB,QACZ,kBAAe","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
 
3
- /**
4
- * Web variant of the `motion` barrel. Only the three layout-animation presets
5
- * fork — see `motion.web.ts` for why. `ScreenTransition` is universal: it already
6
- * branches on `Platform.OS` internally.
7
- */
3
+ // AUTO-GENERATED by scripts/generate-platform-exports.mjs — DO NOT EDIT.
4
+ // Source of truth: src/motion/index.ts.
5
+ // Re-run `bun run generate:exports` (or any `bun run build`) after
6
+ // changing that barrel or the set of web-forked subpaths.
7
+
8
8
  export { ScaleAndFadeIn, ScaleAndFadeOut, ShrinkAndPop } from "./motion.web.js";
9
9
  export { ScreenTransition } from "./ScreenTransition.js";
10
10
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ScaleAndFadeIn","ScaleAndFadeOut","ShrinkAndPop","ScreenTransition"],"sourceRoot":"../../../src","sources":["motion/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAc,EAAEC,eAAe,EAAEC,YAAY,QAAQ,iBAAc;AAC5E,SAASC,gBAAgB,QAAQ,uBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["ScaleAndFadeIn","ScaleAndFadeOut","ShrinkAndPop","ScreenTransition"],"sourceRoot":"../../../src","sources":["motion/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,EAAEC,eAAe,EAAEC,YAAY,QAAQ,iBAAc;AAC5E,SAASC,gBAAgB,QAAQ,uBAAoB","ignoreList":[]}
@@ -1,5 +1,10 @@
1
1
  "use strict";
2
2
 
3
+ // AUTO-GENERATED by scripts/generate-platform-exports.mjs — DO NOT EDIT.
4
+ // Source of truth: src/popover/index.ts.
5
+ // Re-run `bun run generate:exports` (or any `bun run build`) after
6
+ // changing that barrel or the set of web-forked subpaths.
7
+
3
8
  export { Popover, PopoverTrigger, PopoverContent } from "./Popover.web.js";
4
9
  export { PopoverHeader, PopoverTitle, PopoverDescription, PopoverFooter, PopoverSeparator } from "./parts.js";
5
10
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Popover","PopoverTrigger","PopoverContent","PopoverHeader","PopoverTitle","PopoverDescription","PopoverFooter","PopoverSeparator"],"sourceRoot":"../../../src","sources":["popover/index.web.ts"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAQ,kBAAe;AACvE,SACEC,aAAa,EACbC,YAAY,EACZC,kBAAkB,EAClBC,aAAa,EACbC,gBAAgB,QACX,YAAS","ignoreList":[]}
1
+ {"version":3,"names":["Popover","PopoverTrigger","PopoverContent","PopoverHeader","PopoverTitle","PopoverDescription","PopoverFooter","PopoverSeparator"],"sourceRoot":"../../../src","sources":["popover/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAQ,kBAAe;AACvE,SACEC,aAAa,EACbC,YAAY,EACZC,kBAAkB,EAClBC,aAAa,EACbC,gBAAgB,QACX,YAAS","ignoreList":[]}
@@ -8,25 +8,79 @@
8
8
  * header/footer `px-2` is measured against — 18px from the panel edge on every
9
9
  * side ("panel p-2.5 + row px-2").
10
10
  *
11
- * PopoverHeader flex items-center gap-2 px-2 pt-1 (dashboard team menu)
11
+ * PopoverHeader flex items-center gap-2 px-2 pt-1 (sidebar team menu)
12
12
  * PopoverTitle text-body-medium text-text-primary (secondary: group label)
13
13
  * PopoverDescription text-body-regular text-text-secondary
14
- * PopoverFooter flex items-center gap-3 px-2 pb-2 (user menu actions)
14
+ * PopoverFooter flex items-center gap-3 px-2 pb-2 (sidebar user menu actions)
15
15
  * PopoverSeparator -mx-2.5 my-2.5 h-px bg-border-button-default
16
16
  *
17
17
  * Popovers have no close button and no arrow, so neither is a part.
18
18
  *
19
- * Colours are resolved inline from `menu-palette.ts`; a text colour default is
20
- * applied only when the caller passes no `className`, so a `text-*` utility is
21
- * never outranked (AGENTS.md, "Style and `className`").
19
+ * ── HOW A CALLER'S CLASS STILL WINS ─────────────────────────────────────────
20
+ *
21
+ * Every default here is INLINE, because the colours are ramp stops that exist
22
+ * as no CSS variable and the geometry has to agree with them. But an inline
23
+ * style beats ANY class on web, so a naive inline default silently outranks
24
+ * whatever the caller passes: `<PopoverSeparator className="bg-red-500" />`
25
+ * painted the palette colour, and `<PopoverHeader className="px-4" />` kept
26
+ * its 8px.
27
+ *
28
+ * So each part omits exactly the properties the caller's utilities NAME, using
29
+ * the same token scan the panel uses (`classChromeOverrides` in `surface.ts`).
30
+ * The parts previously used an all-or-nothing guard instead — drop the colour
31
+ * default if ANY `className` is present — which failed in the other direction:
32
+ * `<PopoverTitle className="mt-1">` lost its colour entirely.
33
+ *
34
+ * The trade-off is real and the panel already made it: on a web build whose
35
+ * Tailwind/NativeWind pipeline is not wired (`AGENTS.md`, "Consumer web CSS
36
+ * pipeline"), a named property falls back to NOTHING rather than to the
37
+ * default. A caller who names it is asking to own it.
22
38
  */
23
39
  import React from 'react';
24
40
  import { StyleSheet, View } from 'react-native';
25
41
  import { useMenuPalette } from "../floating/menu-palette.js";
26
42
  import { StyledView } from "../styles/styled-primitives.js";
27
43
  import { Text } from "../typography/index.js";
28
- import { POPOVER_PADDING } from "./surface.js";
44
+ import { classChromeOverrides, POPOVER_PADDING } from "./surface.js";
29
45
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
46
+ /**
47
+ * `base` minus the properties the caller's `className` claims.
48
+ *
49
+ * It walks BASE, not the map: a property with no chrome key is one no utility
50
+ * can name, so it is always kept. Walking the map instead would silently drop
51
+ * whatever was added to a part's stylesheet without being classified — the
52
+ * failure would be a missing default, with nothing to report it.
53
+ */
54
+ function kept(base, owned) {
55
+ if (owned.size === 0) return base;
56
+ const out = {};
57
+ for (const [property, value] of Object.entries(base)) {
58
+ const key = PROPERTY_KEY[property];
59
+ if (key === undefined || !owned.has(key)) {
60
+ Object.assign(out, {
61
+ [property]: value
62
+ });
63
+ }
64
+ }
65
+ return out;
66
+ }
67
+
68
+ /** Which chrome key each style property belongs to. */
69
+ const PROPERTY_KEY = {
70
+ flexDirection: 'flexDirection',
71
+ alignItems: 'alignItems',
72
+ gap: 'gap',
73
+ paddingLeft: 'paddingLeft',
74
+ paddingRight: 'paddingRight',
75
+ paddingTop: 'paddingTop',
76
+ paddingBottom: 'paddingBottom',
77
+ marginLeft: 'marginLeft',
78
+ marginRight: 'marginRight',
79
+ marginTop: 'marginTop',
80
+ marginBottom: 'marginBottom',
81
+ height: 'height',
82
+ backgroundColor: 'background'
83
+ };
30
84
  export function PopoverHeader({
31
85
  leading,
32
86
  children,
@@ -34,9 +88,10 @@ export function PopoverHeader({
34
88
  style,
35
89
  testID
36
90
  }) {
91
+ const owned = classChromeOverrides(className);
37
92
  return /*#__PURE__*/_jsxs(StyledView, {
38
93
  className: className,
39
- style: [styles.header, style],
94
+ style: [kept(styles.header, owned), style],
40
95
  testID: testID,
41
96
  children: [leading ? /*#__PURE__*/_jsx(View, {
42
97
  style: styles.leading,
@@ -61,7 +116,7 @@ export function PopoverTitle({
61
116
  variant: "body-medium",
62
117
  numberOfLines: numberOfLines,
63
118
  className: className,
64
- style: [className ? null : {
119
+ style: [classChromeOverrides(className).has('color') ? null : {
65
120
  color
66
121
  }, style],
67
122
  testID: testID,
@@ -80,7 +135,7 @@ export function PopoverDescription({
80
135
  variant: "body-regular",
81
136
  numberOfLines: numberOfLines,
82
137
  className: className,
83
- style: [className ? null : {
138
+ style: [classChromeOverrides(className).has('color') ? null : {
84
139
  color: palette.textSecondary
85
140
  }, style],
86
141
  testID: testID,
@@ -93,9 +148,10 @@ export function PopoverFooter({
93
148
  style,
94
149
  testID
95
150
  }) {
151
+ const owned = classChromeOverrides(className);
96
152
  return /*#__PURE__*/_jsx(StyledView, {
97
153
  className: className,
98
- style: [styles.footer, style],
154
+ style: [kept(styles.footer, owned), style],
99
155
  testID: testID,
100
156
  children: children
101
157
  });
@@ -106,14 +162,16 @@ export function PopoverSeparator({
106
162
  testID
107
163
  }) {
108
164
  const palette = useMenuPalette();
165
+ const owned = classChromeOverrides(className);
109
166
  return /*#__PURE__*/_jsx(StyledView
110
167
  // Decorative: the sections it divides are announced on their own.
111
168
  , {
112
169
  "aria-hidden": true,
113
170
  className: className,
114
- style: [styles.separator, {
171
+ style: [kept({
172
+ ...styles.separator,
115
173
  backgroundColor: palette.border
116
- }, style],
174
+ }, owned), style],
117
175
  testID: testID
118
176
  });
119
177
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","StyleSheet","View","useMenuPalette","StyledView","Text","POPOVER_PADDING","jsx","_jsx","jsxs","_jsxs","PopoverHeader","leading","children","className","style","testID","styles","header","headerText","PopoverTitle","tone","numberOfLines","palette","color","textSecondary","text","variant","PopoverDescription","PopoverFooter","footer","PopoverSeparator","separator","backgroundColor","border","create","flexDirection","alignItems","gap","paddingLeft","paddingRight","paddingTop","flexShrink","minWidth","justifyContent","paddingBottom","height","marginLeft","marginRight","marginTop","marginBottom"],"sourceRoot":"../../../src","sources":["popover/parts.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","StyleSheet","View","useMenuPalette","StyledView","Text","classChromeOverrides","POPOVER_PADDING","jsx","_jsx","jsxs","_jsxs","kept","base","owned","size","out","property","value","Object","entries","key","PROPERTY_KEY","undefined","has","assign","flexDirection","alignItems","gap","paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","height","backgroundColor","PopoverHeader","leading","children","className","style","testID","styles","header","headerText","PopoverTitle","tone","numberOfLines","palette","color","textSecondary","text","variant","PopoverDescription","PopoverFooter","footer","PopoverSeparator","separator","border","create","flexShrink","minWidth","justifyContent"],"sourceRoot":"../../../src","sources":["popover/parts.tsx"],"mappings":"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","ignoreList":[]}
@@ -3,9 +3,8 @@
3
3
  /**
4
4
  * The popover PANEL — Bloom's one floating surface, resolved to inline style.
5
5
  *
6
- * Every floating panel (`dropdown/menu-styles.ts`'s `MENU_POPOVER_SURFACE`, the
7
- * dashboard team/user menus, the calendar inbox menu, the ai-chat menus) spells
8
- * the same class string:
6
+ * Every floating panel in the fleet — the sidebar team and user menus, the
7
+ * calendar inbox menu, the ai-chat menus — spells the same class string:
9
8
  *
10
9
  * w-[266px] max-w-[calc(100vw-32px)] overflow-y-auto
11
10
  * rounded-2xl border border-border-button-default
@@ -32,7 +31,7 @@
32
31
  * `style` still comes last and overrides everything.
33
32
  */
34
33
 
35
- /** `w-[266px]` — `MENU_POPOVER_WIDTH`. */
34
+ /** `w-[266px]` — the one panel width every floating surface shares. */
36
35
  export const POPOVER_WIDTH = 266;
37
36
  /** `rounded-2xl`. */
38
37
  export const POPOVER_RADIUS = 16;
@@ -44,18 +43,46 @@ export const POPOVER_VIEWPORT_INSET = 32;
44
43
  export const POPOVER_SIDE_OFFSET = 8;
45
44
  const BORDER_WIDTH = /^border(-[xytrblse])?(-\d+(\.\d+)?|-\[[^\]]+px\])?$/;
46
45
 
46
+ /**
47
+ * The sides a spacing utility's axis letter claims. `p-4` has no letter and
48
+ * claims all four; `px`/`py` are the pairs; `pt`/`pb`/`pl`/`pr` are single
49
+ * sides. `ps`/`pe` are the LOGICAL start and end — one side each, not the
50
+ * pair — which react-native-web resolves to left and right in an LTR
51
+ * document. Treating them as the pair would drop a default the caller never
52
+ * asked to own.
53
+ */
54
+ function sidesOf(letter, property) {
55
+ const sides = letter === undefined ? ['Top', 'Bottom', 'Left', 'Right'] : letter === 'x' ? ['Left', 'Right'] : letter === 'y' ? ['Top', 'Bottom'] : letter === 't' ? ['Top'] : letter === 'b' ? ['Bottom'] : letter === 'l' || letter === 's' ? ['Left'] : letter === 'r' || letter === 'e' ? ['Right'] : [];
56
+ return sides.map(side => `${property}${side}`);
57
+ }
58
+
47
59
  /**
48
60
  * Which chrome properties a caller's utility classes set. Variants (`dark:`,
49
61
  * `md:`, `hover:`), the important `!` and a negative `-` are stripped first, so
50
62
  * `md:!p-0` counts as padding.
63
+ *
64
+ * Padding and margin are claimed PER SIDE, because the utilities are: `px-4`
65
+ * names left and right and says nothing about the top, so a part that also
66
+ * sets `paddingTop` must keep it. Treating them as one key dropped a header's
67
+ * `pt-1` for a caller who only asked for wider sides.
68
+ *
69
+ * `text-*` is counted as a COLOUR, including the size steps (`text-sm`). That
70
+ * is deliberately imprecise: telling `text-sm` from `text-red-500` means
71
+ * knowing the consumer's palette, and the alternative the parts used before
72
+ * this — drop the colour default whenever ANY `className` is passed — is
73
+ * strictly worse, since it loses the colour to an unrelated `mt-1`.
51
74
  */
52
75
  export function classChromeOverrides(className) {
53
76
  const keys = new Set();
54
77
  if (!className) return keys;
78
+ let spacing;
55
79
  for (const raw of className.split(/\s+/)) {
56
80
  if (!raw) continue;
57
81
  const token = raw.slice(raw.lastIndexOf(':') + 1).replace(/^!/, '').replace(/^-/, '');
58
- if (/^(w|size)-/.test(token)) keys.add('width');else if (/^max-w-/.test(token)) keys.add('maxWidth');else if (/^p[xytrblse]?-/.test(token)) keys.add('padding');else if (/^rounded(-|$)/.test(token)) keys.add('radius');else if (BORDER_WIDTH.test(token)) keys.add('borderWidth');else if (/^border-/.test(token)) keys.add('borderColor');else if (/^bg-/.test(token)) keys.add('background');else if (/^shadow(-|$)/.test(token)) keys.add('shadow');else if (/^overflow-/.test(token)) keys.add('overflow');
82
+ if (/^(w|size)-/.test(token)) keys.add('width');else if (/^max-w-/.test(token)) keys.add('maxWidth');else if (spacing = /^([pm])([xytrbles])?-/.exec(token)) {
83
+ const property = spacing[1] === 'p' ? 'padding' : 'margin';
84
+ for (const key of sidesOf(spacing[2], property)) keys.add(key);
85
+ } else if (/^rounded(-|$)/.test(token)) keys.add('radius');else if (BORDER_WIDTH.test(token)) keys.add('borderWidth');else if (/^border-/.test(token)) keys.add('borderColor');else if (/^bg-/.test(token)) keys.add('background');else if (/^shadow(-|$)/.test(token)) keys.add('shadow');else if (/^overflow-/.test(token)) keys.add('overflow');else if (/^text-/.test(token)) keys.add('color');else if (/^gap(-|$)/.test(token)) keys.add('gap');else if (/^h-/.test(token)) keys.add('height');else if (/^flex-(row|col)/.test(token)) keys.add('flexDirection');else if (/^items-/.test(token)) keys.add('alignItems');
59
86
  }
60
87
  return keys;
61
88
  }
@@ -72,14 +99,13 @@ export function resolvePopoverSurfaceStyle(palette, overridden, viewportWidth) {
72
99
  if (!overridden.has('maxWidth') && viewportWidth !== undefined) {
73
100
  style.maxWidth = Math.max(0, viewportWidth - POPOVER_VIEWPORT_INSET);
74
101
  }
75
- if (!overridden.has('padding')) {
76
- // Longhands: a caller's `style` override of one side must not lose to a
77
- // shorthand react-native-web ranks above it (AGENTS.md, "Style").
78
- style.paddingTop = POPOVER_PADDING;
79
- style.paddingBottom = POPOVER_PADDING;
80
- style.paddingLeft = POPOVER_PADDING;
81
- style.paddingRight = POPOVER_PADDING;
82
- }
102
+ // Longhands, one side at a time: a caller's `style` override of one side must
103
+ // not lose to a shorthand react-native-web ranks above it (AGENTS.md,
104
+ // "Style"), and a caller who writes `px-4` is claiming the sides, not the top.
105
+ if (!overridden.has('paddingTop')) style.paddingTop = POPOVER_PADDING;
106
+ if (!overridden.has('paddingBottom')) style.paddingBottom = POPOVER_PADDING;
107
+ if (!overridden.has('paddingLeft')) style.paddingLeft = POPOVER_PADDING;
108
+ if (!overridden.has('paddingRight')) style.paddingRight = POPOVER_PADDING;
83
109
  if (!overridden.has('radius')) style.borderRadius = POPOVER_RADIUS;
84
110
  if (!overridden.has('borderWidth')) style.borderWidth = 1;
85
111
  if (!overridden.has('borderColor')) style.borderColor = palette.border;
@@ -1 +1 @@
1
- {"version":3,"names":["POPOVER_WIDTH","POPOVER_RADIUS","POPOVER_PADDING","POPOVER_VIEWPORT_INSET","POPOVER_SIDE_OFFSET","BORDER_WIDTH","classChromeOverrides","className","keys","Set","raw","split","token","slice","lastIndexOf","replace","test","add","resolvePopoverSurfaceStyle","palette","overridden","viewportWidth","style","has","width","undefined","maxWidth","Math","max","paddingTop","paddingBottom","paddingLeft","paddingRight","borderRadius","borderWidth","borderColor","border","backgroundColor","surface","boxShadow","shadow","overflow"],"sourceRoot":"../../../src","sources":["popover/surface.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["POPOVER_WIDTH","POPOVER_RADIUS","POPOVER_PADDING","POPOVER_VIEWPORT_INSET","POPOVER_SIDE_OFFSET","BORDER_WIDTH","sidesOf","letter","property","sides","undefined","map","side","classChromeOverrides","className","keys","Set","spacing","raw","split","token","slice","lastIndexOf","replace","test","add","exec","key","resolvePopoverSurfaceStyle","palette","overridden","viewportWidth","style","has","width","maxWidth","Math","max","paddingTop","paddingBottom","paddingLeft","paddingRight","borderRadius","borderWidth","borderColor","border","backgroundColor","surface","boxShadow","shadow","overflow"],"sourceRoot":"../../../src","sources":["popover/surface.ts"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,9 @@
1
1
  "use strict";
2
2
 
3
- export { Portal, PortalProvider, PortalOutlet } from "./Portal.web.js";
3
+ // AUTO-GENERATED by scripts/generate-platform-exports.mjs — DO NOT EDIT.
4
+ // Source of truth: src/portal/index.ts.
5
+ // Re-run `bun run generate:exports` (or any `bun run build`) after
6
+ // changing that barrel or the set of web-forked subpaths.
7
+
8
+ export { PortalProvider, PortalOutlet, Portal } from "./Portal.web.js";
4
9
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Portal","PortalProvider","PortalOutlet"],"sourceRoot":"../../../src","sources":["portal/index.web.ts"],"mappings":";;AAAA,SACEA,MAAM,EACNC,cAAc,EACdC,YAAY,QACP,iBAAc","ignoreList":[]}
1
+ {"version":3,"names":["PortalProvider","PortalOutlet","Portal"],"sourceRoot":"../../../src","sources":["portal/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SACEA,cAAc,EACdC,YAAY,EACZC,MAAM,QACD,iBAAc","ignoreList":[]}
@@ -1,4 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ // AUTO-GENERATED by scripts/generate-platform-exports.mjs — DO NOT EDIT.
4
+ // Source of truth: src/progressive-blur/index.ts.
5
+ // Re-run `bun run generate:exports` (or any `bun run build`) after
6
+ // changing that barrel or the set of web-forked subpaths.
7
+
3
8
  export { ProgressiveBlur } from "./ProgressiveBlur.web.js";
4
9
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ProgressiveBlur"],"sourceRoot":"../../../src","sources":["progressive-blur/index.web.ts"],"mappings":";;AACA,SACEA,eAAe,QACV,0BAAuB","ignoreList":[]}
1
+ {"version":3,"names":["ProgressiveBlur"],"sourceRoot":"../../../src","sources":["progressive-blur/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAGA,SACEA,eAAe,QACV,0BAAuB","ignoreList":[]}
@@ -1,5 +1,10 @@
1
1
  "use strict";
2
2
 
3
+ // AUTO-GENERATED by scripts/generate-platform-exports.mjs — DO NOT EDIT.
4
+ // Source of truth: src/scroll/index.ts.
5
+ // Re-run `bun run generate:exports` (or any `bun run build`) after
6
+ // changing that barrel or the set of web-forked subpaths.
7
+
3
8
  export { ScrollRestorationProvider } from "./context.js";
4
9
  export { useScrollRestoration } from "./use-scroll-restoration.web.js";
5
10
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ScrollRestorationProvider","useScrollRestoration"],"sourceRoot":"../../../src","sources":["scroll/index.web.ts"],"mappings":";;AAAA,SAASA,yBAAyB,QAAQ,cAAW;AACrD,SAASC,oBAAoB,QAAQ,iCAA8B","ignoreList":[]}
1
+ {"version":3,"names":["ScrollRestorationProvider","useScrollRestoration"],"sourceRoot":"../../../src","sources":["scroll/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,yBAAyB,QAAQ,cAAW;AACrD,SAASC,oBAAoB,QAAQ,iCAA8B","ignoreList":[]}
@@ -12,6 +12,8 @@ import { useInteractionState } from "../hooks/use-interaction-state.js";
12
12
  import { borderRadius, DISABLED_OPACITY } from "../styles/tokens.js";
13
13
  import { NOT_DISABLED, interactiveWebCss, useInteractiveWebCss } from "../styles/interactive-web-css.js";
14
14
  import { useFieldMembership } from "../field/membership.js";
15
+ import { handleRovingKeyDown, useRovingTabIndex } from "../hooks/roving-focus.js";
16
+ import { webDataSet } from "../styles/web-data.js";
15
17
 
16
18
  /**
17
19
  * A segmented control using Bloom's canonical surface and text roles.
@@ -86,6 +88,13 @@ function resolveSegmentedPalette(theme) {
86
88
 
87
89
  const STYLE_ID = 'bloom-segmented-control-web-css';
88
90
  const SEGMENT = '[data-bloom-segmented-item]';
91
+ /** The group node — the owner a segment's keyboard walks within. */
92
+ const GROUP = '[data-bloom-segmented-group]';
93
+
94
+ /** The attribute that says a segment is the chosen one, per role. */
95
+ function isChosenSegment(element) {
96
+ return element.getAttribute('aria-checked') === 'true' || element.getAttribute('aria-selected') === 'true';
97
+ }
89
98
  const SEGMENTED_CSS = interactiveWebCss({
90
99
  selector: SEGMENT,
91
100
  varPrefix: 'bloom-segmented',
@@ -171,6 +180,10 @@ export function SegmentedControl({
171
180
  const candidate = useSharedValue('');
172
181
  const suppressUntil = useRef(0);
173
182
  const [release, setRelease] = useState(0);
183
+ // Web: ONE tab stop for the whole group — the chosen segment — as the ARIA
184
+ // radio-group and tab patterns require (`hooks/roving-focus.ts`).
185
+ const groupRef = useRef(null);
186
+ useRovingTabIndex(() => groupRef.current, SEGMENT, isChosenSegment, GROUP);
174
187
  const register = useCallback(segment => {
175
188
  segments.value = [...segments.value.filter(item => item.value !== segment.value), segment].sort((a, b) => a.x - b.x);
176
189
  return () => {
@@ -273,6 +286,10 @@ export function SegmentedControl({
273
286
  gesture: gesture,
274
287
  touchAction: "pan-y",
275
288
  children: /*#__PURE__*/_jsxs(View, {
289
+ ref: groupRef,
290
+ ...webDataSet({
291
+ bloomSegmentedGroup: ''
292
+ }),
276
293
  testID: testID,
277
294
  nativeID: field.nativeID,
278
295
  accessibilityLabel: field.accessibilityLabel,
@@ -365,6 +382,24 @@ export function SegmentedControlItem({
365
382
  // a11y role for tablist children.
366
383
  const itemRole = ctx.type === 'tabs' ? 'tab' : 'radio';
367
384
  const geometry = GEOMETRY[ctx.size];
385
+
386
+ // Web keyboard, per the ARIA pattern the group's role names. A radio group
387
+ // answers all four arrows and has no Home/End; a tab strip answers
388
+ // Left/Right plus Home/End. Both select as focus moves — the control is a
389
+ // controlled value with nothing expensive behind a change — and both take
390
+ // Space, which react-native-web only synthesises for `role="button"`. Enter
391
+ // stays with react-native-web's own press. `allowKeyboardPress` first, so a
392
+ // drag's click suppression can never swallow a key.
393
+ const onKeyDown = useCallback(event => {
394
+ ctx.allowKeyboardPress();
395
+ handleRovingKeyDown(event, {
396
+ selector: SEGMENT,
397
+ owner: GROUP,
398
+ orientation: ctx.type === 'tabs' ? 'horizontal' : 'both',
399
+ homeEnd: ctx.type === 'tabs',
400
+ activate: 'follow'
401
+ });
402
+ }, [ctx]);
368
403
  const itemStyle = {
369
404
  flexGrow: 1,
370
405
  flexDirection: 'row',
@@ -402,7 +437,7 @@ export function SegmentedControlItem({
402
437
  dataSet: {
403
438
  bloomSegmentedItem: ''
404
439
  },
405
- onKeyDown: ctx.allowKeyboardPress
440
+ onKeyDown
406
441
  } : {}),
407
442
  onPress: onPress,
408
443
  onHoverIn: onHoverIn,