@graphprotocol/gds-react 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/dist/GDSProvider.d.ts +12 -10
  2. package/dist/GDSProvider.d.ts.map +1 -1
  3. package/dist/GDSProvider.js +10 -8
  4. package/dist/GDSProvider.js.map +1 -1
  5. package/dist/components/Address.js +2 -2
  6. package/dist/components/Address.meta.d.ts +1 -13
  7. package/dist/components/Address.meta.d.ts.map +1 -1
  8. package/dist/components/Avatar.d.ts.map +1 -1
  9. package/dist/components/Avatar.js +2 -10
  10. package/dist/components/Avatar.js.map +1 -1
  11. package/dist/components/Avatar.meta.d.ts +0 -2
  12. package/dist/components/Avatar.meta.d.ts.map +1 -1
  13. package/dist/components/AvatarGroup.meta.d.ts +8 -2
  14. package/dist/components/AvatarGroup.meta.d.ts.map +1 -1
  15. package/dist/components/Breadcrumbs.meta.d.ts +2 -3
  16. package/dist/components/Breadcrumbs.meta.d.ts.map +1 -1
  17. package/dist/components/Breadcrumbs.meta.js +3 -1
  18. package/dist/components/Breadcrumbs.meta.js.map +1 -1
  19. package/dist/components/Breadcrumbs.parts.d.ts.map +1 -1
  20. package/dist/components/Breadcrumbs.parts.js +13 -21
  21. package/dist/components/Breadcrumbs.parts.js.map +1 -1
  22. package/dist/components/Button.d.ts.map +1 -1
  23. package/dist/components/Button.js +10 -9
  24. package/dist/components/Button.js.map +1 -1
  25. package/dist/components/Button.meta.d.ts +1 -4
  26. package/dist/components/Button.meta.d.ts.map +1 -1
  27. package/dist/components/ButtonGroup.d.ts.map +1 -1
  28. package/dist/components/ButtonGroup.js +1 -5
  29. package/dist/components/ButtonGroup.js.map +1 -1
  30. package/dist/components/ButtonGroup.meta.d.ts +1 -5
  31. package/dist/components/ButtonGroup.meta.d.ts.map +1 -1
  32. package/dist/components/ButtonGroup.meta.js +8 -0
  33. package/dist/components/ButtonGroup.meta.js.map +1 -1
  34. package/dist/components/Card.meta.d.ts +1 -2
  35. package/dist/components/Card.meta.d.ts.map +1 -1
  36. package/dist/components/Card.meta.js +1 -0
  37. package/dist/components/Card.meta.js.map +1 -1
  38. package/dist/components/Checkbox.meta.d.ts +1 -6
  39. package/dist/components/Checkbox.meta.d.ts.map +1 -1
  40. package/dist/components/Checkbox.meta.js +1 -5
  41. package/dist/components/Checkbox.meta.js.map +1 -1
  42. package/dist/components/Chip.meta.d.ts +2 -4
  43. package/dist/components/Chip.meta.d.ts.map +1 -1
  44. package/dist/components/Chip.parts.d.ts.map +1 -1
  45. package/dist/components/Chip.parts.js +1 -9
  46. package/dist/components/Chip.parts.js.map +1 -1
  47. package/dist/components/Cluster.meta.d.ts +8 -2
  48. package/dist/components/Cluster.meta.d.ts.map +1 -1
  49. package/dist/components/CodeBlock.d.ts +1 -1
  50. package/dist/components/CodeBlock.meta.d.ts +2 -4
  51. package/dist/components/CodeBlock.meta.d.ts.map +1 -1
  52. package/dist/components/CodeBlock.parts.d.ts +6 -7
  53. package/dist/components/CodeBlock.parts.d.ts.map +1 -1
  54. package/dist/components/CodeBlock.parts.js +28 -10
  55. package/dist/components/CodeBlock.parts.js.map +1 -1
  56. package/dist/components/CodeInline.js +3 -3
  57. package/dist/components/CodeInline.meta.d.ts +1 -1
  58. package/dist/components/CodeInline.meta.d.ts.map +1 -1
  59. package/dist/components/CopyButton.d.ts.map +1 -1
  60. package/dist/components/CopyButton.js +2 -4
  61. package/dist/components/CopyButton.js.map +1 -1
  62. package/dist/components/CopyButton.meta.d.ts +1 -12
  63. package/dist/components/CopyButton.meta.d.ts.map +1 -1
  64. package/dist/components/CopyButton.meta.js +1 -6
  65. package/dist/components/CopyButton.meta.js.map +1 -1
  66. package/dist/components/CurrencyInput.meta.d.ts +1 -6
  67. package/dist/components/CurrencyInput.meta.d.ts.map +1 -1
  68. package/dist/components/CurrencyInput.meta.js +1 -5
  69. package/dist/components/CurrencyInput.meta.js.map +1 -1
  70. package/dist/components/DescriptionList.meta.d.ts +2 -5
  71. package/dist/components/DescriptionList.meta.d.ts.map +1 -1
  72. package/dist/components/DescriptionList.parts.d.ts +3 -0
  73. package/dist/components/DescriptionList.parts.d.ts.map +1 -1
  74. package/dist/components/DescriptionList.parts.js +1 -0
  75. package/dist/components/DescriptionList.parts.js.map +1 -1
  76. package/dist/components/Divider.meta.d.ts +1 -3
  77. package/dist/components/Divider.meta.d.ts.map +1 -1
  78. package/dist/components/Icon.js +4 -4
  79. package/dist/components/Icon.js.map +1 -1
  80. package/dist/components/Icon.meta.d.ts +0 -2
  81. package/dist/components/Icon.meta.d.ts.map +1 -1
  82. package/dist/components/Icon.meta.js +1 -0
  83. package/dist/components/Icon.meta.js.map +1 -1
  84. package/dist/components/Input.d.ts +5 -4
  85. package/dist/components/Input.d.ts.map +1 -1
  86. package/dist/components/Input.js +1 -0
  87. package/dist/components/Input.js.map +1 -1
  88. package/dist/components/Input.meta.d.ts +1 -6
  89. package/dist/components/Input.meta.d.ts.map +1 -1
  90. package/dist/components/Input.meta.js +1 -5
  91. package/dist/components/Input.meta.js.map +1 -1
  92. package/dist/components/Keyboard.js +1 -1
  93. package/dist/components/Keyboard.meta.d.ts +0 -1
  94. package/dist/components/Keyboard.meta.d.ts.map +1 -1
  95. package/dist/components/Label.meta.d.ts +1 -3
  96. package/dist/components/Label.meta.d.ts.map +1 -1
  97. package/dist/components/Link.d.ts +1 -1
  98. package/dist/components/Link.d.ts.map +1 -1
  99. package/dist/components/Link.js +1 -2
  100. package/dist/components/Link.js.map +1 -1
  101. package/dist/components/Link.meta.d.ts +1 -2
  102. package/dist/components/Link.meta.d.ts.map +1 -1
  103. package/dist/components/Link.meta.js +1 -0
  104. package/dist/components/Link.meta.js.map +1 -1
  105. package/dist/components/Menu.meta.d.ts +31 -2
  106. package/dist/components/Menu.meta.d.ts.map +1 -1
  107. package/dist/components/Menu.meta.js +39 -1
  108. package/dist/components/Menu.meta.js.map +1 -1
  109. package/dist/components/Menu.parts.d.ts +23 -32
  110. package/dist/components/Menu.parts.d.ts.map +1 -1
  111. package/dist/components/Menu.parts.js +284 -303
  112. package/dist/components/Menu.parts.js.map +1 -1
  113. package/dist/components/Modal.d.ts +1 -1
  114. package/dist/components/Modal.meta.d.ts +1 -3
  115. package/dist/components/Modal.meta.d.ts.map +1 -1
  116. package/dist/components/Modal.meta.js +1 -1
  117. package/dist/components/Modal.meta.js.map +1 -1
  118. package/dist/components/Modal.parts.d.ts +14 -15
  119. package/dist/components/Modal.parts.d.ts.map +1 -1
  120. package/dist/components/Modal.parts.js +36 -32
  121. package/dist/components/Modal.parts.js.map +1 -1
  122. package/dist/components/OTCInput.js +1 -1
  123. package/dist/components/OTCInput.meta.d.ts +1 -6
  124. package/dist/components/OTCInput.meta.d.ts.map +1 -1
  125. package/dist/components/OTCInput.meta.js +1 -5
  126. package/dist/components/OTCInput.meta.js.map +1 -1
  127. package/dist/components/Radio.meta.d.ts +1 -6
  128. package/dist/components/Radio.meta.d.ts.map +1 -1
  129. package/dist/components/Radio.meta.js +1 -5
  130. package/dist/components/Radio.meta.js.map +1 -1
  131. package/dist/components/Search.meta.d.ts +1 -3
  132. package/dist/components/Search.meta.d.ts.map +1 -1
  133. package/dist/components/SegmentedControl.meta.d.ts +2 -3
  134. package/dist/components/SegmentedControl.meta.d.ts.map +1 -1
  135. package/dist/components/SegmentedControl.meta.js +3 -1
  136. package/dist/components/SegmentedControl.meta.js.map +1 -1
  137. package/dist/components/SegmentedControl.parts.d.ts.map +1 -1
  138. package/dist/components/SegmentedControl.parts.js +4 -9
  139. package/dist/components/SegmentedControl.parts.js.map +1 -1
  140. package/dist/components/Status.meta.d.ts +0 -2
  141. package/dist/components/Status.meta.d.ts.map +1 -1
  142. package/dist/components/Stepper.meta.d.ts +1 -2
  143. package/dist/components/Stepper.meta.d.ts.map +1 -1
  144. package/dist/components/Stepper.meta.js +1 -0
  145. package/dist/components/Stepper.meta.js.map +1 -1
  146. package/dist/components/Stepper.parts.d.ts.map +1 -1
  147. package/dist/components/Stepper.parts.js +1 -1
  148. package/dist/components/Stepper.parts.js.map +1 -1
  149. package/dist/components/Switch.meta.d.ts +1 -6
  150. package/dist/components/Switch.meta.d.ts.map +1 -1
  151. package/dist/components/Switch.meta.js +1 -5
  152. package/dist/components/Switch.meta.js.map +1 -1
  153. package/dist/components/TabSet.meta.d.ts +2 -5
  154. package/dist/components/TabSet.meta.d.ts.map +1 -1
  155. package/dist/components/TabSet.meta.js +3 -1
  156. package/dist/components/TabSet.meta.js.map +1 -1
  157. package/dist/components/Tag.meta.d.ts +0 -2
  158. package/dist/components/Tag.meta.d.ts.map +1 -1
  159. package/dist/components/TextArea.meta.d.ts +1 -6
  160. package/dist/components/TextArea.meta.d.ts.map +1 -1
  161. package/dist/components/TextArea.meta.js +1 -5
  162. package/dist/components/TextArea.meta.js.map +1 -1
  163. package/dist/components/ToggleButton.js +2 -2
  164. package/dist/components/ToggleButton.js.map +1 -1
  165. package/dist/components/ToggleButton.meta.d.ts +1 -12
  166. package/dist/components/ToggleButton.meta.d.ts.map +1 -1
  167. package/dist/components/ToggleButton.meta.js +1 -6
  168. package/dist/components/ToggleButton.meta.js.map +1 -1
  169. package/dist/components/Tooltip.d.ts +2 -2
  170. package/dist/components/Tooltip.d.ts.map +1 -1
  171. package/dist/components/Tooltip.js +2 -2
  172. package/dist/components/Tooltip.js.map +1 -1
  173. package/dist/components/Tooltip.meta.d.ts +12 -7
  174. package/dist/components/Tooltip.meta.d.ts.map +1 -1
  175. package/dist/components/Tooltip.meta.js +13 -2
  176. package/dist/components/Tooltip.meta.js.map +1 -1
  177. package/dist/components/Tooltip.parts.d.ts +20 -20
  178. package/dist/components/Tooltip.parts.d.ts.map +1 -1
  179. package/dist/components/Tooltip.parts.js +129 -88
  180. package/dist/components/Tooltip.parts.js.map +1 -1
  181. package/dist/components/base/Addon.meta.d.ts +1 -1
  182. package/dist/components/base/Addon.meta.d.ts.map +1 -1
  183. package/dist/components/base/Addon.meta.js +3 -1
  184. package/dist/components/base/Addon.meta.js.map +1 -1
  185. package/dist/components/base/ButtonOrLink.d.ts +1 -1
  186. package/dist/components/base/ButtonOrLink.parts.d.ts +6 -5
  187. package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
  188. package/dist/components/base/ButtonOrLink.parts.js +28 -31
  189. package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
  190. package/dist/components/base/Checkable.meta.d.ts +1 -2
  191. package/dist/components/base/Checkable.meta.d.ts.map +1 -1
  192. package/dist/components/base/Checkable.parts.d.ts +6 -6
  193. package/dist/components/base/Checkable.parts.d.ts.map +1 -1
  194. package/dist/components/base/Checkable.parts.js +2 -2
  195. package/dist/components/base/Checkable.parts.js.map +1 -1
  196. package/dist/components/base/Field.meta.d.ts +1 -2
  197. package/dist/components/base/Field.meta.d.ts.map +1 -1
  198. package/dist/components/base/Field.parts.d.ts +5 -4
  199. package/dist/components/base/Field.parts.d.ts.map +1 -1
  200. package/dist/components/base/Field.parts.js +1 -1
  201. package/dist/components/base/Field.parts.js.map +1 -1
  202. package/dist/components/base/MaybeButtonOrLink.d.ts +1 -1
  203. package/dist/components/base/MaybeButtonOrLink.d.ts.map +1 -1
  204. package/dist/components/base/Portal.d.ts +1 -1
  205. package/dist/components/base/Portal.d.ts.map +1 -1
  206. package/dist/components/base/Portal.js +3 -6
  207. package/dist/components/base/Portal.js.map +1 -1
  208. package/dist/components/base/Render.d.ts +21 -6
  209. package/dist/components/base/Render.d.ts.map +1 -1
  210. package/dist/components/base/Render.js +3 -2
  211. package/dist/components/base/Render.js.map +1 -1
  212. package/dist/components/base/Transition.js +2 -2
  213. package/dist/components/base/Transition.meta.d.ts +1 -1
  214. package/dist/components/base/Transition.meta.d.ts.map +1 -1
  215. package/dist/components/base/Transition.meta.js +1 -0
  216. package/dist/components/base/Transition.meta.js.map +1 -1
  217. package/dist/components/base/index.d.ts +1 -2
  218. package/dist/components/base/index.d.ts.map +1 -1
  219. package/dist/components/base/index.js +1 -2
  220. package/dist/components/base/index.js.map +1 -1
  221. package/dist/components/index.d.ts +1 -1
  222. package/dist/components/index.d.ts.map +1 -1
  223. package/dist/components/index.js +1 -1
  224. package/dist/components/index.js.map +1 -1
  225. package/dist/hooks/index.d.ts +1 -0
  226. package/dist/hooks/index.d.ts.map +1 -1
  227. package/dist/hooks/index.js +1 -0
  228. package/dist/hooks/index.js.map +1 -1
  229. package/dist/hooks/useCSSProp.d.ts.map +1 -1
  230. package/dist/hooks/useCSSProp.js +6 -6
  231. package/dist/hooks/useCSSProp.js.map +1 -1
  232. package/dist/hooks/useCSSProps.d.ts +11 -13
  233. package/dist/hooks/useCSSProps.d.ts.map +1 -1
  234. package/dist/hooks/useCSSProps.js +11 -19
  235. package/dist/hooks/useCSSProps.js.map +1 -1
  236. package/dist/hooks/useCSSPropsPolyfill.d.ts +1 -1
  237. package/dist/hooks/useCSSPropsPolyfill.d.ts.map +1 -1
  238. package/dist/hooks/useCSSPropsPolyfill.js +12 -20
  239. package/dist/hooks/useCSSPropsPolyfill.js.map +1 -1
  240. package/dist/hooks/useCSSState.d.ts.map +1 -1
  241. package/dist/hooks/useCSSState.js +7 -3
  242. package/dist/hooks/useCSSState.js.map +1 -1
  243. package/dist/hooks/useEffectWithRefDeps.d.ts +2 -2
  244. package/dist/hooks/useEffectWithRefDeps.d.ts.map +1 -1
  245. package/dist/hooks/useEffectWithRefDeps.js +1 -1
  246. package/dist/hooks/useEffectWithRefDeps.js.map +1 -1
  247. package/dist/hooks/useFirstRender.d.ts +14 -0
  248. package/dist/hooks/useFirstRender.d.ts.map +1 -0
  249. package/dist/hooks/useFirstRender.js +20 -0
  250. package/dist/hooks/useFirstRender.js.map +1 -0
  251. package/dist/hooks/useGDS.d.ts +1 -1
  252. package/dist/hooks/usePrevious.d.ts +6 -4
  253. package/dist/hooks/usePrevious.d.ts.map +1 -1
  254. package/dist/hooks/usePrevious.js +6 -4
  255. package/dist/hooks/usePrevious.js.map +1 -1
  256. package/dist/hooks/useRefWithInit.d.ts +2 -2
  257. package/dist/hooks/useRefWithInit.d.ts.map +1 -1
  258. package/dist/hooks/useRefWithInit.js.map +1 -1
  259. package/dist/hooks/useStyleObserver.d.ts +2 -2
  260. package/dist/hooks/useStyleObserver.d.ts.map +1 -1
  261. package/dist/hooks/useStyleObserver.js.map +1 -1
  262. package/dist/icons/CalendarDynamicIcon.d.ts +8 -5
  263. package/dist/icons/CalendarDynamicIcon.d.ts.map +1 -1
  264. package/dist/icons/CalendarDynamicIcon.js +5 -2
  265. package/dist/icons/CalendarDynamicIcon.js.map +1 -1
  266. package/dist/icons/CopyInteractiveIcon.d.ts +5 -4
  267. package/dist/icons/CopyInteractiveIcon.d.ts.map +1 -1
  268. package/dist/icons/CopyInteractiveIcon.js +2 -2
  269. package/dist/icons/CopyInteractiveIcon.js.map +1 -1
  270. package/dist/icons/SidebarLeftInteractiveIcon.d.ts +4 -3
  271. package/dist/icons/SidebarLeftInteractiveIcon.d.ts.map +1 -1
  272. package/dist/icons/SidebarLeftInteractiveIcon.js +2 -2
  273. package/dist/icons/SidebarLeftInteractiveIcon.js.map +1 -1
  274. package/dist/icons/SidebarRightInteractiveIcon.d.ts +4 -3
  275. package/dist/icons/SidebarRightInteractiveIcon.d.ts.map +1 -1
  276. package/dist/icons/SidebarRightInteractiveIcon.js +2 -2
  277. package/dist/icons/SidebarRightInteractiveIcon.js.map +1 -1
  278. package/dist/tailwind-plugin.js +5 -5
  279. package/dist/tailwind-plugin.js.map +1 -1
  280. package/dist/utils/cn.d.ts +3 -1
  281. package/dist/utils/cn.d.ts.map +1 -1
  282. package/dist/utils/cn.js +3 -1
  283. package/dist/utils/cn.js.map +1 -1
  284. package/dist/utils/getCSSPropsAttributes.d.ts +10 -3
  285. package/dist/utils/getCSSPropsAttributes.d.ts.map +1 -1
  286. package/dist/utils/getCSSPropsAttributes.js +4 -5
  287. package/dist/utils/getCSSPropsAttributes.js.map +1 -1
  288. package/dist/utils/splitProps.d.ts +1 -4
  289. package/dist/utils/splitProps.d.ts.map +1 -1
  290. package/dist/utils/splitProps.js +2 -7
  291. package/dist/utils/splitProps.js.map +1 -1
  292. package/dist/utils/trimReactNode.d.ts +10 -8
  293. package/dist/utils/trimReactNode.d.ts.map +1 -1
  294. package/dist/utils/trimReactNode.js +10 -8
  295. package/dist/utils/trimReactNode.js.map +1 -1
  296. package/package.json +17 -17
  297. package/src/GDSProvider.tsx +11 -9
  298. package/src/components/Address.tsx +2 -2
  299. package/src/components/Avatar.tsx +5 -10
  300. package/src/components/Breadcrumbs.meta.ts +3 -1
  301. package/src/components/Breadcrumbs.parts.tsx +16 -28
  302. package/src/components/Button.tsx +14 -10
  303. package/src/components/ButtonGroup.meta.ts +8 -0
  304. package/src/components/ButtonGroup.tsx +1 -5
  305. package/src/components/Card.meta.ts +1 -0
  306. package/src/components/Checkbox.meta.ts +1 -5
  307. package/src/components/Chip.parts.tsx +1 -11
  308. package/src/components/CodeBlock.parts.tsx +75 -50
  309. package/src/components/CodeInline.tsx +3 -3
  310. package/src/components/CopyButton.meta.ts +1 -6
  311. package/src/components/CopyButton.tsx +3 -4
  312. package/src/components/CurrencyInput.meta.ts +1 -5
  313. package/src/components/DescriptionList.parts.tsx +1 -0
  314. package/src/components/Icon.meta.ts +1 -0
  315. package/src/components/Icon.tsx +4 -4
  316. package/src/components/Input.meta.ts +1 -5
  317. package/src/components/Input.tsx +5 -6
  318. package/src/components/Keyboard.tsx +1 -1
  319. package/src/components/Link.meta.ts +1 -0
  320. package/src/components/Link.tsx +2 -3
  321. package/src/components/Menu.meta.ts +39 -1
  322. package/src/components/Menu.parts.tsx +553 -549
  323. package/src/components/Modal.meta.ts +1 -1
  324. package/src/components/Modal.parts.tsx +67 -68
  325. package/src/components/OTCInput.meta.ts +1 -5
  326. package/src/components/OTCInput.tsx +1 -1
  327. package/src/components/Radio.meta.ts +1 -5
  328. package/src/components/SegmentedControl.meta.ts +3 -1
  329. package/src/components/SegmentedControl.parts.tsx +7 -10
  330. package/src/components/Stepper.meta.ts +1 -0
  331. package/src/components/Stepper.parts.tsx +3 -1
  332. package/src/components/Switch.meta.ts +1 -5
  333. package/src/components/TabSet.meta.ts +3 -1
  334. package/src/components/TextArea.meta.ts +1 -5
  335. package/src/components/ToggleButton.meta.ts +1 -6
  336. package/src/components/ToggleButton.tsx +1 -1
  337. package/src/components/Tooltip.meta.ts +13 -2
  338. package/src/components/Tooltip.parts.tsx +215 -158
  339. package/src/components/Tooltip.tsx +2 -2
  340. package/src/components/base/Addon.meta.ts +3 -1
  341. package/src/components/base/ButtonOrLink.parts.tsx +52 -51
  342. package/src/components/base/Checkable.parts.tsx +6 -13
  343. package/src/components/base/Field.parts.tsx +5 -5
  344. package/src/components/base/Portal.tsx +5 -7
  345. package/src/components/base/Render.tsx +37 -15
  346. package/src/components/base/Transition.meta.ts +1 -0
  347. package/src/components/base/Transition.tsx +2 -2
  348. package/src/components/base/index.ts +8 -2
  349. package/src/components/index.ts +1 -2
  350. package/src/hooks/index.ts +1 -0
  351. package/src/hooks/useCSSProp.ts +6 -8
  352. package/src/hooks/useCSSProps.ts +13 -22
  353. package/src/hooks/useCSSPropsPolyfill.ts +15 -23
  354. package/src/hooks/useCSSState.ts +11 -6
  355. package/src/hooks/useEffectWithRefDeps.ts +2 -2
  356. package/src/hooks/useFirstRender.ts +36 -0
  357. package/src/hooks/usePrevious.ts +6 -4
  358. package/src/hooks/useRefWithInit.ts +2 -2
  359. package/src/hooks/useStyleObserver.ts +5 -1
  360. package/src/icons/CalendarDynamicIcon.tsx +16 -6
  361. package/src/icons/CopyInteractiveIcon.tsx +10 -5
  362. package/src/icons/SidebarLeftInteractiveIcon.tsx +9 -5
  363. package/src/icons/SidebarRightInteractiveIcon.tsx +9 -5
  364. package/src/tailwind-plugin.ts +5 -5
  365. package/src/utils/cn.ts +3 -1
  366. package/src/utils/getCSSPropsAttributes.ts +13 -8
  367. package/src/utils/splitProps.ts +9 -9
  368. package/src/utils/trimReactNode.tsx +10 -8
  369. package/dist/components/base/ButtonOrLink.meta.d.ts +0 -2
  370. package/dist/components/base/ButtonOrLink.meta.d.ts.map +0 -1
  371. package/dist/components/base/ButtonOrLink.meta.js +0 -6
  372. package/dist/components/base/ButtonOrLink.meta.js.map +0 -1
  373. package/src/components/base/ButtonOrLink.meta.ts +0 -6
