@sanity/ui 2.0.0-alpha.3 → 2.0.0-alpha.31

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 (637) hide show
  1. package/dist/index.cjs.mjs +37 -10
  2. package/dist/index.d.ts +445 -659
  3. package/dist/index.esm.js +737 -2925
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +1052 -3033
  6. package/dist/index.js.map +1 -1
  7. package/dist/theme.cjs.mjs +48 -0
  8. package/dist/theme.d.ts +1205 -0
  9. package/dist/theme.esm.js +4113 -0
  10. package/dist/theme.esm.js.map +1 -0
  11. package/dist/theme.js +4162 -0
  12. package/dist/theme.js.map +1 -0
  13. package/exports/index.ts +1 -0
  14. package/exports/theme.ts +1 -0
  15. package/package.json +56 -35
  16. package/src/{__workshop__ → core/__workshop__}/constants.ts +1 -3
  17. package/src/core/_compat.ts +115 -0
  18. package/src/{components → core/components}/autocomplete/__workshop__/async.tsx +4 -5
  19. package/src/{components → core/components}/autocomplete/__workshop__/constrainedHeight.tsx +27 -22
  20. package/src/{components → core/components}/autocomplete/__workshop__/custom.tsx +36 -31
  21. package/src/{components → core/components}/autocomplete/__workshop__/example.tsx +2 -2
  22. package/src/{components → core/components}/autocomplete/__workshop__/focusAndBlur.tsx +5 -3
  23. package/src/{components → core/components}/autocomplete/autocomplete.tsx +7 -1
  24. package/src/{components → core/components}/dialog/__workshop__/activate.tsx +0 -1
  25. package/src/{components → core/components}/dialog/__workshop__/layering.tsx +5 -1
  26. package/src/{components → core/components}/dialog/__workshop__/panes.tsx +2 -7
  27. package/src/{components → core/components}/dialog/dialog.tsx +25 -24
  28. package/src/{components → core/components}/dialog/styles.ts +40 -1
  29. package/src/{components → core/components}/hotkeys/hotkeys.tsx +2 -0
  30. package/src/{components → core/components}/menu/__workshop__/asComponent.tsx +4 -4
  31. package/src/{components → core/components}/menu/__workshop__/customMenuItem.tsx +9 -3
  32. package/src/{components → core/components}/menu/__workshop__/disableFocusOnClose.tsx +2 -2
  33. package/src/{components → core/components}/menu/__workshop__/menuButton.tsx +1 -1
  34. package/src/{components → core/components}/menu/menu.test.tsx +1 -1
  35. package/src/{components → core/components}/menu/menu.tsx +2 -0
  36. package/src/{components → core/components}/menu/menuButton.tsx +3 -1
  37. package/src/{components → core/components}/menu/menuGroup.tsx +22 -23
  38. package/src/{components → core/components}/menu/menuItem.tsx +29 -35
  39. package/src/{components → core/components}/skeleton/textSkeleton.tsx +1 -1
  40. package/src/{components → core/components}/tab/tab.tsx +4 -2
  41. package/src/{components → core/components}/toast/toast.test.tsx +1 -1
  42. package/src/{components → core/components}/toast/toast.tsx +13 -4
  43. package/src/{components → core/components}/tree/__workshop__/tabFromElement.tsx +1 -1
  44. package/src/{components → core/components}/tree/style.ts +6 -6
  45. package/src/{components → core/components}/tree/treeItem.tsx +3 -3
  46. package/src/{constants.ts → core/constants.ts} +1 -0
  47. package/src/{hooks → core/hooks}/useElementRect/__workshop__/example.tsx +3 -1
  48. package/src/{hooks → core/hooks}/useMediaIndex/__workshop__/test.tsx +1 -1
  49. package/src/{hooks → core/hooks}/useMediaIndex/useMediaIndex.test.tsx +2 -1
  50. package/src/{index.ts → core/index.ts} +2 -0
  51. package/src/{lib → core/lib}/isRecord.ts +1 -1
  52. package/src/{primitives → core/primitives}/_selectable/style.ts +2 -1
  53. package/src/{primitives → core/primitives}/avatar/avatar.tsx +35 -21
  54. package/src/{primitives → core/primitives}/avatar/avatarCounter.tsx +3 -3
  55. package/src/{primitives → core/primitives}/avatar/styles.ts +15 -7
  56. package/src/{primitives → core/primitives}/avatar/types.ts +2 -1
  57. package/src/{primitives → core/primitives}/badge/badge.test.tsx +1 -1
  58. package/src/{primitives → core/primitives}/badge/badge.tsx +10 -5
  59. package/src/core/primitives/badge/styles.ts +20 -0
  60. package/src/{primitives → core/primitives}/badge/types.ts +1 -2
  61. package/src/{primitives → core/primitives}/box/box.tsx +3 -0
  62. package/src/{primitives → core/primitives}/button/__workshop__/sanityUploadButton.tsx +2 -1
  63. package/src/{primitives → core/primitives}/button/__workshop__/stacked.tsx +1 -1
  64. package/src/{primitives → core/primitives}/button/button.test.tsx +1 -1
  65. package/src/{primitives → core/primitives}/button/button.tsx +8 -4
  66. package/src/{primitives → core/primitives}/button/styles.ts +27 -10
  67. package/src/{primitives → core/primitives}/card/__workshop__/asButton.tsx +6 -6
  68. package/src/{primitives → core/primitives}/card/__workshop__/asComponent.tsx +1 -1
  69. package/src/{primitives → core/primitives}/card/__workshop__/selected.tsx +2 -12
  70. package/src/{primitives → core/primitives}/card/card.tsx +6 -1
  71. package/src/{primitives → core/primitives}/card/styles.ts +2 -0
  72. package/src/{primitives → core/primitives}/card/types.ts +1 -1
  73. package/src/{primitives → core/primitives}/checkbox/__workshop__/example.tsx +1 -1
  74. package/src/{primitives → core/primitives}/checkbox/__workshop__/props.tsx +1 -1
  75. package/src/{primitives → core/primitives}/checkbox/__workshop__/readOnly.tsx +1 -1
  76. package/src/{primitives → core/primitives}/checkbox/checkbox.tsx +2 -0
  77. package/src/{primitives → core/primitives}/checkbox/styles.ts +4 -3
  78. package/src/{primitives → core/primitives}/code/code.tsx +1 -0
  79. package/src/{primitives → core/primitives}/container/container.tsx +2 -0
  80. package/src/{primitives → core/primitives}/container/styles.ts +1 -1
  81. package/src/{primitives → core/primitives}/flex/flex.tsx +2 -0
  82. package/src/{primitives → core/primitives}/grid/grid.tsx +2 -0
  83. package/src/{primitives → core/primitives}/heading/heading.tsx +3 -1
  84. package/src/{primitives → core/primitives}/inline/inline.tsx +3 -0
  85. package/src/{primitives → core/primitives}/inline/styles.ts +1 -1
  86. package/src/{primitives → core/primitives}/kbd/kbd.tsx +2 -0
  87. package/src/{primitives → core/primitives}/label/label.tsx +3 -1
  88. package/src/{primitives → core/primitives}/popover/__workshop__/RecursiveStory.tsx +2 -9
  89. package/src/{primitives → core/primitives}/popover/__workshop__/TestStory.tsx +6 -3
  90. package/src/{primitives → core/primitives}/popover/constants.ts +3 -2
  91. package/src/{primitives → core/primitives}/popover/helpers.ts +1 -1
  92. package/src/{primitives → core/primitives}/popover/popover.tsx +12 -8
  93. package/src/{primitives → core/primitives}/popover/popoverCard.tsx +22 -16
  94. package/src/{primitives → core/primitives}/radio/radio.tsx +2 -0
  95. package/src/{primitives → core/primitives}/radio/styles.ts +1 -1
  96. package/src/{primitives → core/primitives}/select/select.tsx +4 -2
  97. package/src/{primitives → core/primitives}/select/styles.ts +4 -2
  98. package/src/{primitives → core/primitives}/spinner/spinner.tsx +2 -0
  99. package/src/{primitives → core/primitives}/stack/stack.tsx +2 -0
  100. package/src/{primitives → core/primitives}/stack/styles.ts +1 -1
  101. package/src/{primitives → core/primitives}/switch/__workshop__/example.tsx +1 -1
  102. package/src/{primitives → core/primitives}/switch/styles.ts +2 -2
  103. package/src/{primitives → core/primitives}/switch/switch.tsx +4 -0
  104. package/src/{primitives → core/primitives}/text/__workshop__/colored.tsx +2 -1
  105. package/src/{primitives → core/primitives}/text/text.tsx +4 -1
  106. package/src/{primitives → core/primitives}/textArea/__workshop__/plain.tsx +1 -1
  107. package/src/{primitives → core/primitives}/textArea/textArea.tsx +6 -2
  108. package/src/{primitives → core/primitives}/textInput/__workshop__/plain.tsx +1 -1
  109. package/src/{primitives → core/primitives}/textInput/__workshop__/states.tsx +3 -3
  110. package/src/{primitives → core/primitives}/textInput/textInput.tsx +12 -2
  111. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +99 -0
  112. package/src/core/primitives/tooltip/__workshop__/index.ts +29 -0
  113. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +73 -0
  114. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +85 -0
  115. package/src/core/primitives/tooltip/conditionalWrapper.tsx +15 -0
  116. package/src/core/primitives/tooltip/constants.ts +23 -0
  117. package/src/{primitives → core/primitives}/tooltip/tooltip.test.tsx +192 -20
  118. package/src/{primitives → core/primitives}/tooltip/tooltip.tsx +199 -76
  119. package/src/{primitives → core/primitives}/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +4 -10
  120. package/src/{primitives → core/primitives}/types.ts +4 -0
  121. package/src/{styles → core/styles}/border/borderStyle.ts +16 -13
  122. package/src/{styles → core/styles}/box/boxStyle.ts +1 -1
  123. package/src/{styles → core/styles}/colorVars/colorVarsStyle.ts +3 -3
  124. package/src/{styles → core/styles}/flex/flexItemStyle.ts +1 -1
  125. package/src/{styles → core/styles}/flex/flexStyle.ts +1 -1
  126. package/src/{styles → core/styles}/focusRing/index.ts +2 -2
  127. package/src/{styles → core/styles}/font/codeFontStyle.ts +1 -1
  128. package/src/{styles → core/styles}/font/headingFontStyle.ts +1 -1
  129. package/src/{styles → core/styles}/font/labelFontStyle.ts +1 -1
  130. package/src/{styles → core/styles}/font/responsiveFont.ts +2 -2
  131. package/src/{styles → core/styles}/font/textAlignStyle.ts +1 -1
  132. package/src/{styles → core/styles}/font/textFontStyle.ts +1 -1
  133. package/src/{styles → core/styles}/font/types.ts +1 -1
  134. package/src/{styles → core/styles}/grid/gridItemStyle.ts +1 -1
  135. package/src/{styles → core/styles}/grid/gridStyle.ts +1 -1
  136. package/src/{styles → core/styles}/helpers.ts +2 -2
  137. package/src/{styles → core/styles}/input/responsiveInputPaddingStyle.ts +1 -1
  138. package/src/{styles → core/styles}/input/textInputStyle.ts +13 -8
  139. package/src/{styles → core/styles}/margin/marginStyle.ts +1 -1
  140. package/src/{styles → core/styles}/margin/marginsStyle.test.ts +1 -1
  141. package/src/{styles → core/styles}/padding/paddingStyle.test.ts +1 -1
  142. package/src/{styles → core/styles}/padding/paddingStyle.ts +1 -1
  143. package/src/{styles → core/styles}/radius/radiusStyle.ts +1 -1
  144. package/src/{styles → core/styles}/shadow/shadowStyle.ts +9 -7
  145. package/src/{styles → core/styles}/types.ts +1 -1
  146. package/src/core/theme/__workshop__/build/Root.tsx +346 -0
  147. package/src/core/theme/__workshop__/build/helpers.ts +46 -0
  148. package/src/core/theme/__workshop__/build/story.tsx +457 -0
  149. package/src/{theme → core/theme}/__workshop__/canvas.tsx +87 -113
  150. package/src/{theme → core/theme}/__workshop__/color.tsx +3 -6
  151. package/src/{theme → core/theme}/__workshop__/index.ts +5 -0
  152. package/src/{theme → core/theme}/defaults.ts +1 -1
  153. package/src/core/theme/index.ts +5 -0
  154. package/src/{theme → core/theme}/theme.test.tsx +2 -2
  155. package/src/{theme → core/theme}/themeColorProvider.tsx +2 -2
  156. package/src/{theme → core/theme}/themeProvider.tsx +3 -3
  157. package/src/core/theme/types.ts +11 -0
  158. package/src/{theme → core/theme}/useRootTheme.ts +1 -2
  159. package/src/{theme → core/theme}/useTheme.ts +1 -2
  160. package/src/core/types/badge.ts +12 -0
  161. package/src/core/types/button.ts +22 -0
  162. package/src/core/types/card.ts +6 -0
  163. package/src/{types → core/types}/index.ts +0 -1
  164. package/src/core/types/selectable.ts +6 -0
  165. package/src/core/utils/arrow/arrow.tsx +121 -0
  166. package/src/core/utils/arrow/cmds.ts +91 -0
  167. package/src/core/utils/arrow/index.ts +1 -0
  168. package/src/{utils → core/utils}/boundaryElement/__workshop__/plain.tsx +2 -6
  169. package/src/{utils → core/utils}/boundaryElement/boundaryElement.test.tsx +1 -1
  170. package/src/{utils → core/utils}/index.ts +1 -0
  171. package/src/{utils → core/utils}/layer/__workshop__/_debug.tsx +1 -1
  172. package/src/{utils → core/utils}/layer/layer.test.tsx +1 -1
  173. package/src/{utils → core/utils}/portal/__workshop__/named.tsx +3 -3
  174. package/src/{utils → core/utils}/portal/portal.test.tsx +1 -1
  175. package/src/theme/{lib/theme/color/selectable → build/_deprecated/color/_selectable}/createSelectableTones.ts +7 -4
  176. package/src/theme/{lib/theme/color/solid → build/_deprecated/color/_solid}/createSolidTones.ts +1 -3
  177. package/src/theme/{lib/theme → build/_deprecated}/color/button/createButtonModes.ts +6 -4
  178. package/src/theme/{lib/theme → build/_deprecated}/color/button/createButtonTones.ts +7 -4
  179. package/src/theme/{lib/theme → build/_deprecated}/color/card/createCardStates.ts +7 -5
  180. package/src/theme/{lib/theme → build/_deprecated}/color/color.test.ts +1 -1
  181. package/src/theme/{lib/theme → build/_deprecated}/color/defaults.ts +7 -7
  182. package/src/theme/{lib/theme → build/_deprecated}/color/factory.ts +25 -21
  183. package/src/theme/build/_deprecated/color/index.ts +1 -0
  184. package/src/theme/{lib/theme → build/_deprecated}/color/input/createInputModes.ts +1 -4
  185. package/src/theme/{lib/theme → build/_deprecated}/color/muted/createMuted.ts +2 -4
  186. package/src/theme/{lib/theme → build/_deprecated}/color/spot/createSpot.ts +1 -2
  187. package/src/theme/build/buildColorTheme.test.ts +184 -0
  188. package/src/theme/build/buildColorTheme.ts +537 -0
  189. package/src/theme/build/buildTheme.test.ts +85 -0
  190. package/src/theme/build/buildTheme.ts +28 -0
  191. package/src/theme/build/colorToken.ts +37 -0
  192. package/src/theme/build/defaults/colorPalette.ts +5 -0
  193. package/src/theme/build/defaults/colorTokens.ts +499 -0
  194. package/src/theme/{studioTheme/theme.ts → build/defaults/config.ts} +27 -28
  195. package/src/theme/build/defaults/fonts.ts +219 -0
  196. package/src/theme/build/index.ts +3 -0
  197. package/src/theme/{lib → build/lib}/color-fns/blend/index.ts +1 -0
  198. package/src/theme/build/lib/color-fns/blend/mix.ts +21 -0
  199. package/src/theme/build/lib/color-fns/blend/multiply.ts +18 -0
  200. package/src/theme/build/lib/color-fns/blend/screen.ts +18 -0
  201. package/src/theme/{lib → build/lib}/color-fns/color-fns.test.ts +10 -7
  202. package/src/theme/build/lib/color-fns/contrastRatio.ts +30 -0
  203. package/src/theme/{lib → build/lib}/color-fns/convert.ts +25 -2
  204. package/src/theme/{lib → build/lib}/color-fns/index.ts +2 -1
  205. package/src/theme/{lib → build/lib}/color-fns/parse.ts +7 -3
  206. package/src/theme/{lib/color-fns/helpers → build/lib/color-fns}/rgba.ts +1 -1
  207. package/src/theme/{lib → build/lib}/color-fns/types.ts +11 -0
  208. package/src/theme/build/lib/utils.ts +19 -0
  209. package/src/theme/build/merge.ts +23 -0
  210. package/src/theme/build/mixThemeColor.test.ts +21 -0
  211. package/src/theme/build/mixThemeColor.ts +53 -0
  212. package/src/theme/build/renderColorTheme.ts +544 -0
  213. package/src/theme/build/renderColorValue.ts +70 -0
  214. package/src/theme/build/resolveColorTokens.ts +352 -0
  215. package/src/theme/config/helpers.ts +47 -0
  216. package/src/theme/config/index.ts +4 -0
  217. package/src/theme/config/system.ts +83 -0
  218. package/src/theme/config/tokens/color/types.ts +112 -0
  219. package/src/theme/config/tokens/index.ts +4 -0
  220. package/src/theme/config/tokens/parseTokenKey.test.ts +64 -0
  221. package/src/theme/config/tokens/parseTokenKey.ts +66 -0
  222. package/src/theme/config/tokens/parseTokenValue.test.ts +45 -0
  223. package/src/theme/config/tokens/parseTokenValue.ts +102 -0
  224. package/src/theme/config/tokens/types.ts +44 -0
  225. package/src/theme/config/types.ts +51 -0
  226. package/src/theme/index.ts +4 -8
  227. package/src/theme/system/_system.ts +95 -0
  228. package/src/theme/system/avatar.ts +14 -0
  229. package/src/theme/system/color/_constants.ts +38 -0
  230. package/src/theme/{lib/theme/color/muted/types.ts → system/color/_deprecated/muted.ts} +3 -1
  231. package/src/theme/{lib/theme/color/solid/types.ts → system/color/_deprecated/solid.ts} +3 -1
  232. package/src/theme/system/color/_deprecated/spot.ts +13 -0
  233. package/src/theme/{lib/theme/color/_generic/types.ts → system/color/_generic.ts} +5 -1
  234. package/src/theme/system/color/_helpers.ts +23 -0
  235. package/src/theme/system/color/_system.ts +100 -0
  236. package/src/theme/system/color/avatar.ts +13 -0
  237. package/src/theme/system/color/badge.ts +9 -0
  238. package/src/theme/{lib/theme/color/button/types.ts → system/color/button.ts} +6 -11
  239. package/src/theme/system/color/card.ts +18 -0
  240. package/src/theme/system/color/index.ts +20 -0
  241. package/src/theme/{lib/theme/color/input/types.ts → system/color/input.ts} +3 -0
  242. package/src/theme/system/color/kbd.ts +8 -0
  243. package/src/theme/{lib/theme/color/selectable/types.ts → system/color/selectable.ts} +1 -1
  244. package/src/theme/{lib/theme → system}/index.ts +2 -1
  245. package/src/theme/{lib/theme → system}/input.ts +6 -6
  246. package/src/theme/system/shadow.ts +24 -0
  247. package/src/theme/themes/studio/config.ts +69 -0
  248. package/src/theme/{studioTheme → themes/studio}/fonts.ts +50 -50
  249. package/src/theme/themes/studio/index.ts +1 -0
  250. package/src/theme/themes/studio/studioTheme.test.ts +27 -0
  251. package/src/theme/themes/studio/studioTheme.ts +8 -0
  252. package/src/primitives/badge/styles.ts +0 -20
  253. package/src/primitives/popover/popoverArrow.tsx +0 -76
  254. package/src/primitives/tooltip/__workshop__/index.ts +0 -14
  255. package/src/primitives/tooltip/constants.ts +0 -16
  256. package/src/primitives/tooltip/tooltipArrow.tsx +0 -89
  257. package/src/theme/lib/color-fns/blend/multiply.ts +0 -22
  258. package/src/theme/lib/color-fns/blend/screen.ts +0 -22
  259. package/src/theme/lib/color-fns/helpers/index.ts +0 -1
  260. package/src/theme/lib/theme/avatar.ts +0 -12
  261. package/src/theme/lib/theme/color/base/index.ts +0 -1
  262. package/src/theme/lib/theme/color/button/index.ts +0 -1
  263. package/src/theme/lib/theme/color/card/index.ts +0 -1
  264. package/src/theme/lib/theme/color/card/types.ts +0 -18
  265. package/src/theme/lib/theme/color/index.ts +0 -14
  266. package/src/theme/lib/theme/color/input/index.ts +0 -1
  267. package/src/theme/lib/theme/color/muted/index.ts +0 -1
  268. package/src/theme/lib/theme/color/selectable/index.ts +0 -1
  269. package/src/theme/lib/theme/color/solid/index.ts +0 -1
  270. package/src/theme/lib/theme/color/spot/index.ts +0 -1
  271. package/src/theme/lib/theme/color/spot/types.ts +0 -28
  272. package/src/theme/lib/theme/color/syntax/index.ts +0 -1
  273. package/src/theme/lib/theme/color/types.ts +0 -72
  274. package/src/theme/lib/theme/shadow.ts +0 -20
  275. package/src/theme/lib/theme/theme.ts +0 -43
  276. package/src/theme/studioTheme/color.ts +0 -650
  277. package/src/theme/studioTheme/helpers.ts +0 -17
  278. package/src/theme/studioTheme/index.ts +0 -1
  279. package/src/theme/studioTheme/tints.ts +0 -152
  280. package/src/theme/types.ts +0 -47
  281. package/src/types/badge.ts +0 -9
  282. package/src/types/button.ts +0 -14
  283. package/src/types/card.ts +0 -6
  284. package/src/types/selectable.ts +0 -4
  285. package/src/types/styled.ts +0 -9
  286. /package/src/{components → core/components}/autocomplete/__fixtures__/countries.ts +0 -0
  287. /package/src/{components → core/components}/autocomplete/__mocks__/apiStore.ts +0 -0
  288. /package/src/{components → core/components}/autocomplete/__workshop__/.eslintrc +0 -0
  289. /package/src/{components → core/components}/autocomplete/__workshop__/fullscreen.tsx +0 -0
  290. /package/src/{components → core/components}/autocomplete/__workshop__/index.ts +0 -0
  291. /package/src/{components → core/components}/autocomplete/__workshop__/types.ts +0 -0
  292. /package/src/{components → core/components}/autocomplete/autocomplete.styles.tsx +0 -0
  293. /package/src/{components → core/components}/autocomplete/autocompleteOption.tsx +0 -0
  294. /package/src/{components → core/components}/autocomplete/autocompleteReducer.ts +0 -0
  295. /package/src/{components → core/components}/autocomplete/constants.ts +0 -0
  296. /package/src/{components → core/components}/autocomplete/index.ts +0 -0
  297. /package/src/{components → core/components}/autocomplete/types.ts +0 -0
  298. /package/src/{components → core/components}/breadcrumbs/__workshop__/.eslintrc +0 -0
  299. /package/src/{components → core/components}/breadcrumbs/__workshop__/example.tsx +0 -0
  300. /package/src/{components → core/components}/breadcrumbs/__workshop__/index.ts +0 -0
  301. /package/src/{components → core/components}/breadcrumbs/breadcrumbs.styles.ts +0 -0
  302. /package/src/{components → core/components}/breadcrumbs/breadcrumbs.tsx +0 -0
  303. /package/src/{components → core/components}/breadcrumbs/index.ts +0 -0
  304. /package/src/{components → core/components}/dialog/__workshop__/.eslintrc +0 -0
  305. /package/src/{components → core/components}/dialog/__workshop__/autoFocus.tsx +0 -0
  306. /package/src/{components → core/components}/dialog/__workshop__/index.ts +0 -0
  307. /package/src/{components → core/components}/dialog/__workshop__/nested.tsx +0 -0
  308. /package/src/{components → core/components}/dialog/__workshop__/onScroll.tsx +0 -0
  309. /package/src/{components → core/components}/dialog/__workshop__/position.tsx +0 -0
  310. /package/src/{components → core/components}/dialog/__workshop__/props.tsx +0 -0
  311. /package/src/{components → core/components}/dialog/__workshop__/provider.tsx +0 -0
  312. /package/src/{components → core/components}/dialog/__workshop__/wrapped.tsx +0 -0
  313. /package/src/{components → core/components}/dialog/dialogContext.ts +0 -0
  314. /package/src/{components → core/components}/dialog/dialogProvider.tsx +0 -0
  315. /package/src/{components → core/components}/dialog/index.ts +0 -0
  316. /package/src/{components → core/components}/dialog/useDialog.ts +0 -0
  317. /package/src/{components → core/components}/hotkeys/__workshop__/.eslintrc +0 -0
  318. /package/src/{components → core/components}/hotkeys/__workshop__/index.ts +0 -0
  319. /package/src/{components → core/components}/hotkeys/__workshop__/plain.tsx +0 -0
  320. /package/src/{components → core/components}/hotkeys/index.ts +0 -0
  321. /package/src/{components → core/components}/index.ts +0 -0
  322. /package/src/{components → core/components}/menu/__workshop__/.eslintrc +0 -0
  323. /package/src/{components → core/components}/menu/__workshop__/closableMenuButton.tsx +0 -0
  324. /package/src/{components → core/components}/menu/__workshop__/constrainedInBoundary.tsx +0 -0
  325. /package/src/{components → core/components}/menu/__workshop__/groups.tsx +0 -0
  326. /package/src/{components → core/components}/menu/__workshop__/index.ts +0 -0
  327. /package/src/{components → core/components}/menu/__workshop__/menuGroupRight.tsx +0 -0
  328. /package/src/{components → core/components}/menu/__workshop__/nestedMenu.tsx +0 -0
  329. /package/src/{components → core/components}/menu/__workshop__/onCloseMenuButton.tsx +0 -0
  330. /package/src/{components → core/components}/menu/__workshop__/selectedItem.tsx +0 -0
  331. /package/src/{components → core/components}/menu/__workshop__/shouldFocus.tsx +0 -0
  332. /package/src/{components → core/components}/menu/__workshop__/tones.tsx +0 -0
  333. /package/src/{components → core/components}/menu/__workshop__/withoutArrow.tsx +0 -0
  334. /package/src/{components → core/components}/menu/helpers.ts +0 -0
  335. /package/src/{components → core/components}/menu/index.ts +0 -0
  336. /package/src/{components → core/components}/menu/menuContext.ts +0 -0
  337. /package/src/{components → core/components}/menu/menuDivider.ts +0 -0
  338. /package/src/{components → core/components}/menu/useMenu.ts +0 -0
  339. /package/src/{components → core/components}/menu/useMenuController.ts +0 -0
  340. /package/src/{components → core/components}/skeleton/__workshop__/.eslintrc +0 -0
  341. /package/src/{components → core/components}/skeleton/__workshop__/delay.tsx +0 -0
  342. /package/src/{components → core/components}/skeleton/__workshop__/index.ts +0 -0
  343. /package/src/{components → core/components}/skeleton/__workshop__/skeleton.tsx +0 -0
  344. /package/src/{components → core/components}/skeleton/index.ts +0 -0
  345. /package/src/{components → core/components}/skeleton/skeleton.tsx +0 -0
  346. /package/src/{components → core/components}/skeleton/styles.ts +0 -0
  347. /package/src/{components → core/components}/tab/__workshop__/.eslintrc +0 -0
  348. /package/src/{components → core/components}/tab/__workshop__/example.tsx +0 -0
  349. /package/src/{components → core/components}/tab/__workshop__/index.ts +0 -0
  350. /package/src/{components → core/components}/tab/index.ts +0 -0
  351. /package/src/{components → core/components}/tab/tabList.tsx +0 -0
  352. /package/src/{components → core/components}/tab/tabPanel.tsx +0 -0
  353. /package/src/{components → core/components}/toast/__workshop__/.eslintrc +0 -0
  354. /package/src/{components → core/components}/toast/__workshop__/hook.tsx +0 -0
  355. /package/src/{components → core/components}/toast/__workshop__/index.ts +0 -0
  356. /package/src/{components → core/components}/toast/__workshop__/toast.tsx +0 -0
  357. /package/src/{components → core/components}/toast/index.ts +0 -0
  358. /package/src/{components → core/components}/toast/toastContext.ts +0 -0
  359. /package/src/{components → core/components}/toast/toastProvider.tsx +0 -0
  360. /package/src/{components → core/components}/toast/types.ts +0 -0
  361. /package/src/{components → core/components}/toast/useToast.ts +0 -0
  362. /package/src/{components → core/components}/tree/__workshop__/.eslintrc +0 -0
  363. /package/src/{components → core/components}/tree/__workshop__/basic.perf.ts +0 -0
  364. /package/src/{components → core/components}/tree/__workshop__/basic.tsx +0 -0
  365. /package/src/{components → core/components}/tree/__workshop__/index.ts +0 -0
  366. /package/src/{components → core/components}/tree/helpers.ts +0 -0
  367. /package/src/{components → core/components}/tree/index.ts +0 -0
  368. /package/src/{components → core/components}/tree/tree.tsx +0 -0
  369. /package/src/{components → core/components}/tree/treeContext.ts +0 -0
  370. /package/src/{components → core/components}/tree/treeGroup.tsx +0 -0
  371. /package/src/{components → core/components}/tree/types.ts +0 -0
  372. /package/src/{components → core/components}/tree/useTree.ts +0 -0
  373. /package/src/{global.ts → core/global.ts} +0 -0
  374. /package/src/{helpers → core/helpers}/animation.ts +0 -0
  375. /package/src/{helpers → core/helpers}/element.ts +0 -0
  376. /package/src/{helpers → core/helpers}/focus.ts +0 -0
  377. /package/src/{helpers → core/helpers}/index.ts +0 -0
  378. /package/src/{helpers → core/helpers}/scroll.ts +0 -0
  379. /package/src/{hooks → core/hooks}/_internal/index.ts +0 -0
  380. /package/src/{hooks → core/hooks}/_internal/useUnique.ts +0 -0
  381. /package/src/{hooks → core/hooks}/index.ts +0 -0
  382. /package/src/{hooks → core/hooks}/useArrayProp.ts +0 -0
  383. /package/src/{hooks → core/hooks}/useClickOutside.ts +0 -0
  384. /package/src/{hooks → core/hooks}/useCustomValidity.ts +0 -0
  385. /package/src/{hooks → core/hooks}/useDelayed.test.ts +0 -0
  386. /package/src/{hooks → core/hooks}/useDelayedState.ts +0 -0
  387. /package/src/{hooks → core/hooks}/useElementRect/__workshop__/.eslintrc +0 -0
  388. /package/src/{hooks → core/hooks}/useElementRect/__workshop__/index.ts +0 -0
  389. /package/src/{hooks → core/hooks}/useElementRect/index.ts +0 -0
  390. /package/src/{hooks → core/hooks}/useElementRect/useElementRect.ts +0 -0
  391. /package/src/{hooks → core/hooks}/useElementSize.ts +0 -0
  392. /package/src/{hooks → core/hooks}/useForwardedRef.ts +0 -0
  393. /package/src/{hooks → core/hooks}/useGlobalKeyDown.ts +0 -0
  394. /package/src/{hooks → core/hooks}/useIsomorphicEffect.ts +0 -0
  395. /package/src/{hooks → core/hooks}/useMediaIndex/__workshop__/.eslintrc +0 -0
  396. /package/src/{hooks → core/hooks}/useMediaIndex/__workshop__/index.ts +0 -0
  397. /package/src/{hooks → core/hooks}/useMediaIndex/index.ts +0 -0
  398. /package/src/{hooks → core/hooks}/useMediaIndex/useMediaIndex.ts +0 -0
  399. /package/src/{hooks → core/hooks}/useMounted.ts +0 -0
  400. /package/src/{hooks → core/hooks}/usePrefersDark.hydration.test.tsx +0 -0
  401. /package/src/{hooks → core/hooks}/usePrefersDark.test.tsx +0 -0
  402. /package/src/{hooks → core/hooks}/usePrefersDark.ts +0 -0
  403. /package/src/{hooks → core/hooks}/usePrefersReducedMotion.hydration.test.tsx +0 -0
  404. /package/src/{hooks → core/hooks}/usePrefersReducedMotion.test.tsx +0 -0
  405. /package/src/{hooks → core/hooks}/usePrefersReducedMotion.ts +0 -0
  406. /package/src/{lib → core/lib}/globalScope.ts +0 -0
  407. /package/src/{observers → core/observers}/elementSizeObserver.ts +0 -0
  408. /package/src/{observers → core/observers}/index.ts +0 -0
  409. /package/src/{observers → core/observers}/resizeObserver.ts +0 -0
  410. /package/src/{primitives → core/primitives}/_selectable/index.ts +0 -0
  411. /package/src/{primitives → core/primitives}/_selectable/selectable.tsx +0 -0
  412. /package/src/{primitives → core/primitives}/avatar/__workshop__/.eslintrc +0 -0
  413. /package/src/{primitives → core/primitives}/avatar/__workshop__/asButton.tsx +0 -0
  414. /package/src/{primitives → core/primitives}/avatar/__workshop__/index.ts +0 -0
  415. /package/src/{primitives → core/primitives}/avatar/__workshop__/stack.tsx +0 -0
  416. /package/src/{primitives → core/primitives}/avatar/avatarStack.tsx +0 -0
  417. /package/src/{primitives → core/primitives}/avatar/index.ts +0 -0
  418. /package/src/{primitives → core/primitives}/badge/__workshop__/.eslintrc +0 -0
  419. /package/src/{primitives → core/primitives}/badge/__workshop__/index.ts +0 -0
  420. /package/src/{primitives → core/primitives}/badge/__workshop__/props.tsx +0 -0
  421. /package/src/{primitives → core/primitives}/badge/__workshop__/tones.tsx +0 -0
  422. /package/src/{primitives → core/primitives}/badge/index.ts +0 -0
  423. /package/src/{primitives → core/primitives}/box/__workshop__/.eslintrc +0 -0
  424. /package/src/{primitives → core/primitives}/box/__workshop__/index.ts +0 -0
  425. /package/src/{primitives → core/primitives}/box/__workshop__/props.tsx +0 -0
  426. /package/src/{primitives → core/primitives}/box/__workshop__/responsive.tsx +0 -0
  427. /package/src/{primitives → core/primitives}/box/index.ts +0 -0
  428. /package/src/{primitives → core/primitives}/button/__workshop__/.eslintrc +0 -0
  429. /package/src/{primitives → core/primitives}/button/__workshop__/custom.tsx +0 -0
  430. /package/src/{primitives → core/primitives}/button/__workshop__/customIcons.tsx +0 -0
  431. /package/src/{primitives → core/primitives}/button/__workshop__/index.ts +0 -0
  432. /package/src/{primitives → core/primitives}/button/__workshop__/mixedChildren.tsx +0 -0
  433. /package/src/{primitives → core/primitives}/button/__workshop__/props.tsx +0 -0
  434. /package/src/{primitives → core/primitives}/button/__workshop__/styled1.tsx +0 -0
  435. /package/src/{primitives → core/primitives}/button/__workshop__/styled2.tsx +0 -0
  436. /package/src/{primitives → core/primitives}/button/__workshop__/uploadButton.tsx +0 -0
  437. /package/src/{primitives → core/primitives}/button/index.ts +0 -0
  438. /package/src/{primitives → core/primitives}/card/__workshop__/.eslintrc +0 -0
  439. /package/src/{primitives → core/primitives}/card/__workshop__/allTones.tsx +0 -0
  440. /package/src/{primitives → core/primitives}/card/__workshop__/checkered.tsx +0 -0
  441. /package/src/{primitives → core/primitives}/card/__workshop__/index.ts +0 -0
  442. /package/src/{primitives → core/primitives}/card/__workshop__/interactive.tsx +0 -0
  443. /package/src/{primitives → core/primitives}/card/__workshop__/listNavigation.tsx +0 -0
  444. /package/src/{primitives → core/primitives}/card/__workshop__/props.tsx +0 -0
  445. /package/src/{primitives → core/primitives}/card/__workshop__/styled.tsx +0 -0
  446. /package/src/{primitives → core/primitives}/card/index.ts +0 -0
  447. /package/src/{primitives → core/primitives}/checkbox/__workshop__/.eslintrc +0 -0
  448. /package/src/{primitives → core/primitives}/checkbox/__workshop__/index.ts +0 -0
  449. /package/src/{primitives → core/primitives}/checkbox/__workshop__/tones.tsx +0 -0
  450. /package/src/{primitives → core/primitives}/checkbox/index.ts +0 -0
  451. /package/src/{primitives → core/primitives}/code/__workshop__/.eslintrc +0 -0
  452. /package/src/{primitives → core/primitives}/code/__workshop__/index.ts +0 -0
  453. /package/src/{primitives → core/primitives}/code/__workshop__/opticalAlignment.tsx +0 -0
  454. /package/src/{primitives → core/primitives}/code/__workshop__/props.tsx +0 -0
  455. /package/src/{primitives → core/primitives}/code/index.ts +0 -0
  456. /package/src/{primitives → core/primitives}/code/styles.ts +0 -0
  457. /package/src/{primitives → core/primitives}/container/__workshop__/.eslintrc +0 -0
  458. /package/src/{primitives → core/primitives}/container/__workshop__/example.tsx +0 -0
  459. /package/src/{primitives → core/primitives}/container/__workshop__/index.ts +0 -0
  460. /package/src/{primitives → core/primitives}/container/index.ts +0 -0
  461. /package/src/{primitives → core/primitives}/container/types.ts +0 -0
  462. /package/src/{primitives → core/primitives}/flex/__workshop__/.eslintrc +0 -0
  463. /package/src/{primitives → core/primitives}/flex/__workshop__/example.tsx +0 -0
  464. /package/src/{primitives → core/primitives}/flex/__workshop__/gap.tsx +0 -0
  465. /package/src/{primitives → core/primitives}/flex/__workshop__/index.ts +0 -0
  466. /package/src/{primitives → core/primitives}/flex/index.ts +0 -0
  467. /package/src/{primitives → core/primitives}/grid/__workshop__/.eslintrc +0 -0
  468. /package/src/{primitives → core/primitives}/grid/__workshop__/index.ts +0 -0
  469. /package/src/{primitives → core/primitives}/grid/__workshop__/responsive.tsx +0 -0
  470. /package/src/{primitives → core/primitives}/grid/index.ts +0 -0
  471. /package/src/{primitives → core/primitives}/heading/__workshop__/.eslintrc +0 -0
  472. /package/src/{primitives → core/primitives}/heading/__workshop__/index.ts +0 -0
  473. /package/src/{primitives → core/primitives}/heading/__workshop__/opticalAlignment.tsx +0 -0
  474. /package/src/{primitives → core/primitives}/heading/__workshop__/plain.tsx +0 -0
  475. /package/src/{primitives → core/primitives}/heading/index.ts +0 -0
  476. /package/src/{primitives → core/primitives}/heading/styles.ts +0 -0
  477. /package/src/{primitives → core/primitives}/heading/types.ts +0 -0
  478. /package/src/{primitives → core/primitives}/helpers.ts +0 -0
  479. /package/src/{primitives → core/primitives}/index.ts +0 -0
  480. /package/src/{primitives → core/primitives}/inline/__workshop__/.eslintrc +0 -0
  481. /package/src/{primitives → core/primitives}/inline/__workshop__/index.ts +0 -0
  482. /package/src/{primitives → core/primitives}/inline/__workshop__/plain.tsx +0 -0
  483. /package/src/{primitives → core/primitives}/inline/index.ts +0 -0
  484. /package/src/{primitives → core/primitives}/inline/types.ts +0 -0
  485. /package/src/{primitives → core/primitives}/kbd/__workshop__/.eslintrc +0 -0
  486. /package/src/{primitives → core/primitives}/kbd/__workshop__/index.ts +0 -0
  487. /package/src/{primitives → core/primitives}/kbd/__workshop__/plain.tsx +0 -0
  488. /package/src/{primitives → core/primitives}/kbd/index.tsx +0 -0
  489. /package/src/{primitives → core/primitives}/label/__workshop__/.eslintrc +0 -0
  490. /package/src/{primitives → core/primitives}/label/__workshop__/index.ts +0 -0
  491. /package/src/{primitives → core/primitives}/label/__workshop__/opticalAlignment.tsx +0 -0
  492. /package/src/{primitives → core/primitives}/label/__workshop__/plain.tsx +0 -0
  493. /package/src/{primitives → core/primitives}/label/index.ts +0 -0
  494. /package/src/{primitives → core/primitives}/label/styles.ts +0 -0
  495. /package/src/{primitives → core/primitives}/popover/__workshop__/.eslintrc +0 -0
  496. /package/src/{primitives → core/primitives}/popover/__workshop__/AlignedStory.tsx +0 -0
  497. /package/src/{primitives → core/primitives}/popover/__workshop__/MarginsStory.tsx +0 -0
  498. /package/src/{primitives → core/primitives}/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -0
  499. /package/src/{primitives → core/primitives}/popover/__workshop__/OpenOnMountStory.tsx +0 -0
  500. /package/src/{primitives → core/primitives}/popover/__workshop__/PlainStory.tsx +0 -0
  501. /package/src/{primitives → core/primitives}/popover/__workshop__/SidePanelStory.tsx +0 -0
  502. /package/src/{primitives → core/primitives}/popover/__workshop__/index.ts +0 -0
  503. /package/src/{primitives → core/primitives}/popover/floating-ui/size.ts +0 -0
  504. /package/src/{primitives → core/primitives}/popover/index.ts +0 -0
  505. /package/src/{primitives → core/primitives}/popover/types.ts +0 -0
  506. /package/src/{primitives → core/primitives}/radio/__workshop__/.eslintrc +0 -0
  507. /package/src/{primitives → core/primitives}/radio/__workshop__/example.tsx +0 -0
  508. /package/src/{primitives → core/primitives}/radio/__workshop__/index.ts +0 -0
  509. /package/src/{primitives → core/primitives}/radio/__workshop__/plain.tsx +0 -0
  510. /package/src/{primitives → core/primitives}/radio/index.ts +0 -0
  511. /package/src/{primitives → core/primitives}/select/__workshop__/.eslintrc +0 -0
  512. /package/src/{primitives → core/primitives}/select/__workshop__/index.ts +0 -0
  513. /package/src/{primitives → core/primitives}/select/__workshop__/plain.tsx +0 -0
  514. /package/src/{primitives → core/primitives}/select/__workshop__/readOnly.tsx +0 -0
  515. /package/src/{primitives → core/primitives}/select/index.ts +0 -0
  516. /package/src/{primitives → core/primitives}/spinner/__workshop__/.eslintrc +0 -0
  517. /package/src/{primitives → core/primitives}/spinner/__workshop__/Props.tsx +0 -0
  518. /package/src/{primitives → core/primitives}/spinner/__workshop__/index.ts +0 -0
  519. /package/src/{primitives → core/primitives}/spinner/index.ts +0 -0
  520. /package/src/{primitives → core/primitives}/stack/__workshop__/.eslintrc +0 -0
  521. /package/src/{primitives → core/primitives}/stack/__workshop__/index.ts +0 -0
  522. /package/src/{primitives → core/primitives}/stack/__workshop__/plain.tsx +0 -0
  523. /package/src/{primitives → core/primitives}/stack/index.ts +0 -0
  524. /package/src/{primitives → core/primitives}/switch/__workshop__/.eslintrc +0 -0
  525. /package/src/{primitives → core/primitives}/switch/__workshop__/index.ts +0 -0
  526. /package/src/{primitives → core/primitives}/switch/__workshop__/props.tsx +0 -0
  527. /package/src/{primitives → core/primitives}/switch/index.ts +0 -0
  528. /package/src/{primitives → core/primitives}/text/__workshop__/.eslintrc +0 -0
  529. /package/src/{primitives → core/primitives}/text/__workshop__/example.tsx +0 -0
  530. /package/src/{primitives → core/primitives}/text/__workshop__/index.ts +0 -0
  531. /package/src/{primitives → core/primitives}/text/__workshop__/opticalAlignment.tsx +0 -0
  532. /package/src/{primitives → core/primitives}/text/index.ts +0 -0
  533. /package/src/{primitives → core/primitives}/text/styles.ts +0 -0
  534. /package/src/{primitives → core/primitives}/textArea/__workshop__/.eslintrc +0 -0
  535. /package/src/{primitives → core/primitives}/textArea/__workshop__/index.ts +0 -0
  536. /package/src/{primitives → core/primitives}/textArea/index.ts +0 -0
  537. /package/src/{primitives → core/primitives}/textInput/__workshop__/.eslintrc +0 -0
  538. /package/src/{primitives → core/primitives}/textInput/__workshop__/clearButton.tsx +0 -0
  539. /package/src/{primitives → core/primitives}/textInput/__workshop__/customValidity.tsx +0 -0
  540. /package/src/{primitives → core/primitives}/textInput/__workshop__/index.ts +0 -0
  541. /package/src/{primitives → core/primitives}/textInput/__workshop__/multipleTones.tsx +0 -0
  542. /package/src/{primitives → core/primitives}/textInput/__workshop__/readOnly.tsx +0 -0
  543. /package/src/{primitives → core/primitives}/textInput/__workshop__/tones.tsx +0 -0
  544. /package/src/{primitives → core/primitives}/textInput/__workshop__/typed.tsx +0 -0
  545. /package/src/{primitives → core/primitives}/textInput/index.ts +0 -0
  546. /package/src/{primitives → core/primitives}/tooltip/__workshop__/.eslintrc +0 -0
  547. /package/src/{primitives → core/primitives}/tooltip/__workshop__/props.tsx +0 -0
  548. /package/src/{primitives → core/primitives}/tooltip/index.ts +0 -0
  549. /package/src/{primitives → core/primitives}/tooltip/tooltipDelayGroup/index.ts +0 -0
  550. /package/src/{primitives → core/primitives}/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -0
  551. /package/src/{primitives → core/primitives}/tooltip/tooltipDelayGroup/types.ts +0 -0
  552. /package/src/{primitives → core/primitives}/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -0
  553. /package/src/{styles → core/styles}/border/index.ts +0 -0
  554. /package/src/{styles → core/styles}/border/types.ts +0 -0
  555. /package/src/{styles → core/styles}/box/index.ts +0 -0
  556. /package/src/{styles → core/styles}/box/types.ts +0 -0
  557. /package/src/{styles → core/styles}/colorVars/index.ts +0 -0
  558. /package/src/{styles → core/styles}/flex/index.ts +0 -0
  559. /package/src/{styles → core/styles}/flex/types.ts +0 -0
  560. /package/src/{styles → core/styles}/font/index.ts +0 -0
  561. /package/src/{styles → core/styles}/grid/index.ts +0 -0
  562. /package/src/{styles → core/styles}/grid/types.ts +0 -0
  563. /package/src/{styles → core/styles}/index.ts +0 -0
  564. /package/src/{styles → core/styles}/input/index.ts +0 -0
  565. /package/src/{styles → core/styles}/internal.ts +0 -0
  566. /package/src/{styles → core/styles}/margin/index.ts +0 -0
  567. /package/src/{styles → core/styles}/margin/types.ts +0 -0
  568. /package/src/{styles → core/styles}/padding/index.ts +0 -0
  569. /package/src/{styles → core/styles}/padding/types.ts +0 -0
  570. /package/src/{styles → core/styles}/radius/index.ts +0 -0
  571. /package/src/{styles → core/styles}/radius/types.ts +0 -0
  572. /package/src/{styles → core/styles}/shadow/index.ts +0 -0
  573. /package/src/{styles → core/styles}/shadow/types.ts +0 -0
  574. /package/src/{theme → core/theme}/__workshop__/.eslintrc +0 -0
  575. /package/src/{theme → core/theme}/__workshop__/layer.tsx +0 -0
  576. /package/src/{theme → core/theme}/__workshop__/nestedProvider.tsx +0 -0
  577. /package/src/{theme → core/theme}/themeContext.ts +0 -0
  578. /package/src/{types → core/types}/avatar.ts +0 -0
  579. /package/src/{types → core/types}/box.ts +0 -0
  580. /package/src/{types → core/types}/dialog.ts +0 -0
  581. /package/src/{types → core/types}/flex.ts +0 -0
  582. /package/src/{types → core/types}/grid.ts +0 -0
  583. /package/src/{types → core/types}/gridItem.ts +0 -0
  584. /package/src/{types → core/types}/placement.ts +0 -0
  585. /package/src/{types → core/types}/popover.ts +0 -0
  586. /package/src/{types → core/types}/radius.ts +0 -0
  587. /package/src/{types → core/types}/text.ts +0 -0
  588. /package/src/{utils → core/utils}/boundaryElement/__workshop__/.eslintrc +0 -0
  589. /package/src/{utils → core/utils}/boundaryElement/__workshop__/index.ts +0 -0
  590. /package/src/{utils → core/utils}/boundaryElement/boundaryElementContext.ts +0 -0
  591. /package/src/{utils → core/utils}/boundaryElement/boundaryElementProvider.tsx +0 -0
  592. /package/src/{utils → core/utils}/boundaryElement/index.ts +0 -0
  593. /package/src/{utils → core/utils}/boundaryElement/types.ts +0 -0
  594. /package/src/{utils → core/utils}/boundaryElement/useBoundaryElement.ts +0 -0
  595. /package/src/{utils → core/utils}/elementQuery/__workshop__/.eslintrc +0 -0
  596. /package/src/{utils → core/utils}/elementQuery/__workshop__/customMedia.tsx +0 -0
  597. /package/src/{utils → core/utils}/elementQuery/__workshop__/index.ts +0 -0
  598. /package/src/{utils → core/utils}/elementQuery/elementQuery.tsx +0 -0
  599. /package/src/{utils → core/utils}/elementQuery/helpers.ts +0 -0
  600. /package/src/{utils → core/utils}/elementQuery/index.ts +0 -0
  601. /package/src/{utils → core/utils}/errorBoundary.tsx +0 -0
  602. /package/src/{utils → core/utils}/layer/__workshop__/.eslintrc +0 -0
  603. /package/src/{utils → core/utils}/layer/__workshop__/index.ts +0 -0
  604. /package/src/{utils → core/utils}/layer/__workshop__/multipleRoots.tsx +0 -0
  605. /package/src/{utils → core/utils}/layer/__workshop__/nested.tsx +0 -0
  606. /package/src/{utils → core/utils}/layer/__workshop__/responsiveZOffset.tsx +0 -0
  607. /package/src/{utils → core/utils}/layer/getLayerContext.test.ts +0 -0
  608. /package/src/{utils → core/utils}/layer/getLayerContext.ts +0 -0
  609. /package/src/{utils → core/utils}/layer/index.ts +0 -0
  610. /package/src/{utils → core/utils}/layer/layer.tsx +0 -0
  611. /package/src/{utils → core/utils}/layer/layerContext.ts +0 -0
  612. /package/src/{utils → core/utils}/layer/layerProvider.tsx +0 -0
  613. /package/src/{utils → core/utils}/layer/types.ts +0 -0
  614. /package/src/{utils → core/utils}/layer/useLayer.ts +0 -0
  615. /package/src/{utils → core/utils}/portal/__workshop__/.eslintrc +0 -0
  616. /package/src/{utils → core/utils}/portal/__workshop__/index.ts +0 -0
  617. /package/src/{utils → core/utils}/portal/index.ts +0 -0
  618. /package/src/{utils → core/utils}/portal/portal.ts +0 -0
  619. /package/src/{utils → core/utils}/portal/portalContext.ts +0 -0
  620. /package/src/{utils → core/utils}/portal/portalProvider.tsx +0 -0
  621. /package/src/{utils → core/utils}/portal/types.ts +0 -0
  622. /package/src/{utils → core/utils}/portal/usePortal.ts +0 -0
  623. /package/src/{utils → core/utils}/srOnly/index.ts +0 -0
  624. /package/src/{utils → core/utils}/srOnly/srOnly.tsx +0 -0
  625. /package/src/{utils → core/utils}/virtualList/__workshop__/.eslintrc +0 -0
  626. /package/src/{utils → core/utils}/virtualList/__workshop__/changingProps.tsx +0 -0
  627. /package/src/{utils → core/utils}/virtualList/__workshop__/elementScroll.tsx +0 -0
  628. /package/src/{utils → core/utils}/virtualList/__workshop__/index.ts +0 -0
  629. /package/src/{utils → core/utils}/virtualList/__workshop__/infiniteList.tsx +0 -0
  630. /package/src/{utils → core/utils}/virtualList/__workshop__/windowScrolll.tsx +0 -0
  631. /package/src/{utils → core/utils}/virtualList/index.ts +0 -0
  632. /package/src/{utils → core/utils}/virtualList/virtualList.tsx +0 -0
  633. /package/src/theme/{lib/theme/color/_generic → config/tokens/color}/index.ts +0 -0
  634. /package/src/theme/{lib/theme/color/base/types.ts → system/color/base.ts} +0 -0
  635. /package/src/theme/{lib/theme/color/syntax/types.ts → system/color/syntax.ts} +0 -0
  636. /package/src/theme/{lib/theme → system}/fonts.ts +0 -0
  637. /package/src/theme/{lib/theme → system}/layer.ts +0 -0
