@graphprotocol/gds-react 0.1.2 → 0.2.1

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 (433) hide show
  1. package/dist/GDSContext.d.ts +13 -0
  2. package/dist/GDSContext.d.ts.map +1 -0
  3. package/dist/GDSContext.js +4 -0
  4. package/dist/GDSContext.js.map +1 -0
  5. package/dist/GDSProvider.d.ts +13 -19
  6. package/dist/GDSProvider.d.ts.map +1 -1
  7. package/dist/GDSProvider.js +14 -11
  8. package/dist/GDSProvider.js.map +1 -1
  9. package/dist/components/Address.js +2 -2
  10. package/dist/components/Address.meta.d.ts +1 -13
  11. package/dist/components/Address.meta.d.ts.map +1 -1
  12. package/dist/components/Avatar.d.ts.map +1 -1
  13. package/dist/components/Avatar.js +3 -11
  14. package/dist/components/Avatar.js.map +1 -1
  15. package/dist/components/Avatar.meta.d.ts +0 -2
  16. package/dist/components/Avatar.meta.d.ts.map +1 -1
  17. package/dist/components/AvatarGroup.meta.d.ts +8 -2
  18. package/dist/components/AvatarGroup.meta.d.ts.map +1 -1
  19. package/dist/components/Breadcrumbs.meta.d.ts +2 -3
  20. package/dist/components/Breadcrumbs.meta.d.ts.map +1 -1
  21. package/dist/components/Breadcrumbs.meta.js +3 -1
  22. package/dist/components/Breadcrumbs.meta.js.map +1 -1
  23. package/dist/components/Breadcrumbs.parts.d.ts.map +1 -1
  24. package/dist/components/Breadcrumbs.parts.js +13 -21
  25. package/dist/components/Breadcrumbs.parts.js.map +1 -1
  26. package/dist/components/Button.d.ts.map +1 -1
  27. package/dist/components/Button.js +70 -69
  28. package/dist/components/Button.js.map +1 -1
  29. package/dist/components/Button.meta.d.ts +1 -4
  30. package/dist/components/Button.meta.d.ts.map +1 -1
  31. package/dist/components/ButtonGroup.d.ts.map +1 -1
  32. package/dist/components/ButtonGroup.js +1 -5
  33. package/dist/components/ButtonGroup.js.map +1 -1
  34. package/dist/components/ButtonGroup.meta.d.ts +1 -5
  35. package/dist/components/ButtonGroup.meta.d.ts.map +1 -1
  36. package/dist/components/ButtonGroup.meta.js +8 -0
  37. package/dist/components/ButtonGroup.meta.js.map +1 -1
  38. package/dist/components/Card.js +2 -2
  39. package/dist/components/Card.js.map +1 -1
  40. package/dist/components/Card.meta.d.ts +1 -2
  41. package/dist/components/Card.meta.d.ts.map +1 -1
  42. package/dist/components/Card.meta.js +1 -0
  43. package/dist/components/Card.meta.js.map +1 -1
  44. package/dist/components/Checkbox.meta.d.ts +1 -6
  45. package/dist/components/Checkbox.meta.d.ts.map +1 -1
  46. package/dist/components/Checkbox.meta.js +1 -5
  47. package/dist/components/Checkbox.meta.js.map +1 -1
  48. package/dist/components/Chip.meta.d.ts +2 -4
  49. package/dist/components/Chip.meta.d.ts.map +1 -1
  50. package/dist/components/Chip.parts.d.ts.map +1 -1
  51. package/dist/components/Chip.parts.js +1 -9
  52. package/dist/components/Chip.parts.js.map +1 -1
  53. package/dist/components/Cluster.meta.d.ts +8 -2
  54. package/dist/components/Cluster.meta.d.ts.map +1 -1
  55. package/dist/components/CodeBlock.d.ts +1 -1
  56. package/dist/components/CodeBlock.meta.d.ts +2 -4
  57. package/dist/components/CodeBlock.meta.d.ts.map +1 -1
  58. package/dist/components/CodeBlock.parts.d.ts +6 -7
  59. package/dist/components/CodeBlock.parts.d.ts.map +1 -1
  60. package/dist/components/CodeBlock.parts.js +28 -10
  61. package/dist/components/CodeBlock.parts.js.map +1 -1
  62. package/dist/components/CodeInline.js +3 -3
  63. package/dist/components/CodeInline.meta.d.ts +1 -1
  64. package/dist/components/CodeInline.meta.d.ts.map +1 -1
  65. package/dist/components/CopyButton.d.ts +1 -1
  66. package/dist/components/CopyButton.d.ts.map +1 -1
  67. package/dist/components/CopyButton.js +46 -21
  68. package/dist/components/CopyButton.js.map +1 -1
  69. package/dist/components/CopyButton.meta.d.ts +1 -12
  70. package/dist/components/CopyButton.meta.d.ts.map +1 -1
  71. package/dist/components/CopyButton.meta.js +1 -6
  72. package/dist/components/CopyButton.meta.js.map +1 -1
  73. package/dist/components/CurrencyInput.meta.d.ts +1 -6
  74. package/dist/components/CurrencyInput.meta.d.ts.map +1 -1
  75. package/dist/components/CurrencyInput.meta.js +1 -5
  76. package/dist/components/CurrencyInput.meta.js.map +1 -1
  77. package/dist/components/DescriptionList.meta.d.ts +2 -5
  78. package/dist/components/DescriptionList.meta.d.ts.map +1 -1
  79. package/dist/components/DescriptionList.parts.d.ts +3 -0
  80. package/dist/components/DescriptionList.parts.d.ts.map +1 -1
  81. package/dist/components/DescriptionList.parts.js +1 -0
  82. package/dist/components/DescriptionList.parts.js.map +1 -1
  83. package/dist/components/Divider.meta.d.ts +1 -3
  84. package/dist/components/Divider.meta.d.ts.map +1 -1
  85. package/dist/components/Icon.js +4 -4
  86. package/dist/components/Icon.js.map +1 -1
  87. package/dist/components/Icon.meta.d.ts +0 -2
  88. package/dist/components/Icon.meta.d.ts.map +1 -1
  89. package/dist/components/Icon.meta.js +1 -0
  90. package/dist/components/Icon.meta.js.map +1 -1
  91. package/dist/components/Input.d.ts +5 -4
  92. package/dist/components/Input.d.ts.map +1 -1
  93. package/dist/components/Input.js +3 -2
  94. package/dist/components/Input.js.map +1 -1
  95. package/dist/components/Input.meta.d.ts +1 -6
  96. package/dist/components/Input.meta.d.ts.map +1 -1
  97. package/dist/components/Input.meta.js +1 -5
  98. package/dist/components/Input.meta.js.map +1 -1
  99. package/dist/components/Keyboard.js +1 -1
  100. package/dist/components/Keyboard.meta.d.ts +0 -1
  101. package/dist/components/Keyboard.meta.d.ts.map +1 -1
  102. package/dist/components/Label.meta.d.ts +1 -3
  103. package/dist/components/Label.meta.d.ts.map +1 -1
  104. package/dist/components/Link.d.ts +1 -1
  105. package/dist/components/Link.d.ts.map +1 -1
  106. package/dist/components/Link.js +3 -4
  107. package/dist/components/Link.js.map +1 -1
  108. package/dist/components/Link.meta.d.ts +1 -2
  109. package/dist/components/Link.meta.d.ts.map +1 -1
  110. package/dist/components/Link.meta.js +1 -0
  111. package/dist/components/Link.meta.js.map +1 -1
  112. package/dist/components/Menu.meta.d.ts +31 -2
  113. package/dist/components/Menu.meta.d.ts.map +1 -1
  114. package/dist/components/Menu.meta.js +39 -1
  115. package/dist/components/Menu.meta.js.map +1 -1
  116. package/dist/components/Menu.parts.d.ts +22 -32
  117. package/dist/components/Menu.parts.d.ts.map +1 -1
  118. package/dist/components/Menu.parts.js +286 -300
  119. package/dist/components/Menu.parts.js.map +1 -1
  120. package/dist/components/Modal.d.ts +1 -1
  121. package/dist/components/Modal.meta.d.ts +1 -3
  122. package/dist/components/Modal.meta.d.ts.map +1 -1
  123. package/dist/components/Modal.meta.js +1 -1
  124. package/dist/components/Modal.meta.js.map +1 -1
  125. package/dist/components/Modal.parts.d.ts +14 -15
  126. package/dist/components/Modal.parts.d.ts.map +1 -1
  127. package/dist/components/Modal.parts.js +20 -20
  128. package/dist/components/Modal.parts.js.map +1 -1
  129. package/dist/components/OTCInput.js +1 -1
  130. package/dist/components/OTCInput.meta.d.ts +1 -6
  131. package/dist/components/OTCInput.meta.d.ts.map +1 -1
  132. package/dist/components/OTCInput.meta.js +1 -5
  133. package/dist/components/OTCInput.meta.js.map +1 -1
  134. package/dist/components/Pane.d.ts +9 -0
  135. package/dist/components/Pane.d.ts.map +1 -0
  136. package/dist/components/Pane.js +8 -0
  137. package/dist/components/Pane.js.map +1 -0
  138. package/dist/components/Pane.meta.d.ts +20 -0
  139. package/dist/components/Pane.meta.d.ts.map +1 -0
  140. package/dist/components/Pane.meta.js +30 -0
  141. package/dist/components/Pane.meta.js.map +1 -0
  142. package/dist/components/Pane.parts.d.ts +77 -0
  143. package/dist/components/Pane.parts.d.ts.map +1 -0
  144. package/dist/components/Pane.parts.js +412 -0
  145. package/dist/components/Pane.parts.js.map +1 -0
  146. package/dist/components/Radio.meta.d.ts +1 -6
  147. package/dist/components/Radio.meta.d.ts.map +1 -1
  148. package/dist/components/Radio.meta.js +1 -5
  149. package/dist/components/Radio.meta.js.map +1 -1
  150. package/dist/components/Search.js +1 -1
  151. package/dist/components/Search.meta.d.ts +1 -3
  152. package/dist/components/Search.meta.d.ts.map +1 -1
  153. package/dist/components/SegmentedControl.meta.d.ts +2 -3
  154. package/dist/components/SegmentedControl.meta.d.ts.map +1 -1
  155. package/dist/components/SegmentedControl.meta.js +3 -1
  156. package/dist/components/SegmentedControl.meta.js.map +1 -1
  157. package/dist/components/SegmentedControl.parts.d.ts.map +1 -1
  158. package/dist/components/SegmentedControl.parts.js +4 -9
  159. package/dist/components/SegmentedControl.parts.js.map +1 -1
  160. package/dist/components/Status.meta.d.ts +0 -2
  161. package/dist/components/Status.meta.d.ts.map +1 -1
  162. package/dist/components/Stepper.meta.d.ts +1 -2
  163. package/dist/components/Stepper.meta.d.ts.map +1 -1
  164. package/dist/components/Stepper.meta.js +1 -0
  165. package/dist/components/Stepper.meta.js.map +1 -1
  166. package/dist/components/Stepper.parts.d.ts.map +1 -1
  167. package/dist/components/Stepper.parts.js +1 -1
  168. package/dist/components/Stepper.parts.js.map +1 -1
  169. package/dist/components/Switch.meta.d.ts +1 -6
  170. package/dist/components/Switch.meta.d.ts.map +1 -1
  171. package/dist/components/Switch.meta.js +1 -5
  172. package/dist/components/Switch.meta.js.map +1 -1
  173. package/dist/components/TabSet.meta.d.ts +2 -5
  174. package/dist/components/TabSet.meta.d.ts.map +1 -1
  175. package/dist/components/TabSet.meta.js +3 -1
  176. package/dist/components/TabSet.meta.js.map +1 -1
  177. package/dist/components/Tag.meta.d.ts +0 -2
  178. package/dist/components/Tag.meta.d.ts.map +1 -1
  179. package/dist/components/TextArea.meta.d.ts +1 -6
  180. package/dist/components/TextArea.meta.d.ts.map +1 -1
  181. package/dist/components/TextArea.meta.js +1 -5
  182. package/dist/components/TextArea.meta.js.map +1 -1
  183. package/dist/components/ToggleButton.js +2 -2
  184. package/dist/components/ToggleButton.js.map +1 -1
  185. package/dist/components/ToggleButton.meta.d.ts +1 -12
  186. package/dist/components/ToggleButton.meta.d.ts.map +1 -1
  187. package/dist/components/ToggleButton.meta.js +1 -6
  188. package/dist/components/ToggleButton.meta.js.map +1 -1
  189. package/dist/components/Tooltip.d.ts +2 -2
  190. package/dist/components/Tooltip.d.ts.map +1 -1
  191. package/dist/components/Tooltip.js +2 -2
  192. package/dist/components/Tooltip.js.map +1 -1
  193. package/dist/components/Tooltip.meta.d.ts +12 -7
  194. package/dist/components/Tooltip.meta.d.ts.map +1 -1
  195. package/dist/components/Tooltip.meta.js +13 -2
  196. package/dist/components/Tooltip.meta.js.map +1 -1
  197. package/dist/components/Tooltip.parts.d.ts +31 -22
  198. package/dist/components/Tooltip.parts.d.ts.map +1 -1
  199. package/dist/components/Tooltip.parts.js +127 -98
  200. package/dist/components/Tooltip.parts.js.map +1 -1
  201. package/dist/components/base/Addon.meta.d.ts +1 -1
  202. package/dist/components/base/Addon.meta.d.ts.map +1 -1
  203. package/dist/components/base/Addon.meta.js +3 -1
  204. package/dist/components/base/Addon.meta.js.map +1 -1
  205. package/dist/components/base/ButtonOrLink.d.ts +2 -2
  206. package/dist/components/base/ButtonOrLink.d.ts.map +1 -1
  207. package/dist/components/base/ButtonOrLink.parts.d.ts +14 -6
  208. package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
  209. package/dist/components/base/ButtonOrLink.parts.js +54 -65
  210. package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
  211. package/dist/components/base/Checkable.meta.d.ts +1 -2
  212. package/dist/components/base/Checkable.meta.d.ts.map +1 -1
  213. package/dist/components/base/Checkable.parts.d.ts +6 -6
  214. package/dist/components/base/Checkable.parts.d.ts.map +1 -1
  215. package/dist/components/base/Checkable.parts.js +2 -2
  216. package/dist/components/base/Checkable.parts.js.map +1 -1
  217. package/dist/components/base/Field.meta.d.ts +1 -2
  218. package/dist/components/base/Field.meta.d.ts.map +1 -1
  219. package/dist/components/base/Field.parts.d.ts +5 -4
  220. package/dist/components/base/Field.parts.d.ts.map +1 -1
  221. package/dist/components/base/Field.parts.js +1 -1
  222. package/dist/components/base/Field.parts.js.map +1 -1
  223. package/dist/components/base/MaybeButtonOrLink.d.ts +20 -3
  224. package/dist/components/base/MaybeButtonOrLink.d.ts.map +1 -1
  225. package/dist/components/base/MaybeButtonOrLink.js +5 -3
  226. package/dist/components/base/MaybeButtonOrLink.js.map +1 -1
  227. package/dist/components/base/Portal.d.ts +1 -1
  228. package/dist/components/base/Portal.d.ts.map +1 -1
  229. package/dist/components/base/Portal.js +3 -6
  230. package/dist/components/base/Portal.js.map +1 -1
  231. package/dist/components/base/Presence.d.ts +157 -0
  232. package/dist/components/base/Presence.d.ts.map +1 -0
  233. package/dist/components/base/Presence.js +808 -0
  234. package/dist/components/base/Presence.js.map +1 -0
  235. package/dist/components/base/Render.d.ts +21 -6
  236. package/dist/components/base/Render.d.ts.map +1 -1
  237. package/dist/components/base/Render.js +3 -2
  238. package/dist/components/base/Render.js.map +1 -1
  239. package/dist/components/base/Transition.js +2 -2
  240. package/dist/components/base/Transition.meta.d.ts +1 -1
  241. package/dist/components/base/Transition.meta.d.ts.map +1 -1
  242. package/dist/components/base/Transition.meta.js +1 -0
  243. package/dist/components/base/Transition.meta.js.map +1 -1
  244. package/dist/components/base/index.d.ts +2 -2
  245. package/dist/components/base/index.d.ts.map +1 -1
  246. package/dist/components/base/index.js +2 -2
  247. package/dist/components/base/index.js.map +1 -1
  248. package/dist/components/index.d.ts +3 -1
  249. package/dist/components/index.d.ts.map +1 -1
  250. package/dist/components/index.js +3 -1
  251. package/dist/components/index.js.map +1 -1
  252. package/dist/hooks/index.d.ts +1 -0
  253. package/dist/hooks/index.d.ts.map +1 -1
  254. package/dist/hooks/index.js +1 -0
  255. package/dist/hooks/index.js.map +1 -1
  256. package/dist/hooks/useCSSProp.d.ts.map +1 -1
  257. package/dist/hooks/useCSSProp.js +7 -7
  258. package/dist/hooks/useCSSProp.js.map +1 -1
  259. package/dist/hooks/useCSSProps.d.ts +11 -13
  260. package/dist/hooks/useCSSProps.d.ts.map +1 -1
  261. package/dist/hooks/useCSSProps.js +11 -19
  262. package/dist/hooks/useCSSProps.js.map +1 -1
  263. package/dist/hooks/useCSSPropsPolyfill.d.ts +1 -1
  264. package/dist/hooks/useCSSPropsPolyfill.d.ts.map +1 -1
  265. package/dist/hooks/useCSSPropsPolyfill.js +12 -20
  266. package/dist/hooks/useCSSPropsPolyfill.js.map +1 -1
  267. package/dist/hooks/useCSSState.d.ts.map +1 -1
  268. package/dist/hooks/useCSSState.js +7 -3
  269. package/dist/hooks/useCSSState.js.map +1 -1
  270. package/dist/hooks/useControlled.d.ts.map +1 -1
  271. package/dist/hooks/useControlled.js +6 -4
  272. package/dist/hooks/useControlled.js.map +1 -1
  273. package/dist/hooks/useEffectWithRefDeps.d.ts +2 -2
  274. package/dist/hooks/useEffectWithRefDeps.d.ts.map +1 -1
  275. package/dist/hooks/useEffectWithRefDeps.js +1 -1
  276. package/dist/hooks/useEffectWithRefDeps.js.map +1 -1
  277. package/dist/hooks/useFirstRender.d.ts +14 -0
  278. package/dist/hooks/useFirstRender.d.ts.map +1 -0
  279. package/dist/hooks/useFirstRender.js +20 -0
  280. package/dist/hooks/useFirstRender.js.map +1 -0
  281. package/dist/hooks/useGDS.d.ts +1 -1
  282. package/dist/hooks/useGDS.js +1 -1
  283. package/dist/hooks/useGDS.js.map +1 -1
  284. package/dist/hooks/usePrevious.d.ts +6 -4
  285. package/dist/hooks/usePrevious.d.ts.map +1 -1
  286. package/dist/hooks/usePrevious.js +6 -4
  287. package/dist/hooks/usePrevious.js.map +1 -1
  288. package/dist/hooks/useRefWithInit.d.ts +2 -2
  289. package/dist/hooks/useRefWithInit.d.ts.map +1 -1
  290. package/dist/hooks/useRefWithInit.js.map +1 -1
  291. package/dist/hooks/useStyleObserver.d.ts +2 -2
  292. package/dist/hooks/useStyleObserver.d.ts.map +1 -1
  293. package/dist/hooks/useStyleObserver.js +1 -1
  294. package/dist/hooks/useStyleObserver.js.map +1 -1
  295. package/dist/icons/CalendarDynamicIcon.d.ts +8 -5
  296. package/dist/icons/CalendarDynamicIcon.d.ts.map +1 -1
  297. package/dist/icons/CalendarDynamicIcon.js +5 -2
  298. package/dist/icons/CalendarDynamicIcon.js.map +1 -1
  299. package/dist/icons/CopyInteractiveIcon.d.ts +5 -4
  300. package/dist/icons/CopyInteractiveIcon.d.ts.map +1 -1
  301. package/dist/icons/CopyInteractiveIcon.js +2 -2
  302. package/dist/icons/CopyInteractiveIcon.js.map +1 -1
  303. package/dist/icons/SidebarLeftInteractiveIcon.d.ts +4 -3
  304. package/dist/icons/SidebarLeftInteractiveIcon.d.ts.map +1 -1
  305. package/dist/icons/SidebarLeftInteractiveIcon.js +2 -2
  306. package/dist/icons/SidebarLeftInteractiveIcon.js.map +1 -1
  307. package/dist/icons/SidebarRightInteractiveIcon.d.ts +4 -3
  308. package/dist/icons/SidebarRightInteractiveIcon.d.ts.map +1 -1
  309. package/dist/icons/SidebarRightInteractiveIcon.js +2 -2
  310. package/dist/icons/SidebarRightInteractiveIcon.js.map +1 -1
  311. package/dist/tailwind-plugin.d.ts.map +1 -1
  312. package/dist/tailwind-plugin.js +8 -5
  313. package/dist/tailwind-plugin.js.map +1 -1
  314. package/dist/utils/InlineCounter.d.ts +3 -0
  315. package/dist/utils/InlineCounter.d.ts.map +1 -0
  316. package/dist/utils/InlineCounter.js +7 -0
  317. package/dist/utils/InlineCounter.js.map +1 -0
  318. package/dist/utils/RenderCount.d.ts +3 -0
  319. package/dist/utils/RenderCount.d.ts.map +1 -0
  320. package/dist/utils/RenderCount.js +7 -0
  321. package/dist/utils/RenderCount.js.map +1 -0
  322. package/dist/utils/cn.d.ts +3 -1
  323. package/dist/utils/cn.d.ts.map +1 -1
  324. package/dist/utils/cn.js +3 -1
  325. package/dist/utils/cn.js.map +1 -1
  326. package/dist/utils/getCSSPropsAttributes.d.ts +10 -3
  327. package/dist/utils/getCSSPropsAttributes.d.ts.map +1 -1
  328. package/dist/utils/getCSSPropsAttributes.js +4 -5
  329. package/dist/utils/getCSSPropsAttributes.js.map +1 -1
  330. package/dist/utils/index.d.ts +2 -0
  331. package/dist/utils/index.d.ts.map +1 -1
  332. package/dist/utils/index.js +2 -0
  333. package/dist/utils/index.js.map +1 -1
  334. package/dist/utils/splitProps.d.ts +1 -4
  335. package/dist/utils/splitProps.d.ts.map +1 -1
  336. package/dist/utils/splitProps.js +2 -7
  337. package/dist/utils/splitProps.js.map +1 -1
  338. package/dist/utils/trimReactNode.d.ts +10 -8
  339. package/dist/utils/trimReactNode.d.ts.map +1 -1
  340. package/dist/utils/trimReactNode.js +10 -8
  341. package/dist/utils/trimReactNode.js.map +1 -1
  342. package/package.json +21 -21
  343. package/src/GDSContext.ts +16 -0
  344. package/src/GDSProvider.tsx +31 -40
  345. package/src/components/Address.tsx +2 -2
  346. package/src/components/Avatar.tsx +8 -12
  347. package/src/components/Breadcrumbs.meta.ts +3 -1
  348. package/src/components/Breadcrumbs.parts.tsx +16 -28
  349. package/src/components/Button.tsx +114 -104
  350. package/src/components/ButtonGroup.meta.ts +8 -0
  351. package/src/components/ButtonGroup.tsx +1 -5
  352. package/src/components/Card.meta.ts +1 -0
  353. package/src/components/Card.tsx +2 -2
  354. package/src/components/Checkbox.meta.ts +1 -5
  355. package/src/components/Chip.parts.tsx +1 -11
  356. package/src/components/CodeBlock.parts.tsx +75 -50
  357. package/src/components/CodeInline.tsx +3 -3
  358. package/src/components/CopyButton.meta.ts +1 -6
  359. package/src/components/CopyButton.tsx +50 -27
  360. package/src/components/CurrencyInput.meta.ts +1 -5
  361. package/src/components/DescriptionList.parts.tsx +1 -0
  362. package/src/components/Icon.meta.ts +1 -0
  363. package/src/components/Icon.tsx +4 -4
  364. package/src/components/Input.meta.ts +1 -5
  365. package/src/components/Input.tsx +6 -7
  366. package/src/components/Keyboard.tsx +1 -1
  367. package/src/components/Link.meta.ts +1 -0
  368. package/src/components/Link.tsx +4 -5
  369. package/src/components/Menu.meta.ts +39 -1
  370. package/src/components/Menu.parts.tsx +554 -547
  371. package/src/components/Modal.meta.ts +1 -1
  372. package/src/components/Modal.parts.tsx +40 -46
  373. package/src/components/OTCInput.meta.ts +1 -5
  374. package/src/components/OTCInput.tsx +1 -1
  375. package/src/components/Pane.meta.ts +31 -0
  376. package/src/components/Pane.parts.tsx +713 -0
  377. package/src/components/Pane.tsx +17 -0
  378. package/src/components/Radio.meta.ts +1 -5
  379. package/src/components/Search.tsx +1 -1
  380. package/src/components/SegmentedControl.meta.ts +3 -1
  381. package/src/components/SegmentedControl.parts.tsx +7 -10
  382. package/src/components/Stepper.meta.ts +1 -0
  383. package/src/components/Stepper.parts.tsx +3 -1
  384. package/src/components/Switch.meta.ts +1 -5
  385. package/src/components/TabSet.meta.ts +3 -1
  386. package/src/components/TextArea.meta.ts +1 -5
  387. package/src/components/ToggleButton.meta.ts +1 -6
  388. package/src/components/ToggleButton.tsx +1 -1
  389. package/src/components/Tooltip.meta.ts +13 -2
  390. package/src/components/Tooltip.parts.tsx +241 -169
  391. package/src/components/Tooltip.tsx +2 -2
  392. package/src/components/base/Addon.meta.ts +3 -1
  393. package/src/components/base/ButtonOrLink.parts.tsx +118 -97
  394. package/src/components/base/ButtonOrLink.tsx +1 -0
  395. package/src/components/base/Checkable.parts.tsx +6 -13
  396. package/src/components/base/Field.parts.tsx +5 -5
  397. package/src/components/base/MaybeButtonOrLink.tsx +26 -5
  398. package/src/components/base/Portal.tsx +5 -7
  399. package/src/components/base/Presence.tsx +1375 -0
  400. package/src/components/base/Render.tsx +37 -15
  401. package/src/components/base/Transition.meta.ts +1 -0
  402. package/src/components/base/Transition.tsx +2 -2
  403. package/src/components/base/index.ts +9 -2
  404. package/src/components/index.ts +11 -2
  405. package/src/hooks/index.ts +1 -0
  406. package/src/hooks/useCSSProp.ts +7 -9
  407. package/src/hooks/useCSSProps.ts +13 -22
  408. package/src/hooks/useCSSPropsPolyfill.ts +15 -23
  409. package/src/hooks/useCSSState.ts +11 -6
  410. package/src/hooks/useControlled.ts +16 -8
  411. package/src/hooks/useEffectWithRefDeps.ts +2 -2
  412. package/src/hooks/useFirstRender.ts +36 -0
  413. package/src/hooks/useGDS.ts +1 -1
  414. package/src/hooks/usePrevious.ts +6 -4
  415. package/src/hooks/useRefWithInit.ts +2 -2
  416. package/src/hooks/useStyleObserver.ts +6 -2
  417. package/src/icons/CalendarDynamicIcon.tsx +16 -6
  418. package/src/icons/CopyInteractiveIcon.tsx +10 -5
  419. package/src/icons/SidebarLeftInteractiveIcon.tsx +9 -5
  420. package/src/icons/SidebarRightInteractiveIcon.tsx +9 -5
  421. package/src/tailwind-plugin.ts +8 -5
  422. package/src/utils/InlineCounter.tsx +17 -0
  423. package/src/utils/RenderCount.tsx +7 -0
  424. package/src/utils/cn.ts +3 -1
  425. package/src/utils/getCSSPropsAttributes.ts +13 -8
  426. package/src/utils/index.ts +2 -0
  427. package/src/utils/splitProps.ts +9 -9
  428. package/src/utils/trimReactNode.tsx +10 -8
  429. package/dist/components/base/ButtonOrLink.meta.d.ts +0 -2
  430. package/dist/components/base/ButtonOrLink.meta.d.ts.map +0 -1
  431. package/dist/components/base/ButtonOrLink.meta.js +0 -6
  432. package/dist/components/base/ButtonOrLink.meta.js.map +0 -1
  433. package/src/components/base/ButtonOrLink.meta.ts +0 -6