@@ -2,10 +2,8 @@
2
2
 
3
3
  import {
4
4
  createContext,
5
- useCallback,
6
5
  useContext,
7
6
  useEffect,
8
- useMemo,
9
7
  useRef,
10
8
  useState,
11
9
  type ComponentProps,
@@ -13,24 +11,25 @@ import {
13
11
  type ReactNode,
14
12
  } from 'react'
15
13
  import { Tooltip } from '@base-ui/react/tooltip'
14
+ import type { SetReturnType } from 'type-fest'
16
15
 
17
16
  import { twToPx, type GDSComponentProps } from '@graphprotocol/gds-css'
18
17
 
19
18
  import { useControlled, useCSSPropsPolyfill, useGDS } from '../hooks/index.ts'
20
- import { cn, getCSSPropsAttributes } from '../utils/index.ts'
19
+ import { cn, getCSSPropsAttributes, getReactNodeKey } from '../utils/index.ts'
21
20
  import { Portal } from './base/Portal.tsx'
22
- import { Render, type RenderProps } from './base/Render.tsx'
21
+ import { Render, type RenderProp } from './base/Render.tsx'
23
22
  import { TooltipMeta } from './Tooltip.meta.ts'
24
23
 
25
- type DefinedReactNode = Exclude<ReactNode, undefined>
24
+ type Content = Exclude<ReactNode, undefined>
25
+ type SetDeferredContentFunction = (content: Content, priority?: number) => void
26
26
 
27
27
  const TooltipContext = createContext<{
28
- enabled: boolean
29
- registerNestedSetOpen: (nestedSetOpen: (newOpen: boolean) => void) => void
28
+ collectContent: SetDeferredContentFunction
29
+ inheritContent: SetDeferredContentFunction
30
+ disableDescendants: boolean
31
+ registerDescendantSetOpen: (descendantSetOpen: (newOpen: boolean) => void) => void
30
32
  } | null>(null)
31
- const TooltipCollectorContext = createContext<
32
- ((content: DefinedReactNode, priority?: number) => void) | null
33
- >(null)
34
33
 
35
34
  const OPEN_DELAY = 300
36
35
 
@@ -40,24 +39,26 @@ export interface TooltipProps
40
39
  * The content to display in the tooltip. If not provided, defaults to any content collected from
41
40
  * `Tooltip.Content` or `Tooltip.Collector` descendants.
42
41
  */
43
- content?: ReactNode | undefined
42
+ content?: Content | undefined
44
43
  /** Force the tooltip to be open or closed. */
45
44
  open?: boolean | undefined
46
45
  /** Called when the tooltip is opened or closed. */
47
46
  onOpenChange?: ((open: boolean) => void) | undefined
48
47
  /** The element that triggers the tooltip. */
49
- children: ReactElement<Record<string, unknown>>
48
+ children: ReactElement
50
49
  }
