@graphprotocol/gds-react 0.1.1 → 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 (390) 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 +7 -11
  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 +15 -23
  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 +17 -12
  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.js +1 -1
  35. package/dist/components/Card.js.map +1 -1
  36. package/dist/components/Card.meta.d.ts +1 -2
  37. package/dist/components/Card.meta.d.ts.map +1 -1
  38. package/dist/components/Card.meta.js +1 -0
  39. package/dist/components/Card.meta.js.map +1 -1
  40. package/dist/components/Checkbox.meta.d.ts +1 -6
  41. package/dist/components/Checkbox.meta.d.ts.map +1 -1
  42. package/dist/components/Checkbox.meta.js +1 -5
  43. package/dist/components/Checkbox.meta.js.map +1 -1
  44. package/dist/components/Chip.d.ts +6 -0
  45. package/dist/components/Chip.d.ts.map +1 -0
  46. package/dist/components/Chip.js +5 -0
  47. package/dist/components/Chip.js.map +1 -0
  48. package/dist/components/Chip.meta.d.ts +15 -0
  49. package/dist/components/Chip.meta.d.ts.map +1 -0
  50. package/dist/components/Chip.meta.js +22 -0
  51. package/dist/components/Chip.meta.js.map +1 -0
  52. package/dist/components/Chip.parts.d.ts +52 -0
  53. package/dist/components/Chip.parts.d.ts.map +1 -0
  54. package/dist/components/Chip.parts.js +114 -0
  55. package/dist/components/Chip.parts.js.map +1 -0
  56. package/dist/components/Cluster.meta.d.ts +8 -2
  57. package/dist/components/Cluster.meta.d.ts.map +1 -1
  58. package/dist/components/CodeBlock.d.ts +1 -1
  59. package/dist/components/CodeBlock.meta.d.ts +2 -4
  60. package/dist/components/CodeBlock.meta.d.ts.map +1 -1
  61. package/dist/components/CodeBlock.parts.d.ts +6 -7
  62. package/dist/components/CodeBlock.parts.d.ts.map +1 -1
  63. package/dist/components/CodeBlock.parts.js +28 -10
  64. package/dist/components/CodeBlock.parts.js.map +1 -1
  65. package/dist/components/CodeInline.js +3 -3
  66. package/dist/components/CodeInline.meta.d.ts +1 -1
  67. package/dist/components/CodeInline.meta.d.ts.map +1 -1
  68. package/dist/components/CopyButton.d.ts.map +1 -1
  69. package/dist/components/CopyButton.js +2 -4
  70. package/dist/components/CopyButton.js.map +1 -1
  71. package/dist/components/CopyButton.meta.d.ts +1 -12
  72. package/dist/components/CopyButton.meta.d.ts.map +1 -1
  73. package/dist/components/CopyButton.meta.js +1 -6
  74. package/dist/components/CopyButton.meta.js.map +1 -1
  75. package/dist/components/CurrencyInput.meta.d.ts +1 -6
  76. package/dist/components/CurrencyInput.meta.d.ts.map +1 -1
  77. package/dist/components/CurrencyInput.meta.js +1 -5
  78. package/dist/components/CurrencyInput.meta.js.map +1 -1
  79. package/dist/components/DescriptionList.meta.d.ts +2 -5
  80. package/dist/components/DescriptionList.meta.d.ts.map +1 -1
  81. package/dist/components/DescriptionList.parts.d.ts +3 -0
  82. package/dist/components/DescriptionList.parts.d.ts.map +1 -1
  83. package/dist/components/DescriptionList.parts.js +2 -1
  84. package/dist/components/DescriptionList.parts.js.map +1 -1
  85. package/dist/components/Divider.meta.d.ts +1 -3
  86. package/dist/components/Divider.meta.d.ts.map +1 -1
  87. package/dist/components/Icon.js +4 -4
  88. package/dist/components/Icon.js.map +1 -1
  89. package/dist/components/Icon.meta.d.ts +0 -2
  90. package/dist/components/Icon.meta.d.ts.map +1 -1
  91. package/dist/components/Icon.meta.js +1 -0
  92. package/dist/components/Icon.meta.js.map +1 -1
  93. package/dist/components/Input.d.ts +5 -4
  94. package/dist/components/Input.d.ts.map +1 -1
  95. package/dist/components/Input.js +1 -0
  96. package/dist/components/Input.js.map +1 -1
  97. package/dist/components/Input.meta.d.ts +1 -6
  98. package/dist/components/Input.meta.d.ts.map +1 -1
  99. package/dist/components/Input.meta.js +1 -5
  100. package/dist/components/Input.meta.js.map +1 -1
  101. package/dist/components/Keyboard.js +1 -1
  102. package/dist/components/Keyboard.meta.d.ts +0 -1
  103. package/dist/components/Keyboard.meta.d.ts.map +1 -1
  104. package/dist/components/Label.meta.d.ts +1 -3
  105. package/dist/components/Label.meta.d.ts.map +1 -1
  106. package/dist/components/Link.d.ts +1 -1
  107. package/dist/components/Link.d.ts.map +1 -1
  108. package/dist/components/Link.js +1 -2
  109. package/dist/components/Link.js.map +1 -1
  110. package/dist/components/Link.meta.d.ts +1 -2
  111. package/dist/components/Link.meta.d.ts.map +1 -1
  112. package/dist/components/Link.meta.js +1 -0
  113. package/dist/components/Link.meta.js.map +1 -1
  114. package/dist/components/Menu.meta.d.ts +31 -2
  115. package/dist/components/Menu.meta.d.ts.map +1 -1
  116. package/dist/components/Menu.meta.js +39 -1
  117. package/dist/components/Menu.meta.js.map +1 -1
  118. package/dist/components/Menu.parts.d.ts +23 -32
  119. package/dist/components/Menu.parts.d.ts.map +1 -1
  120. package/dist/components/Menu.parts.js +284 -303
  121. package/dist/components/Menu.parts.js.map +1 -1
  122. package/dist/components/Modal.d.ts +1 -1
  123. package/dist/components/Modal.meta.d.ts +1 -3
  124. package/dist/components/Modal.meta.d.ts.map +1 -1
  125. package/dist/components/Modal.meta.js +1 -1
  126. package/dist/components/Modal.meta.js.map +1 -1
  127. package/dist/components/Modal.parts.d.ts +14 -15
  128. package/dist/components/Modal.parts.d.ts.map +1 -1
  129. package/dist/components/Modal.parts.js +36 -32
  130. package/dist/components/Modal.parts.js.map +1 -1
  131. package/dist/components/OTCInput.js +1 -1
  132. package/dist/components/OTCInput.meta.d.ts +1 -6
  133. package/dist/components/OTCInput.meta.d.ts.map +1 -1
  134. package/dist/components/OTCInput.meta.js +1 -5
  135. package/dist/components/OTCInput.meta.js.map +1 -1
  136. package/dist/components/Radio.meta.d.ts +1 -6
  137. package/dist/components/Radio.meta.d.ts.map +1 -1
  138. package/dist/components/Radio.meta.js +1 -5
  139. package/dist/components/Radio.meta.js.map +1 -1
  140. package/dist/components/Search.meta.d.ts +1 -3
  141. package/dist/components/Search.meta.d.ts.map +1 -1
  142. package/dist/components/SegmentedControl.meta.d.ts +2 -3
  143. package/dist/components/SegmentedControl.meta.d.ts.map +1 -1
  144. package/dist/components/SegmentedControl.meta.js +3 -1
  145. package/dist/components/SegmentedControl.meta.js.map +1 -1
  146. package/dist/components/SegmentedControl.parts.d.ts.map +1 -1
  147. package/dist/components/SegmentedControl.parts.js +15 -31
  148. package/dist/components/SegmentedControl.parts.js.map +1 -1
  149. package/dist/components/Status.meta.d.ts +0 -2
  150. package/dist/components/Status.meta.d.ts.map +1 -1
  151. package/dist/components/Stepper.meta.d.ts +1 -2
  152. package/dist/components/Stepper.meta.d.ts.map +1 -1
  153. package/dist/components/Stepper.meta.js +1 -0
  154. package/dist/components/Stepper.meta.js.map +1 -1
  155. package/dist/components/Stepper.parts.d.ts.map +1 -1
  156. package/dist/components/Stepper.parts.js +1 -1
  157. package/dist/components/Stepper.parts.js.map +1 -1
  158. package/dist/components/Switch.meta.d.ts +1 -6
  159. package/dist/components/Switch.meta.d.ts.map +1 -1
  160. package/dist/components/Switch.meta.js +1 -5
  161. package/dist/components/Switch.meta.js.map +1 -1
  162. package/dist/components/TabSet.meta.d.ts +2 -5
  163. package/dist/components/TabSet.meta.d.ts.map +1 -1
  164. package/dist/components/TabSet.meta.js +3 -1
  165. package/dist/components/TabSet.meta.js.map +1 -1
  166. package/dist/components/TabSet.parts.js +1 -1
  167. package/dist/components/Tag.meta.d.ts +0 -2
  168. package/dist/components/Tag.meta.d.ts.map +1 -1
  169. package/dist/components/TextArea.meta.d.ts +1 -6
  170. package/dist/components/TextArea.meta.d.ts.map +1 -1
  171. package/dist/components/TextArea.meta.js +1 -5
  172. package/dist/components/TextArea.meta.js.map +1 -1
  173. package/dist/components/ToggleButton.d.ts +0 -2
  174. package/dist/components/ToggleButton.d.ts.map +1 -1
  175. package/dist/components/ToggleButton.js +2 -2
  176. package/dist/components/ToggleButton.js.map +1 -1
  177. package/dist/components/ToggleButton.meta.d.ts +1 -12
  178. package/dist/components/ToggleButton.meta.d.ts.map +1 -1
  179. package/dist/components/ToggleButton.meta.js +1 -6
  180. package/dist/components/ToggleButton.meta.js.map +1 -1
  181. package/dist/components/Tooltip.d.ts +2 -2
  182. package/dist/components/Tooltip.d.ts.map +1 -1
  183. package/dist/components/Tooltip.js +2 -2
  184. package/dist/components/Tooltip.js.map +1 -1
  185. package/dist/components/Tooltip.meta.d.ts +12 -7
  186. package/dist/components/Tooltip.meta.d.ts.map +1 -1
  187. package/dist/components/Tooltip.meta.js +13 -2
  188. package/dist/components/Tooltip.meta.js.map +1 -1
  189. package/dist/components/Tooltip.parts.d.ts +20 -20
  190. package/dist/components/Tooltip.parts.d.ts.map +1 -1
  191. package/dist/components/Tooltip.parts.js +129 -88
  192. package/dist/components/Tooltip.parts.js.map +1 -1
  193. package/dist/components/base/Addon.meta.d.ts +1 -1
  194. package/dist/components/base/Addon.meta.d.ts.map +1 -1
  195. package/dist/components/base/Addon.meta.js +3 -1
  196. package/dist/components/base/Addon.meta.js.map +1 -1
  197. package/dist/components/base/ButtonOrLink.d.ts +1 -1
  198. package/dist/components/base/ButtonOrLink.parts.d.ts +14 -10
  199. package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
  200. package/dist/components/base/ButtonOrLink.parts.js +47 -47
  201. package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
  202. package/dist/components/base/Checkable.meta.d.ts +1 -2
  203. package/dist/components/base/Checkable.meta.d.ts.map +1 -1
  204. package/dist/components/base/Checkable.parts.d.ts +6 -6
  205. package/dist/components/base/Checkable.parts.d.ts.map +1 -1
  206. package/dist/components/base/Checkable.parts.js +2 -2
  207. package/dist/components/base/Checkable.parts.js.map +1 -1
  208. package/dist/components/base/Field.meta.d.ts +1 -2
  209. package/dist/components/base/Field.meta.d.ts.map +1 -1
  210. package/dist/components/base/Field.parts.d.ts +5 -4
  211. package/dist/components/base/Field.parts.d.ts.map +1 -1
  212. package/dist/components/base/Field.parts.js +1 -1
  213. package/dist/components/base/Field.parts.js.map +1 -1
  214. package/dist/components/base/MaybeButtonOrLink.d.ts +1 -1
  215. package/dist/components/base/MaybeButtonOrLink.d.ts.map +1 -1
  216. package/dist/components/base/Portal.d.ts +1 -1
  217. package/dist/components/base/Portal.d.ts.map +1 -1
  218. package/dist/components/base/Portal.js +3 -6
  219. package/dist/components/base/Portal.js.map +1 -1
  220. package/dist/components/base/Render.d.ts +21 -6
  221. package/dist/components/base/Render.d.ts.map +1 -1
  222. package/dist/components/base/Render.js +3 -2
  223. package/dist/components/base/Render.js.map +1 -1
  224. package/dist/components/base/Transition.js +2 -2
  225. package/dist/components/base/Transition.meta.d.ts +1 -1
  226. package/dist/components/base/Transition.meta.d.ts.map +1 -1
  227. package/dist/components/base/Transition.meta.js +1 -0
  228. package/dist/components/base/Transition.meta.js.map +1 -1
  229. package/dist/components/base/index.d.ts +1 -2
  230. package/dist/components/base/index.d.ts.map +1 -1
  231. package/dist/components/base/index.js +1 -2
  232. package/dist/components/base/index.js.map +1 -1
  233. package/dist/components/index.d.ts +3 -1
  234. package/dist/components/index.d.ts.map +1 -1
  235. package/dist/components/index.js +3 -1
  236. package/dist/components/index.js.map +1 -1
  237. package/dist/hooks/index.d.ts +1 -0
  238. package/dist/hooks/index.d.ts.map +1 -1
  239. package/dist/hooks/index.js +1 -0
  240. package/dist/hooks/index.js.map +1 -1
  241. package/dist/hooks/useCSSProp.d.ts.map +1 -1
  242. package/dist/hooks/useCSSProp.js +6 -6
  243. package/dist/hooks/useCSSProp.js.map +1 -1
  244. package/dist/hooks/useCSSProps.d.ts +11 -13
  245. package/dist/hooks/useCSSProps.d.ts.map +1 -1
  246. package/dist/hooks/useCSSProps.js +11 -19
  247. package/dist/hooks/useCSSProps.js.map +1 -1
  248. package/dist/hooks/useCSSPropsPolyfill.d.ts +1 -1
  249. package/dist/hooks/useCSSPropsPolyfill.d.ts.map +1 -1
  250. package/dist/hooks/useCSSPropsPolyfill.js +12 -20
  251. package/dist/hooks/useCSSPropsPolyfill.js.map +1 -1
  252. package/dist/hooks/useCSSState.d.ts.map +1 -1
  253. package/dist/hooks/useCSSState.js +7 -3
  254. package/dist/hooks/useCSSState.js.map +1 -1
  255. package/dist/hooks/useEffectWithRefDeps.d.ts +2 -2
  256. package/dist/hooks/useEffectWithRefDeps.d.ts.map +1 -1
  257. package/dist/hooks/useEffectWithRefDeps.js +1 -1
  258. package/dist/hooks/useEffectWithRefDeps.js.map +1 -1
  259. package/dist/hooks/useFirstRender.d.ts +14 -0
  260. package/dist/hooks/useFirstRender.d.ts.map +1 -0
  261. package/dist/hooks/useFirstRender.js +20 -0
  262. package/dist/hooks/useFirstRender.js.map +1 -0
  263. package/dist/hooks/useGDS.d.ts +1 -1
  264. package/dist/hooks/usePrevious.d.ts +6 -4
  265. package/dist/hooks/usePrevious.d.ts.map +1 -1
  266. package/dist/hooks/usePrevious.js +6 -4
  267. package/dist/hooks/usePrevious.js.map +1 -1
  268. package/dist/hooks/useRefWithInit.d.ts +2 -2
  269. package/dist/hooks/useRefWithInit.d.ts.map +1 -1
  270. package/dist/hooks/useRefWithInit.js.map +1 -1
  271. package/dist/hooks/useStyleObserver.d.ts +2 -2
  272. package/dist/hooks/useStyleObserver.d.ts.map +1 -1
  273. package/dist/hooks/useStyleObserver.js.map +1 -1
  274. package/dist/icons/CalendarDynamicIcon.d.ts +8 -5
  275. package/dist/icons/CalendarDynamicIcon.d.ts.map +1 -1
  276. package/dist/icons/CalendarDynamicIcon.js +5 -2
  277. package/dist/icons/CalendarDynamicIcon.js.map +1 -1
  278. package/dist/icons/CopyInteractiveIcon.d.ts +5 -4
  279. package/dist/icons/CopyInteractiveIcon.d.ts.map +1 -1
  280. package/dist/icons/CopyInteractiveIcon.js +2 -2
  281. package/dist/icons/CopyInteractiveIcon.js.map +1 -1
  282. package/dist/icons/SidebarLeftInteractiveIcon.d.ts +4 -3
  283. package/dist/icons/SidebarLeftInteractiveIcon.d.ts.map +1 -1
  284. package/dist/icons/SidebarLeftInteractiveIcon.js +2 -2
  285. package/dist/icons/SidebarLeftInteractiveIcon.js.map +1 -1
  286. package/dist/icons/SidebarRightInteractiveIcon.d.ts +4 -3
  287. package/dist/icons/SidebarRightInteractiveIcon.d.ts.map +1 -1
  288. package/dist/icons/SidebarRightInteractiveIcon.js +2 -2
  289. package/dist/icons/SidebarRightInteractiveIcon.js.map +1 -1
  290. package/dist/tailwind-plugin.d.ts.map +1 -1
  291. package/dist/tailwind-plugin.js +8 -5
  292. package/dist/tailwind-plugin.js.map +1 -1
  293. package/dist/utils/cn.d.ts +3 -1
  294. package/dist/utils/cn.d.ts.map +1 -1
  295. package/dist/utils/cn.js +3 -1
  296. package/dist/utils/cn.js.map +1 -1
  297. package/dist/utils/getCSSPropsAttributes.d.ts +10 -3
  298. package/dist/utils/getCSSPropsAttributes.d.ts.map +1 -1
  299. package/dist/utils/getCSSPropsAttributes.js +4 -5
  300. package/dist/utils/getCSSPropsAttributes.js.map +1 -1
  301. package/dist/utils/splitProps.d.ts +1 -4
  302. package/dist/utils/splitProps.d.ts.map +1 -1
  303. package/dist/utils/splitProps.js +2 -7
  304. package/dist/utils/splitProps.js.map +1 -1
  305. package/dist/utils/trimReactNode.d.ts +10 -8
  306. package/dist/utils/trimReactNode.d.ts.map +1 -1
  307. package/dist/utils/trimReactNode.js +10 -8
  308. package/dist/utils/trimReactNode.js.map +1 -1
  309. package/package.json +17 -17
  310. package/src/GDSProvider.tsx +11 -9
  311. package/src/components/Address.tsx +2 -2
  312. package/src/components/Avatar.tsx +10 -11
  313. package/src/components/Breadcrumbs.meta.ts +3 -1
  314. package/src/components/Breadcrumbs.parts.tsx +18 -30
  315. package/src/components/Button.tsx +27 -13
  316. package/src/components/ButtonGroup.meta.ts +8 -0
  317. package/src/components/ButtonGroup.tsx +1 -5
  318. package/src/components/Card.meta.ts +1 -0
  319. package/src/components/Card.tsx +1 -1
  320. package/src/components/Checkbox.meta.ts +1 -5
  321. package/src/components/Chip.meta.ts +23 -0
  322. package/src/components/Chip.parts.tsx +319 -0
  323. package/src/components/Chip.tsx +7 -0
  324. package/src/components/CodeBlock.parts.tsx +75 -50
  325. package/src/components/CodeInline.tsx +3 -3
  326. package/src/components/CopyButton.meta.ts +1 -6
  327. package/src/components/CopyButton.tsx +3 -4
  328. package/src/components/CurrencyInput.meta.ts +1 -5
  329. package/src/components/DescriptionList.parts.tsx +2 -1
  330. package/src/components/Icon.meta.ts +1 -0
  331. package/src/components/Icon.tsx +4 -4
  332. package/src/components/Input.meta.ts +1 -5
  333. package/src/components/Input.tsx +5 -6
  334. package/src/components/Keyboard.tsx +1 -1
  335. package/src/components/Link.meta.ts +1 -0
  336. package/src/components/Link.tsx +2 -3
  337. package/src/components/Menu.meta.ts +39 -1
  338. package/src/components/Menu.parts.tsx +553 -549
  339. package/src/components/Modal.meta.ts +1 -1
  340. package/src/components/Modal.parts.tsx +67 -68
  341. package/src/components/OTCInput.meta.ts +1 -5
  342. package/src/components/OTCInput.tsx +1 -1
  343. package/src/components/Radio.meta.ts +1 -5
  344. package/src/components/SegmentedControl.meta.ts +3 -1
  345. package/src/components/SegmentedControl.parts.tsx +40 -44
  346. package/src/components/Stepper.meta.ts +1 -0
  347. package/src/components/Stepper.parts.tsx +3 -1
  348. package/src/components/Switch.meta.ts +1 -5
  349. package/src/components/TabSet.meta.ts +3 -1
  350. package/src/components/TabSet.parts.tsx +1 -1
  351. package/src/components/TextArea.meta.ts +1 -5
  352. package/src/components/ToggleButton.meta.ts +1 -6
  353. package/src/components/ToggleButton.tsx +1 -3
  354. package/src/components/Tooltip.meta.ts +13 -2
  355. package/src/components/Tooltip.parts.tsx +215 -159
  356. package/src/components/Tooltip.tsx +2 -2
  357. package/src/components/base/Addon.meta.ts +3 -1
  358. package/src/components/base/ButtonOrLink.parts.tsx +91 -73
  359. package/src/components/base/Checkable.parts.tsx +6 -13
  360. package/src/components/base/Field.parts.tsx +5 -5
  361. package/src/components/base/Portal.tsx +5 -7
  362. package/src/components/base/Render.tsx +37 -15
  363. package/src/components/base/Transition.meta.ts +1 -0
  364. package/src/components/base/Transition.tsx +2 -2
  365. package/src/components/base/index.ts +8 -2
  366. package/src/components/index.ts +3 -2
  367. package/src/hooks/index.ts +1 -0
  368. package/src/hooks/useCSSProp.ts +6 -8
  369. package/src/hooks/useCSSProps.ts +13 -22
  370. package/src/hooks/useCSSPropsPolyfill.ts +15 -23
  371. package/src/hooks/useCSSState.ts +11 -6
  372. package/src/hooks/useEffectWithRefDeps.ts +2 -2
  373. package/src/hooks/useFirstRender.ts +36 -0
  374. package/src/hooks/usePrevious.ts +6 -4
  375. package/src/hooks/useRefWithInit.ts +2 -2
  376. package/src/hooks/useStyleObserver.ts +5 -1
  377. package/src/icons/CalendarDynamicIcon.tsx +16 -6
  378. package/src/icons/CopyInteractiveIcon.tsx +10 -5
  379. package/src/icons/SidebarLeftInteractiveIcon.tsx +9 -5
  380. package/src/icons/SidebarRightInteractiveIcon.tsx +9 -5
  381. package/src/tailwind-plugin.ts +8 -5
  382. package/src/utils/cn.ts +3 -1
  383. package/src/utils/getCSSPropsAttributes.ts +13 -8
  384. package/src/utils/splitProps.ts +9 -9
  385. package/src/utils/trimReactNode.tsx +10 -8
  386. package/dist/components/base/ButtonOrLink.meta.d.ts +0 -2
  387. package/dist/components/base/ButtonOrLink.meta.d.ts.map +0 -1
  388. package/dist/components/base/ButtonOrLink.meta.js +0 -6
  389. package/dist/components/base/ButtonOrLink.meta.js.map +0 -1
  390. 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,148 +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
