@sanity/ui 4.0.0-beta.8 → 4.0.0-next.2

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 (381) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +21 -7
  3. package/dist/_chunks/getScopedTheme.cjs +4043 -0
  4. package/dist/_chunks/getScopedTheme.cjs.map +1 -0
  5. package/dist/_chunks/getScopedTheme.js +3803 -0
  6. package/dist/_chunks/getScopedTheme.js.map +1 -0
  7. package/dist/_chunks/refractor.cjs +18 -0
  8. package/dist/_chunks/refractor.cjs.map +1 -0
  9. package/dist/_chunks/refractor.js +20 -0
  10. package/dist/_chunks/refractor.js.map +1 -0
  11. package/dist/_chunks/rgba.d.cts +929 -0
  12. package/dist/_chunks/rgba.d.cts.map +1 -0
  13. package/dist/_chunks/rgba.d.ts +929 -0
  14. package/dist/_chunks/rgba.d.ts.map +1 -0
  15. package/dist/index.cjs +6243 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.cts +2332 -0
  18. package/dist/index.d.cts.map +1 -0
  19. package/dist/index.d.ts +1767 -1190
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +6134 -4725
  22. package/dist/index.js.map +1 -1
  23. package/dist/theme.cjs +54 -0
  24. package/dist/theme.cjs.map +1 -0
  25. package/dist/theme.d.cts +278 -0
  26. package/dist/theme.d.cts.map +1 -0
  27. package/dist/theme.d.ts +278 -0
  28. package/dist/theme.d.ts.map +1 -0
  29. package/dist/theme.js +53 -0
  30. package/dist/theme.js.map +1 -0
  31. package/package.json +55 -86
  32. package/dist/_chunks-es/Syntax.js +0 -23
  33. package/dist/_chunks-es/Syntax.js.map +0 -1
  34. package/dist/index.css +0 -1
  35. package/exports/index.css +0 -1
  36. package/exports/index.ts +0 -125
  37. package/src/components/autocomplete/Autocomplete.tsx +0 -665
  38. package/src/components/autocomplete/AutocompleteOption.tsx +0 -42
  39. package/src/components/autocomplete/__workshop__/Async.tsx +0 -162
  40. package/src/components/autocomplete/__workshop__/ConstrainedHeight.tsx +0 -121
  41. package/src/components/autocomplete/__workshop__/Custom.tsx +0 -91
  42. package/src/components/autocomplete/__workshop__/Example.tsx +0 -70
  43. package/src/components/autocomplete/__workshop__/FocusAndBlur.tsx +0 -39
  44. package/src/components/autocomplete/__workshop__/Fullscreen.tsx +0 -307
  45. package/src/components/autocomplete/__workshop__/index.ts +0 -41
  46. package/src/components/autocomplete/__workshop__/mock/apiStore.ts +0 -49
  47. package/src/components/autocomplete/__workshop__/mock/countries.ts +0 -245
  48. package/src/components/autocomplete/__workshop__/types.ts +0 -4
  49. package/src/components/autocomplete/autocompleteReducer.ts +0 -47
  50. package/src/components/autocomplete/constants.ts +0 -28
  51. package/src/components/autocomplete/types.ts +0 -103
  52. package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -163
  53. package/src/components/breadcrumbs/__workshop__/Example.tsx +0 -48
  54. package/src/components/breadcrumbs/__workshop__/index.ts +0 -16
  55. package/src/components/dialog/Dialog.tsx +0 -230
  56. package/src/components/dialog/DialogCard.tsx +0 -233
  57. package/src/components/dialog/DialogContext.ts +0 -21
  58. package/src/components/dialog/DialogProvider.tsx +0 -34
  59. package/src/components/dialog/__workshop__/Activate.tsx +0 -141
  60. package/src/components/dialog/__workshop__/AutoFocus.tsx +0 -29
  61. package/src/components/dialog/__workshop__/Layering.tsx +0 -41
  62. package/src/components/dialog/__workshop__/Nested.tsx +0 -71
  63. package/src/components/dialog/__workshop__/OnScroll.tsx +0 -51
  64. package/src/components/dialog/__workshop__/Panes.tsx +0 -75
  65. package/src/components/dialog/__workshop__/Position.tsx +0 -30
  66. package/src/components/dialog/__workshop__/Props.tsx +0 -93
  67. package/src/components/dialog/__workshop__/Provider.tsx +0 -11
  68. package/src/components/dialog/__workshop__/Wrapped.tsx +0 -76
  69. package/src/components/dialog/__workshop__/index.ts +0 -21
  70. package/src/components/dialog/isTargetWithinScope.ts +0 -14
  71. package/src/components/dialog/types.ts +0 -2
  72. package/src/components/dialog/useDialog.ts +0 -11
  73. package/src/components/hotkeys/Hotkeys.tsx +0 -70
  74. package/src/components/hotkeys/__workshop__/Plain.tsx +0 -9
  75. package/src/components/hotkeys/__workshop__/index.ts +0 -16
  76. package/src/components/menu/Menu.test.tsx +0 -125
  77. package/src/components/menu/Menu.tsx +0 -174
  78. package/src/components/menu/MenuButton.tsx +0 -231
  79. package/src/components/menu/MenuContext.ts +0 -19
  80. package/src/components/menu/MenuDivider.tsx +0 -32
  81. package/src/components/menu/MenuGroup.tsx +0 -240
  82. package/src/components/menu/MenuItem.tsx +0 -153
  83. package/src/components/menu/__workshop__/AsComponent.tsx +0 -45
  84. package/src/components/menu/__workshop__/AvatarMenu.tsx +0 -36
  85. package/src/components/menu/__workshop__/ClosableMenuButton.tsx +0 -47
  86. package/src/components/menu/__workshop__/ConstrainedInBoundary.tsx +0 -133
  87. package/src/components/menu/__workshop__/CustomMenuItem.tsx +0 -47
  88. package/src/components/menu/__workshop__/CustomSelectedState.tsx +0 -35
  89. package/src/components/menu/__workshop__/DataProps.tsx +0 -27
  90. package/src/components/menu/__workshop__/DisableFocusOnClose.tsx +0 -40
  91. package/src/components/menu/__workshop__/Groups.tsx +0 -164
  92. package/src/components/menu/__workshop__/MenuButton.tsx +0 -79
  93. package/src/components/menu/__workshop__/MenuGroupRight.tsx +0 -73
  94. package/src/components/menu/__workshop__/NestedMenu.tsx +0 -22
  95. package/src/components/menu/__workshop__/OnCloseMenuButton.tsx +0 -50
  96. package/src/components/menu/__workshop__/SelectedItem.tsx +0 -69
  97. package/src/components/menu/__workshop__/ShouldFocus.tsx +0 -42
  98. package/src/components/menu/__workshop__/Tones.tsx +0 -19
  99. package/src/components/menu/__workshop__/index.ts +0 -91
  100. package/src/components/menu/helpers.ts +0 -82
  101. package/src/components/menu/useMenu.ts +0 -21
  102. package/src/components/menu/useMenuController.ts +0 -245
  103. package/src/components/tab/Tab.tsx +0 -135
  104. package/src/components/tab/TabList.tsx +0 -157
  105. package/src/components/tab/TabListContext.ts +0 -10
  106. package/src/components/tab/TabPanel.tsx +0 -94
  107. package/src/components/tab/__workshop__/Example.tsx +0 -135
  108. package/src/components/tab/__workshop__/index.ts +0 -16
  109. package/src/components/tab/types.ts +0 -11
  110. package/src/components/toast/Toast.test.tsx +0 -103
  111. package/src/components/toast/Toast.tsx +0 -191
  112. package/src/components/toast/ToastContext.ts +0 -7
  113. package/src/components/toast/ToastLayer.tsx +0 -54
  114. package/src/components/toast/ToastProvider.tsx +0 -127
  115. package/src/components/toast/__workshop__/Hook.tsx +0 -71
  116. package/src/components/toast/__workshop__/Toast.tsx +0 -26
  117. package/src/components/toast/__workshop__/index.ts +0 -21
  118. package/src/components/toast/toastState.ts +0 -6
  119. package/src/components/toast/types.ts +0 -24
  120. package/src/components/toast/useToast.ts +0 -23
  121. package/src/components/tree/Tree.tsx +0 -248
  122. package/src/components/tree/TreeContext.ts +0 -10
  123. package/src/components/tree/TreeGroup.tsx +0 -46
  124. package/src/components/tree/TreeItem.tsx +0 -236
  125. package/src/components/tree/__workshop__/Basic.tsx +0 -108
  126. package/src/components/tree/__workshop__/TabFromElement.tsx +0 -84
  127. package/src/components/tree/__workshop__/basic.perf.ts +0 -19
  128. package/src/components/tree/__workshop__/index.ts +0 -23
  129. package/src/components/tree/helpers.ts +0 -105
  130. package/src/components/tree/types.ts +0 -24
  131. package/src/components/tree/useTree.ts +0 -17
  132. package/src/components/virtualList/VirtualList.tsx +0 -254
  133. package/src/components/virtualList/__workshop__/ChangingProps.tsx +0 -41
  134. package/src/components/virtualList/__workshop__/ElementScroll.tsx +0 -43
  135. package/src/components/virtualList/__workshop__/InfiniteList.tsx +0 -40
  136. package/src/components/virtualList/__workshop__/WindowScrolll.tsx +0 -23
  137. package/src/components/virtualList/__workshop__/index.ts +0 -31
  138. package/src/core/_keys.ts +0 -26
  139. package/src/core/constants.ts +0 -67
  140. package/src/core/getElementRef.ts +0 -29
  141. package/src/core/helpers/animation.ts +0 -26
  142. package/src/core/helpers/element.ts +0 -55
  143. package/src/core/helpers/focus.ts +0 -92
  144. package/src/core/helpers/props.ts +0 -51
  145. package/src/core/helpers/scroll.ts +0 -15
  146. package/src/core/lib/createGlobalScopedContext.ts +0 -39
  147. package/src/core/lib/globalScope.ts +0 -19
  148. package/src/core/lib/isArray.ts +0 -3
  149. package/src/core/lib/isRecord.ts +0 -3
  150. package/src/core/types.ts +0 -57
  151. package/src/hooks/useClickOutsideEvent.test.tsx +0 -114
  152. package/src/hooks/useClickOutsideEvent.ts +0 -66
  153. package/src/hooks/useCustomValidity.ts +0 -13
  154. package/src/hooks/useElementSize.ts +0 -19
  155. package/src/hooks/useGlobalKeyDown.ts +0 -23
  156. package/src/hooks/useMatchMedia.ts +0 -28
  157. package/src/hooks/useMediaIndex/__workshop__/Test.tsx +0 -14
  158. package/src/hooks/useMediaIndex/__workshop__/index.ts +0 -16
  159. package/src/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -21
  160. package/src/hooks/useMediaIndex/useMediaIndex.ts +0 -111
  161. package/src/hooks/useMounted.ts +0 -15
  162. package/src/hooks/usePrefersDark.hydration.test.tsx +0 -56
  163. package/src/hooks/usePrefersDark.test.tsx +0 -20
  164. package/src/hooks/usePrefersDark.ts +0 -16
  165. package/src/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  166. package/src/hooks/usePrefersReducedMotion.test.tsx +0 -20
  167. package/src/hooks/usePrefersReducedMotion.ts +0 -16
  168. package/src/hooks/useResponsiveProp.ts +0 -14
  169. package/src/hooks/useUnique.ts +0 -54
  170. package/src/middleware/origin.ts +0 -47
  171. package/src/observers/elementSize.ts +0 -114
  172. package/src/primitives/_syntax/LazySyntax.tsx +0 -4
  173. package/src/primitives/_syntax/Syntax.tsx +0 -26
  174. package/src/primitives/avatar/Avatar.tsx +0 -145
  175. package/src/primitives/avatar/AvatarCounter.tsx +0 -69
  176. package/src/primitives/avatar/AvatarStack.tsx +0 -77
  177. package/src/primitives/avatar/__workshop__/AsButton.tsx +0 -12
  178. package/src/primitives/avatar/__workshop__/PropsStory.tsx +0 -24
  179. package/src/primitives/avatar/__workshop__/Stack.tsx +0 -27
  180. package/src/primitives/avatar/__workshop__/WithinButton.tsx +0 -51
  181. package/src/primitives/avatar/__workshop__/WithinMenuItem.tsx +0 -52
  182. package/src/primitives/avatar/__workshop__/index.ts +0 -36
  183. package/src/primitives/avatar/types.ts +0 -2
  184. package/src/primitives/badge/Badge.test.tsx +0 -16
  185. package/src/primitives/badge/Badge.tsx +0 -53
  186. package/src/primitives/badge/__workshop__/Props.tsx +0 -27
  187. package/src/primitives/badge/__workshop__/Tones.tsx +0 -15
  188. package/src/primitives/badge/__workshop__/index.ts +0 -26
  189. package/src/primitives/badge/__workshop__/within-button.tsx +0 -36
  190. package/src/primitives/box/Box.tsx +0 -73
  191. package/src/primitives/box/__workshop__/Props.tsx +0 -26
  192. package/src/primitives/box/__workshop__/Responsive.tsx +0 -19
  193. package/src/primitives/box/__workshop__/index.ts +0 -21
  194. package/src/primitives/button/Button.test.tsx +0 -30
  195. package/src/primitives/button/Button.tsx +0 -148
  196. package/src/primitives/button/__workshop__/Custom.tsx +0 -39
  197. package/src/primitives/button/__workshop__/CustomIcons.tsx +0 -37
  198. package/src/primitives/button/__workshop__/DataProps.tsx +0 -18
  199. package/src/primitives/button/__workshop__/Disabled.tsx +0 -43
  200. package/src/primitives/button/__workshop__/MixedChildren.tsx +0 -12
  201. package/src/primitives/button/__workshop__/Props.tsx +0 -60
  202. package/src/primitives/button/__workshop__/Stacked.tsx +0 -60
  203. package/src/primitives/button/__workshop__/Styled1.css.ts +0 -7
  204. package/src/primitives/button/__workshop__/Styled1.tsx +0 -11
  205. package/src/primitives/button/__workshop__/TextOverflow.tsx +0 -17
  206. package/src/primitives/button/__workshop__/UploadButton.tsx +0 -28
  207. package/src/primitives/button/__workshop__/index.ts +0 -61
  208. package/src/primitives/button/types.ts +0 -2
  209. package/src/primitives/card/Card.tsx +0 -124
  210. package/src/primitives/card/CardContext.ts +0 -10
  211. package/src/primitives/card/CardInternalContext.ts +0 -10
  212. package/src/primitives/card/CardInternalProvider.tsx +0 -15
  213. package/src/primitives/card/CardProvider.tsx +0 -16
  214. package/src/primitives/card/__workshop__/AsButton.tsx +0 -103
  215. package/src/primitives/card/__workshop__/AsComponent.tsx +0 -25
  216. package/src/primitives/card/__workshop__/Checkered.tsx +0 -25
  217. package/src/primitives/card/__workshop__/DataProps.tsx +0 -25
  218. package/src/primitives/card/__workshop__/Interactive.tsx +0 -29
  219. package/src/primitives/card/__workshop__/ListNavigation.tsx +0 -78
  220. package/src/primitives/card/__workshop__/Props.tsx +0 -59
  221. package/src/primitives/card/__workshop__/Selected.tsx +0 -62
  222. package/src/primitives/card/__workshop__/Styled.tsx +0 -11
  223. package/src/primitives/card/__workshop__/Tones.tsx +0 -26
  224. package/src/primitives/card/__workshop__/index.ts +0 -21
  225. package/src/primitives/card/types.ts +0 -21
  226. package/src/primitives/card/useCard.ts +0 -20
  227. package/src/primitives/checkbox/Checkbox.tsx +0 -80
  228. package/src/primitives/checkbox/__workshop__/Example.tsx +0 -25
  229. package/src/primitives/checkbox/__workshop__/Props.tsx +0 -35
  230. package/src/primitives/checkbox/__workshop__/ReadOnly.tsx +0 -16
  231. package/src/primitives/checkbox/__workshop__/Tones.tsx +0 -26
  232. package/src/primitives/checkbox/__workshop__/index.ts +0 -15
  233. package/src/primitives/code/Code.tsx +0 -47
  234. package/src/primitives/code/__workshop__/OpticalAlignment.tsx +0 -25
  235. package/src/primitives/code/__workshop__/Props.tsx +0 -20
  236. package/src/primitives/code/__workshop__/index.ts +0 -21
  237. package/src/primitives/container/Container.tsx +0 -43
  238. package/src/primitives/container/__workshop__/Example.tsx +0 -16
  239. package/src/primitives/container/__workshop__/index.ts +0 -16
  240. package/src/primitives/container/types.ts +0 -6
  241. package/src/primitives/flex/Flex.tsx +0 -38
  242. package/src/primitives/flex/__workshop__/Example.tsx +0 -26
  243. package/src/primitives/flex/__workshop__/Gap.tsx +0 -25
  244. package/src/primitives/flex/__workshop__/index.ts +0 -13
  245. package/src/primitives/flex/__workshop__/styles.css.ts +0 -12
  246. package/src/primitives/grid/Grid.tsx +0 -38
  247. package/src/primitives/grid/__workshop__/Responsive.tsx +0 -54
  248. package/src/primitives/grid/__workshop__/index.ts +0 -12
  249. package/src/primitives/heading/Heading.tsx +0 -68
  250. package/src/primitives/heading/__workshop__/OpticalAlignment.tsx +0 -27
  251. package/src/primitives/heading/__workshop__/Plain.tsx +0 -25
  252. package/src/primitives/heading/__workshop__/index.ts +0 -21
  253. package/src/primitives/inline/Inline.tsx +0 -37
  254. package/src/primitives/inline/__workshop__/Plain.tsx +0 -22
  255. package/src/primitives/inline/__workshop__/index.ts +0 -10
  256. package/src/primitives/kbd/Kbd.tsx +0 -36
  257. package/src/primitives/kbd/__workshop__/Plain.tsx +0 -9
  258. package/src/primitives/kbd/__workshop__/index.ts +0 -10
  259. package/src/primitives/label/Label.tsx +0 -67
  260. package/src/primitives/label/__workshop__/OpticalAlignment.tsx +0 -27
  261. package/src/primitives/label/__workshop__/Plain.tsx +0 -27
  262. package/src/primitives/label/__workshop__/index.ts +0 -21
  263. package/src/primitives/layer/Layer.test.tsx +0 -110
  264. package/src/primitives/layer/Layer.tsx +0 -35
  265. package/src/primitives/layer/LayerCard.tsx +0 -90
  266. package/src/primitives/layer/LayerContext.ts +0 -7
  267. package/src/primitives/layer/LayerProvider.tsx +0 -106
  268. package/src/primitives/layer/__workshop__/MultipleRoots.tsx +0 -49
  269. package/src/primitives/layer/__workshop__/Nested.tsx +0 -107
  270. package/src/primitives/layer/__workshop__/ResponsiveZOffset.tsx +0 -17
  271. package/src/primitives/layer/__workshop__/_debug.tsx +0 -17
  272. package/src/primitives/layer/__workshop__/index.ts +0 -26
  273. package/src/primitives/layer/getLayerContext.test.ts +0 -32
  274. package/src/primitives/layer/getLayerContext.ts +0 -21
  275. package/src/primitives/layer/types.ts +0 -9
  276. package/src/primitives/layer/useLayer.ts +0 -24
  277. package/src/primitives/popover/Popover.tsx +0 -291
  278. package/src/primitives/popover/PopoverLayer.tsx +0 -101
  279. package/src/primitives/popover/__workshop__/AlignedStory.tsx +0 -75
  280. package/src/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  281. package/src/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  282. package/src/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  283. package/src/primitives/popover/__workshop__/PlainStory.tsx +0 -67
  284. package/src/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  285. package/src/primitives/popover/__workshop__/SidePanelStory.tsx +0 -95
  286. package/src/primitives/popover/__workshop__/TestStory.tsx +0 -97
  287. package/src/primitives/popover/__workshop__/index.ts +0 -56
  288. package/src/primitives/popover/__workshop__/portal-inheritance.tsx +0 -15
  289. package/src/primitives/popover/constants.ts +0 -20
  290. package/src/primitives/popover/floating-ui/size.ts +0 -75
  291. package/src/primitives/popover/types.ts +0 -12
  292. package/src/primitives/popover/useMiddleware.ts +0 -126
  293. package/src/primitives/radio/Radio.tsx +0 -64
  294. package/src/primitives/radio/__workshop__/Example.tsx +0 -63
  295. package/src/primitives/radio/__workshop__/Plain.tsx +0 -28
  296. package/src/primitives/radio/__workshop__/index.ts +0 -13
  297. package/src/primitives/select/Select.tsx +0 -76
  298. package/src/primitives/select/__workshop__/Plain.tsx +0 -37
  299. package/src/primitives/select/__workshop__/ReadOnly.tsx +0 -23
  300. package/src/primitives/select/__workshop__/index.ts +0 -13
  301. package/src/primitives/selectable/Selectable.tsx +0 -48
  302. package/src/primitives/selectable/__workshop__/DataProps.tsx +0 -24
  303. package/src/primitives/selectable/__workshop__/as-link.tsx +0 -13
  304. package/src/primitives/selectable/__workshop__/index.ts +0 -19
  305. package/src/primitives/skeleton/CodeSkeleton.tsx +0 -49
  306. package/src/primitives/skeleton/HeadingSkeleton.tsx +0 -48
  307. package/src/primitives/skeleton/LabelSkeleton.tsx +0 -47
  308. package/src/primitives/skeleton/Skeleton.tsx +0 -70
  309. package/src/primitives/skeleton/TextSkeleton.tsx +0 -49
  310. package/src/primitives/skeleton/__workshop__/Delay.tsx +0 -69
  311. package/src/primitives/skeleton/__workshop__/Skeleton.tsx +0 -63
  312. package/src/primitives/skeleton/__workshop__/index.ts +0 -13
  313. package/src/primitives/spinner/Spinner.tsx +0 -45
  314. package/src/primitives/spinner/SpinnerAnimatedIcon.tsx +0 -14
  315. package/src/primitives/spinner/__workshop__/Props.tsx +0 -13
  316. package/src/primitives/spinner/__workshop__/index.ts +0 -16
  317. package/src/primitives/srOnly/SrOnly.tsx +0 -33
  318. package/src/primitives/stack/Stack.tsx +0 -38
  319. package/src/primitives/stack/__workshop__/Plain.tsx +0 -30
  320. package/src/primitives/stack/__workshop__/index.ts +0 -16
  321. package/src/primitives/switch/Switch.tsx +0 -76
  322. package/src/primitives/switch/__workshop__/Example.tsx +0 -25
  323. package/src/primitives/switch/__workshop__/Props.tsx +0 -23
  324. package/src/primitives/switch/__workshop__/index.ts +0 -13
  325. package/src/primitives/text/InlineCode.tsx +0 -25
  326. package/src/primitives/text/Text.tsx +0 -68
  327. package/src/primitives/text/__workshop__/Example.tsx +0 -26
  328. package/src/primitives/text/__workshop__/OpticalAlignment.tsx +0 -27
  329. package/src/primitives/text/__workshop__/index.ts +0 -26
  330. package/src/primitives/text/__workshop__/inline-code.tsx +0 -13
  331. package/src/primitives/textArea/TextArea.tsx +0 -97
  332. package/src/primitives/textArea/__workshop__/Plain.tsx +0 -46
  333. package/src/primitives/textArea/__workshop__/index.ts +0 -16
  334. package/src/primitives/textInput/TextInput.tsx +0 -279
  335. package/src/primitives/textInput/__workshop__/ClearButton.tsx +0 -32
  336. package/src/primitives/textInput/__workshop__/CustomValidity.tsx +0 -17
  337. package/src/primitives/textInput/__workshop__/Plain.tsx +0 -102
  338. package/src/primitives/textInput/__workshop__/ReadOnly.tsx +0 -14
  339. package/src/primitives/textInput/__workshop__/States.tsx +0 -53
  340. package/src/primitives/textInput/__workshop__/Tones.tsx +0 -40
  341. package/src/primitives/textInput/__workshop__/Typed.tsx +0 -23
  342. package/src/primitives/textInput/__workshop__/index.ts +0 -46
  343. package/src/primitives/tooltip/Tooltip.test.tsx +0 -496
  344. package/src/primitives/tooltip/Tooltip.tsx +0 -546
  345. package/src/primitives/tooltip/TooltipLayer.tsx +0 -72
  346. package/src/primitives/tooltip/__workshop__/CustomPortal.tsx +0 -102
  347. package/src/primitives/tooltip/__workshop__/OverflowingBoundary.tsx +0 -74
  348. package/src/primitives/tooltip/__workshop__/Props.tsx +0 -107
  349. package/src/primitives/tooltip/__workshop__/ResizableBoundary.tsx +0 -91
  350. package/src/primitives/tooltip/__workshop__/index.ts +0 -31
  351. package/src/primitives/tooltip/constants.ts +0 -24
  352. package/src/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupContext.tsx +0 -13
  353. package/src/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupProvider.tsx +0 -96
  354. package/src/primitives/tooltip/tooltipDelayGroup/types.ts +0 -7
  355. package/src/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  356. package/src/root/Root.tsx +0 -93
  357. package/src/root/RootProvider.tsx +0 -37
  358. package/src/root/__workshop__/Boundary.tsx +0 -43
  359. package/src/root/__workshop__/index.ts +0 -24
  360. package/src/root/__workshop__/primitives.tsx +0 -49
  361. package/src/root/__workshop__/tone-inheritance.tsx +0 -65
  362. package/src/utils/ErrorBoundary.tsx +0 -50
  363. package/src/utils/boundaryElement/BoundaryElementContext.ts +0 -7
  364. package/src/utils/boundaryElement/BoundaryElementProvider.tsx +0 -16
  365. package/src/utils/boundaryElement/__workshop__/Plain.tsx +0 -49
  366. package/src/utils/boundaryElement/__workshop__/index.ts +0 -16
  367. package/src/utils/boundaryElement/types.ts +0 -2
  368. package/src/utils/boundaryElement/useBoundaryElement.ts +0 -12
  369. package/src/utils/elementQuery/ElementQuery.tsx +0 -75
  370. package/src/utils/elementQuery/__workshop__/CustomMedia.tsx +0 -19
  371. package/src/utils/elementQuery/__workshop__/index.ts +0 -16
  372. package/src/utils/elementQuery/__workshop__/styles.css.ts +0 -31
  373. package/src/utils/elementQuery/helpers.ts +0 -27
  374. package/src/utils/portal/Portal.test.tsx +0 -105
  375. package/src/utils/portal/Portal.tsx +0 -42
  376. package/src/utils/portal/PortalContext.ts +0 -37
  377. package/src/utils/portal/PortalProvider.tsx +0 -38
  378. package/src/utils/portal/__workshop__/Named.tsx +0 -69
  379. package/src/utils/portal/__workshop__/index.ts +0 -16
  380. package/src/utils/portal/types.ts +0 -7
  381. package/src/utils/portal/usePortal.ts +0 -30