51
50
 
52
51
  export function TooltipRoot({
53
52
  ref: passedRef,
54
53
  content: passedContent,
55
- position,
54
+ side,
56
55
  gap,
57
56
  align,
57
+ alignOffset,
58
58
  open: controlledOpen,
59
59
  onOpenChange,
60
60
  disabled,
61
+ overrideDescendants,
61
62
  className,
62
63
  style,
63
64
  children,
@@ -65,44 +66,85 @@ export function TooltipRoot({
65
66
  }: TooltipProps) {
66
67
  const { dirProps } = useGDS()
67
68
 
69
+ const ancestorTooltip = useContext(TooltipContext)
70
+ const triggerRef = useRef<HTMLButtonElement>(null)
71
+
68
72
  const [cssPropsPolyfillRef, cssPropsPolyfillAttributes, cssProps] = useCSSPropsPolyfill(
69
73
  TooltipMeta,
70
- { position, align, disabled },
71
- { returnPropValues: { position, gap, align, disabled } },
74
+ { side, align, disabled, overrideDescendants },
75
+ { returnPropValues: { side, gap, align, alignOffset, disabled, overrideDescendants } },
72
76
  )
73
77
  const cssPropsAttributes = getCSSPropsAttributes(
74
78
  TooltipMeta,
75
- { position, gap, align, disabled },
79
+ { side, gap, align, alignOffset, disabled, overrideDescendants },
76
80
  style,
77
81
  )
78
82
 
79
- const tooltipAncestor = useContext(TooltipContext)
80
- const hasEnabledTooltipAncestor = tooltipAncestor?.enabled ?? false
83
+ const [setCollectedContent, collectedContent] = useDeferredContent()
84
+ const [setInheritedContent, inheritedContent] = useDeferredContent()
85
+
86
+ const content =
87
+ passedContent !== undefined
88
+ ? passedContent
89
+ : collectedContent !== undefined
90
+ ? collectedContent
91
+ : inheritedContent
81
92
 
82
- const { onCollect, collectedContent } = useCollectedTooltip()
83
- const content = passedContent !== undefined ? passedContent : collectedContent
93
+ const triggerDisabled =
94
+ 'props' in children &&
95
+ children.props &&
96
+ typeof children.props === 'object' &&
97
+ 'disabled' in children.props
98
+ ? children.props.disabled === true
99
+ : false
100
+
101
+ // Propagate the passed/collected content up for the first tooltip ancestor that needs them
102
+ if (passedContent !== undefined && !cssProps.disabled && !triggerDisabled) {
103
+ ancestorTooltip?.inheritContent(passedContent, 3)
104
+ }
105
+
106
+ const collectContent: SetDeferredContentFunction = (newCollectedContent, priority) => {
107
+ const prioritizedCollectedContent = setCollectedContent(newCollectedContent, priority)
108
+ if (!triggerDisabled) ancestorTooltip?.inheritContent(prioritizedCollectedContent, 2)
109
+ }
110
+
111
+ const inheritContent: SetDeferredContentFunction = (newInheritedContent, priority) => {
112
+ void setInheritedContent(newInheritedContent, priority)
113
+ if (!triggerDisabled) ancestorTooltip?.inheritContent(newInheritedContent, 1)
114
+ }
115
+
116
+ const disabledByAncestor = ancestorTooltip?.disableDescendants ?? false
117
+ const disableDescendants =
118
+ disabledByAncestor ||
119
+ triggerDisabled ||
120
+ (content !== undefined && !cssProps.disabled && cssProps.overrideDescendants)
121
+ const enabled = Boolean(content) && !cssProps.disabled && !triggerDisabled && !disabledByAncestor
84
122
 
85
- const enabled = !cssProps.disabled && !hasEnabledTooltipAncestor && Boolean(content)
86
123
  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
- }, [])
124
+ const descendantSetOpen = useRef<(newOpen: boolean) => void>(null)
125
+ const registerDescendantSetOpen = (newDescendantSetOpen: (newOpen: boolean) => void) => {
126
+ descendantSetOpen.current = newDescendantSetOpen
127
+ }
128
+ const justOpenedRef = useRef(false)
91
129
  const setOpen = (newOpen: boolean) => {
92
130
  ownSetOpen(newOpen)
93
131
  /**
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).
132
+ * Notify overridden descendant tooltips of the open state change. This ensures, for example,
133
+ * that moving the cursor away from a `CopyButton` while its "Copied!" tooltip is shown closes
134
+ * the inner tooltip as well (which doesn't happen automatically because tooltips nested under
135
+ * an enabled tooltip are disabled to prevent a lot of weirdness).
98
136
  */
99
- nestedSetOpen.current?.(newOpen)
100
- }
101
- tooltipAncestor?.registerNestedSetOpen(setOpen)
102
-
103
- if (cssProps.disabled && open) {
104
- setOpen(false)
137
+ if (cssProps.overrideDescendants) {
138
+ descendantSetOpen.current?.(newOpen)
139
+ }
140
+ if (newOpen) {
141
+ justOpenedRef.current = true
142
+ window.setTimeout(() => {
143
+ justOpenedRef.current = false
144
+ }, 0)
145
+ }
105
146
  }
147
+ ancestorTooltip?.registerDescendantSetOpen(setOpen)
106
148
 
107
149
  const openTimeoutRef = useRef<number>(undefined)
108
150
  const clearOpenTimeout = () => {
@@ -114,147 +156,145 @@ export function TooltipRoot({
114
156
  clearOpenTimeout()
115
157
  }
116
158
 
117
- const tooltipContextValue = useMemo(
118
- () => ({
119
- enabled,
120
- registerNestedSetOpen,
121
- }),
122
- [enabled, registerNestedSetOpen],
123
- )
124
-
125
159
  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
160
+ <TooltipContext.Provider
161
+ value={{
162
+ collectContent,
163
+ inheritContent,
164
+ disableDescendants,
165
+ registerDescendantSetOpen,
166
+ }}
167
+ >
168
+ <Tooltip.Root
169
+ disabled={!enabled}
170
+ disableHoverablePopup
171
+ open={open}
172
+ onOpenChange={(newOpen, eventDetails) => {
173
+ clearOpenTimeout()
174
+ if (!enabled) return
175
+ // Disable Base UI's default behavior of closing the tooltip when pressing the trigger
176
+ if (!newOpen && eventDetails.reason === 'trigger-press') {
177
+ // Ensure clicking on the trigger before the tooltip has a chance to open doesn't prevent it from opening
178
+ openTimeoutRef.current = window.setTimeout(() => setOpen(true), OPEN_DELAY)
179
+ return
180
+ }
181
+ // Make `overrideDescendants={false}` work as expected (see the `NestedSimultaneous` story)
182
+ if (
183
+ !newOpen &&
184
+ eventDetails.reason === 'none' &&
185
+ (justOpenedRef.current ||
186
+ (!cssProps.overrideDescendants && triggerRef.current?.matches(':hover')))
187
+ ) {
188
+ return
189
+ }
190
+ setOpen(newOpen)
191
+ }}
192
+ >
193
+ <Tooltip.Trigger
194
+ ref={triggerRef}
195
+ delay={OPEN_DELAY}
196
+ closeDelay={100}
197
+ render={({ onClick: _onClick, ...renderProps }) => (
198
+ <Render {...(enabled ? renderProps : {})} render={children} />
199
+ )}
200
+ />
201
+ <Tooltip.Portal>
202
+ <Tooltip.Positioner
203
+ side={
204
+ cssProps.side === 'start'
205
+ ? 'inline-start'
206
+ : cssProps.side === 'end'
207
+ ? 'inline-end'
208
+ : cssProps.side
140
209
  }
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)}
210
+ sideOffset={twToPx(cssProps.gap)}
211
+ align={cssProps.align}
212
+ alignOffset={twToPx(cssProps.alignOffset)}
213
+ collisionPadding={8}
214
+ {...dirProps}
215
+ >
216
+ <Tooltip.Popup
217
+ ref={passedRef}
218
+ data-side={cssProps.side}
219
+ className={cn(
220
+ `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
221
+ i:origin-(--transform-origin)
222
+ i:data-ending-style:opacity-0
223
+ i:data-starting-style:opacity-0
224
+ i:data-starting-style:data-[side=bottom]:-translate-y-1
225
+ i:data-starting-style:data-[side=end]:-translate-x-1
226
+ i:data-starting-style:data-[side=start]:translate-x-1
227
+ i:data-starting-style:data-[side=top]:translate-y-1
228
+ i:rtl:data-starting-style:data-[side=end]:translate-x-1
229
+ i:rtl:data-starting-style:data-[side=start]:-translate-x-1`,
230
+ className,
231
+ )}
188
232
  {...cssPropsAttributes}
189
233
  {...cssPropsPolyfillAttributes}
190
234
  {...props}
191
- />
192
- </Portal>
193
- </Tooltip.Root>
194
- </TooltipCollector>
235
+ >
236
+ {content}
237
+ </Tooltip.Popup>
238
+ </Tooltip.Positioner>
239
+ </Tooltip.Portal>
240
+ {/* Ensure changes to CSS props are detected even when the tooltip is not mounted */}
241
+ <Portal>
242
+ <span
243
+ ref={cssPropsPolyfillRef}
244
+ className={cn('gds-tooltip i:invisible', className)}
245
+ {...cssPropsAttributes}
246
+ {...cssPropsPolyfillAttributes}
247
+ {...props}
248
+ />
249
+ </Portal>
250
+ </Tooltip.Root>
195
251
  </TooltipContext.Provider>
196
252
  )