- disableAnchorTracking
159
- {...dirProps}
160
- >
161
- <Tooltip.Popup
162
- ref={passedRef}
163
- className={cn(
164
- `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
165
- i:origin-(--transform-origin)
166
- i:data-ending-style:opacity-0
167
- i:data-starting-style:opacity-0
168
- i:data-starting-style:data-[side=bottom]:-translate-y-1
169
- i:data-starting-style:data-[side=inline-end]:-translate-x-1
170
- i:data-starting-style:data-[side=inline-start]:translate-x-1
171
- i:data-starting-style:data-[side=top]:translate-y-1
172
- i:rtl:data-starting-style:data-[side=inline-end]:translate-x-1
173
- i:rtl:data-starting-style:data-[side=inline-start]:-translate-x-1`,
174
- className,
175
- )}
176
- {...cssPropsAttributes}
177
- {...cssPropsPolyfillAttributes}
178
- {...props}
179
- >
180
- {content}
181
- </Tooltip.Popup>
182
- </Tooltip.Positioner>
183
- </Tooltip.Portal>
184
- {/* Ensure changes to CSS props are detected even when the tooltip is not mounted */}
185
- <Portal>
186
- <span
187
- ref={cssPropsPolyfillRef}
188
- 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
+ )}
189
232
  {...cssPropsAttributes}