@@ -5,32 +5,33 @@ import {
5
5
  useCallback,
6
6
  useContext,
7
7
  useEffect,
8
- useMemo,
9
8
  useRef,
10
9
  useState,
11
10
  type ComponentProps,
12
11
  type ReactElement,
13
12
  type ReactNode,
13
+ type Ref,
14
14
  } from 'react'
15
- import { Tooltip } from '@base-ui/react/tooltip'
15
+ import { Tooltip, type TooltipRoot as BaseUITooltipRoot } from '@base-ui/react/tooltip'
16
+ import { useMergedRefs } from '@base-ui/utils/useMergedRefs'
17
+ import type { SetReturnType } from 'type-fest'
16
18
 
17
19
  import { twToPx, type GDSComponentProps } from '@graphprotocol/gds-css'
18
20
 
19
21
  import { useControlled, useCSSPropsPolyfill, useGDS } from '../hooks/index.ts'
20
- import { cn, getCSSPropsAttributes } from '../utils/index.ts'
22
+ import { cn, getCSSPropsAttributes, getReactNodeKey } from '../utils/index.ts'
21
23
  import { Portal } from './base/Portal.tsx'
22
- import { Render, type RenderProps } from './base/Render.tsx'
24
+ import { Render, type RenderProp } from './base/Render.tsx'
23
25
  import { TooltipMeta } from './Tooltip.meta.ts'