197
253
  }
198
254
 
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
- }
255
+ function useDeferredContent() {
256
+ const [content, setContent] = useState<Content | undefined>(undefined)
257
+ const pendingContentRef = useRef<Content | undefined>(undefined)
258
+ const pendingPriorityRef = useRef<number | undefined>(undefined)
204
259
 
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
- }
217
-
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
260
+ // Store the content in a ref to avoid updating the state during render
261
+ const setDeferredContent: SetReturnType<SetDeferredContentFunction, Content> = (
262
+ newContent: Content,
263
+ priority = 0,
264
+ ) => {
265
+ // If we've already stored content this render, only replace it if the new content has higher priority
266
+ if (
267
+ pendingContentRef.current === undefined ||
268
+ priority >= (pendingPriorityRef.current ?? -Infinity)
269
+ ) {
270
+ pendingContentRef.current = newContent
271
+ pendingPriorityRef.current = priority
230
272
  }
273
+ return pendingContentRef.current
231
274
  }
232
275
 
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
276
+ // Commit the stored content after render
277
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- Must run after every render to sync
235
278
  useEffect(() => {
236
- if (collectedContent !== pendingContent.current) {
237
- setCollectedContent(pendingContent.current)
279
+ if (getReactNodeKey(content) !== getReactNodeKey(pendingContentRef.current)) {
280
+ setContent(pendingContentRef.current)
238
281
  }
239
282
  // Reset for next render
240
- pendingContent.current = null
241
- pendingPriority.current = 0
283
+ pendingContentRef.current = undefined
284
+ pendingPriorityRef.current = undefined
242
285
  })
243
286
 
244
- return {
245
- onCollect,
246
- collectedContent,
247
- }
287
+ return [setDeferredContent, content] as const
248
288
  }