@@ -1,102 +0,0 @@
1
- import {
2
- BoundaryElementProvider,
3
- Button,
4
- Card,
5
- Flex,
6
- Portal,
7
- PortalProvider,
8
- Stack,
9
- Text,
10
- Tooltip,
11
- } from '@sanity/ui'
12
- import {useBoolean, useSelect, useText} from '@sanity/ui-workshop'
13
- import {useMemo, useState} from 'react'
14
-
15
- import {WORKSHOP_PLACEMENT_OPTIONS} from '$workshop'
16
-
17
- const PORTAL_OPTIONS = {
18
- '(true)': true,
19
- '(false)': false,
20
- 'portal1': 'portal1',
21
- }
22
-
23
- export default function CustomPortalStory(): React.JSX.Element {
24
- const content = useText(
25
- 'Content',
26
- 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis consectetur malesuada. Sed lobortis est dolor, eget imperdiet velit placerat et. Aenean posuere mi non aliquet iaculis. Donec fermentum pulvinar purus at sagittis. Ut tincidunt massa odio, sed finibus justo ullamcorper id. Nam venenatis justo non ligula elementum cursus. Pellentesque laoreet justo in mollis sagittis. In lacinia ornare ultrices. Suspendisse potenti.',
27
- )
28
- const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'top')
29
- const portal = useSelect('Portal', PORTAL_OPTIONS)
30
- const useBoundaryElement = useBoolean('Use boundary element', true)
31
-
32
- const [portal1Element, setPortal1Element] = useState<HTMLDivElement | null>(null)
33
- const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
34
- const __unstable_elements = useMemo(
35
- () => ({
36
- portal1: portal1Element,
37
- }),
38
- [portal1Element],
39
- )
40
-
41
- return (
42
- <PortalProvider __unstable_elements={__unstable_elements}>
43
- <Flex align="center" height="fill" justify="center">
44
- <BoundaryElementProvider element={useBoundaryElement ? boundaryElement : null}>
45
- <Card
46
- ref={setBoundaryElement}
47
- border
48
- padding={4}
49
- style={{
50
- height: 'calc(100vh - 100px)',
51
- position: 'relative',
52
- width: '500px',
53
- }}
54
- >
55
- <Text>Boundary element</Text>
56
- <Flex align="center" height="fill" justify="center">
57
- <Flex justify="center">
58
- <Stack gap={2}>
59
- <Tooltip
60
- boundaryElement={useBoundaryElement ? boundaryElement : null}
61
- content={content ? <Text size={1}>{content}</Text> : undefined}
62
- padding={2}
63
- placement={placement}
64
- portal={portal}
65
- >
66
- <Button mode="bleed" text="Tooltip" />
67
- </Tooltip>
68
- </Stack>
69
- </Flex>
70
- </Flex>
71
- </Card>
72
- </BoundaryElementProvider>
73
- </Flex>
74
-
75
- <Card
76
- ref={setPortal1Element}
77
- border
78
- margin={4}
79
- padding={4}
80
- style={{
81
- left: 0,
82
- position: 'absolute',
83
- top: 0,
84
- width: '175px',
85
- }}
86
- tone="critical"
87
- />
88
-
89
- <Portal __unstable_name="portal1">
90
- <Stack gap={4}>
91
- <Text size={1} weight="medium">
92
- Portal 1 content
93
- </Text>
94
- <Text size={1}>
95
- The tooltip's max-width should not exceed this container's width (minus padding) if it's
96
- set to use this portal
97
- </Text>
98
- </Stack>
99
- </Portal>
100
- </PortalProvider>
101
- )
102
- }
@@ -1,74 +0,0 @@
1
- import {BoundaryElementProvider, Button, Card, Code, Flex, Stack, Text, Tooltip} from '@sanity/ui'
2
- import {useBoolean, useSelect, useText} from '@sanity/ui-workshop'
3
- import {useCallback, useState} from 'react'
4
-
5
- import {WORKSHOP_PLACEMENT_OPTIONS} from '$workshop'
6
-
7
- export default function OverflowingBoundaryStory(): React.JSX.Element {
8
- const content = useText(
9
- 'Content',
10
- 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis consectetur malesuada. Sed lobortis est dolor, eget imperdiet velit placerat et. Aenean posuere mi non aliquet iaculis. Donec fermentum pulvinar purus at sagittis. Ut tincidunt massa odio, sed finibus justo ullamcorper id. Nam venenatis justo non ligula elementum cursus. Pellentesque laoreet justo in mollis sagittis. In lacinia ornare ultrices. Suspendisse potenti.',
11
- )
12
- const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'top')
13
- const portal = useBoolean('Portal', false)
14
- const useBoundaryElement = useBoolean('Use boundary element', true)
15
-
16
- const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
17
- const [buttonsVisible, setButtonsVisible] = useState(true)
18
-
19
- const handleHideButtons = useCallback(() => {
20
- setButtonsVisible(false)
21
- }, [])
22
-
23
- const handleShowButtons = useCallback(() => {
24
- setButtonsVisible(true)
25
- }, [])
26
-
27
- return (
28
- <Flex align="center" height="fill" justify="center" style={{height: '200vh'}}>
29
- <BoundaryElementProvider element={useBoundaryElement ? boundaryElement : null}>
30
- <Card
31
- ref={setBoundaryElement}
32
- border
33
- style={{
34
- height: 'calc(100vh - 100px)',
35
- overflow: 'hidden',
36
- position: 'relative',
37
- resize: 'both',
38
- width: '500px',
39
- }}
40
- >
41
- <Flex align="center" height="fill" justify="center">
42
- <Flex justify="center">
43
- <Stack gap={2}>
44
- <Code size={1}>Placement: {placement}</Code>
45
- <Button
46
- disabled={buttonsVisible}
47
- fontSize={1}
48
- text="Show buttons"
49
- onClick={handleShowButtons}
50
- />
51
- </Stack>
52
- </Flex>
53
- </Flex>
54
-
55
- {buttonsVisible && (
56
- <Tooltip
57
- content={<Text size={1}>{content}</Text>}
58
- padding={2}
59
- placement={placement}
60
- portal={portal}
61
- >
62
- <Button
63
- mode="bleed"
64
- style={{position: 'absolute', top: 10, right: 10}}
65
- text="Tooltip"
66
- onClick={handleHideButtons}
67
- />
68
- </Tooltip>
69
- )}
70
- </Card>
71
- </BoundaryElementProvider>
72
- </Flex>
73
- )
74
- }
@@ -1,107 +0,0 @@
1
- import {
2
- Button,
3
- Card,
4
- SHADOW,
5
- SPACE,
6
- Stack,
7
- Text,
8
- Tooltip,
9
- TooltipDelayGroupProvider,
10
- } from '@sanity/ui'
11
- import {useBoolean, useNumber, useSelect, useText} from '@sanity/ui-workshop'
12
-
13
- import {CardWrapper, WORKSHOP_PLACEMENT_OPTIONS} from '$workshop'
14
-
15
- export default function PropsStory(): React.JSX.Element {
16
- const arrow = useBoolean('Arrow', false)
17
- const content = useText('Content', 'Tooltip content')
18
- const padding = useSelect('Padding', SPACE, 2)
19
- const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'top')
20
- const portal = useBoolean('Portal', true)
21
- const openDelay = useNumber('Open Delay', 500)
22
- const closeDelay = useNumber('Close Delay', 100)
23
- const shadow = useSelect('Shadow', SHADOW, 2)
24
-
25
- return (
26
- <CardWrapper gap={[5, 6]} pattern="halftone">
27
- <Stack gap={4}>
28
- <Stack gap={3}>
29
- <Text size={1} weight="medium">
30
- Single tooltip
31
- </Text>
32
- </Stack>
33
-
34
- <Card display="flex" gap={4} justifyContent="center" padding={4} radius={4} shadow={1}>
35
- <Tooltip
36
- arrow={arrow}
37
- delay={{
38
- open: openDelay,
39
- close: closeDelay,
40
- }}
41
- padding={padding}
42
- placement={placement}
43
- portal={portal}
44
- shadow={shadow}
45
- text={content}
46
- >
47
- <Button mode="bleed" text="Hover me" />
48
- </Tooltip>
49
- </Card>
50
- </Stack>
51
-
52
- {/* GROUPED TOOLTIPS */}
53
-
54
- <Stack gap={4}>
55
- <Stack gap={3}>
56
- <Text size={1} weight="medium">
57
- Grouped tooltips
58
- </Text>
59
- <Text muted size={1}>
60
- All tooltip delays are set to 1ms after the first tooltip within a DelayGroupProvider
61
- opens.
62
- </Text>
63
- </Stack>
64
-
65
- <Card display="flex" gap={4} justifyContent="center" padding={4} radius={4} shadow={1}>
66
- <TooltipDelayGroupProvider
67
- delay={{
68
- open: openDelay,
69
- close: closeDelay,
70
- }}
71
- >
72
- <Tooltip
73
- arrow={arrow}
74
- content={<Text size={1}>{content}</Text>}
75
- // This is overridden by the group delay, kept here intentionally for testing purposes.
76
- delay={{
77
- open: 100,
78
- close: 100,
79
- }}
80
- padding={padding}
81
- placement={placement}
82
- portal={portal}
83
- shadow={shadow}
84
- >
85
- <Button mode="bleed" text="Hover me" />
86
- </Tooltip>
87
- <Tooltip
88
- arrow={arrow}
89
- content={<Text size={1}>{content}</Text>}
90
- // This is overridden by the group delay, kept here intentionally for testing purposes.
91
- delay={{
92
- open: 100,
93
- close: 100,
94
- }}
95
- padding={padding}
96
- placement={placement}
97
- portal={portal}
98
- shadow={shadow}
99
- >
100
- <Button mode="bleed" text="Or me" />
101
- </Tooltip>
102
- </TooltipDelayGroupProvider>
103
- </Card>
104
- </Stack>
105
- </CardWrapper>
106
- )
107
- }
@@ -1,91 +0,0 @@
1
- import {BoundaryElementProvider, Button, Card, Code, Flex, Text, Tooltip} from '@sanity/ui'
2
- import {useBoolean, useSelect, useText} from '@sanity/ui-workshop'
3
- import {useState} from 'react'
4
-
5
- import {WORKSHOP_PLACEMENT_OPTIONS} from '$workshop'
6
-
7
- export default function ResizableBoundaryStory(): React.JSX.Element {
8
- const content = useText(
9
- 'Content',
10
- 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis consectetur malesuada. Sed lobortis est dolor, eget imperdiet velit placerat et. Aenean posuere mi non aliquet iaculis. Donec fermentum pulvinar purus at sagittis. Ut tincidunt massa odio, sed finibus justo ullamcorper id. Nam venenatis justo non ligula elementum cursus. Pellentesque laoreet justo in mollis sagittis. In lacinia ornare ultrices. Suspendisse potenti.',
11
- )
12
- const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'right')
13
- const portal = useBoolean('Portal', true)
14
- const useBoundaryElement = useBoolean('Use boundary element', true)
15
-
16
- const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
17
-
18
- return (
19
- <Flex align="center" height="fill" justify="center">
20
- <BoundaryElementProvider element={useBoundaryElement ? boundaryElement : null}>
21
- <Card
22
- ref={setBoundaryElement}
23
- // border
24
- radius={2}
25
- shadow={1}
26
- style={{
27
- height: 'calc(100vh - 100px)',
28
- overflow: 'hidden',
29
- position: 'relative',
30
- resize: 'both',
31
- width: 'calc(100vw - 100px)',
32
- // width: '500px',
33
- // width: '100%',
34
- // maxWidth: '640px',
35
- }}
36
- >
37
- <Flex align="center" height="fill" justify="center">
38
- <Flex justify="center">
39
- <Code size={1}>Placement: {placement}</Code>
40
- </Flex>
41
- </Flex>
42
-
43
- <Tooltip
44
- content={<Text size={1}>{content}</Text>}
45
- padding={2}
46
- placement={placement}
47
- portal={portal}
48
- >
49
- <Button mode="bleed" style={{position: 'absolute', top: 10, left: 10}} text="Tooltip" />
50
- </Tooltip>
51
- <Tooltip
52
- content={<Text size={1}>{content}</Text>}
53
- padding={2}
54
- placement={placement}
55
- portal={portal}
56
- >
57
- <Button
58
- mode="bleed"
59
- style={{position: 'absolute', top: 10, right: 10}}
60
- text="Tooltip"
61
- />
62
- </Tooltip>
63
- <Tooltip
64
- content={<Text size={1}>{content}</Text>}
65
- padding={2}
66
- placement={placement}
67
- portal={portal}
68
- >
69
- <Button
70
- mode="bleed"
71
- style={{position: 'absolute', bottom: 10, left: 10}}
72
- text="Tooltip"
73
- />
74
- </Tooltip>
75
- <Tooltip
76
- content={<Text size={1}>{content}</Text>}
77
- padding={2}
78
- placement={placement}
79
- portal={portal}
80
- >
81
- <Button
82
- mode="bleed"
83
- style={{position: 'absolute', bottom: 10, right: 10}}
84
- text="Tooltip"
85
- />
86
- </Tooltip>
87
- </Card>
88
- </BoundaryElementProvider>
89
- </Flex>
90
- )
91
- }
@@ -1,31 +0,0 @@
1
- import type {WorkshopScope} from '@sanity/ui-workshop'
2
- import {lazy} from 'react'
3
-
4
- const scope: WorkshopScope = {
5
- name: 'primitives/tooltip',
6
- title: 'Tooltip',
7
- stories: [
8
- {
9
- name: 'props',
10
- title: 'Props',
11
- component: lazy(() => import('./Props')),
12
- },
13
- {
14
- name: 'resizableBoundary',
15
- title: 'Resizable Boundary',
16
- component: lazy(() => import('./ResizableBoundary')),
17
- },
18
- {
19
- name: 'overflowBoundary',
20
- title: 'Overflowing Boundary',
21
- component: lazy(() => import('./OverflowingBoundary')),
22
- },
23
- {
24
- name: 'customPortalStory',
25
- title: 'Custom Portal',
26
- component: lazy(() => import('./CustomPortal')),
27
- },
28
- ],
29
- }
30
-
31
- export default scope
@@ -1,24 +0,0 @@
1
- import type {Placement} from '../../core/types'
2
-
3
- export const DEFAULT_TOOLTIP_DELAY = {
4
- open: 500,
5
- close: 100,
6
- }
7
-
8
- export const DEFAULT_TOOLTIP_DISTANCE = 4
9
- export const DEFAULT_TOOLTIP_PADDING = 4
10
-
11
- export const DEFAULT_FALLBACK_PLACEMENTS: Record<Placement, Placement[]> = {
12
- 'top': ['top-end', 'top-start', 'bottom', 'left', 'right'],
13
- 'top-start': ['top', 'top-end', 'bottom-start', 'left-start', 'right-start'],
14
- 'top-end': ['top', 'top-start', 'bottom-end', 'left-end', 'right-end'],
15
- 'bottom': ['bottom-end', 'bottom-start', 'top', 'left', 'right'],
16
- 'bottom-start': ['bottom', 'bottom-end', 'top-start', 'left-start', 'right-start'],
17
- 'bottom-end': ['bottom', 'bottom-start', 'top-end', 'left-end', 'right-end'],
18
- 'left': ['left-end', 'left-start', 'right', 'top', 'bottom'],
19
- 'left-start': ['left', 'left-end', 'right-start', 'top-start', 'bottom-start'],
20
- 'left-end': ['left', 'left-start', 'right-end', 'top-end', 'bottom-end'],
21
- 'right': ['right-end', 'right-start', 'left', 'top', 'bottom'],
22
- 'right-start': ['right', 'right-end', 'left-start', 'top-start', 'bottom-start'],
23
- 'right-end': ['right', 'right-start', 'left-end', 'top-end', 'bottom-end'],
24
- }
@@ -1,13 +0,0 @@
1
- import type {Context} from 'react'
2
-
3
- import {createGlobalScopedContext} from '../../../core/lib/createGlobalScopedContext'
4
- import type {TooltipDelayGroupContextValue} from './types'
5
-
6
- /**
7
- * @beta
8
- */
9
- export const TooltipDelayGroupContext: Context<TooltipDelayGroupContextValue | null> =
10
- createGlobalScopedContext<TooltipDelayGroupContextValue | null>(
11
- '@sanity/ui/v4/tooltipDelayGroup',
12
- null,
13
- )
@@ -1,96 +0,0 @@
1
- import {type ReactNode, useCallback, useMemo, useRef, useState} from 'react'
2
-
3
- import type {Delay} from '../../../core/types'
4
- import {DEFAULT_TOOLTIP_DELAY} from '../constants'
5
- import {TooltipDelayGroupContext} from './TooltipDelayGroupContext'
6
- import type {TooltipDelayGroupContextValue} from './types'
7
-
8
- /**
9
- * @public
10
- * */
11
- export interface TooltipDelayGroupProviderProps {
12
- children?: ReactNode
13
- /**
14
- * Handles the delays to open or close a tooltip inside a group
15
- *
16
- * If only a `number` is passed, it will be used for both opening and closing.
17
- *
18
- * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.
19
- *
20
- * @public
21
- */
22
- delay?: Delay
23
- }
24
-
25
- /**
26
- * @public
27
- * Provides context for a group of tooltip elements that should share a delay
28
- * which temporarily becomes 0ms after the first tooltip of the group opens.
29
- */
30
- export function TooltipDelayGroupProvider(
31
- props: TooltipDelayGroupProviderProps,
32
- ): React.JSX.Element {
33
- const {children, delay = DEFAULT_TOOLTIP_DELAY} = props
34
-
35
- const [visibleTooltipId, setVisibleTooltipId] = useState<string | undefined>(undefined)
36
-
37
- const openDelay = typeof delay === 'number' ? delay : delay?.open || 0
38
- const openDelayRef = useRef(openDelay)
39
-
40
- const closeDelay = typeof delay === 'number' ? delay : delay?.close || 0
41
- const closeDelayRef = useRef(closeDelay)
42
-
43
- const timerRef = useRef<NodeJS.Timeout | undefined>(undefined)
44
- const openRef = useRef(false)
45
-
46
- const handleOpenChange = useCallback(
47
- (params: {open: boolean; id: string; immediate?: boolean}) => {
48
- const {open, id, immediate} = params
49
-
50
- if (timerRef.current) {
51
- clearTimeout(timerRef.current)
52
- timerRef.current = undefined
53
- }
54
-
55
- if (open) {
56
- // open
57
-
58
- if (immediate) {
59
- setVisibleTooltipId(id)
60
- openRef.current = true
61
- return
62
- }
63
-
64
- // If the group is already open, we want the next tooltip to open immediately.
65
- const ms = openRef.current ? 0 : openDelayRef.current
66
-
67
- timerRef.current = setTimeout(() => {
68
- setVisibleTooltipId(id)
69
- openRef.current = true
70
- }, ms)
71
- return
72
- }
73
-
74
- // close
75
-
76
- if (immediate) {
77
- setVisibleTooltipId(undefined)
78
- openRef.current = false
79
- return
80
- }
81
-
82
- timerRef.current = setTimeout(() => {
83
- setVisibleTooltipId(undefined)
84
- openRef.current = false
85
- }, closeDelayRef.current)
86
- },
87
- [],
88
- )
89
-
90
- const value: TooltipDelayGroupContextValue = useMemo(
91
- () => ({handleOpenChange, visibleTooltipId}),
92
- [handleOpenChange, visibleTooltipId],
93
- )
94
-
95
- return <TooltipDelayGroupContext value={value}>{children}</TooltipDelayGroupContext>
96
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * @beta
3
- */
4
- export interface TooltipDelayGroupContextValue {
5
- handleOpenChange: (params: {open: boolean; id: string; immediate?: boolean}) => void
6
- visibleTooltipId: string | undefined
7
- }
@@ -1,13 +0,0 @@
1
- import {use} from 'react'
2
-
3
- import {TooltipDelayGroupContext} from './TooltipDelayGroupContext'
4
- import type {TooltipDelayGroupContextValue} from './types'
5
-
6
- /**
7
- * @beta
8
- */
9
- export function useTooltipDelayGroup(): TooltipDelayGroupContextValue | null {
10
- const value = use(TooltipDelayGroupContext)
11
-
12
- return value
13
- }
package/src/root/Root.tsx DELETED
@@ -1,93 +0,0 @@
1
- import {root, root_body, ROOT_STYLE_PROP_KEYS, type RootStyleProps} from '@sanity/ui-css'
2
- import {useCallback, useImperativeHandle, useRef, useState} from 'react'
3
-
4
- import {_splitKeys} from '../core/_keys'
5
- import type {Props} from '../core/types'
6
- import {RootProvider} from './RootProvider'
7
-
8
- /** @public */
9
- export const DEFAULT_ROOT_ELEMENT = 'html'
10
-
11
- /** @public */
12
- export type RootOwnProps = RootStyleProps
13
-
14
- /** @public */
15
- export type RootElementType = 'html' | 'div'
16
-
17
- /** @public */
18
- export type RootProps<E extends RootElementType = RootElementType> = Props<RootOwnProps, E>
19
-
20
- /**
21
- * The `Root` component.
22
- *
23
- * @public
24
- */
25
- export function Root<E extends RootElementType = typeof DEFAULT_ROOT_ELEMENT>(
26
- props: RootProps<E>,
27
- ): React.JSX.Element {
28
- const [
29
- {
30
- height,
31
- overflow = 'hidden',
32
- scheme = 'light',
33
- tone = 'default',
34
- // split style props
35
- ...styleProps
36
- },
37
- {
38
- as: Element = DEFAULT_ROOT_ELEMENT,
39
- children,
40
- ref: forwardedRef,
41
- // split DOM props
42
- ...domProps
43
- },
44
- ] = _splitKeys(props as RootProps<typeof DEFAULT_ROOT_ELEMENT>, ROOT_STYLE_PROP_KEYS)
45
-
46
- const ref = useRef<HTMLHtmlElement | null>(null)
47
-
48
- useImperativeHandle<HTMLHtmlElement | null, HTMLHtmlElement | null>(
49
- forwardedRef,
50
- () => ref.current,
51
- )
52
-
53
- const [portalElement, setPortalElement] = useState<HTMLElement | null>(null)
54
- const [boundaryElement, setBoundaryElement] = useState<HTMLElement | null>(null)
55
-
56
- const handleRef = useCallback((el: HTMLHtmlElement | null) => {
57
- setBoundaryElement(el)
58
- ref.current = el
59
- }, [])
60
-
61
- let node = (
62
- <RootProvider
63
- boundaryElement={boundaryElement}
64
- portalElement={portalElement}
65
- scheme={scheme}
66
- tone={tone}
67
- >
68
- {children}
69
- <div ref={setPortalElement} data-portal="" />
70
- </RootProvider>
71
- )
72
-
73
- if (Element === 'html') {
74
- node = <body className={root_body({height})}>{node}</body>
75
- }
76
-
77
- return (
78
- <Element
79
- data-ui="Root"
80
- {...domProps}
81
- ref={handleRef}
82
- className={root({
83
- ...styleProps,
84
- height,
85
- overflow,
86
- scheme,
87
- tone,
88
- })}
89
- >
90
- {node}
91
- </Element>
92
- )
93
- }