@sanity/ui 4.0.0-v4.1 → 4.0.0

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 (665) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +25 -7
  3. package/dist/_system-CTe2lb5l.d.ts +40 -0
  4. package/dist/_system-CTe2lb5l.d.ts.map +1 -0
  5. package/dist/arrow-CHE8-_G7.js +161 -0
  6. package/dist/arrow-CHE8-_G7.js.map +1 -0
  7. package/dist/autocomplete.d.ts +140 -0
  8. package/dist/autocomplete.d.ts.map +1 -0
  9. package/dist/autocomplete.js +475 -0
  10. package/dist/autocomplete.js.map +1 -0
  11. package/dist/breadcrumbs.d.ts +18 -0
  12. package/dist/breadcrumbs.d.ts.map +1 -0
  13. package/dist/breadcrumbs.js +116 -0
  14. package/dist/breadcrumbs.js.map +1 -0
  15. package/dist/button-dnqMFkWg.d.ts +76 -0
  16. package/dist/button-dnqMFkWg.d.ts.map +1 -0
  17. package/dist/button-mxfSqr0n.js +179 -0
  18. package/dist/button-mxfSqr0n.js.map +1 -0
  19. package/dist/card-C0a0wQTc.d.ts +7 -0
  20. package/dist/card-C0a0wQTc.d.ts.map +1 -0
  21. package/dist/code.d.ts +20 -0
  22. package/dist/code.d.ts.map +1 -0
  23. package/dist/code.js +90 -0
  24. package/dist/code.js.map +1 -0
  25. package/dist/codeFontStyle-DYUujk7K.js +11 -0
  26. package/dist/codeFontStyle-DYUujk7K.js.map +1 -0
  27. package/dist/component-DVlwaWB-.d.ts +25 -0
  28. package/dist/component-DVlwaWB-.d.ts.map +1 -0
  29. package/dist/element-BYgCE_iK.js +51 -0
  30. package/dist/element-BYgCE_iK.js.map +1 -0
  31. package/dist/factory-BA3gEfyI.js +3056 -0
  32. package/dist/factory-BA3gEfyI.js.map +1 -0
  33. package/dist/flex-C-5JHi1C.js +76 -0
  34. package/dist/flex-C-5JHi1C.js.map +1 -0
  35. package/dist/font-EtfxKPUz.d.ts +49 -0
  36. package/dist/font-EtfxKPUz.d.ts.map +1 -0
  37. package/dist/getElementRef-5HZQ-Owu.js +91 -0
  38. package/dist/getElementRef-5HZQ-Owu.js.map +1 -0
  39. package/dist/getScopedTheme-C-sZsyAz.js +267 -0
  40. package/dist/getScopedTheme-C-sZsyAz.js.map +1 -0
  41. package/dist/getTheme_v2-y09KqtEb.js +487 -0
  42. package/dist/getTheme_v2-y09KqtEb.js.map +1 -0
  43. package/dist/grid-BXHFJhf_.js +115 -0
  44. package/dist/grid-BXHFJhf_.js.map +1 -0
  45. package/dist/helpers-bwfx1e-Y.js +67 -0
  46. package/dist/helpers-bwfx1e-Y.js.map +1 -0
  47. package/dist/hotkeys-CmmTQZpn.js +165 -0
  48. package/dist/hotkeys-CmmTQZpn.js.map +1 -0
  49. package/dist/index.d.ts +1192 -2168
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +2069 -4481
  52. package/dist/index.js.map +1 -1
  53. package/dist/layer-B98ynOf2.js +61 -0
  54. package/dist/layer-B98ynOf2.js.map +1 -0
  55. package/dist/layer-ChlP9Ik6.d.ts +242 -0
  56. package/dist/layer-ChlP9Ik6.d.ts.map +1 -0
  57. package/dist/menu.d.ts +146 -0
  58. package/dist/menu.d.ts.map +1 -0
  59. package/dist/menu.js +614 -0
  60. package/dist/menu.js.map +1 -0
  61. package/dist/popover-CMlQeKn0.d.ts +96 -0
  62. package/dist/popover-CMlQeKn0.d.ts.map +1 -0
  63. package/dist/popover-PorX5Jv9.js +419 -0
  64. package/dist/popover-PorX5Jv9.js.map +1 -0
  65. package/dist/popover.d.ts +2 -0
  66. package/dist/popover.js +3 -0
  67. package/dist/refractor-CC48DwHi.js +20 -0
  68. package/dist/refractor-CC48DwHi.js.map +1 -0
  69. package/dist/responsiveFont-hN1mZFjm.js +55 -0
  70. package/dist/responsiveFont-hN1mZFjm.js.map +1 -0
  71. package/dist/rgba-BSYaEUW6.d.ts +846 -0
  72. package/dist/rgba-BSYaEUW6.d.ts.map +1 -0
  73. package/dist/selectable-B0GUIL74.d.ts +7 -0
  74. package/dist/selectable-B0GUIL74.d.ts.map +1 -0
  75. package/dist/stack-iW9HuGLg.js +112 -0
  76. package/dist/stack-iW9HuGLg.js.map +1 -0
  77. package/dist/styles-css.d.ts +2 -0
  78. package/dist/styles-css.js +4 -0
  79. package/dist/styles.css +28 -0
  80. package/dist/textInput-udxyGbm1.js +321 -0
  81. package/dist/textInput-udxyGbm1.js.map +1 -0
  82. package/dist/theme.d.ts +240 -459
  83. package/dist/theme.d.ts.map +1 -0
  84. package/dist/theme.js +55 -870
  85. package/dist/theme.js.map +1 -1
  86. package/dist/toast.d.ts +73 -0
  87. package/dist/toast.d.ts.map +1 -0
  88. package/dist/toast.js +297 -0
  89. package/dist/toast.js.map +1 -0
  90. package/dist/tooltip.d.ts +88 -0
  91. package/dist/tooltip.d.ts.map +1 -0
  92. package/dist/tooltip.js +447 -0
  93. package/dist/tooltip.js.map +1 -0
  94. package/dist/useClickOutsideEvent-lEVhDFCQ.js +36 -0
  95. package/dist/useClickOutsideEvent-lEVhDFCQ.js.map +1 -0
  96. package/dist/useElementSize-BJvbGHq8.js +51 -0
  97. package/dist/useElementSize-BJvbGHq8.js.map +1 -0
  98. package/dist/useLayer-BAVfmbNN.js +712 -0
  99. package/dist/useLayer-BAVfmbNN.js.map +1 -0
  100. package/package.json +72 -196
  101. package/dist/_chunks-es/Refractor.js +0 -25
  102. package/dist/_chunks-es/Refractor.js.map +0 -1
  103. package/dist/css/index.css +0 -2
  104. package/dist/css/index.css.map +0 -1
  105. package/dist/css/index.d.ts +0 -1398
  106. package/dist/css/index.js +0 -18882
  107. package/dist/css/index.js.map +0 -1
  108. package/exports/css.ts +0 -1
  109. package/exports/index.ts +0 -1
  110. package/exports/theme.ts +0 -1
  111. package/src/core/Root.tsx +0 -88
  112. package/src/core/RootProvider.tsx +0 -40
  113. package/src/core/__workshop__/Boundary.tsx +0 -28
  114. package/src/core/__workshop__/index.ts +0 -16
  115. package/src/core/components/autocomplete/Autocomplete.tsx +0 -690
  116. package/src/core/components/autocomplete/AutocompleteOption.tsx +0 -45
  117. package/src/core/components/autocomplete/__workshop__/Async.tsx +0 -156
  118. package/src/core/components/autocomplete/__workshop__/ConstrainedHeight.tsx +0 -131
  119. package/src/core/components/autocomplete/__workshop__/Custom.tsx +0 -104
  120. package/src/core/components/autocomplete/__workshop__/Example.tsx +0 -91
  121. package/src/core/components/autocomplete/__workshop__/FocusAndBlur.tsx +0 -36
  122. package/src/core/components/autocomplete/__workshop__/Fullscreen.tsx +0 -292
  123. package/src/core/components/autocomplete/__workshop__/index.ts +0 -41
  124. package/src/core/components/autocomplete/__workshop__/mock/apiStore.ts +0 -49
  125. package/src/core/components/autocomplete/__workshop__/mock/countries.ts +0 -245
  126. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  127. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  128. package/src/core/components/autocomplete/constants.ts +0 -28
  129. package/src/core/components/autocomplete/types.ts +0 -103
  130. package/src/core/components/breadcrumbs/Breadcrumbs.tsx +0 -131
  131. package/src/core/components/breadcrumbs/__workshop__/Example.tsx +0 -61
  132. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -16
  133. package/src/core/components/dialog/Dialog.tsx +0 -232
  134. package/src/core/components/dialog/DialogCard.tsx +0 -233
  135. package/src/core/components/dialog/DialogContext.ts +0 -21
  136. package/src/core/components/dialog/DialogProvider.tsx +0 -34
  137. package/src/core/components/dialog/__workshop__/Activate.tsx +0 -141
  138. package/src/core/components/dialog/__workshop__/AutoFocus.tsx +0 -29
  139. package/src/core/components/dialog/__workshop__/Layering.tsx +0 -41
  140. package/src/core/components/dialog/__workshop__/Nested.tsx +0 -71
  141. package/src/core/components/dialog/__workshop__/OnScroll.tsx +0 -51
  142. package/src/core/components/dialog/__workshop__/Panes.tsx +0 -89
  143. package/src/core/components/dialog/__workshop__/Position.tsx +0 -38
  144. package/src/core/components/dialog/__workshop__/Props.tsx +0 -79
  145. package/src/core/components/dialog/__workshop__/Provider.tsx +0 -11
  146. package/src/core/components/dialog/__workshop__/Wrapped.tsx +0 -76
  147. package/src/core/components/dialog/__workshop__/index.ts +0 -21
  148. package/src/core/components/dialog/isTargetWithinScope.ts +0 -14
  149. package/src/core/components/dialog/types.ts +0 -2
  150. package/src/core/components/dialog/useDialog.ts +0 -11
  151. package/src/core/components/hotkeys/Hotkeys.tsx +0 -60
  152. package/src/core/components/hotkeys/__workshop__/Plain.tsx +0 -9
  153. package/src/core/components/hotkeys/__workshop__/index.ts +0 -16
  154. package/src/core/components/menu/Menu.test.tsx +0 -129
  155. package/src/core/components/menu/Menu.tsx +0 -179
  156. package/src/core/components/menu/MenuButton.tsx +0 -230
  157. package/src/core/components/menu/MenuContext.ts +0 -19
  158. package/src/core/components/menu/MenuDivider.tsx +0 -32
  159. package/src/core/components/menu/MenuGroup.tsx +0 -236
  160. package/src/core/components/menu/MenuItem.tsx +0 -184
  161. package/src/core/components/menu/__workshop__/AsComponent.tsx +0 -45
  162. package/src/core/components/menu/__workshop__/AvatarMenu.tsx +0 -57
  163. package/src/core/components/menu/__workshop__/ClosableMenuButton.tsx +0 -47
  164. package/src/core/components/menu/__workshop__/ConstrainedInBoundary.tsx +0 -133
  165. package/src/core/components/menu/__workshop__/CustomMenuItem.tsx +0 -45
  166. package/src/core/components/menu/__workshop__/CustomSelectedState.tsx +0 -35
  167. package/src/core/components/menu/__workshop__/DisableFocusOnClose.tsx +0 -40
  168. package/src/core/components/menu/__workshop__/Groups.tsx +0 -156
  169. package/src/core/components/menu/__workshop__/MenuButton.tsx +0 -85
  170. package/src/core/components/menu/__workshop__/MenuGroupRight.tsx +0 -65
  171. package/src/core/components/menu/__workshop__/NestedMenu.tsx +0 -22
  172. package/src/core/components/menu/__workshop__/OnCloseMenuButton.tsx +0 -50
  173. package/src/core/components/menu/__workshop__/SelectedItem.tsx +0 -69
  174. package/src/core/components/menu/__workshop__/ShouldFocus.tsx +0 -42
  175. package/src/core/components/menu/__workshop__/Tones.tsx +0 -31
  176. package/src/core/components/menu/__workshop__/WithoutArrow.tsx +0 -32
  177. package/src/core/components/menu/__workshop__/index.ts +0 -91
  178. package/src/core/components/menu/helpers.ts +0 -82
  179. package/src/core/components/menu/useMenu.ts +0 -21
  180. package/src/core/components/menu/useMenuController.ts +0 -241
  181. package/src/core/components/tab/Tab.tsx +0 -109
  182. package/src/core/components/tab/TabList.tsx +0 -90
  183. package/src/core/components/tab/TabPanel.tsx +0 -47
  184. package/src/core/components/tab/__workshop__/Example.tsx +0 -79
  185. package/src/core/components/tab/__workshop__/index.ts +0 -16
  186. package/src/core/components/toast/Toast.test.tsx +0 -103
  187. package/src/core/components/toast/Toast.tsx +0 -191
  188. package/src/core/components/toast/ToastContext.ts +0 -7
  189. package/src/core/components/toast/ToastLayer.tsx +0 -54
  190. package/src/core/components/toast/ToastProvider.tsx +0 -112
  191. package/src/core/components/toast/__workshop__/Hook.tsx +0 -71
  192. package/src/core/components/toast/__workshop__/Toast.tsx +0 -28
  193. package/src/core/components/toast/__workshop__/index.ts +0 -21
  194. package/src/core/components/toast/toastState.ts +0 -6
  195. package/src/core/components/toast/types.ts +0 -24
  196. package/src/core/components/toast/useToast.ts +0 -23
  197. package/src/core/components/tree/Tree.tsx +0 -248
  198. package/src/core/components/tree/TreeContext.ts +0 -10
  199. package/src/core/components/tree/TreeGroup.tsx +0 -46
  200. package/src/core/components/tree/TreeItem.tsx +0 -237
  201. package/src/core/components/tree/__workshop__/Basic.tsx +0 -105
  202. package/src/core/components/tree/__workshop__/TabFromElement.tsx +0 -84
  203. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  204. package/src/core/components/tree/__workshop__/index.ts +0 -23
  205. package/src/core/components/tree/helpers.ts +0 -105
  206. package/src/core/components/tree/types.ts +0 -24
  207. package/src/core/components/tree/useTree.ts +0 -17
  208. package/src/core/components/virtualList/VirtualList.tsx +0 -209
  209. package/src/core/components/virtualList/__workshop__/ChangingProps.tsx +0 -36
  210. package/src/core/components/virtualList/__workshop__/ElementScroll.tsx +0 -24
  211. package/src/core/components/virtualList/__workshop__/InfiniteList.tsx +0 -48
  212. package/src/core/components/virtualList/__workshop__/WindowScrolll.tsx +0 -22
  213. package/src/core/components/virtualList/__workshop__/index.ts +0 -31
  214. package/src/core/constants.ts +0 -67
  215. package/src/core/helpers/animation.ts +0 -27
  216. package/src/core/helpers/element.ts +0 -55
  217. package/src/core/helpers/focus.ts +0 -92
  218. package/src/core/helpers/props.ts +0 -28
  219. package/src/core/helpers/scroll.ts +0 -15
  220. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -114
  221. package/src/core/hooks/useClickOutsideEvent.ts +0 -67
  222. package/src/core/hooks/useCustomValidity.ts +0 -13
  223. package/src/core/hooks/useDelayed.test.ts +0 -67
  224. package/src/core/hooks/useDelayedState.ts +0 -28
  225. package/src/core/hooks/useElementSize.ts +0 -19
  226. package/src/core/hooks/useGlobalKeyDown.ts +0 -17
  227. package/src/core/hooks/useMatchMedia.ts +0 -28
  228. package/src/core/hooks/useMediaIndex/__workshop__/Test.tsx +0 -14
  229. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -16
  230. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -21
  231. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -107
  232. package/src/core/hooks/useMounted.ts +0 -15
  233. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
  234. package/src/core/hooks/usePrefersDark.test.tsx +0 -20
  235. package/src/core/hooks/usePrefersDark.ts +0 -16
  236. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  237. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -20
  238. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  239. package/src/core/hooks/useResponsiveProp.ts +0 -28
  240. package/src/core/index.ts +0 -118
  241. package/src/core/lib/createGlobalScopedContext.ts +0 -37
  242. package/src/core/lib/globalScope.ts +0 -19
  243. package/src/core/lib/isArray.ts +0 -3
  244. package/src/core/lib/isRecord.ts +0 -3
  245. package/src/core/middleware/origin.ts +0 -47
  246. package/src/core/observers/elementSize.ts +0 -116
  247. package/src/core/observers/resize.ts +0 -9
  248. package/src/core/primitives/arrow/Arrow.tsx +0 -74
  249. package/src/core/primitives/arrow/cmds.ts +0 -91
  250. package/src/core/primitives/avatar/Avatar.tsx +0 -147
  251. package/src/core/primitives/avatar/AvatarCounter.tsx +0 -69
  252. package/src/core/primitives/avatar/AvatarStack.tsx +0 -79
  253. package/src/core/primitives/avatar/__workshop__/AsButton.tsx +0 -21
  254. package/src/core/primitives/avatar/__workshop__/Stack.tsx +0 -29
  255. package/src/core/primitives/avatar/__workshop__/WithinButton.tsx +0 -55
  256. package/src/core/primitives/avatar/__workshop__/WithinMenuItem.tsx +0 -72
  257. package/src/core/primitives/avatar/__workshop__/index.ts +0 -31
  258. package/src/core/primitives/avatar/types.ts +0 -2
  259. package/src/core/primitives/badge/Badge.test.tsx +0 -16
  260. package/src/core/primitives/badge/Badge.tsx +0 -61
  261. package/src/core/primitives/badge/__workshop__/Props.tsx +0 -30
  262. package/src/core/primitives/badge/__workshop__/Tones.tsx +0 -16
  263. package/src/core/primitives/badge/__workshop__/index.ts +0 -21
  264. package/src/core/primitives/box/Box.tsx +0 -222
  265. package/src/core/primitives/box/__workshop__/Props.tsx +0 -25
  266. package/src/core/primitives/box/__workshop__/Responsive.tsx +0 -20
  267. package/src/core/primitives/box/__workshop__/index.ts +0 -21
  268. package/src/core/primitives/button/Button.test.tsx +0 -30
  269. package/src/core/primitives/button/Button.tsx +0 -193
  270. package/src/core/primitives/button/__workshop__/Custom.tsx +0 -27
  271. package/src/core/primitives/button/__workshop__/CustomIcons.tsx +0 -30
  272. package/src/core/primitives/button/__workshop__/Disabled.tsx +0 -54
  273. package/src/core/primitives/button/__workshop__/MixedChildren.tsx +0 -12
  274. package/src/core/primitives/button/__workshop__/Props.tsx +0 -77
  275. package/src/core/primitives/button/__workshop__/SanityUploadButton.tsx +0 -36
  276. package/src/core/primitives/button/__workshop__/Stacked.tsx +0 -74
  277. package/src/core/primitives/button/__workshop__/Styled1.tsx +0 -17
  278. package/src/core/primitives/button/__workshop__/Styled2.tsx +0 -19
  279. package/src/core/primitives/button/__workshop__/TextOverflow.tsx +0 -13
  280. package/src/core/primitives/button/__workshop__/UploadButton.tsx +0 -29
  281. package/src/core/primitives/button/__workshop__/index.ts +0 -66
  282. package/src/core/primitives/button/types.ts +0 -2
  283. package/src/core/primitives/card/Card.tsx +0 -109
  284. package/src/core/primitives/card/CardContext.ts +0 -10
  285. package/src/core/primitives/card/CardProvider.tsx +0 -27
  286. package/src/core/primitives/card/__workshop__/AsButton.tsx +0 -107
  287. package/src/core/primitives/card/__workshop__/AsComponent.tsx +0 -27
  288. package/src/core/primitives/card/__workshop__/Checkered.tsx +0 -26
  289. package/src/core/primitives/card/__workshop__/Interactive.tsx +0 -29
  290. package/src/core/primitives/card/__workshop__/ListNavigation.tsx +0 -78
  291. package/src/core/primitives/card/__workshop__/Props.tsx +0 -62
  292. package/src/core/primitives/card/__workshop__/Selected.tsx +0 -62
  293. package/src/core/primitives/card/__workshop__/Styled.tsx +0 -14
  294. package/src/core/primitives/card/__workshop__/Tones.tsx +0 -27
  295. package/src/core/primitives/card/__workshop__/index.ts +0 -20
  296. package/src/core/primitives/card/types.ts +0 -17
  297. package/src/core/primitives/card/useCard.ts +0 -15
  298. package/src/core/primitives/checkbox/Checkbox.tsx +0 -80
  299. package/src/core/primitives/checkbox/__workshop__/Example.tsx +0 -25
  300. package/src/core/primitives/checkbox/__workshop__/Props.tsx +0 -35
  301. package/src/core/primitives/checkbox/__workshop__/ReadOnly.tsx +0 -16
  302. package/src/core/primitives/checkbox/__workshop__/Tones.tsx +0 -27
  303. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -15
  304. package/src/core/primitives/code/Code.tsx +0 -48
  305. package/src/core/primitives/code/Refractor.tsx +0 -18
  306. package/src/core/primitives/code/__workshop__/OpticalAlignment.tsx +0 -23
  307. package/src/core/primitives/code/__workshop__/Props.tsx +0 -23
  308. package/src/core/primitives/code/__workshop__/index.ts +0 -21
  309. package/src/core/primitives/container/Container.tsx +0 -37
  310. package/src/core/primitives/container/__workshop__/Example.tsx +0 -25
  311. package/src/core/primitives/container/__workshop__/index.ts +0 -10
  312. package/src/core/primitives/container/types.ts +0 -6
  313. package/src/core/primitives/flex/Flex.tsx +0 -58
  314. package/src/core/primitives/flex/__workshop__/Example.tsx +0 -40
  315. package/src/core/primitives/flex/__workshop__/Gap.tsx +0 -25
  316. package/src/core/primitives/flex/__workshop__/index.ts +0 -13
  317. package/src/core/primitives/grid/Grid.tsx +0 -35
  318. package/src/core/primitives/grid/__workshop__/Responsive.tsx +0 -54
  319. package/src/core/primitives/grid/__workshop__/index.ts +0 -12
  320. package/src/core/primitives/heading/Heading.tsx +0 -78
  321. package/src/core/primitives/heading/__workshop__/OpticalAlignment.tsx +0 -54
  322. package/src/core/primitives/heading/__workshop__/Plain.tsx +0 -40
  323. package/src/core/primitives/heading/__workshop__/index.ts +0 -21
  324. package/src/core/primitives/inline/Inline.tsx +0 -62
  325. package/src/core/primitives/inline/__workshop__/Plain.tsx +0 -28
  326. package/src/core/primitives/inline/__workshop__/index.ts +0 -10
  327. package/src/core/primitives/kbd/Kbd.tsx +0 -57
  328. package/src/core/primitives/kbd/__workshop__/Plain.tsx +0 -9
  329. package/src/core/primitives/kbd/__workshop__/index.ts +0 -10
  330. package/src/core/primitives/label/Label.tsx +0 -75
  331. package/src/core/primitives/label/__workshop__/OpticalAlignment.tsx +0 -54
  332. package/src/core/primitives/label/__workshop__/Plain.tsx +0 -42
  333. package/src/core/primitives/label/__workshop__/index.ts +0 -21
  334. package/src/core/primitives/layer/Layer.test.tsx +0 -110
  335. package/src/core/primitives/layer/Layer.tsx +0 -42
  336. package/src/core/primitives/layer/LayerCard.tsx +0 -90
  337. package/src/core/primitives/layer/LayerContext.ts +0 -7
  338. package/src/core/primitives/layer/LayerProvider.tsx +0 -106
  339. package/src/core/primitives/layer/__workshop__/MultipleRoots.tsx +0 -49
  340. package/src/core/primitives/layer/__workshop__/Nested.tsx +0 -98
  341. package/src/core/primitives/layer/__workshop__/ResponsiveZOffset.tsx +0 -17
  342. package/src/core/primitives/layer/__workshop__/_debug.tsx +0 -17
  343. package/src/core/primitives/layer/__workshop__/index.ts +0 -26
  344. package/src/core/primitives/layer/getLayerContext.test.ts +0 -32
  345. package/src/core/primitives/layer/getLayerContext.ts +0 -21
  346. package/src/core/primitives/layer/types.ts +0 -9
  347. package/src/core/primitives/layer/useLayer.ts +0 -24
  348. package/src/core/primitives/popover/Popover.tsx +0 -442
  349. package/src/core/primitives/popover/PopoverLayer.tsx +0 -149
  350. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -89
  351. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  352. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -34
  353. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  354. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -79
  355. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -69
  356. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -102
  357. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -106
  358. package/src/core/primitives/popover/__workshop__/index.ts +0 -51
  359. package/src/core/primitives/popover/constants.ts +0 -22
  360. package/src/core/primitives/popover/floating-ui/size.ts +0 -83
  361. package/src/core/primitives/popover/helpers.ts +0 -32
  362. package/src/core/primitives/popover/types.ts +0 -12
  363. package/src/core/primitives/radio/Radio.tsx +0 -64
  364. package/src/core/primitives/radio/__workshop__/Example.tsx +0 -63
  365. package/src/core/primitives/radio/__workshop__/Plain.tsx +0 -28
  366. package/src/core/primitives/radio/__workshop__/index.ts +0 -13
  367. package/src/core/primitives/select/Select.tsx +0 -75
  368. package/src/core/primitives/select/__workshop__/Plain.tsx +0 -43
  369. package/src/core/primitives/select/__workshop__/ReadOnly.tsx +0 -23
  370. package/src/core/primitives/select/__workshop__/index.ts +0 -13
  371. package/src/core/primitives/selectable/Selectable.tsx +0 -50
  372. package/src/core/primitives/skeleton/CodeSkeleton.tsx +0 -49
  373. package/src/core/primitives/skeleton/HeadingSkeleton.tsx +0 -48
  374. package/src/core/primitives/skeleton/LabelSkeleton.tsx +0 -47
  375. package/src/core/primitives/skeleton/Skeleton.tsx +0 -70
  376. package/src/core/primitives/skeleton/TextSkeleton.tsx +0 -49
  377. package/src/core/primitives/skeleton/__workshop__/Delay.tsx +0 -78
  378. package/src/core/primitives/skeleton/__workshop__/Skeleton.tsx +0 -72
  379. package/src/core/primitives/skeleton/__workshop__/index.ts +0 -13
  380. package/src/core/primitives/spinner/AnimatedSpinnerIcon.tsx +0 -14
  381. package/src/core/primitives/spinner/Spinner.tsx +0 -45
  382. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -20
  383. package/src/core/primitives/spinner/__workshop__/index.ts +0 -16
  384. package/src/core/primitives/srOnly/SrOnly.tsx +0 -33
  385. package/src/core/primitives/stack/Stack.tsx +0 -60
  386. package/src/core/primitives/stack/__workshop__/Plain.tsx +0 -35
  387. package/src/core/primitives/stack/__workshop__/index.ts +0 -16
  388. package/src/core/primitives/switch/Switch.tsx +0 -84
  389. package/src/core/primitives/switch/__workshop__/Example.tsx +0 -23
  390. package/src/core/primitives/switch/__workshop__/Props.tsx +0 -21
  391. package/src/core/primitives/switch/__workshop__/index.ts +0 -13
  392. package/src/core/primitives/text/Text.tsx +0 -76
  393. package/src/core/primitives/text/__workshop__/Colored.tsx +0 -30
  394. package/src/core/primitives/text/__workshop__/Example.tsx +0 -42
  395. package/src/core/primitives/text/__workshop__/OpticalAlignment.tsx +0 -23
  396. package/src/core/primitives/text/__workshop__/index.ts +0 -26
  397. package/src/core/primitives/textArea/TextArea.tsx +0 -84
  398. package/src/core/primitives/textArea/__workshop__/Plain.tsx +0 -69
  399. package/src/core/primitives/textArea/__workshop__/index.ts +0 -16
  400. package/src/core/primitives/textInput/TextInput.tsx +0 -258
  401. package/src/core/primitives/textInput/__workshop__/ClearButton.tsx +0 -30
  402. package/src/core/primitives/textInput/__workshop__/CustomValidity.tsx +0 -17
  403. package/src/core/primitives/textInput/__workshop__/Plain.tsx +0 -140
  404. package/src/core/primitives/textInput/__workshop__/ReadOnly.tsx +0 -9
  405. package/src/core/primitives/textInput/__workshop__/States.tsx +0 -53
  406. package/src/core/primitives/textInput/__workshop__/Tones.tsx +0 -277
  407. package/src/core/primitives/textInput/__workshop__/Typed.tsx +0 -29
  408. package/src/core/primitives/textInput/__workshop__/index.ts +0 -46
  409. package/src/core/primitives/tooltip/Tooltip.test.tsx +0 -452
  410. package/src/core/primitives/tooltip/Tooltip.tsx +0 -483
  411. package/src/core/primitives/tooltip/TooltipLayer.tsx +0 -106
  412. package/src/core/primitives/tooltip/__workshop__/CustomPortal.tsx +0 -104
  413. package/src/core/primitives/tooltip/__workshop__/OverflowingBoundary.tsx +0 -76
  414. package/src/core/primitives/tooltip/__workshop__/Props.tsx +0 -124
  415. package/src/core/primitives/tooltip/__workshop__/ResizableBoundary.tsx +0 -91
  416. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -31
  417. package/src/core/primitives/tooltip/constants.ts +0 -23
  418. package/src/core/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupContext.tsx +0 -13
  419. package/src/core/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupProvider.tsx +0 -55
  420. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
  421. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  422. package/src/core/types.ts +0 -56
  423. package/src/core/utils/ErrorBoundary.tsx +0 -50
  424. package/src/core/utils/boundaryElement/BoundaryElement.test.tsx +0 -102
  425. package/src/core/utils/boundaryElement/BoundaryElementContext.ts +0 -10
  426. package/src/core/utils/boundaryElement/BoundaryElementProvider.tsx +0 -18
  427. package/src/core/utils/boundaryElement/__workshop__/Plain.tsx +0 -19
  428. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -16
  429. package/src/core/utils/boundaryElement/types.ts +0 -5
  430. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -24
  431. package/src/core/utils/elementQuery/ElementQuery.tsx +0 -75
  432. package/src/core/utils/elementQuery/__workshop__/CustomMedia.tsx +0 -41
  433. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -16
  434. package/src/core/utils/elementQuery/helpers.ts +0 -27
  435. package/src/core/utils/getElementRef.ts +0 -29
  436. package/src/core/utils/portal/Portal.test.tsx +0 -105
  437. package/src/core/utils/portal/Portal.tsx +0 -36
  438. package/src/core/utils/portal/PortalContext.ts +0 -37
  439. package/src/core/utils/portal/PortalProvider.tsx +0 -70
  440. package/src/core/utils/portal/__workshop__/Named.tsx +0 -63
  441. package/src/core/utils/portal/__workshop__/index.ts +0 -16
  442. package/src/core/utils/portal/types.ts +0 -7
  443. package/src/core/utils/portal/usePortal.ts +0 -23
  444. package/src/css/_assign.ts +0 -3
  445. package/src/css/_composeClassNames.ts +0 -12
  446. package/src/css/_fromEntries.ts +0 -3
  447. package/src/css/_getClassNames.ts +0 -9
  448. package/src/css/_responsiveClassName.ts +0 -45
  449. package/src/css/_responsiveStyle.css.ts +0 -34
  450. package/src/css/_style.css.ts +0 -9
  451. package/src/css/components/breadcrumbs/breadcrumbs.css.ts +0 -6
  452. package/src/css/components/breadcrumbs/breadcrumbs.ts +0 -7
  453. package/src/css/components/dialog/dialog.css.ts +0 -98
  454. package/src/css/components/dialog/dialog.ts +0 -58
  455. package/src/css/components/menu/menu.css.ts +0 -14
  456. package/src/css/components/menu/menu.ts +0 -12
  457. package/src/css/components/skeleton/skeleton.css.ts +0 -128
  458. package/src/css/components/skeleton/skeleton.ts +0 -38
  459. package/src/css/components/skeleton/types.ts +0 -36
  460. package/src/css/components/toast/toast.css.ts +0 -17
  461. package/src/css/components/toast/toast.ts +0 -11
  462. package/src/css/components/tree/tree.css.ts +0 -65
  463. package/src/css/components/tree/tree.ts +0 -7
  464. package/src/css/constants.ts +0 -10
  465. package/src/css/getVarName.ts +0 -27
  466. package/src/css/index.ts +0 -146
  467. package/src/css/layers.css.ts +0 -12
  468. package/src/css/primitives/_arrow/_arrow.css.ts +0 -68
  469. package/src/css/primitives/_arrow/_arrow.ts +0 -26
  470. package/src/css/primitives/_input/_input.css.ts +0 -261
  471. package/src/css/primitives/_input/input.ts +0 -29
  472. package/src/css/primitives/_input/types.ts +0 -13
  473. package/src/css/primitives/avatar/avatar.css.ts +0 -201
  474. package/src/css/primitives/avatar/avatar.ts +0 -68
  475. package/src/css/primitives/avatar/types.ts +0 -10
  476. package/src/css/primitives/badge/badge.css.ts +0 -27
  477. package/src/css/primitives/badge/badge.ts +0 -8
  478. package/src/css/primitives/badge/types.ts +0 -13
  479. package/src/css/primitives/box/box.css.ts +0 -19
  480. package/src/css/primitives/box/box.ts +0 -82
  481. package/src/css/primitives/box/types.ts +0 -75
  482. package/src/css/primitives/button/button.css.ts +0 -287
  483. package/src/css/primitives/button/button.ts +0 -26
  484. package/src/css/primitives/button/types.ts +0 -12
  485. package/src/css/primitives/card/__workshop__/Color.tsx +0 -83
  486. package/src/css/primitives/card/__workshop__/index.ts +0 -16
  487. package/src/css/primitives/card/card.css.ts +0 -397
  488. package/src/css/primitives/card/card.ts +0 -13
  489. package/src/css/primitives/card/types.ts +0 -9
  490. package/src/css/primitives/checkbox/checkbox.css.ts +0 -193
  491. package/src/css/primitives/checkbox/checkbox.ts +0 -17
  492. package/src/css/primitives/code/code.css.ts +0 -272
  493. package/src/css/primitives/code/code.ts +0 -19
  494. package/src/css/primitives/code/types.ts +0 -11
  495. package/src/css/primitives/container/container.css.ts +0 -4
  496. package/src/css/primitives/container/container.ts +0 -17
  497. package/src/css/primitives/container/types.ts +0 -9
  498. package/src/css/primitives/heading/heading.css.ts +0 -86
  499. package/src/css/primitives/heading/heading.ts +0 -22
  500. package/src/css/primitives/heading/types.ts +0 -14
  501. package/src/css/primitives/kbd/kbd.css.ts +0 -16
  502. package/src/css/primitives/kbd/kbd.ts +0 -9
  503. package/src/css/primitives/kbd/types.ts +0 -6
  504. package/src/css/primitives/label/label.css.ts +0 -87
  505. package/src/css/primitives/label/label.ts +0 -22
  506. package/src/css/primitives/label/types.ts +0 -14
  507. package/src/css/primitives/popover/popover.css.ts +0 -6
  508. package/src/css/primitives/popover/popover.ts +0 -12
  509. package/src/css/primitives/radio/radio.css.ts +0 -78
  510. package/src/css/primitives/radio/radio.ts +0 -17
  511. package/src/css/primitives/root/root.css.ts +0 -20
  512. package/src/css/primitives/root/root.ts +0 -17
  513. package/src/css/primitives/root/types.ts +0 -10
  514. package/src/css/primitives/select/select.css.ts +0 -24
  515. package/src/css/primitives/select/select.ts +0 -14
  516. package/src/css/primitives/select/types.ts +0 -5
  517. package/src/css/primitives/selectable/selectable.css.ts +0 -131
  518. package/src/css/primitives/selectable/selectable.ts +0 -9
  519. package/src/css/primitives/selectable/types.ts +0 -9
  520. package/src/css/primitives/spinner/spinner.css.ts +0 -19
  521. package/src/css/primitives/spinner/spinner.ts +0 -13
  522. package/src/css/primitives/spinner/types.ts +0 -4
  523. package/src/css/primitives/srOnly/srOnly.css.ts +0 -10
  524. package/src/css/primitives/srOnly/srOnly.ts +0 -7
  525. package/src/css/primitives/stack/stack.css.ts +0 -6
  526. package/src/css/primitives/stack/stack.ts +0 -7
  527. package/src/css/primitives/switch/switch.css.ts +0 -98
  528. package/src/css/primitives/switch/switch.ts +0 -27
  529. package/src/css/primitives/text/text.css.ts +0 -86
  530. package/src/css/primitives/text/text.ts +0 -24
  531. package/src/css/primitives/text/types.ts +0 -18
  532. package/src/css/primitives/textArea/textArea.css.ts +0 -4
  533. package/src/css/primitives/textArea/textArea.ts +0 -9
  534. package/src/css/primitives/textArea/types.ts +0 -7
  535. package/src/css/primitives/textInput/textInput.css.ts +0 -43
  536. package/src/css/primitives/textInput/textInput.ts +0 -24
  537. package/src/css/primitives/textInput/types.ts +0 -7
  538. package/src/css/primitives/tooltip/tooltip.css.ts +0 -4
  539. package/src/css/primitives/tooltip/tooltip.ts +0 -8
  540. package/src/css/primitives/tooltip/types.ts +0 -4
  541. package/src/css/props/alignItems/alignItems.css.ts +0 -22
  542. package/src/css/props/alignItems/alignItems.ts +0 -8
  543. package/src/css/props/alignItems/types.ts +0 -9
  544. package/src/css/props/border/border.css.ts +0 -65
  545. package/src/css/props/border/border.ts +0 -21
  546. package/src/css/props/border/types.ts +0 -13
  547. package/src/css/props/boxSizing/boxSizing.css.ts +0 -12
  548. package/src/css/props/boxSizing/boxSizing.ts +0 -7
  549. package/src/css/props/boxSizing/types.ts +0 -7
  550. package/src/css/props/display/display.css.ts +0 -56
  551. package/src/css/props/display/display.ts +0 -8
  552. package/src/css/props/display/types.ts +0 -16
  553. package/src/css/props/flex/flex.css.ts +0 -52
  554. package/src/css/props/flex/flex.ts +0 -8
  555. package/src/css/props/flex/types.ts +0 -9
  556. package/src/css/props/flexDirection/flexDirection.css.ts +0 -19
  557. package/src/css/props/flexDirection/flexDirection.ts +0 -8
  558. package/src/css/props/flexDirection/types.ts +0 -9
  559. package/src/css/props/flexWrap/flexWrap.css.ts +0 -16
  560. package/src/css/props/flexWrap/flexWrap.ts +0 -8
  561. package/src/css/props/flexWrap/types.ts +0 -9
  562. package/src/css/props/font/font.css.ts +0 -94
  563. package/src/css/props/font/font.ts +0 -8
  564. package/src/css/props/font/types.ts +0 -6
  565. package/src/css/props/gap/gap.css.ts +0 -40
  566. package/src/css/props/gap/gap.ts +0 -13
  567. package/src/css/props/gap/types.ts +0 -10
  568. package/src/css/props/gridAutoColumns/gridAutoColumns.css.ts +0 -19
  569. package/src/css/props/gridAutoColumns/gridAutoColumns.ts +0 -8
  570. package/src/css/props/gridAutoColumns/types.ts +0 -9
  571. package/src/css/props/gridAutoFlow/gridAutoFlow.css.ts +0 -19
  572. package/src/css/props/gridAutoFlow/gridAutoFlow.ts +0 -8
  573. package/src/css/props/gridAutoFlow/types.ts +0 -9
  574. package/src/css/props/gridAutoRows/gridAutoRows.css.ts +0 -19
  575. package/src/css/props/gridAutoRows/gridAutoRows.ts +0 -8
  576. package/src/css/props/gridAutoRows/types.ts +0 -9
  577. package/src/css/props/gridColumn/gridColumn.css.ts +0 -49
  578. package/src/css/props/gridColumn/gridColumn.ts +0 -8
  579. package/src/css/props/gridColumn/types.ts +0 -9
  580. package/src/css/props/gridColumnEnd/gridColumnEnd.css.ts +0 -46
  581. package/src/css/props/gridColumnEnd/gridColumnEnd.ts +0 -8
  582. package/src/css/props/gridColumnEnd/types.ts +0 -9
  583. package/src/css/props/gridColumnStart/gridColumnStart.css.ts +0 -46
  584. package/src/css/props/gridColumnStart/gridColumnStart.ts +0 -8
  585. package/src/css/props/gridColumnStart/types.ts +0 -9
  586. package/src/css/props/gridRow/gridRow.css.ts +0 -49
  587. package/src/css/props/gridRow/gridRow.ts +0 -8
  588. package/src/css/props/gridRow/types.ts +0 -9
  589. package/src/css/props/gridRowEnd/gridRowEnd.css.ts +0 -46
  590. package/src/css/props/gridRowEnd/gridRowEnd.ts +0 -8
  591. package/src/css/props/gridRowEnd/types.ts +0 -9
  592. package/src/css/props/gridRowStart/gridRowStart.css.ts +0 -46
  593. package/src/css/props/gridRowStart/gridRowStart.ts +0 -8
  594. package/src/css/props/gridRowStart/types.ts +0 -9
  595. package/src/css/props/gridTemplateColumns/gridTemplateColumns.css.ts +0 -43
  596. package/src/css/props/gridTemplateColumns/gridTemplateColumns.ts +0 -8
  597. package/src/css/props/gridTemplateColumns/types.ts +0 -9
  598. package/src/css/props/gridTemplateRows/gridTemplateRows.css.ts +0 -43
  599. package/src/css/props/gridTemplateRows/gridTemplateRows.ts +0 -8
  600. package/src/css/props/gridTemplateRows/types.ts +0 -9
  601. package/src/css/props/height/height.css.ts +0 -25
  602. package/src/css/props/height/height.ts +0 -8
  603. package/src/css/props/height/types.ts +0 -9
  604. package/src/css/props/inset/inset.css.ts +0 -37
  605. package/src/css/props/inset/inset.ts +0 -21
  606. package/src/css/props/inset/types.ts +0 -13
  607. package/src/css/props/justifyContent/justifyContent.css.ts +0 -25
  608. package/src/css/props/justifyContent/justifyContent.ts +0 -8
  609. package/src/css/props/justifyContent/types.ts +0 -15
  610. package/src/css/props/margin/margin.css.ts +0 -117
  611. package/src/css/props/margin/margin.ts +0 -25
  612. package/src/css/props/margin/types.ts +0 -17
  613. package/src/css/props/maxWidth/maxWidth.css.ts +0 -32
  614. package/src/css/props/maxWidth/maxWidth.ts +0 -8
  615. package/src/css/props/maxWidth/types.ts +0 -11
  616. package/src/css/props/minHeight/minHeight.css.ts +0 -13
  617. package/src/css/props/minHeight/minHeight.ts +0 -8
  618. package/src/css/props/minHeight/types.ts +0 -9
  619. package/src/css/props/minWidth/minWidth.css.ts +0 -25
  620. package/src/css/props/minWidth/minWidth.ts +0 -8
  621. package/src/css/props/minWidth/types.ts +0 -9
  622. package/src/css/props/outline/outline.css.ts +0 -10
  623. package/src/css/props/outline/outline.ts +0 -8
  624. package/src/css/props/outline/types.ts +0 -7
  625. package/src/css/props/overflow/overflow.css.ts +0 -16
  626. package/src/css/props/overflow/overflow.ts +0 -8
  627. package/src/css/props/overflow/types.ts +0 -11
  628. package/src/css/props/padding/padding.css.ts +0 -87
  629. package/src/css/props/padding/padding.ts +0 -25
  630. package/src/css/props/padding/types.ts +0 -17
  631. package/src/css/props/pointerEvents/pointerEvents.css.ts +0 -13
  632. package/src/css/props/pointerEvents/pointerEvents.ts +0 -8
  633. package/src/css/props/pointerEvents/types.ts +0 -7
  634. package/src/css/props/position/position.css.ts +0 -22
  635. package/src/css/props/position/position.ts +0 -8
  636. package/src/css/props/position/types.ts +0 -9
  637. package/src/css/props/radius/radius.css.ts +0 -21
  638. package/src/css/props/radius/radius.ts +0 -8
  639. package/src/css/props/radius/types.ts +0 -8
  640. package/src/css/props/shadow/shadow.css.ts +0 -23
  641. package/src/css/props/shadow/shadow.ts +0 -8
  642. package/src/css/props/shadow/types.ts +0 -8
  643. package/src/css/props/textAlign/textAlign.css.ts +0 -22
  644. package/src/css/props/textAlign/textAlign.ts +0 -8
  645. package/src/css/props/textAlign/types.ts +0 -7
  646. package/src/css/props/textOverflow/textOverflow.css.ts +0 -19
  647. package/src/css/props/textOverflow/textOverflow.ts +0 -8
  648. package/src/css/props/textOverflow/types.ts +0 -12
  649. package/src/css/props/width/types.ts +0 -11
  650. package/src/css/props/width/width.css.ts +0 -31
  651. package/src/css/props/width/width.ts +0 -8
  652. package/src/css/theme/buildCSSTheme.ts +0 -492
  653. package/src/css/theme/defaultTheme.css.ts +0 -64
  654. package/src/css/types.ts +0 -431
  655. package/src/css/vars.css.ts +0 -680
  656. package/src/theme/_parseColorToken.ts +0 -180
  657. package/src/theme/buildTheme.ts +0 -32
  658. package/src/theme/constants.ts +0 -90
  659. package/src/theme/defaults/color.ts +0 -197
  660. package/src/theme/defaults/common.ts +0 -71
  661. package/src/theme/defaults/fonts.ts +0 -250
  662. package/src/theme/index.ts +0 -5
  663. package/src/theme/merge.ts +0 -24
  664. package/src/theme/resolveTokens.ts +0 -204
  665. package/src/theme/types.ts +0 -366