24
26
 
25
- type DefinedReactNode = Exclude<ReactNode, undefined>
27
+ type Content = Exclude<ReactNode, undefined>
28
+ type SetDeferredContentFunction = (content: Content, priority?: number) => void
29
+ type OpenChangeReason = BaseUITooltipRoot.ChangeEventDetails['reason']
26
30
 
27
31
  const TooltipContext = createContext<{
28
- enabled: boolean
29
- registerNestedSetOpen: (nestedSetOpen: (newOpen: boolean) => void) => void
32
+ collectContent: SetDeferredContentFunction
33
+ disableDescendants: boolean
30
34
  } | null>(null)
31
- const TooltipCollectorContext = createContext<
32
- ((content: DefinedReactNode, priority?: number) => void) | null
33
- >(null)
34
35
 
35
36
  const OPEN_DELAY = 300
36
37
 
@@ -40,237 +41,308 @@ export interface TooltipProps
40
41
  * The content to display in the tooltip. If not provided, defaults to any content collected from
41
42
  * `Tooltip.Content` or `Tooltip.Collector` descendants.
42
43
  */
43
- content?: ReactNode | undefined
44
+ content?: Content | undefined
44
45
  /** Force the tooltip to be open or closed. */
45
46
  open?: boolean | undefined
46
47
  /** Called when the tooltip is opened or closed. */
