@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,92 +0,0 @@
1
- import {
2
- isHTMLAnchorElement,
3
- isHTMLButtonElement,
4
- isHTMLElement,
5
- isHTMLInputElement,
6
- isHTMLSelectElement,
7
- isHTMLTextAreaElement,
8
- } from './element'
9
-
10
- /**
11
- * @internal
12
- */
13
- export function _hasFocus(element: HTMLElement): boolean {
14
- return Boolean(document.activeElement) && element.contains(document.activeElement)
15
- }
16
-
17
- /**
18
- * @internal
19
- */
20
- export function isFocusable(element: HTMLElement): boolean {
21
- if (
22
- element.tabIndex > 0 ||
23
- (element.tabIndex === 0 && element.getAttribute('tabIndex') !== null)
24
- ) {
25
- return true
26
- }
27
-
28
- if (isHTMLAnchorElement(element)) {
29
- return Boolean(element.href) && element.rel !== 'ignore'
30
- }
31
-
32
- if (isHTMLInputElement(element)) {
33
- return element.type !== 'hidden' && element.type !== 'file' && !element.disabled
34
- }
35
-
36
- if (
37
- isHTMLButtonElement(element) ||
38
- isHTMLSelectElement(element) ||
39
- isHTMLTextAreaElement(element)
40
- ) {
41
- return !element.disabled
42
- }
43
-
44
- return false
45
- }
46
-
47
- /**
48
- * @internal
49
- */
50
- export function attemptFocus(element: HTMLElement): boolean {
51
- if (!isFocusable(element)) {
52
- return false
53
- }
54
-
55
- try {
56
- element.focus()
57
- } catch {
58
- // ignore
59
- }
60
-
61
- return document.activeElement === element
62
- }
63
-
64
- /**
65
- * @internal
66
- */
67
- export function focusFirstDescendant(element: HTMLElement): boolean {
68
- for (let i = 0; i < element.childNodes.length; i++) {
69
- const child = element.childNodes[i]
70
-
71
- if (isHTMLElement(child) && (attemptFocus(child) || focusFirstDescendant(child))) {
72
- return true
73
- }
74
- }
75
-
76
- return false
77
- }
78
-
79
- /**
80
- * @internal
81
- */
82
- export function focusLastDescendant(element: HTMLElement): boolean {
83
- for (let i = element.childNodes.length - 1; i >= 0; i--) {
84
- const child = element.childNodes[i]
85
-
86
- if (isHTMLElement(child) && (attemptFocus(child) || focusLastDescendant(child))) {
87
- return true
88
- }
89
- }
90
-
91
- return false
92
- }
@@ -1,51 +0,0 @@
1
- import {BREAKPOINT_KEYS, type ResponsiveProp, type ResponsivePropArray} from '@sanity/ui-css'
2
-
3
- import {EMPTY_ARRAY} from '../constants'
4
- import {isArray} from '../lib/isArray'
5
- import {isRecord} from '../lib/isRecord'
6
-
7
- // WeakMap for object/array values (automatic GC when objects are no longer referenced)
8
- const objectCache = new WeakMap<object, ResponsivePropArray<unknown>>()
9
-
10
- // Map for primitive values (bounded growth - only primitives like numbers/strings)
11
- const primitiveCache = new Map<unknown, ResponsivePropArray<unknown>>()
12
-
13
- /**
14
- * @internal
15
- */
16
- export function _getResponsiveProp<T>(
17
- val: ResponsiveProp<T> | undefined,
18
- defaultVal?: ResponsivePropArray<T>,
19
- ): ResponsivePropArray<T> {
20
- // Fast path: undefined
21
- if (val === undefined) {
22
- return defaultVal || (EMPTY_ARRAY as unknown as ResponsivePropArray<T>)
23
- }
24
-
25
- // Fast path: already an array or object - use WeakMap for identity-based caching
26
- if (isArray(val)) {
27
- let v = val
28
-
29
- // convert to array
30
- if (isRecord(val)) {
31
- v = BREAKPOINT_KEYS.map((key) => val[key]) as ResponsivePropArray<T>
32
- }
33
-
34
- const cached = objectCache.get(v)
35
- if (cached) return cached as ResponsivePropArray<T>
36
-
37
- const ret = v as ResponsivePropArray<T>
38
- objectCache.set(v, ret)
39
- return ret
40
- }
41
-
42
- // Primitive value - wrap in array and cache by value
43
- const cached = primitiveCache.get(val)
44
- if (cached) return cached as ResponsivePropArray<T>
45
-
46
- const ret = [val] as ResponsivePropArray<T>
47
-
48
- primitiveCache.set(val, ret)
49
-
50
- return ret
51
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export function _isScrollable(el: Node): boolean {
5
- if (!(el instanceof Element)) return false
6
-
7
- const style = window.getComputedStyle(el)
8
-
9
- return (
10
- style.overflowX.includes('auto') ||
11
- style.overflowX.includes('scroll') ||
12
- style.overflowY.includes('auto') ||
13
- style.overflowY.includes('scroll')
14
- )
15
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * As `@sanity/ui` is declared as a dependency, and may be duplicated, sometimes across major versions
3
- * it's critical that vital react contexts are shared even when there is a duplicate.
4
- * If we used a model similar to `sanity` itself this would be unnecessary as
5
- * those libraries enforce single instances.
6
- * Since we don't enforce it we have to support a sanity plugin being able to call hooks like `useToast`, and then
7
- * read the context setup by `sanity`, which calls `ToastProvider`, even if the provider and hook are different instances in memory.
8
- * It's also why it's vital that all changes to globally scoped providers remain fully backwards compatible to v1.
9
- */
10
-
11
- import {type Context, createContext} from 'react'
12
-
13
- import {globalScope} from './globalScope'
14
-
15
- export function createGlobalScopedContext<ContextType, const T extends ContextType = ContextType>(
16
- /**
17
- * Enforce that all Symbol.for keys used for globally scoped contexts have a predictable prefix
18
- */
19
- key: `@sanity/ui/v4/${string}`,
20
- defaultValue: T,
21
- ): Context<ContextType> {
22
- const symbol = Symbol.for(key)
23
-
24
- /**
25
- * Prevent errors about re-renders on React SSR on Next.js App Router
26
- */
27
- if (typeof document === 'undefined') {
28
- const context = createContext<ContextType>(defaultValue)
29
- context.displayName = key
30
- return context
31
- }
32
-
33
- // Use the global scope as a map of symbols to contexts
34
- const symbolMap = globalScope as Record<symbol, Context<ContextType>>
35
-
36
- symbolMap[symbol] = symbolMap[symbol] || createContext<T>(defaultValue)
37
-
38
- return symbolMap[symbol]
39
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Gets the global scope instance in a given environment.
3
- *
4
- * The strategy is to return the most modern, and if not, the most common:
5
- * - The `globalThis` variable is the modern approach to accessing the global scope
6
- * - The `window` variable is the global scope in a web browser
7
- * - The `self` variable is the global scope in workers and others
8
- * - The `global` variable is the global scope in Node.js
9
- */
10
- function getGlobalScope() {
11
- if (typeof globalThis !== 'undefined') return globalThis
12
- if (typeof window !== 'undefined') return window
13
- if (typeof self !== 'undefined') return self
14
- if (typeof global !== 'undefined') return global
15
-
16
- throw new Error('@sanity/ui: could not locate global scope')
17
- }
18
-
19
- export const globalScope: typeof globalThis = getGlobalScope()
@@ -1,3 +0,0 @@
1
- export function isArray(val: unknown): val is unknown[] {
2
- return Array.isArray(val)
3
- }
@@ -1,3 +0,0 @@
1
- export function isRecord(value: unknown): value is Record<string, unknown> {
2
- return Boolean(value && typeof value === 'object' && !Array.isArray(value))
3
- }
package/src/core/types.ts DELETED
@@ -1,57 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-object-type */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
-
4
- /**
5
- * Assign properties from `U` to `T`, excluding properties that already exist in `T`.
6
- *
7
- * @public
8
- */
9
- export type Assign<T extends {}, U extends {}> = Omit<T, keyof U> & U
10
-
11
- /** @public */
12
- export type EmptyProps = {}
13
-
14
- /** @public */
15
- export type TagType = keyof React.JSX.IntrinsicElements
16
-
17
- /** @public */
18
- export type ComponentType<P = any> =
19
- | React.FunctionComponent<P>
20
- | React.ComponentClass<P>
21
- | React.ExoticComponent<P>
22
-
23
- /** @public */
24
- export type ElementType<P> = TagType | ComponentType<P>
25
-
26
- /** @public */
27
- export type Props<P extends EmptyProps, E extends ElementType<P>> = Assign<
28
- E extends TagType ? React.JSX.IntrinsicElements[E] : React.ComponentProps<E>,
29
- P & {as?: E}
30
- >
31
-
32
- /**
33
- * Placement of floating UI elements.
34
- *
35
- * @public
36
- */
37
- export type Placement =
38
- | 'top'
39
- | 'top-start'
40
- | 'top-end'
41
- | 'right'
42
- | 'right-start'
43
- | 'right-end'
44
- | 'bottom'
45
- | 'bottom-start'
46
- | 'bottom-end'
47
- | 'left'
48
- | 'left-start'
49
- | 'left-end'
50
-
51
- /** @public */
52
- export type Delay =
53
- | number
54
- | Partial<{
55
- open: number
56
- close: number
57
- }>
@@ -1,114 +0,0 @@
1
- import {render, screen} from '@testing-library/react'
2
- import userEvent from '@testing-library/user-event'
3
- import {useRef} from 'react'
4
- import {describe, expect, it, vi} from 'vitest'
5
-
6
- import {useClickOutsideEvent} from './useClickOutsideEvent'
7
-
8
- describe('useClickOutsideEvent', () => {
9
- /**
10
- * This suite demonstrates the new hook `useClickOutsideEvent` that replaces `useClickOutside`
11
- */
12
-
13
- it('calls the handler when clicking outside of the array of elements', async () => {
14
- const user = userEvent.setup()
15
- const handler = vi.fn()
16
-
17
- const TestComponent = () => {
18
- const buttonRef = useRef<HTMLButtonElement | null>(null)
19
- const popoverRef = useRef<HTMLDivElement | null>(null)
20
-
21
- useClickOutsideEvent(handler, () => [buttonRef.current, popoverRef.current])
22
-
23
- return (
24
- <>
25
- <button ref={buttonRef} data-testid="button" />
26
- <div ref={popoverRef} data-testid="popover" />
27
- <div data-testid="outside" />
28
- </>
29
- )
30
- }
31
-
32
- render(<TestComponent />)
33
-
34
- await user.click(screen.getByTestId('button'))
35
- await user.click(screen.getByTestId('popover'))
36
- expect(handler).not.toHaveBeenCalled()
37
-
38
- await user.click(screen.getByTestId('outside'))
39
- expect(handler).toHaveBeenCalledTimes(1)
40
- })
41
-
42
- it('the elements array flattens nested arrays one level deep', async () => {
43
- const user = userEvent.setup()
44
- const handler = vi.fn()
45
-
46
- const TestComponent = () => {
47
- const buttonRef = useRef<HTMLButtonElement | null>(null)
48
- const popoverRef = useRef<HTMLDivElement | null>(null)
49
-
50
- useClickOutsideEvent(handler, () => [
51
- null,
52
- [null, buttonRef.current],
53
- [popoverRef.current, null],
54
- null,
55
- ])
56
-
57
- return (
58
- <>
59
- <button ref={buttonRef} data-testid="button" />
60
- <div ref={popoverRef} data-testid="popover" />
61
- <div data-testid="outside" />
62
- </>
63
- )
64
- }
65
-
66
- render(<TestComponent />)
67
-
68
- await user.click(screen.getByTestId('button'))
69
- await user.click(screen.getByTestId('popover'))
70
- expect(handler).not.toHaveBeenCalled()
71
-
72
- await user.click(screen.getByTestId('outside'))
73
- expect(handler).toHaveBeenCalledTimes(1)
74
- })
75
-
76
- it('it can set a boundary to scope outside click events', async () => {
77
- const user = userEvent.setup()
78
- const handler = vi.fn()
79
-
80
- const TestComponent = () => {
81
- const buttonRef = useRef<HTMLButtonElement | null>(null)
82
- const popoverRef = useRef<HTMLDivElement | null>(null)
83
- const boundaryRef = useRef<HTMLDivElement | null>(null)
84
-
85
- useClickOutsideEvent(
86
- handler,
87
- () => [buttonRef.current, popoverRef.current],
88
- () => boundaryRef.current,
89
- )
90
-
91
- return (
92
- <>
93
- <div ref={boundaryRef}>
94
- <button ref={buttonRef} data-testid="button" />
95
- <div ref={popoverRef} data-testid="popover" />
96
- <div data-testid="inside" />
97
- </div>
98
- <div data-testid="outside" />
99
- </>
100
- )
101
- }
102
-
103
- render(<TestComponent />)
104
-
105
- await user.click(screen.getByTestId('button'))
106
- await user.click(screen.getByTestId('popover'))
107
- // Since it's outside the boundary it should be ignored
108
- await user.click(screen.getByTestId('outside'))
109
- expect(handler).not.toHaveBeenCalled()
110
-
111
- await user.click(screen.getByTestId('inside'))
112
- expect(handler).toHaveBeenCalledTimes(1)
113
- })
114
- })
@@ -1,66 +0,0 @@
1
- import {useDebugValue, useEffect, useEffectEvent} from 'react'
2
-
3
- import {EMPTY_ARRAY} from '../core/constants'
4
-
5
- /** @public */
6
- export type ClickOutsideEventListener = (event: MouseEvent) => void
7
-
8
- /** @public */
9
- export type ClickOutsideEventElements = (HTMLElement | null | (HTMLElement | null)[])[]
10
-
11
- /** @public */
12
- export function useClickOutsideEvent(
13
- listener: ClickOutsideEventListener | false | undefined,
14
- elementsArg: () => ClickOutsideEventElements = () => EMPTY_ARRAY,
15
- boundaryElement?: () => HTMLElement | null,
16
- ): void {
17
- /**
18
- * The `useEffectEvent` hook allow us to always see the latest value of `listener`, `elementsArg` and `boundaryElement` without needing to
19
- * juggle `useState`, `useRef` and `useState` to make sure the `mousedown` event listener isn't constantly being added and removed.
20
- */
21
- const onEvent = useEffectEvent((evt: MouseEvent) => {
22
- if (!listener) {
23
- return
24
- }
25
-
26
- const target = evt.target
27
-
28
- if (!(target instanceof Node)) {
29
- return
30
- }
31
-
32
- const resolvedBoundaryElement = boundaryElement?.()
33
-
34
- if (resolvedBoundaryElement && !resolvedBoundaryElement.contains(target)) {
35
- return
36
- }
37
-
38
- const elements = elementsArg().flat()
39
-
40
- for (const el of elements) {
41
- if (!el) continue
42
-
43
- if (target === el || el.contains(target)) {
44
- return
45
- }
46
- }
47
-
48
- listener(evt)
49
- })
50
-
51
- const hasListener = Boolean(listener)
52
-
53
- useEffect(() => {
54
- if (!hasListener) return undefined
55
-
56
- const handleEvent = (evt: MouseEvent) => onEvent(evt)
57
-
58
- document.addEventListener('mousedown', handleEvent)
59
-
60
- return () => {
61
- document.removeEventListener('mousedown', handleEvent)
62
- }
63
- }, [hasListener])
64
-
65
- useDebugValue(listener ? 'MouseDown On' : 'MouseDown Off')
66
- }
@@ -1,13 +0,0 @@
1
- import {useEffect} from 'react'
2
-
3
- /**
4
- * @beta
5
- */
6
- export function useCustomValidity(
7
- ref: {current: null | {setCustomValidity: (validity: string) => void}},
8
- customValidity: string | undefined,
9
- ): void {
10
- useEffect(() => {
11
- ref.current?.setCustomValidity(customValidity || '')
12
- }, [customValidity, ref])
13
- }
@@ -1,19 +0,0 @@
1
- import {useEffect, useState} from 'react'
2
-
3
- import {_elementSizeObserver, type ElementSize} from '../observers/elementSize'
4
-
5
- /**
6
- * Subscribe to the size of a DOM element.
7
- * @beta
8
- */
9
- export function useElementSize(element: HTMLElement | null): ElementSize | null {
10
- const [size, setSize] = useState<ElementSize | null>(null)
11
-
12
- useEffect(() => {
13
- if (!element) return undefined
14
-
15
- return _elementSizeObserver.subscribe(element, setSize)
16
- }, [element])
17
-
18
- return size
19
- }
@@ -1,23 +0,0 @@
1
- import {useEffect, useEffectEvent} from 'react'
2
-
3
- /**
4
- * Adds global keydown event listener to the window.
5
- *
6
- * @param onKeyDown - The function to call when a keydown event is triggered.
7
- * @param options - The options to pass to the addEventListener function (example, capture: true)
8
- * @beta
9
- */
10
- export function useGlobalKeyDown(
11
- onKeyDown: (event: KeyboardEvent) => void,
12
- options?: AddEventListenerOptions,
13
- ): void {
14
- const handleKeyDown = useEffectEvent((event: KeyboardEvent) => onKeyDown(event))
15
-
16
- useEffect(() => {
17
- const handler = (event: KeyboardEvent) => handleKeyDown(event)
18
-
19
- window.addEventListener('keydown', handler, options)
20
-
21
- return () => window.removeEventListener('keydown', handler, options)
22
- }, [options])
23
- }
@@ -1,28 +0,0 @@
1
- import {useCallback, useDebugValue, useSyncExternalStore} from 'react'
2
-
3
- /**
4
- * Efficiently subscribes to `window.matchMedia` queries
5
- *
6
- * @param getServerSnapshot - Only called during server-side rendering, and hydration if using hydrateRoot. Required if the hook is called during SSR (https://dev/reference/react/useSyncExternalStore#adding-support-for-server-rendering)
7
- *
8
- * @public
9
- */
10
- export function useMatchMedia(
11
- mediaQueryString: `(${string})`,
12
- getServerSnapshot?: () => boolean,
13
- ): boolean {
14
- useDebugValue(mediaQueryString)
15
-
16
- return useSyncExternalStore(
17
- useCallback(
18
- (onStoreChange) => {
19
- const media = window.matchMedia(mediaQueryString)
20
- media.addEventListener('change', onStoreChange)
21
- return () => media.removeEventListener('change', onStoreChange)
22
- },
23
- [mediaQueryString],
24
- ),
25
- () => window.matchMedia(mediaQueryString).matches,
26
- getServerSnapshot,
27
- )
28
- }
@@ -1,14 +0,0 @@
1
- import {Card, Stack, Text, useMediaIndex} from '@sanity/ui'
2
-
3
- export default function TestStory(): React.JSX.Element {
4
- const mediaIndex = useMediaIndex()
5
-
6
- return (
7
- <Card padding={5}>
8
- <Stack gap={3}>
9
- <Text weight="medium">The current media index is {mediaIndex}.</Text>
10
- <Text muted>Try resizing the browser.</Text>
11
- </Stack>
12
- </Card>
13
- )
14
- }
@@ -1,16 +0,0 @@
1
- import type {WorkshopScope} from '@sanity/ui-workshop'
2
- import {lazy} from 'react'
3
-
4
- const scope: WorkshopScope = {
5
- name: 'hooks/use-media-index',
6
- title: 'useMediaIndex',
7
- stories: [
8
- {
9
- name: 'test',
10
- title: 'Test',
11
- component: lazy(() => import('./Test')),
12
- },
13
- ],
14
- }
15
-
16
- export default scope
@@ -1,21 +0,0 @@
1
- /** @jest-environment node */
2
-
3
- import {renderToStaticMarkup, renderToString} from 'react-dom/server'
4
- import {describe, expect, it} from 'vitest'
5
-
6
- import {useMediaIndex} from './useMediaIndex'
7
-
8
- function Log() {
9
- const mediaIndex = useMediaIndex()
10
-
11
- return <>mediaIndex: {JSON.stringify(mediaIndex)}</>
12
- }
13
-
14
- describe('useMediaIndex', () => {
15
- it(`SSR to static markup returns 0`, () => {
16
- expect(renderToStaticMarkup(<Log />)).toBe('mediaIndex: 0')
17
- })
18
- it(`SSR to markup for hydration doesn't throw`, () => {
19
- expect(renderToString(<Log />)).toBe('mediaIndex: <!-- -->0')
20
- })
21
- })