@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,546 +0,0 @@
1
- import {
2
- autoUpdate,
3
- flip,
4
- type Middleware,
5
- offset,
6
- type RootBoundary,
7
- shift,
8
- useFloating,
9
- } from '@floating-ui/react-dom'
10
- import {
11
- type RadiusStyleProps,
12
- type ResponsiveProp,
13
- type ShadowStyleProps,
14
- tooltip,
15
- } from '@sanity/ui-css'
16
- import type {CardTone, ColorScheme, FontTextSize} from '@sanity/ui-tokens'
17
- import {AnimatePresence} from 'motion/react'
18
- import {
19
- cloneElement,
20
- startTransition,
21
- use,
22
- useCallback,
23
- useEffect,
24
- useEffectEvent,
25
- useId,
26
- useImperativeHandle,
27
- useLayoutEffect,
28
- useMemo,
29
- useRef,
30
- useState,
31
- } from 'react'
32
-
33
- import {Hotkeys} from '../../components/hotkeys/Hotkeys'
34
- import {Z_OFFSETS} from '../../core/constants'
35
- import {getElementRef} from '../../core/getElementRef'
36
- import type {ComponentType, Delay, Placement, Props} from '../../core/types'
37
- import {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'
38
- import {useUnique} from '../../hooks/useUnique'
39
- import {origin} from '../../middleware/origin'
40
- import {BoundaryElementContext} from '../../utils/boundaryElement/BoundaryElementContext'
41
- import {Portal} from '../../utils/portal/Portal'
42
- import {PortalContext} from '../../utils/portal/PortalContext'
43
- import {assertPortalContext} from '../../utils/portal/usePortal'
44
- import type {LayerOwnProps} from '../layer/Layer'
45
- import {Text} from '../text/Text'
46
- import {
47
- DEFAULT_FALLBACK_PLACEMENTS,
48
- DEFAULT_TOOLTIP_DELAY,
49
- DEFAULT_TOOLTIP_DISTANCE,
50
- DEFAULT_TOOLTIP_PADDING,
51
- } from './constants'
52
- import {TooltipDelayGroupContext} from './tooltipDelayGroup/TooltipDelayGroupContext'
53
- import {TooltipLayer} from './TooltipLayer'
54
-
55
- /** @public */
56
- export const DEFAULT_TOOLTIP_ELEMENT = 'div'
57
-
58
- /** @public */
59
- export type TooltipOwnProps = LayerOwnProps &
60
- RadiusStyleProps &
61
- ShadowStyleProps & {
62
- /**
63
- * Whether the tooltip should animate in and out.
64
- *
65
- * @beta
66
- * @defaultValue false
67
- */
68
- animate?: boolean
69
- /** @deprecated Will be removed in the next major version */
70
- arrow?: boolean
71
- boundaryElement?: HTMLElement | null
72
- children?: React.ReactElement<
73
- React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>
74
- >
75
- content?: React.ReactNode
76
- /**
77
- * Adds a delay to open or close the tooltip.
78
- *
79
- * If only a `number` is passed, it will be used for both opening and closing.
80
- *
81
- * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.
82
- *
83
- * @public
84
- * @defaultValue 0
85
- */
86
- delay?: Delay
87
- disabled?: boolean
88
- fallbackPlacements?: Placement[]
89
- hotkeys?: string[]
90
- placement?: Placement
91
- /** Whether or not to render the tooltip in a portal element. */
92
- portal?: boolean | string
93
- scheme?: ColorScheme
94
- text?: React.ReactNode
95
- textSize?: ResponsiveProp<FontTextSize>
96
- tone?: CardTone
97
- }
98
-
99
- /** @public */
100
- export type TooltipElementType = 'div' | 'span' | ComponentType
101
-
102
- /** @public */
103
- export type TooltipProps<E extends TooltipElementType = TooltipElementType> = Props<
104
- TooltipOwnProps,
105
- E
106
- >
107
-
108
- /**
109
- * Tooltips display information when hovering, focusing or tapping.
110
- *
111
- * @public
112
- */
113
- export function Tooltip<E extends TooltipElementType = typeof DEFAULT_TOOLTIP_ELEMENT>(
114
- props: TooltipProps<E>,
115
- ): React.JSX.Element {
116
- const {
117
- animate: animateProp = true,
118
- arrow: _arrow,
119
- as = DEFAULT_TOOLTIP_ELEMENT,
120
- boundaryElement: _boundaryElement,
121
- children: childProp,
122
- className,
123
- content: contentProp,
124
- delay = DEFAULT_TOOLTIP_DELAY,
125
- disabled,
126
- id: idProp,
127
- fallbackPlacements: _fallbackPlacements,
128
- hotkeys: hotkeysProp,
129
- padding = 2,
130
- placement: placementProp = 'bottom',
131
- portal = true,
132
- radius = 3,
133
- ref: forwardedRef,
134
- shadow = 2,
135
- text,
136
- textSize = 1,
137
- zOffset = Z_OFFSETS.tooltip,
138
- ...rest
139
- } = props as TooltipProps<typeof DEFAULT_TOOLTIP_ELEMENT>
140
-
141
- const _randomId = useId()
142
- const id = idProp ?? _randomId
143
-
144
- const boundaryElement = _boundaryElement ?? use(BoundaryElementContext)
145
- const fallbackPlacements =
146
- _fallbackPlacements ?? DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom']
147
-
148
- const prefersReducedMotion = usePrefersReducedMotion()
149
- const animate = prefersReducedMotion ? false : animateProp
150
- const ref = useRef<HTMLDivElement | null>(null)
151
- const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null)
152
- const rootBoundary: RootBoundary = 'viewport'
153
- const [tooltipMaxWidth, setTooltipMaxWidth] = useState(0)
154
-
155
- useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)
156
-
157
- let portalElement: HTMLElement | null = null
158
- if (portal) {
159
- const portalContext = use(PortalContext)
160
- assertPortalContext(portalContext)
161
- portalElement =
162
- typeof portal === 'string' ? portalContext.elements?.[portal] || null : portalContext.element
163
- }
164
-
165
- const middleware = useMiddleware({
166
- animate,
167
- boundaryElement,
168
- fallbackPlacements,
169
- rootBoundary,
170
- })
171
-
172
- const {floatingStyles, placement, middlewareData, refs} = useFloating({
173
- middleware,
174
- placement: placementProp,
175
- whileElementsMounted: autoUpdate,
176
- elements: {reference: referenceElement},
177
- transform: false,
178
- })
179
-
180
- const originX = middlewareData['@sanity/ui/origin']?.originX
181
- const originY = middlewareData['@sanity/ui/origin']?.originY
182
-
183
- const delayGroupContext = use(TooltipDelayGroupContext)
184
- const handleGroupOpenChange = delayGroupContext?.handleOpenChange
185
-
186
- const groupVisible = delayGroupContext?.visibleTooltipId === id
187
-
188
- const openDelay = typeof delay === 'number' ? delay : (delay.open ?? DEFAULT_TOOLTIP_DELAY.open)
189
- const closeDelay =
190
- typeof delay === 'number' ? delay : (delay.close ?? DEFAULT_TOOLTIP_DELAY.close)
191
-
192
- const openDelayRef = useRef(openDelay)
193
- useEffect(() => {
194
- // update `openDelayRef` when `openDelay` changes
195
- openDelayRef.current = openDelay
196
- }, [openDelay])
197
-
198
- const closeDelayRef = useRef(closeDelay)
199
- useEffect(() => {
200
- // update `closeDelayRef` when `closeDelay` changes
201
- closeDelayRef.current = closeDelay
202
- }, [closeDelay])
203
-
204
- const [referenceHovered, setReferenceHovered] = useState(false)
205
- const [referenceFocused, setReferenceFocused] = useState(false)
206
-
207
- const isOpen = referenceHovered || referenceFocused
208
-
209
- const [localVisible, setVisible] = useState(false)
210
-
211
- const visible = groupVisible || localVisible
212
-
213
- const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)
214
-
215
- useEffect(() => {
216
- if (handleGroupOpenChange) {
217
- handleGroupOpenChange({open: isOpen, id})
218
- return
219
- }
220
-
221
- if (timerRef.current) clearTimeout(timerRef.current)
222
- timerRef.current = undefined
223
-
224
- if (isOpen) {
225
- // start open timer
226
- timerRef.current = setTimeout(() => {
227
- setVisible(true)
228
- timerRef.current = undefined
229
- }, openDelayRef.current)
230
- return
231
- }
232
-
233
- // start close timer
234
- timerRef.current = setTimeout(() => {
235
- setVisible(false)
236
- timerRef.current = undefined
237
- }, closeDelayRef.current)
238
-
239
- return () => {
240
- if (timerRef.current) clearTimeout(timerRef.current)
241
- timerRef.current = undefined
242
- }
243
- }, [isOpen, handleGroupOpenChange, id])
244
-
245
- const hotkeys = useUnique(hotkeysProp)
246
-
247
- const content = useMemo(() => {
248
- if (contentProp || text || hotkeys) {
249
- return (
250
- <>
251
- {text && <Text size={textSize}>{text}</Text>}
252
- {contentProp}
253
- {hotkeys && <Hotkeys aria-hidden={true} keys={hotkeys} />}
254
- </>
255
- )
256
- }
257
-
258
- return undefined
259
- }, [contentProp, hotkeys, text, textSize])
260
-
261
- // Hide immediately
262
- const hide = useCallback(() => {
263
- handleGroupOpenChange?.({open: false, id, immediate: true})
264
- setVisible(false)
265
- setReferenceHovered(false)
266
- setReferenceFocused(false)
267
- }, [handleGroupOpenChange, id])
268
-
269
- const childOnBlur = childProp?.props?.onBlur
270
- const childOnFocus = childProp?.props?.onFocus
271
- const childOnMouseEnter = childProp?.props?.onMouseEnter
272
- const childOnMouseLeave = childProp?.props?.onMouseLeave
273
- const childOnContextMenu = childProp?.props?.onContextMenu
274
-
275
- const handleBlur = useCallback(
276
- (e: React.FocusEvent<HTMLElement>) => {
277
- childOnBlur?.(e)
278
- setReferenceFocused(false)
279
- },
280
- [childOnBlur],
281
- )
282
- const handleContextMenu = useCallback(
283
- (e: React.MouseEvent<HTMLElement>) => {
284
- childOnContextMenu?.(e)
285
- setReferenceHovered(false)
286
- setReferenceFocused(false)
287
- hide()
288
- },
289
- [childOnContextMenu, hide],
290
- )
291
- const handleFocus = useCallback(
292
- (e: React.FocusEvent<HTMLElement>) => {
293
- childOnFocus?.(e)
294
- setReferenceFocused(true)
295
- },
296
- [childOnFocus],
297
- )
298
- const handleMouseEnter = useCallback(
299
- (e: React.MouseEvent<HTMLElement>) => {
300
- childOnMouseEnter?.(e)
301
- setReferenceHovered(true)
302
- },
303
- [childOnMouseEnter],
304
- )
305
- const handleMouseLeave = useCallback(
306
- (e: React.MouseEvent<HTMLElement>) => {
307
- childOnMouseLeave?.(e)
308
- setReferenceHovered(false)
309
- },
310
- [childOnMouseLeave],
311
- )
312
-
313
- // Handle closing the tooltip when the mouse leaves the referenceElement
314
- useCloseOnMouseLeave({
315
- referenceElement,
316
- visible,
317
- onClose: useCallback(() => {
318
- setReferenceHovered(false)
319
- }, []),
320
- })
321
-
322
- // Close when `disabled` changes to `true`
323
- useEffect(() => {
324
- if (disabled) {
325
- startTransition(() => hide())
326
- }
327
- }, [disabled, hide])
328
-
329
- // Close when `content` changes to falsy
330
- useEffect(() => {
331
- if (!content) {
332
- startTransition(() => hide())
333
- }
334
- }, [content, hide])
335
-
336
- useEffect(() => {
337
- if (!visible) return
338
-
339
- function handleWindowKeyDown(event: KeyboardEvent) {
340
- // If the user clicks on escape key, close the tooltip.
341
- if (event.key === 'Escape') {
342
- startTransition(() => hide())
343
- return
344
- }
345
- }
346
-
347
- window.addEventListener('keydown', handleWindowKeyDown)
348
-
349
- return () => {
350
- window.removeEventListener('keydown', handleWindowKeyDown)
351
- }
352
- }, [hide, visible])
353
-
354
- // Set the max width of the tooltip based on boundaries and portals
355
- useLayoutEffect(() => {
356
- // Get the maximum tooltip width (sans tooltip padding)
357
- // Tooltip width should never exceed the width of either any supplied boundary or portal element.
358
- // If both portal and boundary elements are provided, use the smaller width of the two.
359
- const availableWidths = [
360
- ...(boundaryElement ? [boundaryElement.offsetWidth] : []),
361
- portalElement?.offsetWidth || document.body.offsetWidth,
362
- ]
363
-
364
- startTransition(() => {
365
- setTooltipMaxWidth(Math.min(...availableWidths) - DEFAULT_TOOLTIP_PADDING * 2)
366
- })
367
- }, [boundaryElement, portalElement])
368
-
369
- const setFloating = useCallback(
370
- (node: HTMLDivElement | null) => {
371
- ref.current = node
372
- refs.setFloating(node)
373
- },
374
- [refs],
375
- )
376
-
377
- const child = useMemo(() => {
378
- if (!childProp) return null
379
-
380
- return cloneElement(childProp, {
381
- 'aria-describedby': visible ? id : undefined,
382
- 'onBlur': handleBlur,
383
- 'onFocus': handleFocus,
384
- 'onMouseEnter': handleMouseEnter,
385
- 'onMouseLeave': handleMouseLeave,
386
- 'onContextMenu': handleContextMenu,
387
- 'ref': setReferenceElement,
388
- })
389
- }, [
390
- childProp,
391
- handleBlur,
392
- handleContextMenu,
393
- handleFocus,
394
- handleMouseEnter,
395
- handleMouseLeave,
396
- id,
397
- visible,
398
- ])
399
-
400
- // If there's a child then we need to set the reference element to the cloned child ref
401
- // and if child changes we make sure to update or remove the reference element.
402
- useImperativeHandle(childProp ? getElementRef(childProp) : null, () => referenceElement, [
403
- referenceElement,
404
- ])
405
-
406
- if (!child) return <></>
407
-
408
- if (disabled) return child
409
-
410
- const node = (
411
- <TooltipLayer
412
- data-ui="Tooltip"
413
- {...rest}
414
- ref={setFloating}
415
- animate={animate}
416
- as={as}
417
- className={tooltip({className})}
418
- display="flex"
419
- gap={padding}
420
- id={id}
421
- originX={originX}
422
- originY={originY}
423
- padding={padding}
424
- placement={placement}
425
- radius={radius}
426
- role="tooltip"
427
- shadow={shadow}
428
- style={{
429
- ...floatingStyles,
430
- maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,
431
- }}
432
- zOffset={zOffset}
433
- >
434
- {content}
435
- </TooltipLayer>
436
- )
437
-
438
- let children = visible ? node : null
439
-
440
- if (visible && portal) {
441
- children = (
442
- <Portal __unstable_name={typeof portal === 'string' ? portal : undefined}>{node}</Portal>
443
- )
444
- }
445
-
446
- return (
447
- <>
448
- {/* the tooltip */}
449
- {animate ? <AnimatePresence>{children}</AnimatePresence> : children}
450
-
451
- {/* the referred element */}
452
- {child}
453
- </>
454
- )
455
- }
456
-
457
- function useMiddleware({
458
- animate,
459
- boundaryElement,
460
- fallbackPlacements,
461
- rootBoundary,
462
- }: {
463
- animate: boolean
464
- boundaryElement: HTMLElement | null
465
- fallbackPlacements: Placement[]
466
- rootBoundary: RootBoundary
467
- }) {
468
- return useMemo(() => {
469
- const ret: Middleware[] = []
470
-
471
- // Flip the floating element when leaving the boundary box
472
- ret.push(
473
- flip({
474
- boundary: boundaryElement || undefined,
475
- fallbackPlacements,
476
- padding: DEFAULT_TOOLTIP_PADDING,
477
- rootBoundary,
478
- }),
479
- )
480
-
481
- // Define distance between reference and floating element
482
- ret.push(offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE}))
483
-
484
- // Shift the tooltip so its sits with the boundary element
485
- ret.push(
486
- shift({
487
- boundary: boundaryElement || undefined,
488
- rootBoundary,
489
- padding: DEFAULT_TOOLTIP_PADDING,
490
- }),
491
- )
492
-
493
- // Determine the origin to scale from.
494
- // Must be placed after `@sanity/ui/size` and `shift` middleware.
495
- if (animate) {
496
- ret.push(origin)
497
- }
498
-
499
- return ret
500
- }, [animate, boundaryElement, fallbackPlacements, rootBoundary])
501
- }
502
-
503
- /**
504
- * As `useEffectEvent` should never be passed to other components or hooks, this custom hook groups together the `useEffectEvent` and the `useEffect` hook using it.
505
- * @see https://react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events:~:text=Never%20pass%20them%20to%20other%20components%20or%20Hooks
506
- */
507
- function useCloseOnMouseLeave({
508
- onClose,
509
- referenceElement,
510
- visible,
511
- }: {
512
- onClose: () => void
513
- referenceElement: HTMLElement | null
514
- visible: boolean
515
- }) {
516
- // Since we don't want the `mouseevent` events to be attached and removed if the `referenceElement` is changed
517
- // we use a "effect event" (https://react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)
518
- // in order to always see the latest `referenceElement` value inside the event handler itself.
519
- const onMouseMove = useEffectEvent((target: EventTarget | null, teardown: () => void) => {
520
- if (!referenceElement) return
521
-
522
- const isHoveringReference =
523
- referenceElement === target || (target instanceof Node && referenceElement.contains(target))
524
-
525
- if (!isHoveringReference) {
526
- onClose()
527
- // Allow removing the event listener eagerly, to avoid race conditions
528
- teardown()
529
- }
530
- })
531
-
532
- // Detect whether the mouse is moving outside of the reference element. This is sometimes
533
- // necessary, because the tooltip might not always close as it should (e.g. when clicking
534
- // the reference element triggers a CPU-heavy operation.)
535
- useEffect(() => {
536
- if (!visible) return
537
-
538
- const handleMouseMove = (event: MouseEvent) => {
539
- onMouseMove(event.target, () => window.removeEventListener('mousemove', handleMouseMove))
540
- }
541
-
542
- window.addEventListener('mousemove', handleMouseMove)
543
-
544
- return () => window.removeEventListener('mousemove', handleMouseMove)
545
- }, [visible])
546
- }
@@ -1,72 +0,0 @@
1
- import {motion, type MotionStyle} from 'motion/react'
2
- import {useMemo} from 'react'
3
-
4
- import {POPOVER_MOTION_PROPS} from '../../core/constants'
5
- import type {Placement} from '../../core/types'
6
- import {Layer, type LayerOwnProps, type LayerProps} from '../layer/Layer'
7
-
8
- /** @internal */
9
- export const DEFAULT_TOOLTIP_LAYER_ELEMENT = 'div'
10
-
11
- /** @internal */
12
- export interface TooltipLayerOwnProps extends LayerOwnProps {
13
- animate?: boolean
14
- originX?: number
15
- originY?: number
16
- placement?: Placement
17
- }
18
-
19
- /** @internal */
20
- export type TooltipLayerProps = TooltipLayerOwnProps & LayerProps<'div'>
21
-
22
- /** @internal */
23
- export function TooltipLayer(props: TooltipLayerProps): React.JSX.Element {
24
- const {
25
- animate,
26
- children,
27
- originX,
28
- originY,
29
- padding,
30
- placement,
31
- radius,
32
- scheme,
33
- shadow,
34
- style,
35
- tone,
36
- ...rest
37
- } = props
38
-
39
- const rootStyle: MotionStyle = useMemo(
40
- () => ({
41
- originX,
42
- originY,
43
- willChange: animate ? 'transform' : undefined,
44
- ...style,
45
- }),
46
- [animate, originX, originY, style],
47
- )
48
-
49
- return (
50
- // @ts-expect-error - TODO: fix this
51
- <Layer
52
- data-ui="Tooltip__layer"
53
- {...rest}
54
- animate={animate ? ['visible', 'scaleIn'] : undefined}
55
- as={motion.div}
56
- data-animate={animate ? '' : undefined}
57
- data-placement={placement}
58
- exit={animate ? ['hidden', 'scaleOut'] : undefined}
59
- initial={animate ? ['hidden', 'initial'] : undefined}
60
- padding={padding}
61
- radius={radius}
62
- scheme={scheme}
63
- shadow={shadow}
64
- style={rootStyle}
65
- tone={tone}
66
- transition={POPOVER_MOTION_PROPS.transition}
67
- variants={POPOVER_MOTION_PROPS.card}
68
- >
69
- {children}
70
- </Layer>
71
- )
72
- }