47
- onOpenChange?: ((open: boolean) => void) | undefined
48
+ onOpenChange?: ((open: boolean, reason: OpenChangeReason) => void) | undefined
48
49
  /** The element that triggers the tooltip. */
49
- children: ReactElement<Record<string, unknown>>
50
+ children: ReactElement
51
+ /**
52
+ * Props to merge with the trigger element. Set to `'forward'` to have the trigger automatically
53
+ * receive applicable props passed to the `Tooltip` itself (excluding tooltip-specific props like
54
+ * `content`, `side` and other positioning props, `open`, `disabled`, etc.).
55
+ */
56
+ triggerProps?: ComponentProps<'button'> | 'forward' | undefined
50
57
  }
51
58
 
52
59
  export function TooltipRoot({
53
60
  ref: passedRef,
54
61
  content: passedContent,
55
- position,
62
+ side,
56
63
  gap,
57
64
  align,
65
+ alignOffset,
58
66
  open: controlledOpen,
59
67
  onOpenChange,
60
68
  disabled,
69
+ overrideDescendants,
61
70
  className,
62
71
  style,
63
72
  children,
64
- ...props
73
+ triggerProps: passedTriggerProps,
74
+ ...passedProps
65
75
  }: TooltipProps) {
66
76
  const { dirProps } = useGDS()
67
77
 
78
+ const ancestorTooltip = useContext(TooltipContext)
79
+
80
+ const popupProps = passedTriggerProps !== 'forward' ? passedProps : {}
81
+ const popupRef = passedTriggerProps !== 'forward' ? passedRef : undefined
82
+
83
+ const triggerProps = passedTriggerProps === 'forward' ? passedProps : passedTriggerProps
84
+ const triggerDisabled =
85
+ triggerProps && 'disabled' in triggerProps ? triggerProps.disabled === true : false
86
+
68
87
  const [cssPropsPolyfillRef, cssPropsPolyfillAttributes, cssProps] = useCSSPropsPolyfill(
69
88
  TooltipMeta,
70
- { position, align, disabled },
71
- { returnPropValues: { position, gap, align, disabled } },
89
+ { side, align, disabled, overrideDescendants },
90
+ { returnPropValues: { side, gap, align, alignOffset, disabled, overrideDescendants } },
72
91
  )
73
92
  const cssPropsAttributes = getCSSPropsAttributes(
74
93
  TooltipMeta,
75
- { position, gap, align, disabled },
94
+ { side, gap, align, alignOffset, disabled, overrideDescendants },
76
95
  style,
77
96
  )
78
97
 
79
- const tooltipAncestor = useContext(TooltipContext)
80
- const hasEnabledTooltipAncestor = tooltipAncestor?.enabled ?? false
81
-
82
- const { onCollect, collectedContent } = useCollectedTooltip()
98
+ const [setCollectedContent, collectedContent] = useDeferredContent()
83
99
  const content = passedContent !== undefined ? passedContent : collectedContent
84
100
 
85
- const enabled = !cssProps.disabled && !hasEnabledTooltipAncestor && Boolean(content)
86
- const [open, ownSetOpen] = useControlled(controlledOpen, false, onOpenChange)
87
- const nestedSetOpen = useRef<(newOpen: boolean) => void>(null)
88
- const registerNestedSetOpen = useCallback((newNestedSetOpen: (newOpen: boolean) => void) => {
89
- nestedSetOpen.current = newNestedSetOpen
90
- }, [])
91
- const setOpen = (newOpen: boolean) => {
92
- ownSetOpen(newOpen)
101
+ /**
102
+ * Propagate collected content up till it reaches `Tooltip.Collector`'s closest non-disabled
103
+ * tooltip ancestor with no passed content.
104
+ */
105
+ const collectContent: SetDeferredContentFunction = (newCollectedContent, priority) => {
106
+ if (passedContent === undefined || cssProps.disabled) {
107
+ void setCollectedContent(newCollectedContent, priority)
108
+ ancestorTooltip?.collectContent(newCollectedContent, priority)
109
+ }
110
+ }
111
+
112
+ const disabledByAncestor = ancestorTooltip?.disableDescendants ?? false
113
+ const disableDescendants =
114
+ disabledByAncestor ||
115
+ (content !== undefined && !cssProps.disabled && cssProps.overrideDescendants)
116
+ const enabled =
117
+ Boolean(content) &&
118
+ !cssProps.disabled &&
119
+ (!triggerDisabled || controlledOpen) &&
120
+ !disabledByAncestor
121
+
122
+ const triggerRef = useRef<HTMLButtonElement>(null)
123
+ const triggerPassedRef = useMergedRefs(
93
124
  /**
94
- * Notify nested (overridden) tooltips of the open state change. This ensures, for example, that
95
- * moving the cursor away from a `CopyButton` while its "Copied!" tooltip is shown closes the
96
- * inner tooltip as well (which doesn't happen automatically because nested tooltips are
97
- * disabled to prevent a lot of weirdness).
125
+ * Conditionally setting the ref to force the tooltip to refresh its position when `enabled`
126
+ * changes, preventing it from moving to the viewport's top-left corner in some cases (e.g. when
127
+ * `CopyButton` returns to its default tooltip).
98
128
  */
99
- nestedSetOpen.current?.(newOpen)
100
- }
101
- tooltipAncestor?.registerNestedSetOpen(setOpen)
129
+ enabled ? triggerRef : undefined,
130
+ (passedTriggerProps === 'forward' ? passedRef : passedTriggerProps?.ref) as
131
+ | Ref<HTMLButtonElement>
132
+ | undefined,
133
+ )
102
134
 
103
- if (cssProps.disabled && open) {
104
- setOpen(false)
105
- }
135
+ const [open, privateSetOpen] = useControlled(controlledOpen, false, onOpenChange)
136
+ const justOpenedRef = useRef(false)
137
+ const setOpen = useCallback(
138
+ (newOpen: boolean, reason: OpenChangeReason) => {
139
+ privateSetOpen(newOpen, reason)
140
+ if (newOpen) {
141
+ justOpenedRef.current = true
142
+ window.setTimeout(() => {
143
+ justOpenedRef.current = false
144
+ }, 0)
145
+ }
146
+ },
147
+ [privateSetOpen],
148
+ )
106
149
 
107
150
  const openTimeoutRef = useRef<number>(undefined)
108
- const clearOpenTimeout = () => {
151
+ const clearOpenTimeout = useCallback(() => {
109
152
  if (!openTimeoutRef.current) return
110
153
  window.clearTimeout(openTimeoutRef.current)
111
154
  openTimeoutRef.current = undefined
112
- }
113
- if (!enabled) {
114
- clearOpenTimeout()
115
- }
155
+ }, [])
116
156
 
117
- const tooltipContextValue = useMemo(
118
- () => ({
119
- enabled,
120
- registerNestedSetOpen,
121
- }),
122
- [enabled, registerNestedSetOpen],
123
- )
157
+ useEffect(() => {
158
+ if (!enabled) {
159
+ clearOpenTimeout()
160
+ if (open) setOpen(false, 'disabled')
161
+ }
162
+ }, [enabled, open, setOpen, clearOpenTimeout])
124
163
 
125
164
  return (
126
- <TooltipContext.Provider value={tooltipContextValue}>
127
- <TooltipCollector onCollect={onCollect}>
128
- <Tooltip.Root
129
- disabled={!enabled}
130
- disableHoverablePopup
131
- open={open}
132
- onOpenChange={(newOpen, eventDetails) => {
133
- clearOpenTimeout()
134
- if (!enabled) return
135
- // Disable Base UI's default behavior of closing the tooltip when pressing the trigger
136
- if (!newOpen && eventDetails.reason === 'trigger-press') {
137
- // Ensure clicking on the trigger before the tooltip has a chance to open doesn't prevent it from opening
138
- openTimeoutRef.current = window.setTimeout(() => setOpen(true), OPEN_DELAY)
139
- return
165
+ <TooltipContext.Provider
166
+ value={{
167
+ collectContent,
168
+ disableDescendants,
169
+ }}
170
+ >
171
+ <Tooltip.Root
172
+ disabled={!enabled}
173
+ disableHoverablePopup
174
+ open={open}
175
+ onOpenChange={(newOpen, eventDetails) => {
176
+ clearOpenTimeout()
177
+ if (!enabled) return
178
+ // Disable Base UI's default behavior of closing the tooltip when pressing the trigger
179
+ if (!newOpen && eventDetails.reason === 'trigger-press') {
180
+ // Ensure clicking on the trigger before the tooltip has a chance to open doesn't prevent it from opening
181
+ openTimeoutRef.current = window.setTimeout(
182
+ () => setOpen(true, eventDetails.reason),
183
+ OPEN_DELAY,
184
+ )
185
+ return
186
+ }
187
+ // Make `overrideDescendants={false}` work as expected (see the `NestedSimultaneous` story)
188
+ if (
189
+ !newOpen &&
190
+ eventDetails.reason === 'none' &&
191
+ (justOpenedRef.current ||
192
+ (!cssProps.overrideDescendants && triggerRef.current?.matches(':hover')))
193
+ ) {
194
+ return
195
+ }
196
+ setOpen(newOpen, eventDetails.reason)
197
+ }}
198
+ >
199
+ <Tooltip.Trigger
200
+ delay={OPEN_DELAY}
201
+ closeDelay={100}
202
+ {...(triggerProps as ComponentProps<typeof Tooltip.Trigger>)}
203
+ ref={triggerPassedRef}
204
+ disabled={undefined} // Not passed through for some reason, so we set it in `render` and override it to `undefined` here just in case
205
+ render={(renderProps) => (
206
+ <Render
207
+ render={children}
208
+ {...renderProps}
209
+ disabled={triggerDisabled}
210
+ onClick={triggerProps?.onClick} // Prevent the tooltip re-opening after clicking e.g. a `Menu` trigger
211
+ />
212
+ )}
213
+ />
214
+ <Tooltip.Portal>
215
+ <Tooltip.Positioner
216
+ key={getReactNodeKey(content)} // Refresh the tooltip's position when the content changes (see `WithDynamicContent` story)
217
+ side={
218
+ cssProps.side === 'start'
219
+ ? 'inline-start'
220
+ : cssProps.side === 'end'
221
+ ? 'inline-end'
222
+ : cssProps.side
140
223
  }
141
- setOpen(newOpen)
142
- }}
143
- >
144
- <Tooltip.Trigger
145
- delay={OPEN_DELAY}
146
- closeDelay={100}
147
- render={({ onClick: _onClick, ...renderProps }) => (
148
- <Render {...(enabled ? renderProps : {})} render={children} />
149
- )}
150
- />
151
- <Tooltip.Portal>
152
- <Tooltip.Positioner
153
- // The `key` is needed for the `data-[starting-style]`s to refresh properly when these props change in CSS
154
- key={`${cssProps.position}-${cssProps.gap}-${cssProps.align}`}
155
- side={cssProps.position}
156
- sideOffset={twToPx(cssProps.gap)}
157
- align={cssProps.align}
158
- {...dirProps}
159
- >
160
- <Tooltip.Popup
161
- ref={passedRef}
162
- className={cn(
163
- `gds-tooltip root-block u:max-w-(--available-width) u:rounded-4 u:bg-default u:px-2 u:py-1 u:text-12 u:text-default u:transition
164
- i:origin-(--transform-origin)
165
- i:data-ending-style:opacity-0
166
- i:data-starting-style:opacity-0
167
- i:data-starting-style:data-[side=bottom]:-translate-y-1
168
- i:data-starting-style:data-[side=inline-end]:-translate-x-1
169
- i:data-starting-style:data-[side=inline-start]:translate-x-1
170
- i:data-starting-style:data-[side=top]:translate-y-1
171
- i:rtl:data-starting-style:data-[side=inline-end]:translate-x-1
172
- i:rtl:data-starting-style:data-[side=inline-start]:-translate-x-1`,
173
- className,
174
- )}
175
- {...cssPropsAttributes}
176
- {...cssPropsPolyfillAttributes}
177
- {...props}
178
- >
179
- {content}
180
- </Tooltip.Popup>
181
- </Tooltip.Positioner>
182
- </Tooltip.Portal>
183
- {/* Ensure changes to CSS props are detected even when the tooltip is not mounted */}
184
- <Portal>
185
- <span
186
- ref={cssPropsPolyfillRef}
187
- className={cn('gds-tooltip i:invisible', className)}
224
+ sideOffset={twToPx(cssProps.gap)}
225
+ align={cssProps.align}
226
+ alignOffset={twToPx(cssProps.alignOffset)}
227
+ collisionPadding={8}
228
+ disableAnchorTracking // Prevent the tooltip from moving to the viewport's top-left corner when the trigger is unmounted
229
+ {...dirProps}
230
+ >
231
+ <Tooltip.Popup
232
+ ref={popupRef}
233
+ className={cn(
234
+ `gds-tooltip root-block u:max-w-(--available-width) u:rounded-4 u:bg-default u:px-2 u:py-1 u:text-12 u:transition
235
+ i:origin-(--transform-origin)
236
+ i:data-ending-style:opacity-0
237
+ i:data-starting-style:opacity-0
238
+ i:data-starting-style:data-[side=bottom]:-translate-y-1
239
+ i:data-starting-style:data-[side=inline-end]:-translate-x-1
240
+ i:data-starting-style:data-[side=inline-start]:translate-x-1
241
+ i:data-starting-style:data-[side=top]:translate-y-1
242
+ i:rtl:data-starting-style:data-[side=end]:translate-x-1
243
+ i:rtl:data-starting-style:data-[side=start]:-translate-x-1`,
244
+ className,
245
+ )}
188
246
  {...cssPropsAttributes}
189
247
  {...cssPropsPolyfillAttributes}
190
- {...props}
191
- />
192
- </Portal>
193
- </Tooltip.Root>
194
- </TooltipCollector>
248
+ {...popupProps}
249
+ >
250
+ {content}
251
+ </Tooltip.Popup>
252
+ </Tooltip.Positioner>
253
+ </Tooltip.Portal>
254
+ {/* Ensure changes to CSS props are detected even when the tooltip is not mounted */}
255
+ <Portal>
256
+ <span
257
+ ref={cssPropsPolyfillRef}
258
+ className={cn('gds-tooltip i:invisible', className)}
259
+ {...cssPropsAttributes}
260
+ {...cssPropsPolyfillAttributes}
261
+ {...popupProps}
262
+ />
263
+ </Portal>
264
+ </Tooltip.Root>
195
265
  </TooltipContext.Provider>
196
266
  )
197
267
  }
198
268
 
199
- export interface TooltipCollectorProps {
200
- /** Callback when a tooltip is collected from a child component. */
201
- onCollect?: ((content: DefinedReactNode) => void) | undefined
202
- children: ReactNode
203
- }
204
-
205
- export function TooltipCollector({ onCollect, children }: TooltipCollectorProps) {
206
- return (
207
- <TooltipCollectorContext.Provider value={onCollect ?? null}>
208
- {children}
209
- </TooltipCollectorContext.Provider>
210
- )
211
- }
212
-
213
- /** Hook for components to send tooltip content up to a collector. */
214
- export function useCollectTooltip() {
215
- return useContext(TooltipCollectorContext)
216
- }
269
+ function useDeferredContent() {
270
+ const [content, setContent] = useState<Content | undefined>(undefined)
271
+ const pendingContentRef = useRef<Content | undefined>(undefined)
272
+ const pendingPriorityRef = useRef<number | undefined>(undefined)
217
273
 
218
- /** Hook for components to collect tooltip content from children. */
219
- export function useCollectedTooltip() {
220
- const [collectedContent, setCollectedContent] = useState<DefinedReactNode>(null)
221
- const pendingContent = useRef<DefinedReactNode>(null)
222
- const pendingPriority = useRef<number>(0)
223
-
224
- // Collect tooltip during render phase (store in ref to avoid state update during render)
225
- const onCollect = (content: DefinedReactNode, priority = 0) => {
226
- // Only update if this content has higher priority than what we've collected so far
227
- if (priority >= pendingPriority.current) {
228
- pendingContent.current = content
229
- pendingPriority.current = priority
274
+ // Store the content in a ref to avoid updating the state during render
275
+ const setDeferredContent: SetReturnType<SetDeferredContentFunction, Content> = (
276
+ newContent: Content,
277
+ priority = 0,
278
+ ) => {
279
+ // If we've already stored content this render, only replace it if the new content has higher priority
280
+ if (
281
+ pendingContentRef.current === undefined ||
282
+ priority >= (pendingPriorityRef.current ?? -Infinity)
283
+ ) {
284
+ pendingContentRef.current = newContent
285
+ pendingPriorityRef.current = priority
230
286
  }
287
+ return pendingContentRef.current
231
288
  }
232
289
 
233
- // Commit the collected tooltip after render
234
- // oxlint-disable-next-line react-hooks/exhaustive-deps -- Must run after every render to sync collected tooltips
290
+ // Commit the stored content after render
291
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- Must run after every render to sync
235
292
  useEffect(() => {
236
- if (collectedContent !== pendingContent.current) {
237
- setCollectedContent(pendingContent.current)
293
+ if (getReactNodeKey(content) !== getReactNodeKey(pendingContentRef.current)) {
294
+ setContent(pendingContentRef.current)
238
295
  }
239
296
  // Reset for next render
240
- pendingContent.current = null
241
- pendingPriority.current = 0
297
+ pendingContentRef.current = undefined
298
+ pendingPriorityRef.current = undefined
242
299
  })
243
300
 
244
- return {
245
- onCollect,
246
- collectedContent,
247
- }
301
+ return [setDeferredContent, content] as const
248
302
  }
249
303
 
250
304
  export interface TooltipContentProps {
251
- render?: RenderProps['render'] | undefined
252
305
  children: ReactNode
306
+ priority?: number | undefined
307
+ render?: RenderProp | undefined
253
308
  }
254
309
 
255
310
  /**
256
311
  * Wrap any text or `ReactNode` with this component to use it as the default `content` of the
257
- * nearest `Tooltip`, in addition to rendering it inline. It is meant to be wrapped in a `sr-only`
312
+ * closest `Tooltip`, in addition to rendering it inline. It is meant to be wrapped in a `sr-only`
258
313
  * element, so that the content rendered inline is visually hidden but accessible to screen readers,
259
314
  * unlike the content rendered in the tooltip itself, which is hidden from the accessibility tree
260
315
  * since most tooltips are decorative. This allows a tooltip to be non-decorative, in the rare case
261
316
  * where the information it provides is not otherwise available to screen readers (i.e. different
262
317
  * from the trigger's accessible name).
263
318
  */
264
- export function TooltipContent({ render, children }: TooltipContentProps) {
265
- const collectTooltip = useCollectTooltip()
319
+ export function TooltipContent({ children, priority, render }: TooltipContentProps) {
320
+ const ancestorTooltip = useContext(TooltipContext)
266
321
 
267
- if (collectTooltip) {
268
- collectTooltip(children || null, 100)
269
- }
322
+ ancestorTooltip?.collectContent(children || null, priority)
270
323
 
271
- if (render) {
272
- return <Render render={render}>{children}</Render>
273
- }
324
+ return render ? <Render render={render}>{children}</Render> : children
325
+ }
326
+ TooltipContent.displayName = 'Tooltip.Content'
327
+
328
+ const TooltipCollectorContext = createContext<SetDeferredContentFunction | null>(null)
329
+
330
+ export interface TooltipCollectorProps {
331
+ children: ReactNode
332
+ }
274
333
 
275
- return children
334
+ export function TooltipCollector({ children }: TooltipCollectorProps) {
335
+ const ancestorTooltip = useContext(TooltipContext)
336
+
337
+ return (
338
+ <TooltipCollectorContext.Provider value={ancestorTooltip?.collectContent ?? null}>
339
+ {children}
340
+ </TooltipCollectorContext.Provider>
341
+ )
342
+ }
343
+ TooltipCollector.displayName = 'Tooltip.Collector'
344
+
345
+ /** Hook for components to send tooltip content up to a collector. */
346
+ export function useTooltipCollector() {
347
+ return useContext(TooltipCollectorContext)
276
348
  }
@@ -1,10 +1,10 @@
1
1
  import { TooltipCollector, TooltipContent, TooltipRoot } from './Tooltip.parts.tsx'
2
2
 
3
3
  export const Tooltip = Object.assign(TooltipRoot, {
4
- Collector: TooltipCollector,
5
4
  Content: TooltipContent,
5
+ Collector: TooltipCollector,
6
6
  })
7
7
 
8
- export { useCollectTooltip, useCollectedTooltip } from './Tooltip.parts.tsx'
8
+ export { useTooltipCollector } from './Tooltip.parts.tsx'
9
9
 
10
10
  export type { TooltipProps, TooltipCollectorProps, TooltipContentProps } from './Tooltip.parts.tsx'
@@ -1,3 +1,5 @@
1
1
  import { createComponent } from '@graphprotocol/gds-css'
2
2
 
3
- export const AddonMeta = createComponent('Addon')
3
+ export const AddonMeta = createComponent('Addon', {
4
+ isolate: false,
5
+ })