190
233
  {...cssPropsPolyfillAttributes}
191
234
  {...props}
192
- />
193
- </Portal>
194
- </Tooltip.Root>
195
- </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>
196
251
  </TooltipContext.Provider>
197
252
  )
198
253
  }
199
254
 
200
- export interface TooltipCollectorProps {
201
- /** Callback when a tooltip is collected from a child component. */
202
- onCollect?: ((content: DefinedReactNode) => void) | undefined
203
- children: ReactNode
204
- }
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)
205
259
 
206
- export function TooltipCollector({ onCollect, children }: TooltipCollectorProps) {
207
- return (
208
- <TooltipCollectorContext.Provider value={onCollect ?? null}>
209
- {children}
210
- </TooltipCollectorContext.Provider>
211
- )
212
- }
213
-
214
- /** Hook for components to send tooltip content up to a collector. */
215
- export function useCollectTooltip() {
216
- return useContext(TooltipCollectorContext)
217
- }
218
-
219
- /** Hook for components to collect tooltip content from children. */
220
- export function useCollectedTooltip() {
221
- const [collectedContent, setCollectedContent] = useState<DefinedReactNode>(null)
222
- const pendingContent = useRef<DefinedReactNode>(null)
223
- const pendingPriority = useRef<number>(0)
224
-
225
- // Collect tooltip during render phase (store in ref to avoid state update during render)
226
- const onCollect = (content: DefinedReactNode, priority = 0) => {
227
- // Only update if this content has higher priority than what we've collected so far
228
- if (priority >= pendingPriority.current) {
229
- pendingContent.current = content
230
- 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
231
272
  }
273
+ return pendingContentRef.current
232
274
  }
233
275
 
234
- // Commit the collected tooltip after render
235
- // 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
236
278
  useEffect(() => {
237
- if (collectedContent !== pendingContent.current) {
238
- setCollectedContent(pendingContent.current)
279
+ if (getReactNodeKey(content) !== getReactNodeKey(pendingContentRef.current)) {
280
+ setContent(pendingContentRef.current)
239
281
  }
240
282
  // Reset for next render
241
- pendingContent.current = null
242
- pendingPriority.current = 0
283
+ pendingContentRef.current = undefined
284
+ pendingPriorityRef.current = undefined
243
285
  })
244
286
 
245
- return {
246
- onCollect,
247
- collectedContent,
248
- }
287
+ return [setDeferredContent, content] as const
249
288
  }
250
289
 
251
290
  export interface TooltipContentProps {
252
- render?: RenderProps['render'] | undefined
291
+ render?: RenderProp | undefined
253
292
  children: ReactNode
254
293
  }
255
294
 
256
295
  /**
257
296
  * Wrap any text or `ReactNode` with this component to use it as the default `content` of the
258
- * 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`
259
298
  * element, so that the content rendered inline is visually hidden but accessible to screen readers,
260
299
  * unlike the content rendered in the tooltip itself, which is hidden from the accessibility tree
261
300
  * since most tooltips are decorative. This allows a tooltip to be non-decorative, in the rare case
@@ -263,15 +302,32 @@ export interface TooltipContentProps {
263
302
  * from the trigger's accessible name).
264
303
  */
265
304
  export function TooltipContent({ render, children }: TooltipContentProps) {
266
- const collectTooltip = useCollectTooltip()
305
+ const ancestorTooltip = useContext(TooltipContext)
267
306
 
268
- if (collectTooltip) {
269
- collectTooltip(children || null, 100)
270
- }
307
+ ancestorTooltip?.collectContent(children || null)
271
308
 
272
- if (render) {
273
- return <Render render={render}>{children}</Render>
274
- }
309
+ return render ? <Render render={render}>{children}</Render> : children
310
+ }
311
+ TooltipContent.displayName = 'Tooltip.Content'
312
+
313
+ const TooltipCollectorContext = createContext<SetDeferredContentFunction | null>(null)
275
314
 
276
- 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)
277
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
+ })