@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,135 +0,0 @@
1
- import {Box, Button, Card, Tab, TabList, TabPanel, Text} from '@sanity/ui'
2
- import {useBoolean} from '@sanity/ui-workshop'
3
- import {useState} from 'react'
4
-
5
- import {CardWrapper} from '../../../../workshop'
6
-
7
- export default function ExampleStory(): React.JSX.Element {
8
- const [tab, setTab] = useState('foo')
9
-
10
- const autoActivate = useBoolean('Auto activate')
11
- const useLongTitle = useBoolean('Use long title', false)
12
-
13
- const longTitle =
14
- "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."
15
-
16
- const hasFocusableChildren = useBoolean('Has focusable children', false)
17
-
18
- return (
19
- <CardWrapper pattern="halftone" tone="transparent">
20
- <Card
21
- display="flex"
22
- flexDirection="column"
23
- overflow="hidden"
24
- radius={5}
25
- shadow={2}
26
- style={{minHeight: 300}}
27
- >
28
- <TabList autoActivate={autoActivate} flex="none" padding={3} shadow={1}>
29
- <Tab
30
- aria-controls="example-panel-foo"
31
- id="example-tab-foo"
32
- label="Foo"
33
- selected={tab === 'foo'}
34
- onActivate={() => setTab('foo')}
35
- />
36
- <Tab
37
- aria-controls="example-panel-bar"
38
- id="example-tab-bar"
39
- label="Bar"
40
- selected={tab === 'bar'}
41
- onActivate={() => setTab('bar')}
42
- />
43
- <Tab
44
- aria-controls="example-panel-baz"
45
- id="example-tab-baz"
46
- label={useLongTitle ? longTitle : 'Baz'}
47
- selected={tab === 'baz'}
48
- onActivate={() => setTab('baz')}
49
- />
50
- </TabList>
51
-
52
- <TabPanel
53
- aria-labelledby="example-panel-foo"
54
- display="flex"
55
- flex={1}
56
- flexDirection="column"
57
- gap={4}
58
- hidden={tab !== 'foo'}
59
- id="example-panel-foo"
60
- padding={4}
61
- style={{
62
- borderBottomLeftRadius: 'inherit',
63
- borderBottomRightRadius: 'inherit',
64
- // @ts-expect-error - `cornerShape` is not yet fully supported in CSS
65
- cornerShape: 'inherit',
66
- }}
67
- >
68
- <Text size={1}>
69
- The <strong>Foo</strong> tab panel
70
- </Text>
71
-
72
- {hasFocusableChildren && (
73
- <Box>
74
- <Button mode="ghost" text="Focusable child" />
75
- </Box>
76
- )}
77
- </TabPanel>
78
-
79
- <TabPanel
80
- aria-labelledby="example-panel-bar"
81
- display="flex"
82
- flex={1}
83
- flexDirection="column"
84
- gap={4}
85
- hidden={tab !== 'bar'}
86
- id="example-panel-bar"
87
- padding={4}
88
- style={{
89
- borderBottomLeftRadius: 'inherit',
90
- borderBottomRightRadius: 'inherit',
91
- // @ts-expect-error - `cornerShape` is not yet fully supported in CSS
92
- cornerShape: 'inherit',
93
- }}
94
- >
95
- <Text size={1}>
96
- The <strong>Bar</strong> tab panel
97
- </Text>
98
-
99
- {hasFocusableChildren && (
100
- <Box>
101
- <Button mode="ghost" text="Focusable child" />
102
- </Box>
103
- )}
104
- </TabPanel>
105
-
106
- <TabPanel
107
- aria-labelledby="example-panel-baz"
108
- display="flex"
109
- flex={1}
110
- flexDirection="column"
111
- gap={4}
112
- hidden={tab !== 'baz'}
113
- id="example-panel-baz"
114
- padding={4}
115
- style={{
116
- borderBottomLeftRadius: 'inherit',
117
- borderBottomRightRadius: 'inherit',
118
- // @ts-expect-error - `cornerShape` is not yet fully supported in CSS
119
- cornerShape: 'inherit',
120
- }}
121
- >
122
- <Text size={1}>
123
- The <strong>Baz</strong> tab panel
124
- </Text>
125
-
126
- {hasFocusableChildren && (
127
- <Box>
128
- <Button mode="ghost" text="Focusable child" />
129
- </Box>
130
- )}
131
- </TabPanel>
132
- </Card>
133
- </CardWrapper>
134
- )
135
- }
@@ -1,16 +0,0 @@
1
- import type {WorkshopScope} from '@sanity/ui-workshop'
2
- import {lazy} from 'react'
3
-
4
- const scope: WorkshopScope = {
5
- name: 'components/tab',
6
- title: 'Tab',
7
- stories: [
8
- {
9
- name: 'example',
10
- title: 'Example',
11
- component: lazy(() => import('./Example')),
12
- },
13
- ],
14
- }
15
-
16
- export default scope
@@ -1,11 +0,0 @@
1
- /**
2
- * @beta
3
- */
4
- export interface TabContextListValue {
5
- version: 0.0
6
- focusedId: string | undefined
7
- activeId: string | undefined
8
- focusTab: (id: string | undefined) => void
9
- activateTab: (id: string) => void
10
- registerTab: (id: string, element: HTMLElement, selected: boolean | undefined) => () => void
11
- }
@@ -1,103 +0,0 @@
1
- import {describe, expect, it, vi} from 'vitest'
2
-
3
- import {render} from '$test/utils'
4
-
5
- import {ToastContext} from './ToastContext'
6
- import type {ToastContextValue} from './types'
7
- import {useToast} from './useToast'
8
-
9
- describe('components/toast', () => {
10
- describe('useToast', () => {
11
- it('should get context value', async () => {
12
- const log = vi.fn()
13
-
14
- function Debug() {
15
- const rootToast = useToast()
16
-
17
- log(rootToast)
18
-
19
- return <>debug</>
20
- }
21
-
22
- function Root() {
23
- const value: ToastContextValue = {
24
- version: 0.0,
25
- push: () => '',
26
- }
27
-
28
- return (
29
- <ToastContext value={value}>
30
- <Debug />
31
- </ToastContext>
32
- )
33
- }
34
-
35
- render(<Root />)
36
-
37
- expect(log.mock.calls[0][0].version).toBe(0.0)
38
- expect(typeof log.mock.calls[0][0].push).toBe('function')
39
- })
40
-
41
- it('should fail when no context value is provided', async () => {
42
- const log = vi.fn()
43
-
44
- function Debug() {
45
- try {
46
- useToast()
47
- } catch (err) {
48
- log(err)
49
- }
50
-
51
- return null
52
- }
53
-
54
- function Root() {
55
- return (
56
- <ToastContext
57
- // @ts-expect-error - we want to test the error case
58
- value={undefined}
59
- >
60
- <Debug />
61
- </ToastContext>
62
- )
63
- }
64
-
65
- render(<Root />)
66
-
67
- expect(log.mock.calls[0][0].message).toEqual('useToast(): missing context value')
68
- })
69
-
70
- it('should fail when context value is not compatible', async () => {
71
- const log = vi.fn()
72
-
73
- function Debug() {
74
- try {
75
- useToast()
76
- } catch (err) {
77
- log(err)
78
- }
79
-
80
- return null
81
- }
82
-
83
- function Root() {
84
- // NOTE: we’re testing this because the context value may be a function in the future
85
-
86
- return (
87
- <ToastContext
88
- // @ts-expect-error - we want to test the error case
89
- value={() => ({version: 1})}
90
- >
91
- <Debug />
92
- </ToastContext>
93
- )
94
- }
95
-
96
- render(<Root />)
97
-
98
- expect(log.mock.calls[0][0].message).toEqual(
99
- 'useToast(): the context value is not compatible',
100
- )
101
- })
102
- })
103
- })
@@ -1,191 +0,0 @@
1
- import {CloseIcon} from '@sanity/icons'
2
- import {type RadiusStyleProps, toast} from '@sanity/ui-css'
3
- import {motion, type Variant, type Variants} from 'motion/react'
4
- import {type ReactNode} from 'react'
5
-
6
- import type {ComponentType, Props} from '../../core/types'
7
- import {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'
8
- import {Box} from '../../primitives/box/Box'
9
- import {Button} from '../../primitives/button/Button'
10
- import {Card} from '../../primitives/card/Card'
11
- import {Flex} from '../../primitives/flex/Flex'
12
- import {Stack} from '../../primitives/stack/Stack'
13
- import {Text} from '../../primitives/text/Text'
14
-
15
- /** @internal */
16
- export const DEFAULT_TOAST_ELEMENT = 'li'
17
-
18
- /** @internal */
19
- export type ToastOwnProps = RadiusStyleProps & {
20
- closable?: boolean
21
- description?: ReactNode
22
- onClose?: () => void
23
- title?: ReactNode
24
- status?: 'error' | 'warning' | 'success' | 'info'
25
- duration?: number
26
- }
27
-
28
- /** @internal */
29
- export type ToastElementType = 'li' | ComponentType
30
-
31
- /** @internal */
32
- export type ToastProps<E extends ToastElementType = ToastElementType> = Props<ToastOwnProps, E>
33
-
34
- // Support pattern used by Sanity Studio, that works around the lack of `duration: Infinity` support in older @sanity/ui versions
35
- // https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value
36
- const LONG_ENOUGH_BUT_NOT_TOO_LONG = 1000 * 60 * 60 * 24 * 24
37
-
38
- const ROLES = {
39
- error: 'alert',
40
- warning: 'alert',
41
- success: 'alert',
42
- info: 'alert',
43
- } as const
44
-
45
- const STATUS_CARD_TONE = {
46
- error: 'critical',
47
- warning: 'caution',
48
- success: 'positive',
49
- info: 'neutral',
50
- } as const
51
-
52
- const BUTTON_TONE = {
53
- error: 'critical',
54
- warning: 'caution',
55
- success: 'positive',
56
- info: 'neutral',
57
- } as const
58
-
59
- /**
60
- * The `Toast` component gives feedback to users when an action has taken place.
61
- *
62
- * Toasts can be closed with a close button, or auto-dismiss when the duration expires.
63
- *
64
- * @internal
65
- */
66
- export function Toast<E extends ToastElementType = typeof DEFAULT_TOAST_ELEMENT>(
67
- props: ToastProps<E>,
68
- ): React.JSX.Element {
69
- const {
70
- as = DEFAULT_TOAST_ELEMENT,
71
- closable,
72
- description,
73
- duration,
74
- onClose,
75
- radius = 3,
76
- title,
77
- status,
78
- ...rest
79
- } = props as ToastProps<typeof DEFAULT_TOAST_ELEMENT>
80
-
81
- const cardTone = status ? STATUS_CARD_TONE[status] : 'default'
82
- const buttonTone = status ? BUTTON_TONE[status] : 'default'
83
- const role = status ? ROLES[status] : 'status'
84
-
85
- const prefersReducedMotion = usePrefersReducedMotion()
86
-
87
- const visualDuration: number = prefersReducedMotion ? 0 : 0.26
88
- const transition = visualDuration
89
- ? {type: 'spring' as const, visualDuration, bounce: 0.25}
90
- : {duration: 0}
91
-
92
- const hasDuration = duration && isFinite(duration) && duration < LONG_ENOUGH_BUT_NOT_TOO_LONG
93
- const initial: ContainerVariants[] = ['hidden', 'initial']
94
- const animate: ContainerVariants[] = ['visible', 'slideIn']
95
- const exit: ContainerVariants[] = ['hidden', 'slideOut']
96
-
97
- return (
98
- <MotionCard
99
- as={as}
100
- className={toast()}
101
- data-ui="Toast"
102
- role={role}
103
- {...rest}
104
- animate={animate}
105
- custom={visualDuration}
106
- data-has-duration={hasDuration ? '' : undefined}
107
- exit={exit}
108
- initial={initial}
109
- layout="position"
110
- position="relative"
111
- radius={radius}
112
- shadow={2}
113
- tone={cardTone}
114
- transition={transition}
115
- variants={container}
116
- >
117
- <MotionFlex align="flex-start" transition={transition} variants={content}>
118
- <Flex flex={1} overflowX="auto" padding={3}>
119
- <Stack gap={3}>
120
- {title && (
121
- <Text size={1} weight="medium">
122
- {title}
123
- </Text>
124
- )}
125
- {description && (
126
- <MotionText muted size={1} transition={transition} variants={content}>
127
- {description}
128
- </MotionText>
129
- )}
130
- </Stack>
131
- </Flex>
132
-
133
- {closable && (
134
- <Box padding={1}>
135
- <Button
136
- as="button"
137
- icon={CloseIcon}
138
- mode="bleed"
139
- padding={2}
140
- style={{verticalAlign: 'top'}}
141
- tone={buttonTone}
142
- onClick={onClose}
143
- />
144
- </Box>
145
- )}
146
- </MotionFlex>
147
- </MotionCard>
148
- )
149
- }
150
-
151
- const container = {
152
- initial: {y: 32, scale: 0.5, zIndex: 1},
153
- hidden: {opacity: 0},
154
- visible: (visualDuration: number) => {
155
- if (!visualDuration) return {opacity: 1}
156
-
157
- return {
158
- opacity: 1,
159
- transition: {
160
- when: 'beforeChildren',
161
- staggerChildren: visualDuration / 3,
162
- duration: visualDuration / 3,
163
- },
164
- }
165
- },
166
- slideIn: {
167
- y: 0,
168
- scale: 1,
169
- },
170
- slideOut: {
171
- zIndex: 0,
172
- scale: 0.75,
173
- },
174
- } satisfies Variants
175
- type ContainerVariants = keyof typeof container
176
-
177
- const content = {
178
- initial: {
179
- willChange: 'transform',
180
- },
181
- hidden: {
182
- opacity: 0,
183
- },
184
- visible: {
185
- opacity: 1,
186
- },
187
- } satisfies Partial<Record<ContainerVariants, Variant>>
188
-
189
- const MotionCard = motion.create(Card)
190
- const MotionFlex = motion.create(Flex)
191
- const MotionText = motion.create(Text)
@@ -1,7 +0,0 @@
1
- import type {Context} from 'react'
2
-
3
- import {createGlobalScopedContext} from '../../core/lib/createGlobalScopedContext'
4
- import type {ToastContextValue} from './types'
5
-
6
- export const ToastContext: Context<ToastContextValue | null> =
7
- createGlobalScopedContext<ToastContextValue | null>('@sanity/ui/v4/toast', null)
@@ -1,54 +0,0 @@
1
- import {type GapStyleProps, type PaddingStyleProps, toast_layer} from '@sanity/ui-css'
2
-
3
- import type {ComponentType, Props} from '../../core/types'
4
- import {Grid} from '../../primitives/grid/Grid'
5
- import {useLayer} from '../../primitives/layer/useLayer'
6
-
7
- /** @internal */
8
- export const DEFAULT_TOAST_LAYER_ELEMENT = 'ul'
9
-
10
- /** @internal */
11
- export type ToastLayerOwnProps = GapStyleProps & PaddingStyleProps
12
-
13
- /** @internal */
14
- export type ToastLayerElementType = 'ul' | ComponentType
15
-
16
- /** @internal */
17
- export type ToastLayerProps<E extends ToastLayerElementType = ToastLayerElementType> = Props<
18
- ToastLayerOwnProps,
19
- E
20
- >
21
-
22
- /**
23
- * @internal
24
- */
25
- export function ToastLayer<E extends ToastLayerElementType = typeof DEFAULT_TOAST_LAYER_ELEMENT>(
26
- props: ToastLayerProps<E>,
27
- ): React.JSX.Element {
28
- const {
29
- as = DEFAULT_TOAST_LAYER_ELEMENT,
30
- children,
31
- padding = 4,
32
- paddingX,
33
- paddingY,
34
- gap = 3,
35
- } = props as ToastLayerProps<typeof DEFAULT_TOAST_LAYER_ELEMENT>
36
-
37
- const {zIndex} = useLayer()
38
-
39
- return (
40
- <Grid
41
- as={as}
42
- className={toast_layer()}
43
- data-ui="ToastProvider"
44
- gap={gap}
45
- gridTemplateColumns={1}
46
- padding={padding}
47
- paddingX={paddingX}
48
- paddingY={paddingY}
49
- style={{zIndex}}
50
- >
51
- {children}
52
- </Grid>
53
- )
54
- }
@@ -1,127 +0,0 @@
1
- import type {ResponsiveProp} from '@sanity/ui-css'
2
- import {AnimatePresence} from 'motion/react'
3
- import {startTransition, useMemo, useRef, useState} from 'react'
4
-
5
- import {useMounted} from '../../hooks/useMounted'
6
- import {LayerProvider} from '../../primitives/layer/LayerProvider'
7
- import {Toast} from './Toast'
8
- import {ToastContext} from './ToastContext'
9
- import {ToastLayer, type ToastLayerProps} from './ToastLayer'
10
- import {generateToastId} from './toastState'
11
- import type {ToastContextValue, ToastParams} from './types'
12
-
13
- type ToastState = {
14
- dismiss: () => void
15
- id: string
16
- params: ToastParams
17
- }[]
18
-
19
- /** @public */
20
- export interface ToastProviderProps extends Omit<ToastLayerProps, 'children'> {
21
- children?: React.ReactNode
22
- zOffset?: ResponsiveProp<number>
23
- }
24
-
25
- /** @public */
26
- export function ToastProvider(props: ToastProviderProps): React.JSX.Element {
27
- const {children, padding, paddingX, paddingY, gap, zOffset = 1} = props
28
- const [state, setState] = useState<ToastState>([])
29
- const mounted = useMounted()
30
-
31
- const timeoutIdsRef = useRef<Record<string, NodeJS.Timeout | undefined>>({})
32
-
33
- const value: ToastContextValue = useMemo(() => {
34
- const push = (params: ToastParams) => {
35
- const id = params.id ?? generateToastId()
36
- const duration = params.duration ?? 5000
37
-
38
- // If the `id` is reused, clear the previous timeout
39
- const existingTimeoutId = timeoutIdsRef.current[id]
40
- if (existingTimeoutId) {
41
- clearTimeout(existingTimeoutId)
42
- timeoutIdsRef.current[id] = undefined
43
- }
44
-
45
- startTransition(() => {
46
- setState((prevState): ToastState => {
47
- /**
48
- * Backwards compatibility for `sanity` patterns workaround a lack of programatically dismissible toasts.
49
- * It uses a super short duration that closes the toast immediately in previous versions of `@sanity/ui`.
50
- * We interpret this as a request to dismiss the toast immediately, and remove it from the state right away.
51
- * Even once we support programatic dismissal we'll need to keep this for backwards compatibility with v2 and v1.
52
- */
53
- if (duration === 0.01) {
54
- return prevState.filter((toast) => toast.id !== id)
55
- }
56
-
57
- /**
58
- * Creates a function to dismiss this specific toast.
59
- * This function will be passed to the Toast component
60
- * and called either on close button click or after duration.
61
- */
62
- function dismiss() {
63
- startTransition(() => {
64
- if (timeoutId) {
65
- clearTimeout(timeoutId)
66
- }
67
-
68
- setState((currentState) => currentState.filter((toast) => toast.id !== id))
69
-
70
- // Clear the timeout id from the ref to prevent memory leaks
71
- timeoutIdsRef.current[id] = undefined
72
- })
73
- }
74
-
75
- const timeoutId = duration === Infinity ? undefined : setTimeout(dismiss, duration)
76
-
77
- // Set the timeout id in the ref
78
- timeoutIdsRef.current[id] = timeoutId
79
-
80
- /**
81
- * Create updated state by:
82
- * 1. Removing any existing toast with the same ID (prevents duplicates)
83
- * 2. Adding the new toast with its dismiss handler
84
- * 3. Updates the `updatedAt` timestamp, which resets progress bar count downs.
85
- */
86
- return [
87
- ...prevState.filter((toast) => toast.id !== id),
88
- {
89
- dismiss,
90
- id,
91
- params: {...params, duration},
92
- },
93
- ]
94
- })
95
- })
96
-
97
- return id
98
- }
99
-
100
- return {version: 0.0, push}
101
- }, [])
102
-
103
- return (
104
- <ToastContext value={value}>
105
- {children}
106
- {mounted && (
107
- <LayerProvider zOffset={zOffset}>
108
- <ToastLayer gap={gap} padding={padding} paddingX={paddingX} paddingY={paddingY}>
109
- <AnimatePresence initial={false} mode="popLayout">
110
- {state.map(({dismiss, id, params}) => (
111
- <Toast
112
- key={id}
113
- closable={params.closable}
114
- description={params.description}
115
- duration={params.duration}
116
- status={params.status}
117
- title={params.title}
118
- onClose={dismiss}
119
- />
120
- ))}
121
- </AnimatePresence>
122
- </ToastLayer>
123
- </LayerProvider>
124
- )}
125
- </ToastContext>
126
- )
127
- }