@@ -1,483 +0,0 @@
1
- import {
2
- arrow,
3
- autoUpdate,
4
- flip,
5
- type Middleware,
6
- offset,
7
- type RootBoundary,
8
- shift,
9
- useFloating,
10
- } from '@floating-ui/react-dom'
11
- import {type RadiusStyleProps, type ShadowStyleProps, tooltip} from '@sanity/ui/css'
12
- import type {CardTone, ColorScheme} from '@sanity/ui/theme'
13
- import {AnimatePresence} from 'framer-motion'
14
- import {
15
- cloneElement,
16
- type FocusEvent,
17
- type HTMLAttributes,
18
- type MouseEvent as ReactMouseEvent,
19
- type ReactElement,
20
- type ReactNode,
21
- type RefAttributes,
22
- useCallback,
23
- useEffect,
24
- useId,
25
- useImperativeHandle,
26
- useLayoutEffect,
27
- useMemo,
28
- useRef,
29
- useState,
30
- } from 'react'
31
- import {useEffectEvent} from 'use-effect-event'
32
-
33
- import {Z_OFFSETS} from '../../constants'
34
- import {useDelayedState} from '../../hooks/useDelayedState'
35
- import {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'
36
- import {origin} from '../../middleware/origin'
37
- import type {ComponentType, Delay, Placement, Props} from '../../types'
38
- import {useBoundaryElement} from '../../utils/boundaryElement/useBoundaryElement'
39
- import {getElementRef} from '../../utils/getElementRef'
40
- import {Portal} from '../../utils/portal/Portal'
41
- import {usePortal} from '../../utils/portal/usePortal'
42
- import {CardProvider} from '../card/CardProvider'
43
- import {useCard} from '../card/useCard'
44
- import type {LayerOwnProps} from '../layer/Layer'
45
- import {
46
- DEFAULT_FALLBACK_PLACEMENTS,
47
- DEFAULT_TOOLTIP_DISTANCE,
48
- DEFAULT_TOOLTIP_PADDING,
49
- } from './constants'
50
- import {useTooltipDelayGroup} from './tooltipDelayGroup/useTooltipDelayGroup'
51
- // import {useTooltipDelayGroup} from './TooltipDelayGroup'
52
- import {TooltipLayer} from './TooltipLayer'
53
-
54
- /** @public */
55
- export const DEFAULT_TOOLTIP_ELEMENT = 'div'
56
-
57
- /** @public */
58
- export type TooltipOwnProps = LayerOwnProps &
59
- RadiusStyleProps &
60
- ShadowStyleProps & {
61
- /**
62
- * Whether the tooltip should animate in and out.
63
- *
64
- * @beta
65
- * @defaultValue false
66
- */
67
- animate?: boolean
68
- arrow?: boolean
69
- boundaryElement?: HTMLElement | null
70
- children?: ReactElement<HTMLAttributes<HTMLElement> & RefAttributes<HTMLElement>>
71
- content?: ReactNode
72
- /**
73
- * Adds a delay to open or close the tooltip.
74
- *
75
- * If only a `number` is passed, it will be used for both opening and closing.
76
- *
77
- * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.
78
- *
79
- * @public
80
- * @defaultValue 0
81
- */
82
- delay?: Delay
83
- disabled?: boolean
84
- fallbackPlacements?: Placement[]
85
- placement?: Placement
86
- /** Whether or not to render the tooltip in a portal element. */
87
- portal?: boolean | string
88
- scheme?: ColorScheme
89
- tone?: CardTone
90
- }
91
-
92
- /** @public */
93
- export type TooltipElementType = 'div' | 'span' | ComponentType
94
-
95
- /** @public */
96
- export type TooltipProps<E extends TooltipElementType = TooltipElementType> = Props<
97
- TooltipOwnProps,
98
- E
99
- >
100
-
101
- /**
102
- * Tooltips display information when hovering, focusing or tapping.
103
- *
104
- * @public
105
- */
106
- export function Tooltip<E extends TooltipElementType = typeof DEFAULT_TOOLTIP_ELEMENT>(
107
- props: TooltipProps<E>,
108
- ): React.JSX.Element {
109
- const boundaryElementContext = useBoundaryElement()
110
-
111
- const {
112
- animate: _animate = false,
113
- arrow: arrowProp = false,
114
- as = DEFAULT_TOOLTIP_ELEMENT,
115
- boundaryElement = boundaryElementContext?.element,
116
- children: childProp,
117
- className,
118
- content,
119
- delay,
120
- disabled,
121
- fallbackPlacements = props.fallbackPlacements ??
122
- DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom'],
123
- padding = 2,
124
- placement: placementProp = 'bottom',
125
- portal: portalProp,
126
- radius = 3,
127
- ref: forwardedRef,
128
- scheme,
129
- shadow = 2,
130
- zOffset = Z_OFFSETS.tooltip,
131
- tone = 'inherit',
132
- ...rest
133
- } = props as TooltipProps<typeof DEFAULT_TOOLTIP_ELEMENT>
134
-
135
- const card = useCard()
136
- const prefersReducedMotion = usePrefersReducedMotion()
137
- const animate = prefersReducedMotion ? false : _animate
138
- const ref = useRef<HTMLDivElement | null>(null)
139
- const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null)
140
- const arrowRef = useRef<HTMLDivElement | null>(null)
141
- const rootBoundary: RootBoundary = 'viewport'
142
- const [tooltipMaxWidth, setTooltipMaxWidth] = useState(0)
143
-
144
- useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)
145
-
146
- const portal = usePortal()
147
- const portalElement =
148
- typeof portalProp === 'string' ? portal.elements?.[portalProp] || null : portal.element
149
-
150
- const middleware = useMemo(() => {
151
- const ret: Middleware[] = []
152
-
153
- // Flip the floating element when leaving the boundary box
154
- ret.push(
155
- flip({
156
- boundary: boundaryElement || undefined,
157
- fallbackPlacements,
158
- padding: DEFAULT_TOOLTIP_PADDING,
159
- rootBoundary,
160
- }),
161
- )
162
-
163
- // Define distance between reference and floating element
164
- ret.push(offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE}))
165
-
166
- // Shift the tooltip so its sits with the boundary element
167
- ret.push(
168
- shift({
169
- boundary: boundaryElement || undefined,
170
- rootBoundary,
171
- padding: DEFAULT_TOOLTIP_PADDING,
172
- }),
173
- )
174
-
175
- // Place arrow
176
- if (arrowProp) {
177
- ret.push(arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING}))
178
- }
179
-
180
- // Determine the origin to scale from.
181
- // Must be placed after `@sanity/ui/size` and `shift` middleware.
182
- if (animate) {
183
- ret.push(origin)
184
- }
185
-
186
- return ret
187
- }, [animate, arrowProp, boundaryElement, fallbackPlacements])
188
-
189
- const {floatingStyles, placement, middlewareData, refs, update} = useFloating({
190
- middleware,
191
- placement: placementProp,
192
- whileElementsMounted: autoUpdate,
193
- elements: {reference: referenceElement},
194
- transform: false,
195
- })
196
-
197
- const arrowX = middlewareData.arrow?.x
198
- const arrowY = middlewareData.arrow?.y
199
-
200
- const originX = middlewareData['@sanity/ui/origin']?.originX
201
- const originY = middlewareData['@sanity/ui/origin']?.originY
202
-
203
- const tooltipId = useId()
204
- const [isOpen, setIsOpen] = useDelayedState(false)
205
- const delayGroupContext = useTooltipDelayGroup()
206
- const {setIsGroupActive, setOpenTooltipId} = delayGroupContext || {}
207
- const showTooltip = isOpen || delayGroupContext?.openTooltipId === tooltipId
208
-
209
- const isInsideGroup = delayGroupContext !== null
210
- const openDelayProp = typeof delay === 'number' ? delay : delay?.open || 0
211
- const closeDelayProp = typeof delay === 'number' ? delay : delay?.close || 0
212
-
213
- const openDelay = isInsideGroup ? delayGroupContext.openDelay : openDelayProp
214
- const closeDelay = isInsideGroup ? delayGroupContext.closeDelay : closeDelayProp
215
-
216
- const handleIsOpenChange = useCallback(
217
- (open: boolean, immediate?: boolean) => {
218
- if (isInsideGroup) {
219
- // When it's inside a group, the open or close status will be handled by the group.
220
- if (open) {
221
- const groupedOpenDelay = immediate ? 0 : openDelay
222
-
223
- setIsGroupActive?.(open, groupedOpenDelay)
224
- setOpenTooltipId?.(tooltipId, groupedOpenDelay)
225
- } else {
226
- const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.
227
- const groupDeactivateDelay =
228
- closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay
229
-
230
- setIsGroupActive?.(open, groupDeactivateDelay)
231
- setOpenTooltipId?.(null, immediate ? 0 : closeDelay)
232
- }
233
- } else {
234
- const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay
235
-
236
- // When it's not inside a group, the open or close status will be handled by the tooltip itself.
237
- setIsOpen(open, standaloneDelay)
238
- }
239
- },
240
- [
241
- isInsideGroup,
242
- openDelay,
243
- setIsGroupActive,
244
- setOpenTooltipId,
245
- tooltipId,
246
- closeDelay,
247
- setIsOpen,
248
- ],
249
- )
250
-
251
- const handleBlur = useCallback(
252
- (e: FocusEvent<HTMLElement>) => {
253
- handleIsOpenChange(false)
254
- childProp?.props?.onBlur?.(e)
255
- },
256
- [childProp?.props, handleIsOpenChange],
257
- )
258
- const handleClick = useCallback(
259
- (e: ReactMouseEvent<HTMLElement>) => {
260
- handleIsOpenChange(false, true)
261
- childProp?.props.onClick?.(e)
262
- },
263
- [childProp?.props, handleIsOpenChange],
264
- )
265
- const handleContextMenu = useCallback(
266
- (e: ReactMouseEvent<HTMLElement>) => {
267
- handleIsOpenChange(false, true)
268
- childProp?.props.onContextMenu?.(e)
269
- },
270
- [childProp?.props, handleIsOpenChange],
271
- )
272
- const handleFocus = useCallback(
273
- (e: FocusEvent<HTMLElement>) => {
274
- handleIsOpenChange(true)
275
- childProp?.props?.onFocus?.(e)
276
- },
277
- [childProp?.props, handleIsOpenChange],
278
- )
279
- const handleMouseEnter = useCallback(
280
- (e: ReactMouseEvent<HTMLElement>) => {
281
- handleIsOpenChange(true)
282
- childProp?.props?.onMouseEnter?.(e)
283
- },
284
- [childProp?.props, handleIsOpenChange],
285
- )
286
- const handleMouseLeave = useCallback(
287
- (e: ReactMouseEvent<HTMLElement>) => {
288
- handleIsOpenChange(false)
289
- childProp?.props?.onMouseLeave?.(e)
290
- },
291
- [childProp?.props, handleIsOpenChange],
292
- )
293
-
294
- // Handle closing the tooltip when the mouse leaves the referenceElement
295
- useCloseOnMouseLeave({handleIsOpenChange, referenceElement, showTooltip, isInsideGroup})
296
-
297
- // Close when `disabled` changes to `true`
298
- useEffect(() => {
299
- if (disabled && showTooltip) handleIsOpenChange(false)
300
- }, [disabled, handleIsOpenChange, showTooltip])
301
-
302
- // Close when `content` changes to falsy
303
- useEffect(() => {
304
- if (!content && showTooltip) handleIsOpenChange(false)
305
- }, [content, handleIsOpenChange, showTooltip])
306
-
307
- useEffect(() => {
308
- // If the user clicks on escape key, close the tooltip.
309
- if (!showTooltip) return
310
-
311
- function handleWindowKeyDown(event: KeyboardEvent) {
312
- if (event.key === 'Escape') {
313
- handleIsOpenChange(false, true)
314
- }
315
- }
316
-
317
- window.addEventListener('keydown', handleWindowKeyDown)
318
-
319
- return () => {
320
- window.removeEventListener('keydown', handleWindowKeyDown)
321
- }
322
- }, [handleIsOpenChange, showTooltip])
323
-
324
- // // Set the max width of the tooltip based on boundaries and portals
325
- useLayoutEffect(() => {
326
- // Get the maximum tooltip width (sans tooltip padding)
327
- // Tooltip width should never exceed the width of either any supplied boundary or portal element.
328
- // If both portal and boundary elements are provided, use the smaller width of the two.
329
- const availableWidths = [
330
- ...(boundaryElement ? [boundaryElement.offsetWidth] : []),
331
- portalElement?.offsetWidth || document.body.offsetWidth,
332
- ]
333
-
334
- setTooltipMaxWidth(Math.min(...availableWidths) - DEFAULT_TOOLTIP_PADDING * 2)
335
- }, [boundaryElement, portalElement])
336
-
337
- const setArrow = useCallback(
338
- (arrowEl: HTMLDivElement | null) => {
339
- arrowRef.current = arrowEl
340
- update()
341
- },
342
- [update],
343
- )
344
-
345
- const setFloating = useCallback(
346
- (node: HTMLDivElement | null) => {
347
- ref.current = node
348
- refs.setFloating(node)
349
- },
350
- [refs],
351
- )
352
-
353
- const child = useMemo(() => {
354
- if (!childProp) return null
355
-
356
- return cloneElement(childProp, {
357
- onBlur: handleBlur,
358
- onFocus: handleFocus,
359
- onMouseEnter: handleMouseEnter,
360
- onMouseLeave: handleMouseLeave,
361
- onClick: handleClick,
362
- onContextMenu: handleContextMenu,
363
- ref: setReferenceElement,
364
- })
365
- }, [
366
- childProp,
367
- handleBlur,
368
- handleClick,
369
- handleContextMenu,
370
- handleFocus,
371
- handleMouseEnter,
372
- handleMouseLeave,
373
- ])
374
-
375
- // If there's a child then we need to set the reference element to the cloned child ref
376
- // and if child changes we make sure to update or remove the reference element.
377
- useImperativeHandle(childProp ? getElementRef(childProp) : null, () => referenceElement, [
378
- referenceElement,
379
- ])
380
-
381
- if (!child) return <></>
382
-
383
- if (disabled) return child
384
-
385
- const node = (
386
- <TooltipLayer
387
- data-ui="Tooltip"
388
- {...rest}
389
- animate={animate}
390
- arrow={arrowProp}
391
- arrowRef={setArrow}
392
- arrowX={arrowX}
393
- arrowY={arrowY}
394
- as={as}
395
- className={tooltip({className})}
396
- originX={originX}
397
- originY={originY}
398
- padding={padding}
399
- placement={placement}
400
- radius={radius}
401
- ref={setFloating}
402
- scheme={scheme}
403
- shadow={shadow}
404
- style={{
405
- ...floatingStyles,
406
- maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,
407
- }}
408
- tone={tone}
409
- zOffset={zOffset}
410
- >
411
- {content}
412
- </TooltipLayer>
413
- )
414
-
415
- const children =
416
- showTooltip &&
417
- (portalProp ? (
418
- <Portal __unstable_name={typeof portalProp === 'string' ? portalProp : undefined}>
419
- <CardProvider tone={tone === 'inherit' ? card.tone : tone} scheme={scheme ?? 'light'}>
420
- {node}
421
- </CardProvider>
422
- </Portal>
423
- ) : (
424
- node
425
- ))
426
-
427
- return (
428
- <>
429
- {/* the tooltip */}
430
- {animate ? <AnimatePresence>{children}</AnimatePresence> : children}
431
-
432
- {/* the referred element */}
433
- {child}
434
- </>
435
- )
436
- }
437
-
438
- /**
439
- * As `useEffectEvent` should never be passed to other components or hooks, this custom hook groups together the `useEffectEvent` and the `useEffect` hook using it.
440
- * @see https://19.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events:~:text=Never%20pass%20them%20to%20other%20components%20or%20Hooks
441
- */
442
- function useCloseOnMouseLeave({
443
- handleIsOpenChange,
444
- referenceElement,
445
- showTooltip,
446
- isInsideGroup,
447
- }: {
448
- handleIsOpenChange: (open: boolean, immediate?: boolean) => void
449
- referenceElement: HTMLElement | null
450
- showTooltip: boolean
451
- isInsideGroup: boolean
452
- }) {
453
- // Since we don't want the `mouseevent` events to be attached and removed if the `referenceElement` is changed
454
- // we use a "effect event" (https://19.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)
455
- // in order to always see the latest `referenceElement` value inside the event handler itself.
456
- const onMouseMove = useEffectEvent((target: EventTarget | null, teardown: () => void) => {
457
- if (!referenceElement) return
458
-
459
- const isHoveringReference =
460
- referenceElement === target || (target instanceof Node && referenceElement.contains(target))
461
-
462
- if (!isHoveringReference) {
463
- handleIsOpenChange(false)
464
- // Allow removing the event listener eagerly, to avoid race conditions
465
- teardown()
466
- }
467
- })
468
-
469
- // Detect whether the mouse is moving outside of the reference element. This is sometimes
470
- // necessary, because the tooltip might not always close as it should (e.g. when clicking
471
- // the reference element triggers a CPU-heavy operation.)
472
- useEffect(() => {
473
- if (!showTooltip || isInsideGroup) return
474
-
475
- const handleMouseMove = (event: MouseEvent) => {
476
- onMouseMove(event.target, () => window.removeEventListener('mousemove', handleMouseMove))
477
- }
478
-
479
- window.addEventListener('mousemove', handleMouseMove)
480
-
481
- return () => window.removeEventListener('mousemove', handleMouseMove)
482
- }, [isInsideGroup, showTooltip])
483
- }
@@ -1,106 +0,0 @@
1
- import {motion, type MotionStyle} from 'framer-motion'
2
- import {type CSSProperties, type ForwardedRef, useMemo} from 'react'
3
-
4
- import {POPOVER_MOTION_PROPS} from '../../constants'
5
- import type {Placement} from '../../types'
6
- import {Arrow} from '../arrow/Arrow'
7
- import {Layer, type LayerOwnProps, type LayerProps} from '../layer/Layer'
8
- import {
9
- DEFAULT_TOOLTIP_ARROW_HEIGHT,
10
- DEFAULT_TOOLTIP_ARROW_RADIUS,
11
- DEFAULT_TOOLTIP_ARROW_WIDTH,
12
- } from './constants'
13
-
14
- /* @internal */
15
- export const DEFAULT_TOOLTIP_LAYER_ELEMENT = 'div'
16
-
17
- /* @internal */
18
- export interface TooltipLayerOwnProps extends LayerOwnProps {
19
- animate?: boolean
20
- arrow: boolean
21
- arrowRef: ForwardedRef<HTMLDivElement>
22
- arrowX?: number
23
- arrowY?: number
24
- originX?: number
25
- originY?: number
26
- placement?: Placement
27
- }
28
-
29
- /** @internal */
30
- export type TooltipLayerProps = TooltipLayerOwnProps & LayerProps<'div'>
31
-
32
- /** @internal */
33
- export function TooltipLayer(props: TooltipLayerProps): React.JSX.Element {
34
- const {
35
- animate,
36
- arrow,
37
- arrowRef,
38
- arrowX,
39
- arrowY,
40
- children,
41
- originX,
42
- originY,
43
- padding,
44
- placement,
45
- radius,
46
- scheme,
47
- shadow,
48
- style,
49
- tone = 'inherit',
50
- ...rest
51
- } = props
52
-
53
- const rootStyle: MotionStyle = useMemo(
54
- () => ({
55
- originX,
56
- originY,
57
- willChange: animate ? 'transform' : undefined,
58
- ...style,
59
- }),
60
- [animate, originX, originY, style],
61
- )
62
-
63
- const arrowStyle: CSSProperties = useMemo(
64
- () => ({
65
- left: arrowX !== null ? arrowX : undefined,
66
- top: arrowY !== null ? arrowY : undefined,
67
- right: undefined,
68
- bottom: undefined,
69
- }),
70
- [arrowX, arrowY],
71
- )
72
-
73
- return (
74
- // @ts-expect-error - TODO: fix this
75
- <Layer
76
- data-ui="Tooltip__layer"
77
- {...rest}
78
- as={motion.div}
79
- data-animate={animate ? '' : undefined}
80
- data-placement={placement}
81
- padding={padding}
82
- radius={radius}
83
- scheme={scheme}
84
- shadow={shadow}
85
- style={rootStyle}
86
- variants={POPOVER_MOTION_PROPS.card}
87
- transition={POPOVER_MOTION_PROPS.transition}
88
- initial={animate ? ['hidden', 'initial'] : undefined}
89
- animate={animate ? ['visible', 'scaleIn'] : undefined}
90
- exit={animate ? ['hidden', 'scaleOut'] : undefined}
91
- tone={tone}
92
- >
93
- {children}
94
-
95
- {arrow && (
96
- <Arrow
97
- ref={arrowRef}
98
- style={arrowStyle}
99
- width={DEFAULT_TOOLTIP_ARROW_WIDTH}
100
- height={DEFAULT_TOOLTIP_ARROW_HEIGHT}
101
- radius={DEFAULT_TOOLTIP_ARROW_RADIUS}
102
- />
103
- )}
104
- </Layer>
105
- )
106
- }
@@ -1,104 +0,0 @@
1
- import {
2
- BoundaryElementProvider,
3
- Button,
4
- Card,
5
- Flex,
6
- Portal,
7
- PortalProvider,
8
- Stack,
9
- Text,
10
- Tooltip,
11
- } from '@sanity/ui'
12
- import {useBoolean, useSelect, useText} from '@sanity/ui-workshop'
13
- import {useMemo, useState} from 'react'
14
-
15
- import {WORKSHOP_PLACEMENT_OPTIONS} from '$workshop'
16
-
17
- const PORTAL_OPTIONS = {
18
- '(true)': true,
19
- '(false)': false,
20
- 'portal1': 'portal1',
21
- }
22
-
23
- export default function CustomPortalStory(): React.JSX.Element {
24
- const content = useText(
25
- 'Content',
26
- 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis consectetur malesuada. Sed lobortis est dolor, eget imperdiet velit placerat et. Aenean posuere mi non aliquet iaculis. Donec fermentum pulvinar purus at sagittis. Ut tincidunt massa odio, sed finibus justo ullamcorper id. Nam venenatis justo non ligula elementum cursus. Pellentesque laoreet justo in mollis sagittis. In lacinia ornare ultrices. Suspendisse potenti.',
27
- )
28
- // @ts-expect-error - TODO: fix this
29
- const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'top')
30
- const portal = useSelect('Portal', PORTAL_OPTIONS)
31
- const useBoundaryElement = useBoolean('Use boundary element', true)
32
-
33
- const [portal1Element, setPortal1Element] = useState<HTMLDivElement | null>(null)
34
- const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
35
- const __unstable_elements = useMemo(
36
- () => ({
37
- portal1: portal1Element,
38
- }),
39
- [portal1Element],
40
- )
41
-
42
- return (
43
- <PortalProvider __unstable_elements={__unstable_elements}>
44
- <Flex align="center" height="fill" justify="center">
45
- <BoundaryElementProvider element={useBoundaryElement ? boundaryElement : null}>
46
- <Card
47
- border
48
- padding={4}
49
- ref={setBoundaryElement}
50
- style={{
51
- height: 'calc(100vh - 100px)',
52
- position: 'relative',
53
- width: '500px',
54
- }}
55
- >
56
- <Text>Boundary element</Text>
57
- <Flex align="center" height="fill" justify="center">
58
- <Flex justify="center">
59
- <Stack gap={2}>
60
- <Tooltip
61
- boundaryElement={useBoundaryElement ? boundaryElement : null}
62
- content={content ? <Text size={1}>{content}</Text> : undefined}
63
- padding={2}
64
- // @ts-expect-error - TODO: fix this
65
- placement={placement}
66
- portal={portal}
67
- >
68
- <Button mode="bleed" text="Tooltip" />
69
- </Tooltip>
70
- </Stack>
71
- </Flex>
72
- </Flex>
73
- </Card>
74
- </BoundaryElementProvider>
75
- </Flex>
76
-
77
- <Card
78
- border
79
- margin={4}
80
- padding={4}
81
- ref={setPortal1Element}
82
- style={{
83
- left: 0,
84
- position: 'absolute',
85
- top: 0,
86
- width: '175px',
87
- }}
88
- tone="critical"
89
- />
90
-
91
- <Portal __unstable_name="portal1">
92
- <Stack gap={4}>
93
- <Text size={1} weight="medium">
94
- Portal 1 content
95
- </Text>
96
- <Text size={1}>
97
- The tooltip's max-width should not exceed this container's width (minus padding) if it's
98
- set to use this portal
99
- </Text>
100
- </Stack>
101
- </Portal>
102
- </PortalProvider>
103
- )
104
- }