@@ -1,11 +1,22 @@
1
1
  /** @jest-environment jsdom */
2
2
  import {screen, act, fireEvent} from '@testing-library/react'
3
- import '../../../test/mocks/resizeObserver.mock'
4
- import '../../../test/mocks/matchMedia.mock'
5
- import {render} from '../../../test'
3
+ import '../../../../test/mocks/resizeObserver.mock'
4
+ import '../../../../test/mocks/matchMedia.mock'
5
+ import {render} from '../../../../test'
6
6
  import {Text, Button} from '../../primitives'
7
7
  import {Tooltip, TooltipDelayGroupProvider} from '../tooltip'
8
8
 
9
+ // Fake timers using Jest
10
+ beforeEach(() => {
11
+ jest.useFakeTimers()
12
+ })
13
+
14
+ // Running all pending timers and switching to real timers using Jest
15
+ afterEach(() => {
16
+ jest.runOnlyPendingTimers()
17
+ jest.useRealTimers()
18
+ })
19
+
9
20
  describe('Tooltip', () => {
10
21
  describe('Using same delay for open and close', () => {
11
22
  it('should hide and show the tooltip content when hovered, with no delay', () => {
@@ -254,25 +265,186 @@ describe('Tooltip', () => {
254
265
  act(() => jest.advanceTimersByTime(openDelay / 2))
255
266
  screen.getByText('Tooltip 2')
256
267
  })
257
- it("should throw an error if it's nested inside another <TooltipDelayGroupProvider />", () => {
258
- // eslint-disable-next-line no-console
259
- console.error = jest.fn() // Silence console.error as we are actually expecting an error in this test.
260
- expect(() => {
261
- render(
262
- <TooltipDelayGroupProvider delay={100}>
263
- <TooltipDelayGroupProvider delay={100}>
264
- <Tooltip content={<Text size={1}>{'Tooltip 1'}</Text>} placement={'top'} delay={400}>
265
- <Button mode="bleed" text="Button 1" />
266
- </Tooltip>
267
- </TooltipDelayGroupProvider>
268
- </TooltipDelayGroupProvider>,
269
- )
270
- }).toThrow(
271
- 'TooltipDelayGroupProvider cannot be nested inside another TooltipDelayGroupProvider',
268
+ })
269
+
270
+ describe('Closing the <Tooltip /> with the Escape key', () => {
271
+ it('Standalone tooltip closes immediately with Escape key', () => {
272
+ const delay = 150
273
+
274
+ jest.useFakeTimers()
275
+
276
+ render(
277
+ <Tooltip
278
+ content={<Text size={1}>{'Tooltip content'}</Text>}
279
+ placement={'top'}
280
+ delay={delay}
281
+ >
282
+ <Button mode="bleed" text="Hover me" />
283
+ </Tooltip>,
284
+ )
285
+
286
+ const button = screen.getByText('Hover me')
287
+
288
+ // Validate tooltip content is not rendered
289
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
290
+ fireEvent.focus(button)
291
+ act(() => jest.advanceTimersByTime(delay))
292
+
293
+ // Validate tooltip content is rendered
294
+ screen.getByText('Tooltip content')
295
+
296
+ act(() => {
297
+ fireEvent.keyDown(button, {key: 'Escape', code: 'Escape'})
298
+ })
299
+ // Validate tooltip content is not rendered anymore
300
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
301
+ })
302
+ it('With <TooltipDelayGroupProvider /> closes immediately with Escape key', () => {
303
+ const delay = 150
304
+
305
+ jest.useFakeTimers()
306
+
307
+ render(
308
+ <TooltipDelayGroupProvider delay={{close: delay}}>
309
+ <Tooltip
310
+ content={<Text size={1}>{'Tooltip content'}</Text>}
311
+ placement={'top'}
312
+ delay={{close: delay}}
313
+ >
314
+ <Button mode="bleed" text="Hover me" />
315
+ </Tooltip>
316
+ </TooltipDelayGroupProvider>,
272
317
  )
273
318
 
274
- // Clean up the console.error mock
275
- jest.clearAllMocks()
319
+ const button = screen.getByText('Hover me')
320
+
321
+ // Validate tooltip content is not rendered
322
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
323
+ fireEvent.focus(button)
324
+
325
+ act(() => jest.advanceTimersByTime(delay))
326
+
327
+ // Validate tooltip content is rendered
328
+ screen.getByText('Tooltip content')
329
+
330
+ act(() => {
331
+ fireEvent.keyDown(button, {key: 'Escape', code: 'Escape'})
332
+ })
333
+ // Validate tooltip content is not rendered anymore
334
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
335
+ })
336
+ })
337
+
338
+ describe('Clicking the <Tooltip /> child should close the tooltip', () => {
339
+ it('Should close the tooltip when clicked', () => {
340
+ const delay = 150
341
+
342
+ render(
343
+ <Tooltip content={<Text size={1}>{'Tooltip content'}</Text>} delay={delay}>
344
+ <Button mode="bleed" text="Hover me" />
345
+ </Tooltip>,
346
+ )
347
+
348
+ const button = screen.getByText('Hover me')
349
+
350
+ // Assertion: tooltip does not exist in the document
351
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
352
+ fireEvent.focus(button)
353
+
354
+ act(() => jest.advanceTimersByTime(delay))
355
+
356
+ // Assertion: the tooltip is not visible
357
+ expect(screen.queryByText('Tooltip content')).toBeVisible()
358
+
359
+ act(() => fireEvent.click(button))
360
+
361
+ // Assertion: tooltip does not exist in the document
362
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
363
+ })
364
+
365
+ it('Should close the tooltip when the context menu is opened (right click)', () => {
366
+ const delay = 150
367
+
368
+ render(
369
+ <Tooltip content={<Text size={1}>{'Tooltip content'}</Text>} delay={delay}>
370
+ <Button mode="bleed" text="Hover me" />
371
+ </Tooltip>,
372
+ )
373
+
374
+ const button = screen.getByText('Hover me')
375
+
376
+ // Assertion: tooltip does not exist in the document
377
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
378
+ fireEvent.focus(button)
379
+
380
+ act(() => jest.advanceTimersByTime(delay))
381
+
382
+ // Assertion: the tooltip is not visible
383
+ expect(screen.queryByText('Tooltip content')).toBeVisible()
384
+
385
+ act(() => fireEvent.contextMenu(button))
386
+
387
+ // Assertion: tooltip does not exist in the document
388
+ expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
389
+ })
390
+ })
391
+
392
+ describe('Used defined events on <Tooltip /> child should fire correctly', () => {
393
+ const handleBlur = jest.fn()
394
+ const handleClick = jest.fn()
395
+ const handleContextMenu = jest.fn()
396
+ const handleFocus = jest.fn()
397
+ const handleMouseEnter = jest.fn()
398
+ const handleMouseLeave = jest.fn()
399
+
400
+ beforeEach(() => {
401
+ render(
402
+ <Tooltip content={<Text size={1}>{'Tooltip content'}</Text>}>
403
+ <Button
404
+ data-testid="btn"
405
+ mode="bleed"
406
+ onBlur={handleBlur}
407
+ onClick={handleClick}
408
+ onContextMenu={handleContextMenu}
409
+ onFocus={handleFocus}
410
+ onMouseEnter={handleMouseEnter}
411
+ onMouseLeave={handleMouseLeave}
412
+ text="Hover me"
413
+ />
414
+ </Tooltip>,
415
+ )
416
+ })
417
+
418
+ afterEach(() => jest.clearAllMocks())
419
+
420
+ it('should fire the onBlur event', () => {
421
+ fireEvent.blur(screen.getByTestId('btn'))
422
+ expect(handleBlur).toHaveBeenCalledTimes(1)
423
+ })
424
+
425
+ it('should fire the onClick event', () => {
426
+ fireEvent.click(screen.getByTestId('btn'))
427
+ expect(handleClick).toHaveBeenCalledTimes(1)
428
+ })
429
+
430
+ it('should fire the onContextMenu event', () => {
431
+ fireEvent.contextMenu(screen.getByTestId('btn'))
432
+ expect(handleContextMenu).toHaveBeenCalledTimes(1)
433
+ })
434
+
435
+ it('should fire the onFocus event', () => {
436
+ fireEvent.focus(screen.getByTestId('btn'))
437
+ expect(handleFocus).toHaveBeenCalledTimes(1)
438
+ })
439
+
440
+ it('should fire the onMouseEnter event', () => {
441
+ fireEvent.mouseEnter(screen.getByTestId('btn'))
442
+ expect(handleMouseEnter).toHaveBeenCalledTimes(1)
443
+ })
444
+
445
+ it('should fire the onMouseLeave event', () => {
446
+ fireEvent.mouseLeave(screen.getByTestId('btn'))
447
+ expect(handleMouseLeave).toHaveBeenCalledTimes(1)
276
448
  })
277
449
  })
278
450
  })
@@ -8,8 +8,9 @@ import {
8
8
  useFloating,
9
9
  Middleware,
10
10
  RootBoundary,
11
- size,
12
11
  } from '@floating-ui/react-dom'
12
+ import {ThemeColorSchemeKey} from '@sanity/ui/theme'
13
+ import {AnimatePresence, motion} from 'framer-motion'
13
14
  import {
14
15
  cloneElement,
15
16
  forwardRef,
@@ -23,16 +24,22 @@ import {
23
24
  useId,
24
25
  } from 'react'
25
26
  import styled from 'styled-components'
26
- import {FLOATING_STATIC_SIDES} from '../../constants'
27
27
  import {useArrayProp, useForwardedRef} from '../../hooks'
28
28
  import {useDelayedState} from '../../hooks/useDelayedState'
29
- import {ThemeColorSchemeKey, useTheme} from '../../theme'
29
+ import {useTheme} from '../../theme'
30
30
  import {Placement} from '../../types'
31
- import {Layer, LayerProps, Portal, useBoundaryElement} from '../../utils'
31
+ import {Arrow, Layer, LayerProps, Portal, useBoundaryElement, usePortal} from '../../utils'
32
32
  import {Card} from '../card'
33
33
  import {Delay} from '../types'
34
- import {DEFAULT_FALLBACK_PLACEMENTS} from './constants'
35
- import {TooltipArrow} from './tooltipArrow'
34
+ import {ConditionalWrapper} from './conditionalWrapper'
35
+ import {
36
+ DEFAULT_FALLBACK_PLACEMENTS,
37
+ DEFAULT_TOOLTIP_ARROW_HEIGHT,
38
+ DEFAULT_TOOLTIP_ARROW_RADIUS,
39
+ DEFAULT_TOOLTIP_ARROW_WIDTH,
40
+ DEFAULT_TOOLTIP_DISTANCE,
41
+ DEFAULT_TOOLTIP_PADDING,
42
+ } from './constants'
36
43
  import {useTooltipDelayGroup} from './tooltipDelayGroup'
37
44
 
38
45
  /**
@@ -41,6 +48,7 @@ import {useTooltipDelayGroup} from './tooltipDelayGroup'
41
48
  export interface TooltipProps extends Omit<LayerProps, 'as'> {
42
49
  /** @deprecated Use `fallbackPlacements` instead. */
43
50
  allowedAutoPlacements?: Placement[]
51
+ arrow?: boolean
44
52
  boundaryElement?: HTMLElement | null
45
53
  children?: React.ReactElement
46
54
  content?: React.ReactNode
@@ -48,24 +56,39 @@ export interface TooltipProps extends Omit<LayerProps, 'as'> {
48
56
  fallbackPlacements?: Placement[]
49
57
  padding?: number | number[]
50
58
  placement?: Placement
59
+ /** Whether or not to render the tooltip in a portal element. */
51
60
  portal?: boolean | string
61
+ radius?: number | number[]
52
62
  scheme?: ThemeColorSchemeKey
53
63
  shadow?: number | number[]
54
64
  /**
55
- * @public Adds a delay to open or close the tooltip. Defaults to 0.
65
+ * Adds a delay to open or close the tooltip.
56
66
  *
57
67
  * If only a `number` is passed, it will be used for both opening and closing.
58
68
  *
59
69
  * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.
70
+ *
71
+ * @public
72
+ * @defaultValue 0
60
73
  */
61
74
  delay?: Delay
75
+ /**
76
+ * Whether the tooltip should animate in and out.
77
+ *
78
+ * @beta
79
+ * @defaultValue false
80
+ */
81
+ animate?: boolean
62
82
  }
63
83
 
64
- const Root = styled(Layer)`
84
+ const Root = styled(Layer)<{$maxWidth: number}>`
65
85
  pointer-events: none;
86
+ max-width: ${({$maxWidth}) => $maxWidth}px;
66
87
  `
67
88
 
68
89
  /**
90
+ * Tooltips display information when hovering, focusing or tapping.
91
+ *
69
92
  * @public
70
93
  */
71
94
  export const Tooltip = forwardRef(function Tooltip(
@@ -75,6 +98,7 @@ export const Tooltip = forwardRef(function Tooltip(
75
98
  const boundaryElementContext = useBoundaryElement()
76
99
  const theme = useTheme()
77
100
  const {
101
+ arrow: arrowProp = false,
78
102
  boundaryElement = boundaryElementContext?.element,
79
103
  children: childProp,
80
104
  content,
@@ -83,11 +107,13 @@ export const Tooltip = forwardRef(function Tooltip(
83
107
  DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom'],
84
108
  padding = 3,
85
109
  placement: placementProp = 'bottom',
86
- portal,
110
+ portal: portalProp,
111
+ radius = 2,
87
112
  scheme,
88
113
  shadow = 2,
89
114
  zOffset = theme.sanity.layer?.tooltip.zOffset,
90
115
  delay,
116
+ animate = false,
91
117
  ...restProps
92
118
  } = props
93
119
  const fallbackPlacements = useArrayProp(fallbackPlacementsProp)
@@ -96,6 +122,22 @@ export const Tooltip = forwardRef(function Tooltip(
96
122
  const arrowRef = useRef<HTMLDivElement | null>(null)
97
123
  const rootBoundary: RootBoundary = 'viewport'
98
124
 
125
+ const portal = usePortal()
126
+ const portalElement =
127
+ typeof portalProp === 'string' ? portal.elements?.[portalProp] || null : portal.element
128
+
129
+ // Get the maximum tooltip width (sans tooltip padding)
130
+ // Tooltip width should never exceed the width of either any supplied boundary or portal element.
131
+ // If both portal and boundary elements are provided, use the smaller width of the two.
132
+ const tooltipWidth = useMemo(() => {
133
+ const availableWidths = [
134
+ ...(boundaryElement ? [boundaryElement.offsetWidth] : []),
135
+ portalElement?.offsetWidth || document.body.offsetWidth,
136
+ ]
137
+
138
+ return Math.min(...availableWidths) - DEFAULT_TOOLTIP_PADDING * 2
139
+ }, [boundaryElement, portalElement?.offsetWidth])
140
+
99
141
  const middleware = useMemo(() => {
100
142
  const ret: Middleware[] = []
101
143
 
@@ -104,41 +146,30 @@ export const Tooltip = forwardRef(function Tooltip(
104
146
  flip({
105
147
  boundary: boundaryElement || undefined,
106
148
  fallbackPlacements,
107
- padding: 4,
149
+ padding: DEFAULT_TOOLTIP_PADDING,
108
150
  rootBoundary,
109
- mainAxis: false,
110
151
  }),
111
152
  )
112
153
 
113
154
  // Define distance between reference and floating element
114
- ret.push(offset({mainAxis: 3}))
115
-
116
- // Set width and height on the floating element
117
- ret.push(
118
- size({
119
- apply({availableWidth, availableHeight, elements}) {
120
- Object.assign(elements.floating.style, {
121
- maxWidth: `${availableWidth - 4 * 2}px`, // the padding is `4px`
122
- maxHeight: `${availableHeight - 4 * 2}px`, // the padding is `4px`
123
- })
124
- },
125
- }),
126
- )
155
+ ret.push(offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE}))
127
156
 
128
- // Shift the tooltip so its sits with the boundary eleement
157
+ // Shift the tooltip so its sits with the boundary element
129
158
  ret.push(
130
159
  shift({
131
160
  boundary: boundaryElement || undefined,
132
161
  rootBoundary,
133
- padding: 4,
162
+ padding: DEFAULT_TOOLTIP_PADDING,
134
163
  }),
135
164
  )
136
165
 
137
166
  // Place arrow
138
- ret.push(arrow({element: arrowRef, padding: 2}))
167
+ if (arrowProp) {
168
+ ret.push(arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING}))
169
+ }
139
170
 
140
171
  return ret
141
- }, [boundaryElement, fallbackPlacements])
172
+ }, [arrowProp, boundaryElement, fallbackPlacements])
142
173
 
143
174
  const {floatingStyles, placement, middlewareData, refs, update} = useFloating({
144
175
  middleware,
@@ -146,23 +177,18 @@ export const Tooltip = forwardRef(function Tooltip(
146
177
  whileElementsMounted: autoUpdate,
147
178
  })
148
179
 
149
- const staticSide = placement && FLOATING_STATIC_SIDES[placement.split('-')[0]]
150
-
151
180
  const arrowX = middlewareData.arrow?.x
152
181
  const arrowY = middlewareData.arrow?.y
153
182
 
154
- const arrowStyle: CSSProperties = useMemo(() => {
155
- const style: CSSProperties = {
183
+ const arrowStyle: CSSProperties = useMemo(
184
+ () => ({
156
185
  left: arrowX !== null ? arrowX : undefined,
157
186
  top: arrowY !== null ? arrowY : undefined,
158
187
  right: undefined,
159
188
  bottom: undefined,
160
- }
161
-
162
- if (staticSide) style[staticSide] = -15
163
-
164
- return style
165
- }, [arrowX, arrowY, staticSide])
189
+ }),
190
+ [arrowX, arrowY],
191
+ )
166
192
 
167
193
  const tooltipId = useId()
168
194
  const [isOpen, setIsOpen] = useDelayedState(false)
@@ -177,38 +203,80 @@ export const Tooltip = forwardRef(function Tooltip(
177
203
  const closeDelay = isInsideGroup ? delayGroupContext.closeDelay : closeDelayProp
178
204
 
179
205
  const handleIsOpenChange = useCallback(
180
- (open: boolean) => {
206
+ (open: boolean, immediate?: boolean) => {
181
207
  if (isInsideGroup) {
182
208
  // When it's inside a group, the open or close status will be handled by the group.
183
209
  if (open) {
184
- delayGroupContext.setIsGroupActive(open, openDelay)
185
- delayGroupContext.setOpenTooltipId(tooltipId, openDelay)
210
+ const groupedOpenDelay = immediate ? 0 : openDelay
211
+
212
+ delayGroupContext.setIsGroupActive(open, groupedOpenDelay)
213
+ delayGroupContext.setOpenTooltipId(tooltipId, groupedOpenDelay)
186
214
  } else {
187
215
  const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.
188
216
  const groupDeactivateDelay =
189
217
  closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay
190
218
 
191
219
  delayGroupContext.setIsGroupActive(open, groupDeactivateDelay)
192
- delayGroupContext.setOpenTooltipId(null, closeDelay)
220
+ delayGroupContext.setOpenTooltipId(null, immediate ? 0 : closeDelay)
193
221
  }
194
222
  } else {
223
+ const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay
224
+
195
225
  // When it's not inside a group, the open or close status will be handled by the tooltip itself.
196
- setIsOpen(open, open ? openDelay : closeDelay)
226
+ setIsOpen(open, standaloneDelay)
197
227
  }
198
228
  },
199
229
  [isInsideGroup, delayGroupContext, openDelay, tooltipId, closeDelay, setIsOpen],
200
230
  )
201
231
 
202
- const handleBlur = useCallback(() => handleIsOpenChange(false), [handleIsOpenChange])
203
- const handleFocus = useCallback(() => handleIsOpenChange(true), [handleIsOpenChange])
204
- const handleMouseEnter = useCallback(() => handleIsOpenChange(true), [handleIsOpenChange])
205
- const handleMouseLeave = useCallback(() => handleIsOpenChange(false), [handleIsOpenChange])
232
+ const handleBlur = useCallback(
233
+ (e: FocusEvent) => {
234
+ handleIsOpenChange(false)
235
+ childProp?.props?.onBlur?.(e)
236
+ },
237
+ [childProp?.props, handleIsOpenChange],
238
+ )
239
+ const handleClick = useCallback(
240
+ (e: MouseEvent) => {
241
+ handleIsOpenChange(false, true), [handleIsOpenChange]
242
+ childProp?.props.onClick?.(e)
243
+ },
244
+ [childProp?.props, handleIsOpenChange],
245
+ )
246
+ const handleContextMenu = useCallback(
247
+ (e: MouseEvent) => {
248
+ handleIsOpenChange(false, true), [handleIsOpenChange]
249
+ childProp?.props.onContextMenu?.(e)
250
+ },
251
+ [childProp?.props, handleIsOpenChange],
252
+ )
253
+ const handleFocus = useCallback(
254
+ (e: FocusEvent) => {
255
+ handleIsOpenChange(true)
256
+ childProp?.props?.onFocus?.(e)
257
+ },
258
+ [childProp?.props, handleIsOpenChange],
259
+ )
260
+ const handleMouseEnter = useCallback(
261
+ (e: MouseEvent) => {
262
+ handleIsOpenChange(true)
263
+ childProp?.props?.onMouseEnter?.(e)
264
+ },
265
+ [childProp?.props, handleIsOpenChange],
266
+ )
267
+ const handleMouseLeave = useCallback(
268
+ (e: MouseEvent) => {
269
+ handleIsOpenChange(false)
270
+ childProp?.props?.onMouseLeave?.(e)
271
+ },
272
+ [childProp?.props, handleIsOpenChange],
273
+ )
206
274
 
207
275
  // Detect whether the mouse is moving outside of the reference element. This is sometimes
208
276
  // necessary, because the tooltip might not always close as it should (e.g. when clicking
209
277
  // the reference element triggers a CPU-heavy operation.)
210
278
  useEffect(() => {
211
- if (!isOpen) return
279
+ if (!showTooltip) return
212
280
 
213
281
  function handleWindowMouseMove(event: MouseEvent) {
214
282
  if (!referenceElement) return
@@ -228,21 +296,37 @@ export const Tooltip = forwardRef(function Tooltip(
228
296
  return () => {
229
297
  window.removeEventListener('mousemove', handleWindowMouseMove)
230
298
  }
231
- }, [isOpen, referenceElement, handleIsOpenChange])
299
+ }, [showTooltip, referenceElement, handleIsOpenChange])
232
300
 
233
301
  // Close when `disabled` changes to `true`
234
302
  useEffect(() => {
235
- if (disabled) handleIsOpenChange(false)
236
- }, [disabled, handleIsOpenChange])
303
+ if (disabled && showTooltip) handleIsOpenChange(false)
304
+ }, [disabled, handleIsOpenChange, showTooltip])
237
305
 
238
306
  // Close when `content` changes to falsy
239
307
  useEffect(() => {
240
- if (!content) handleIsOpenChange(false)
241
- }, [content, handleIsOpenChange])
308
+ if (!content && showTooltip) handleIsOpenChange(false)
309
+ }, [content, handleIsOpenChange, showTooltip])
242
310
 
243
311
  // Update reference
244
312
  useEffect(() => refs.setReference(referenceElement), [referenceElement, refs])
245
313
 
314
+ useEffect(() => {
315
+ // If the user clicks on escape key, close the tooltip.
316
+ if (!showTooltip) return
317
+
318
+ function handleWindowKeyDown(event: KeyboardEvent) {
319
+ if (event.key === 'Escape') {
320
+ handleIsOpenChange(false, true)
321
+ }
322
+ }
323
+
324
+ window.addEventListener('keydown', handleWindowKeyDown)
325
+
326
+ return () => {
327
+ window.removeEventListener('keydown', handleWindowKeyDown)
328
+ }
329
+ }, [handleIsOpenChange, showTooltip])
246
330
  const setArrow = useCallback(
247
331
  (arrowEl: HTMLDivElement | null) => {
248
332
  arrowRef.current = arrowEl
@@ -283,9 +367,20 @@ export const Tooltip = forwardRef(function Tooltip(
283
367
  onFocus: handleFocus,
284
368
  onMouseEnter: handleMouseEnter,
285
369
  onMouseLeave: handleMouseLeave,
370
+ onClick: handleClick,
371
+ onContextMenu: handleContextMenu,
286
372
  ref: setReference,
287
373
  })
288
- }, [childProp, handleBlur, handleFocus, handleMouseEnter, handleMouseLeave, setReference])
374
+ }, [
375
+ childProp,
376
+ handleBlur,
377
+ handleClick,
378
+ handleContextMenu,
379
+ handleFocus,
380
+ handleMouseEnter,
381
+ handleMouseLeave,
382
+ setReference,
383
+ ])
289
384
 
290
385
  if (!child) return <></>
291
386
 
@@ -298,36 +393,64 @@ export const Tooltip = forwardRef(function Tooltip(
298
393
  ref={setFloating}
299
394
  style={floatingStyles}
300
395
  zOffset={zOffset}
396
+ $maxWidth={tooltipWidth}
301
397
  >
302
- <Card
303
- data-ui="Tooltip__card"
304
- data-placement={placement}
305
- padding={padding}
306
- radius={3}
307
- scheme={scheme}
308
- shadow={shadow}
398
+ <ConditionalWrapper
399
+ condition={animate} // Add animation wrapper if it should animate
400
+ wrapper={(children) => (
401
+ <motion.div
402
+ initial={{opacity: 0.5, scale: 0.95}}
403
+ animate={{opacity: 1, scale: 1}}
404
+ exit={{opacity: 0, scale: 0.95}}
405
+ transition={{duration: 0.3, type: 'spring'}}
406
+ >
407
+ {children}
408
+ </motion.div>
409
+ )}
309
410
  >
310
- {content}
311
- <TooltipArrow ref={setArrow} style={arrowStyle} />
312
- </Card>
411
+ <Card
412
+ data-ui="Tooltip__card"
413
+ data-placement={placement}
414
+ padding={padding}
415
+ radius={radius}
416
+ scheme={scheme}
417
+ shadow={shadow}
418
+ >
419
+ {content}
420
+ {arrowProp && (
421
+ <Arrow
422
+ ref={setArrow}
423
+ style={arrowStyle}
424
+ width={DEFAULT_TOOLTIP_ARROW_WIDTH}
425
+ height={DEFAULT_TOOLTIP_ARROW_HEIGHT}
426
+ radius={DEFAULT_TOOLTIP_ARROW_RADIUS}
427
+ />
428
+ )}
429
+ </Card>
430
+ </ConditionalWrapper>
313
431
  </Root>
314
432
  )
315
433
 
316
434
  return (
317
435
  <>
318
436
  {child}
319
-
320
- {showTooltip && (
321
- <>
322
- {portal ? (
323
- <Portal __unstable_name={typeof portal === 'string' ? portal : undefined}>
324
- {root}
325
- </Portal>
326
- ) : (
327
- root
328
- )}
329
- </>
330
- )}
437
+ <ConditionalWrapper
438
+ condition={animate}
439
+ wrapper={(children) => <AnimatePresence>{children}</AnimatePresence>} // Add AnimatePresence if it should animate
440
+ >
441
+ {showTooltip && (
442
+ <ConditionalWrapper
443
+ condition={!!portalProp} // Add portal if portalProp is set
444
+ wrapper={(children) => (
445
+ <Portal __unstable_name={typeof portalProp === 'string' ? portalProp : undefined}>
446
+ {children}
447
+ </Portal>
448
+ )}
449
+ >
450
+ {root}
451
+ </ConditionalWrapper>
452
+ )}
453
+ </ConditionalWrapper>
331
454
  </>
332
455
  )
333
456
  })