249
289
 
250
290
  export interface TooltipContentProps {
251
- render?: RenderProps['render'] | undefined
291
+ render?: RenderProp | undefined
252
292
  children: ReactNode
253
293
  }
254
294
 
255
295
  /**
256
296
  * 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`
297
+ * closest `Tooltip`, in addition to rendering it inline. It is meant to be wrapped in a `sr-only`
258
298
  * element, so that the content rendered inline is visually hidden but accessible to screen readers,
259
299
  * unlike the content rendered in the tooltip itself, which is hidden from the accessibility tree
260
300
  * since most tooltips are decorative. This allows a tooltip to be non-decorative, in the rare case
@@ -262,15 +302,32 @@ export interface TooltipContentProps {
262
302
  * from the trigger's accessible name).
263
303
  */
264
304
  export function TooltipContent({ render, children }: TooltipContentProps) {
265
- const collectTooltip = useCollectTooltip()
305
+ const ancestorTooltip = useContext(TooltipContext)
266
306
 
267
- if (collectTooltip) {
268
- collectTooltip(children || null, 100)
269
- }
307
+ ancestorTooltip?.collectContent(children || null)
270
308
 
271
- if (render) {
272
- return <Render render={render}>{children}</Render>
273
- }
309
+ return render ? <Render render={render}>{children}</Render> : children
310
+ }
311
+ TooltipContent.displayName = 'Tooltip.Content'
312
+
313
+ const TooltipCollectorContext = createContext<SetDeferredContentFunction | null>(null)
274
314
 
275
- return children
315
+ export interface TooltipCollectorProps {
316
+ children: ReactNode
317
+ }
318
+
319
+ export function TooltipCollector({ children }: TooltipCollectorProps) {
320
+ const ancestorTooltip = useContext(TooltipContext)
321
+
322
+ return (
323
+ <TooltipCollectorContext.Provider value={ancestorTooltip?.collectContent ?? null}>
324
+ {children}
325
+ </TooltipCollectorContext.Provider>
326
+ )
327
+ }
328
+ TooltipCollector.displayName = 'Tooltip.Collector'
329
+
330
+ /** Hook for components to send tooltip content up to a collector. */
331
+ export function useTooltipCollector() {
332
+ return useContext(TooltipCollectorContext)
276
333
  }
@@ -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
+ })