@sanity/ui 4.0.0-beta.7 → 4.0.0-next.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 (393) 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/portalProvider.cjs +3750 -0
  8. package/dist/_chunks/portalProvider.cjs.map +1 -0
  9. package/dist/_chunks/portalProvider.d.cts +1067 -0
  10. package/dist/_chunks/portalProvider.d.cts.map +1 -0
  11. package/dist/_chunks/portalProvider.d.ts +1067 -0
  12. package/dist/_chunks/portalProvider.d.ts.map +1 -0
  13. package/dist/_chunks/portalProvider.js +3300 -0
  14. package/dist/_chunks/portalProvider.js.map +1 -0
  15. package/dist/_chunks/refractor.cjs +18 -0
  16. package/dist/_chunks/refractor.cjs.map +1 -0
  17. package/dist/_chunks/refractor.js +20 -0
  18. package/dist/_chunks/refractor.js.map +1 -0
  19. package/dist/_chunks/rgba.d.cts +929 -0
  20. package/dist/_chunks/rgba.d.cts.map +1 -0
  21. package/dist/_chunks/rgba.d.ts +929 -0
  22. package/dist/_chunks/rgba.d.ts.map +1 -0
  23. package/dist/_visual-editing.cjs +4 -0
  24. package/dist/_visual-editing.d.cts +2 -0
  25. package/dist/_visual-editing.d.ts +2 -0
  26. package/dist/_visual-editing.js +3 -0
  27. package/dist/index.cjs +3007 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.cts +1275 -0
  30. package/dist/index.d.cts.map +1 -0
  31. package/dist/index.d.ts +708 -1188
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2964 -4783
  34. package/dist/index.js.map +1 -1
  35. package/dist/theme.cjs +54 -0
  36. package/dist/theme.cjs.map +1 -0
  37. package/dist/theme.d.cts +278 -0
  38. package/dist/theme.d.cts.map +1 -0
  39. package/dist/theme.d.ts +278 -0
  40. package/dist/theme.d.ts.map +1 -0
  41. package/dist/theme.js +53 -0
  42. package/dist/theme.js.map +1 -0
  43. package/package.json +65 -88
  44. package/dist/_chunks-es/Syntax.js +0 -23
  45. package/dist/_chunks-es/Syntax.js.map +0 -1
  46. package/dist/index.css +0 -1
  47. package/exports/index.css +0 -1
  48. package/exports/index.ts +0 -125
  49. package/src/components/autocomplete/Autocomplete.tsx +0 -665
  50. package/src/components/autocomplete/AutocompleteOption.tsx +0 -42
  51. package/src/components/autocomplete/__workshop__/Async.tsx +0 -162
  52. package/src/components/autocomplete/__workshop__/ConstrainedHeight.tsx +0 -121
  53. package/src/components/autocomplete/__workshop__/Custom.tsx +0 -91
  54. package/src/components/autocomplete/__workshop__/Example.tsx +0 -70
  55. package/src/components/autocomplete/__workshop__/FocusAndBlur.tsx +0 -39
  56. package/src/components/autocomplete/__workshop__/Fullscreen.tsx +0 -307
  57. package/src/components/autocomplete/__workshop__/index.ts +0 -41
  58. package/src/components/autocomplete/__workshop__/mock/apiStore.ts +0 -49
  59. package/src/components/autocomplete/__workshop__/mock/countries.ts +0 -245
  60. package/src/components/autocomplete/__workshop__/types.ts +0 -4
  61. package/src/components/autocomplete/autocompleteReducer.ts +0 -47
  62. package/src/components/autocomplete/constants.ts +0 -28
  63. package/src/components/autocomplete/types.ts +0 -103
  64. package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -163
  65. package/src/components/breadcrumbs/__workshop__/Example.tsx +0 -48
  66. package/src/components/breadcrumbs/__workshop__/index.ts +0 -16
  67. package/src/components/dialog/Dialog.tsx +0 -230
  68. package/src/components/dialog/DialogCard.tsx +0 -233
  69. package/src/components/dialog/DialogContext.ts +0 -21
  70. package/src/components/dialog/DialogProvider.tsx +0 -34
  71. package/src/components/dialog/__workshop__/Activate.tsx +0 -141
  72. package/src/components/dialog/__workshop__/AutoFocus.tsx +0 -29
  73. package/src/components/dialog/__workshop__/Layering.tsx +0 -41
  74. package/src/components/dialog/__workshop__/Nested.tsx +0 -71
  75. package/src/components/dialog/__workshop__/OnScroll.tsx +0 -51
  76. package/src/components/dialog/__workshop__/Panes.tsx +0 -75
  77. package/src/components/dialog/__workshop__/Position.tsx +0 -30
  78. package/src/components/dialog/__workshop__/Props.tsx +0 -93
  79. package/src/components/dialog/__workshop__/Provider.tsx +0 -11
  80. package/src/components/dialog/__workshop__/Wrapped.tsx +0 -76
  81. package/src/components/dialog/__workshop__/index.ts +0 -21
  82. package/src/components/dialog/isTargetWithinScope.ts +0 -14
  83. package/src/components/dialog/types.ts +0 -2
  84. package/src/components/dialog/useDialog.ts +0 -11
  85. package/src/components/hotkeys/Hotkeys.tsx +0 -70
  86. package/src/components/hotkeys/__workshop__/Plain.tsx +0 -9
  87. package/src/components/hotkeys/__workshop__/index.ts +0 -16
  88. package/src/components/menu/Menu.test.tsx +0 -125
  89. package/src/components/menu/Menu.tsx +0 -174
  90. package/src/components/menu/MenuButton.tsx +0 -231
  91. package/src/components/menu/MenuContext.ts +0 -19
  92. package/src/components/menu/MenuDivider.tsx +0 -32
  93. package/src/components/menu/MenuGroup.tsx +0 -240
  94. package/src/components/menu/MenuItem.tsx +0 -153
  95. package/src/components/menu/__workshop__/AsComponent.tsx +0 -45
  96. package/src/components/menu/__workshop__/AvatarMenu.tsx +0 -36
  97. package/src/components/menu/__workshop__/ClosableMenuButton.tsx +0 -47
  98. package/src/components/menu/__workshop__/ConstrainedInBoundary.tsx +0 -133
  99. package/src/components/menu/__workshop__/CustomMenuItem.tsx +0 -47
  100. package/src/components/menu/__workshop__/CustomSelectedState.tsx +0 -35
  101. package/src/components/menu/__workshop__/DataProps.tsx +0 -27
  102. package/src/components/menu/__workshop__/DisableFocusOnClose.tsx +0 -40
  103. package/src/components/menu/__workshop__/Groups.tsx +0 -164
  104. package/src/components/menu/__workshop__/MenuButton.tsx +0 -79
  105. package/src/components/menu/__workshop__/MenuGroupRight.tsx +0 -73
  106. package/src/components/menu/__workshop__/NestedMenu.tsx +0 -22
  107. package/src/components/menu/__workshop__/OnCloseMenuButton.tsx +0 -50
  108. package/src/components/menu/__workshop__/SelectedItem.tsx +0 -69
  109. package/src/components/menu/__workshop__/ShouldFocus.tsx +0 -42
  110. package/src/components/menu/__workshop__/Tones.tsx +0 -19
  111. package/src/components/menu/__workshop__/index.ts +0 -91
  112. package/src/components/menu/helpers.ts +0 -82
  113. package/src/components/menu/useMenu.ts +0 -21
  114. package/src/components/menu/useMenuController.ts +0 -245
  115. package/src/components/tab/Tab.tsx +0 -135
  116. package/src/components/tab/TabList.tsx +0 -157
  117. package/src/components/tab/TabListContext.ts +0 -10
  118. package/src/components/tab/TabPanel.tsx +0 -94
  119. package/src/components/tab/__workshop__/Example.tsx +0 -135
  120. package/src/components/tab/__workshop__/index.ts +0 -16
  121. package/src/components/tab/types.ts +0 -11
  122. package/src/components/toast/Toast.test.tsx +0 -103
  123. package/src/components/toast/Toast.tsx +0 -191
  124. package/src/components/toast/ToastContext.ts +0 -7
  125. package/src/components/toast/ToastLayer.tsx +0 -54
  126. package/src/components/toast/ToastProvider.tsx +0 -127
  127. package/src/components/toast/__workshop__/Hook.tsx +0 -71
  128. package/src/components/toast/__workshop__/Toast.tsx +0 -26
  129. package/src/components/toast/__workshop__/index.ts +0 -21
  130. package/src/components/toast/toastState.ts +0 -6
  131. package/src/components/toast/types.ts +0 -24
  132. package/src/components/toast/useToast.ts +0 -23
  133. package/src/components/tree/Tree.tsx +0 -248
  134. package/src/components/tree/TreeContext.ts +0 -10
  135. package/src/components/tree/TreeGroup.tsx +0 -46
  136. package/src/components/tree/TreeItem.tsx +0 -236
  137. package/src/components/tree/__workshop__/Basic.tsx +0 -108
  138. package/src/components/tree/__workshop__/TabFromElement.tsx +0 -84
  139. package/src/components/tree/__workshop__/basic.perf.ts +0 -19
  140. package/src/components/tree/__workshop__/index.ts +0 -23
  141. package/src/components/tree/helpers.ts +0 -105
  142. package/src/components/tree/types.ts +0 -24
  143. package/src/components/tree/useTree.ts +0 -17
  144. package/src/components/virtualList/VirtualList.tsx +0 -254
  145. package/src/components/virtualList/__workshop__/ChangingProps.tsx +0 -41
  146. package/src/components/virtualList/__workshop__/ElementScroll.tsx +0 -43
  147. package/src/components/virtualList/__workshop__/InfiniteList.tsx +0 -40
  148. package/src/components/virtualList/__workshop__/WindowScrolll.tsx +0 -23
  149. package/src/components/virtualList/__workshop__/index.ts +0 -31
  150. package/src/core/_keys.ts +0 -26
  151. package/src/core/constants.ts +0 -67
  152. package/src/core/getElementRef.ts +0 -29
  153. package/src/core/helpers/animation.ts +0 -26
  154. package/src/core/helpers/element.ts +0 -55
  155. package/src/core/helpers/focus.ts +0 -92
  156. package/src/core/helpers/props.ts +0 -51
  157. package/src/core/helpers/scroll.ts +0 -15
  158. package/src/core/lib/createGlobalScopedContext.ts +0 -39
  159. package/src/core/lib/globalScope.ts +0 -19
  160. package/src/core/lib/isArray.ts +0 -3
  161. package/src/core/lib/isRecord.ts +0 -3
  162. package/src/core/types.ts +0 -57
  163. package/src/hooks/useClickOutsideEvent.test.tsx +0 -114
  164. package/src/hooks/useClickOutsideEvent.ts +0 -66
  165. package/src/hooks/useCustomValidity.ts +0 -13
  166. package/src/hooks/useElementSize.ts +0 -19
  167. package/src/hooks/useGlobalKeyDown.ts +0 -23
  168. package/src/hooks/useMatchMedia.ts +0 -28
  169. package/src/hooks/useMediaIndex/__workshop__/Test.tsx +0 -14
  170. package/src/hooks/useMediaIndex/__workshop__/index.ts +0 -16
  171. package/src/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -21
  172. package/src/hooks/useMediaIndex/useMediaIndex.ts +0 -111
  173. package/src/hooks/useMounted.ts +0 -15
  174. package/src/hooks/usePrefersDark.hydration.test.tsx +0 -56
  175. package/src/hooks/usePrefersDark.test.tsx +0 -20
  176. package/src/hooks/usePrefersDark.ts +0 -16
  177. package/src/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  178. package/src/hooks/usePrefersReducedMotion.test.tsx +0 -20
  179. package/src/hooks/usePrefersReducedMotion.ts +0 -16
  180. package/src/hooks/useResponsiveProp.ts +0 -14
  181. package/src/hooks/useUnique.ts +0 -54
  182. package/src/middleware/origin.ts +0 -47
  183. package/src/observers/elementSize.ts +0 -114
  184. package/src/primitives/_syntax/LazySyntax.tsx +0 -4
  185. package/src/primitives/_syntax/Syntax.tsx +0 -26
  186. package/src/primitives/avatar/Avatar.tsx +0 -145
  187. package/src/primitives/avatar/AvatarCounter.tsx +0 -69
  188. package/src/primitives/avatar/AvatarStack.tsx +0 -77
  189. package/src/primitives/avatar/__workshop__/AsButton.tsx +0 -12
  190. package/src/primitives/avatar/__workshop__/PropsStory.tsx +0 -24
  191. package/src/primitives/avatar/__workshop__/Stack.tsx +0 -27
  192. package/src/primitives/avatar/__workshop__/WithinButton.tsx +0 -51
  193. package/src/primitives/avatar/__workshop__/WithinMenuItem.tsx +0 -52
  194. package/src/primitives/avatar/__workshop__/index.ts +0 -36
  195. package/src/primitives/avatar/types.ts +0 -2
  196. package/src/primitives/badge/Badge.test.tsx +0 -16
  197. package/src/primitives/badge/Badge.tsx +0 -53
  198. package/src/primitives/badge/__workshop__/Props.tsx +0 -27
  199. package/src/primitives/badge/__workshop__/Tones.tsx +0 -15
  200. package/src/primitives/badge/__workshop__/index.ts +0 -26
  201. package/src/primitives/badge/__workshop__/within-button.tsx +0 -36
  202. package/src/primitives/box/Box.tsx +0 -73
  203. package/src/primitives/box/__workshop__/Props.tsx +0 -26
  204. package/src/primitives/box/__workshop__/Responsive.tsx +0 -19
  205. package/src/primitives/box/__workshop__/index.ts +0 -21
  206. package/src/primitives/button/Button.test.tsx +0 -30
  207. package/src/primitives/button/Button.tsx +0 -148
  208. package/src/primitives/button/__workshop__/Custom.tsx +0 -39
  209. package/src/primitives/button/__workshop__/CustomIcons.tsx +0 -37
  210. package/src/primitives/button/__workshop__/DataProps.tsx +0 -18
  211. package/src/primitives/button/__workshop__/Disabled.tsx +0 -43
  212. package/src/primitives/button/__workshop__/MixedChildren.tsx +0 -12
  213. package/src/primitives/button/__workshop__/Props.tsx +0 -60
  214. package/src/primitives/button/__workshop__/Stacked.tsx +0 -60
  215. package/src/primitives/button/__workshop__/Styled1.css.ts +0 -7
  216. package/src/primitives/button/__workshop__/Styled1.tsx +0 -11
  217. package/src/primitives/button/__workshop__/TextOverflow.tsx +0 -17
  218. package/src/primitives/button/__workshop__/UploadButton.tsx +0 -28
  219. package/src/primitives/button/__workshop__/index.ts +0 -61
  220. package/src/primitives/button/types.ts +0 -2
  221. package/src/primitives/card/Card.tsx +0 -124
  222. package/src/primitives/card/CardContext.ts +0 -10
  223. package/src/primitives/card/CardInternalContext.ts +0 -10
  224. package/src/primitives/card/CardInternalProvider.tsx +0 -15
  225. package/src/primitives/card/CardProvider.tsx +0 -16
  226. package/src/primitives/card/__workshop__/AsButton.tsx +0 -103
  227. package/src/primitives/card/__workshop__/AsComponent.tsx +0 -25
  228. package/src/primitives/card/__workshop__/Checkered.tsx +0 -25
  229. package/src/primitives/card/__workshop__/DataProps.tsx +0 -25
  230. package/src/primitives/card/__workshop__/Interactive.tsx +0 -29
  231. package/src/primitives/card/__workshop__/ListNavigation.tsx +0 -78
  232. package/src/primitives/card/__workshop__/Props.tsx +0 -59
  233. package/src/primitives/card/__workshop__/Selected.tsx +0 -62
  234. package/src/primitives/card/__workshop__/Styled.tsx +0 -11
  235. package/src/primitives/card/__workshop__/Tones.tsx +0 -26
  236. package/src/primitives/card/__workshop__/index.ts +0 -21
  237. package/src/primitives/card/types.ts +0 -21
  238. package/src/primitives/card/useCard.ts +0 -20
  239. package/src/primitives/checkbox/Checkbox.tsx +0 -80
  240. package/src/primitives/checkbox/__workshop__/Example.tsx +0 -25
  241. package/src/primitives/checkbox/__workshop__/Props.tsx +0 -35
  242. package/src/primitives/checkbox/__workshop__/ReadOnly.tsx +0 -16
  243. package/src/primitives/checkbox/__workshop__/Tones.tsx +0 -26
  244. package/src/primitives/checkbox/__workshop__/index.ts +0 -15
  245. package/src/primitives/code/Code.tsx +0 -47
  246. package/src/primitives/code/__workshop__/OpticalAlignment.tsx +0 -25
  247. package/src/primitives/code/__workshop__/Props.tsx +0 -20
  248. package/src/primitives/code/__workshop__/index.ts +0 -21
  249. package/src/primitives/container/Container.tsx +0 -43
  250. package/src/primitives/container/__workshop__/Example.tsx +0 -16
  251. package/src/primitives/container/__workshop__/index.ts +0 -16
  252. package/src/primitives/container/types.ts +0 -6
  253. package/src/primitives/flex/Flex.tsx +0 -38
  254. package/src/primitives/flex/__workshop__/Example.tsx +0 -26
  255. package/src/primitives/flex/__workshop__/Gap.tsx +0 -25
  256. package/src/primitives/flex/__workshop__/index.ts +0 -13
  257. package/src/primitives/flex/__workshop__/styles.css.ts +0 -12
  258. package/src/primitives/grid/Grid.tsx +0 -38
  259. package/src/primitives/grid/__workshop__/Responsive.tsx +0 -54
  260. package/src/primitives/grid/__workshop__/index.ts +0 -12
  261. package/src/primitives/heading/Heading.tsx +0 -68
  262. package/src/primitives/heading/__workshop__/OpticalAlignment.tsx +0 -27
  263. package/src/primitives/heading/__workshop__/Plain.tsx +0 -25
  264. package/src/primitives/heading/__workshop__/index.ts +0 -21
  265. package/src/primitives/inline/Inline.tsx +0 -37
  266. package/src/primitives/inline/__workshop__/Plain.tsx +0 -22
  267. package/src/primitives/inline/__workshop__/index.ts +0 -10
  268. package/src/primitives/kbd/Kbd.tsx +0 -36
  269. package/src/primitives/kbd/__workshop__/Plain.tsx +0 -9
  270. package/src/primitives/kbd/__workshop__/index.ts +0 -10
  271. package/src/primitives/label/Label.tsx +0 -67
  272. package/src/primitives/label/__workshop__/OpticalAlignment.tsx +0 -27
  273. package/src/primitives/label/__workshop__/Plain.tsx +0 -27
  274. package/src/primitives/label/__workshop__/index.ts +0 -21
  275. package/src/primitives/layer/Layer.test.tsx +0 -110
  276. package/src/primitives/layer/Layer.tsx +0 -35
  277. package/src/primitives/layer/LayerCard.tsx +0 -90
  278. package/src/primitives/layer/LayerContext.ts +0 -7
  279. package/src/primitives/layer/LayerProvider.tsx +0 -106
  280. package/src/primitives/layer/__workshop__/MultipleRoots.tsx +0 -49
  281. package/src/primitives/layer/__workshop__/Nested.tsx +0 -107
  282. package/src/primitives/layer/__workshop__/ResponsiveZOffset.tsx +0 -17
  283. package/src/primitives/layer/__workshop__/_debug.tsx +0 -17
  284. package/src/primitives/layer/__workshop__/index.ts +0 -26
  285. package/src/primitives/layer/getLayerContext.test.ts +0 -32
  286. package/src/primitives/layer/getLayerContext.ts +0 -21
  287. package/src/primitives/layer/types.ts +0 -9
  288. package/src/primitives/layer/useLayer.ts +0 -24
  289. package/src/primitives/popover/Popover.tsx +0 -291
  290. package/src/primitives/popover/PopoverLayer.tsx +0 -101
  291. package/src/primitives/popover/__workshop__/AlignedStory.tsx +0 -75
  292. package/src/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  293. package/src/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  294. package/src/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  295. package/src/primitives/popover/__workshop__/PlainStory.tsx +0 -67
  296. package/src/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  297. package/src/primitives/popover/__workshop__/SidePanelStory.tsx +0 -95
  298. package/src/primitives/popover/__workshop__/TestStory.tsx +0 -97
  299. package/src/primitives/popover/__workshop__/index.ts +0 -56
  300. package/src/primitives/popover/__workshop__/portal-inheritance.tsx +0 -15
  301. package/src/primitives/popover/constants.ts +0 -20
  302. package/src/primitives/popover/floating-ui/size.ts +0 -75
  303. package/src/primitives/popover/types.ts +0 -12
  304. package/src/primitives/popover/useMiddleware.ts +0 -126
  305. package/src/primitives/radio/Radio.tsx +0 -64
  306. package/src/primitives/radio/__workshop__/Example.tsx +0 -63
  307. package/src/primitives/radio/__workshop__/Plain.tsx +0 -28
  308. package/src/primitives/radio/__workshop__/index.ts +0 -13
  309. package/src/primitives/select/Select.tsx +0 -76
  310. package/src/primitives/select/__workshop__/Plain.tsx +0 -37
  311. package/src/primitives/select/__workshop__/ReadOnly.tsx +0 -23
  312. package/src/primitives/select/__workshop__/index.ts +0 -13
  313. package/src/primitives/selectable/Selectable.tsx +0 -48
  314. package/src/primitives/selectable/__workshop__/DataProps.tsx +0 -24
  315. package/src/primitives/selectable/__workshop__/as-link.tsx +0 -13
  316. package/src/primitives/selectable/__workshop__/index.ts +0 -19
  317. package/src/primitives/skeleton/CodeSkeleton.tsx +0 -49
  318. package/src/primitives/skeleton/HeadingSkeleton.tsx +0 -48
  319. package/src/primitives/skeleton/LabelSkeleton.tsx +0 -47
  320. package/src/primitives/skeleton/Skeleton.tsx +0 -70
  321. package/src/primitives/skeleton/TextSkeleton.tsx +0 -49
  322. package/src/primitives/skeleton/__workshop__/Delay.tsx +0 -69
  323. package/src/primitives/skeleton/__workshop__/Skeleton.tsx +0 -63
  324. package/src/primitives/skeleton/__workshop__/index.ts +0 -13
  325. package/src/primitives/spinner/Spinner.tsx +0 -45
  326. package/src/primitives/spinner/SpinnerAnimatedIcon.tsx +0 -14
  327. package/src/primitives/spinner/__workshop__/Props.tsx +0 -13
  328. package/src/primitives/spinner/__workshop__/index.ts +0 -16
  329. package/src/primitives/srOnly/SrOnly.tsx +0 -33
  330. package/src/primitives/stack/Stack.tsx +0 -38
  331. package/src/primitives/stack/__workshop__/Plain.tsx +0 -30
  332. package/src/primitives/stack/__workshop__/index.ts +0 -16
  333. package/src/primitives/switch/Switch.tsx +0 -76
  334. package/src/primitives/switch/__workshop__/Example.tsx +0 -25
  335. package/src/primitives/switch/__workshop__/Props.tsx +0 -23
  336. package/src/primitives/switch/__workshop__/index.ts +0 -13
  337. package/src/primitives/text/InlineCode.tsx +0 -25
  338. package/src/primitives/text/Text.tsx +0 -68
  339. package/src/primitives/text/__workshop__/Example.tsx +0 -26
  340. package/src/primitives/text/__workshop__/OpticalAlignment.tsx +0 -27
  341. package/src/primitives/text/__workshop__/index.ts +0 -26
  342. package/src/primitives/text/__workshop__/inline-code.tsx +0 -13
  343. package/src/primitives/textArea/TextArea.tsx +0 -97
  344. package/src/primitives/textArea/__workshop__/Plain.tsx +0 -46
  345. package/src/primitives/textArea/__workshop__/index.ts +0 -16
  346. package/src/primitives/textInput/TextInput.tsx +0 -279
  347. package/src/primitives/textInput/__workshop__/ClearButton.tsx +0 -32
  348. package/src/primitives/textInput/__workshop__/CustomValidity.tsx +0 -17
  349. package/src/primitives/textInput/__workshop__/Plain.tsx +0 -102
  350. package/src/primitives/textInput/__workshop__/ReadOnly.tsx +0 -14
  351. package/src/primitives/textInput/__workshop__/States.tsx +0 -53
  352. package/src/primitives/textInput/__workshop__/Tones.tsx +0 -40
  353. package/src/primitives/textInput/__workshop__/Typed.tsx +0 -23
  354. package/src/primitives/textInput/__workshop__/index.ts +0 -46
  355. package/src/primitives/tooltip/Tooltip.test.tsx +0 -496
  356. package/src/primitives/tooltip/Tooltip.tsx +0 -546
  357. package/src/primitives/tooltip/TooltipLayer.tsx +0 -72
  358. package/src/primitives/tooltip/__workshop__/CustomPortal.tsx +0 -102
  359. package/src/primitives/tooltip/__workshop__/OverflowingBoundary.tsx +0 -74
  360. package/src/primitives/tooltip/__workshop__/Props.tsx +0 -107
  361. package/src/primitives/tooltip/__workshop__/ResizableBoundary.tsx +0 -91
  362. package/src/primitives/tooltip/__workshop__/index.ts +0 -31
  363. package/src/primitives/tooltip/constants.ts +0 -24
  364. package/src/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupContext.tsx +0 -13
  365. package/src/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupProvider.tsx +0 -96
  366. package/src/primitives/tooltip/tooltipDelayGroup/types.ts +0 -7
  367. package/src/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  368. package/src/root/Root.tsx +0 -93
  369. package/src/root/RootProvider.tsx +0 -37
  370. package/src/root/__workshop__/Boundary.tsx +0 -43
  371. package/src/root/__workshop__/index.ts +0 -24
  372. package/src/root/__workshop__/primitives.tsx +0 -49
  373. package/src/root/__workshop__/tone-inheritance.tsx +0 -65
  374. package/src/utils/ErrorBoundary.tsx +0 -50
  375. package/src/utils/boundaryElement/BoundaryElementContext.ts +0 -7
  376. package/src/utils/boundaryElement/BoundaryElementProvider.tsx +0 -16
  377. package/src/utils/boundaryElement/__workshop__/Plain.tsx +0 -49
  378. package/src/utils/boundaryElement/__workshop__/index.ts +0 -16
  379. package/src/utils/boundaryElement/types.ts +0 -2
  380. package/src/utils/boundaryElement/useBoundaryElement.ts +0 -12
  381. package/src/utils/elementQuery/ElementQuery.tsx +0 -75
  382. package/src/utils/elementQuery/__workshop__/CustomMedia.tsx +0 -19
  383. package/src/utils/elementQuery/__workshop__/index.ts +0 -16
  384. package/src/utils/elementQuery/__workshop__/styles.css.ts +0 -31
  385. package/src/utils/elementQuery/helpers.ts +0 -27
  386. package/src/utils/portal/Portal.test.tsx +0 -105
  387. package/src/utils/portal/Portal.tsx +0 -42
  388. package/src/utils/portal/PortalContext.ts +0 -37
  389. package/src/utils/portal/PortalProvider.tsx +0 -38
  390. package/src/utils/portal/__workshop__/Named.tsx +0 -69
  391. package/src/utils/portal/__workshop__/index.ts +0 -16
  392. package/src/utils/portal/types.ts +0 -7
  393. package/src/utils/portal/usePortal.ts +0 -30
@@ -1,37 +0,0 @@
1
- import type {CardTone, ColorScheme} from '@sanity/ui-tokens'
2
- import type {ReactNode} from 'react'
3
-
4
- import {ToastProvider} from '../components/toast/ToastProvider'
5
- import {CardInternalProvider} from '../primitives/card/CardInternalProvider'
6
- import {CardProvider} from '../primitives/card/CardProvider'
7
- import {LayerProvider} from '../primitives/layer/LayerProvider'
8
- import {BoundaryElementProvider} from '../utils/boundaryElement/BoundaryElementProvider'
9
- import {PortalProvider} from '../utils/portal/PortalProvider'
10
-
11
- /** @public */
12
- export interface RootProviderProps {
13
- boundaryElement: HTMLElement | null
14
- children?: ReactNode
15
- portalElement: HTMLElement | null
16
- scheme: ColorScheme
17
- tone: CardTone
18
- }
19
-
20
- /** @public */
21
- export function RootProvider(props: RootProviderProps): React.JSX.Element {
22
- const {boundaryElement, children, portalElement, scheme, tone} = props
23
-
24
- return (
25
- <LayerProvider>
26
- <CardInternalProvider root>
27
- <CardProvider scheme={scheme} tone={tone}>
28
- <ToastProvider>
29
- <BoundaryElementProvider element={boundaryElement}>
30
- <PortalProvider element={portalElement}>{children}</PortalProvider>
31
- </BoundaryElementProvider>
32
- </ToastProvider>
33
- </CardProvider>
34
- </CardInternalProvider>
35
- </LayerProvider>
36
- )
37
- }
@@ -1,43 +0,0 @@
1
- import {Button, Root, Stack, Text, useCard, useToast} from '@sanity/ui'
2
-
3
- import {CardWrapper} from '$workshop'
4
-
5
- export default function BoundaryStory(): React.JSX.Element {
6
- const {scheme} = useCard()
7
-
8
- return (
9
- <CardWrapper pattern="halftone">
10
- <Root
11
- as="div"
12
- padding={4}
13
- radius={5}
14
- scheme={scheme}
15
- shadow={3}
16
- sizing="border"
17
- style={{minHeight: 300}}
18
- >
19
- <Layout />
20
- </Root>
21
- </CardWrapper>
22
- )
23
- }
24
-
25
- function Layout() {
26
- const toast = useToast()
27
-
28
- return (
29
- <Stack gap={4}>
30
- <Text size={1}>
31
- Testing the root component. Toast messages will be rendered here, and should be contained
32
- within the root element.
33
- </Text>
34
-
35
- <Button
36
- mode="ghost"
37
- text="Push toast message"
38
- width="min"
39
- onClick={() => toast.push({title: 'Hello!'})}
40
- />
41
- </Stack>
42
- )
43
- }
@@ -1,24 +0,0 @@
1
- import {defineScope} from '@sanity/ui-workshop'
2
- import {lazy} from 'react'
3
-
4
- export default defineScope({
5
- name: 'root',
6
- title: 'Root',
7
- stories: [
8
- {
9
- name: 'boundary',
10
- title: 'Boundary',
11
- component: lazy(() => import('./Boundary')),
12
- },
13
- {
14
- name: 'primitives',
15
- title: 'Primitives',
16
- component: lazy(() => import('./primitives')),
17
- },
18
- {
19
- name: 'tone-inheritance',
20
- title: 'Tone inheritance',
21
- component: lazy(() => import('./tone-inheritance')),
22
- },
23
- ],
24
- })
@@ -1,49 +0,0 @@
1
- import {SearchIcon} from '@sanity/icons'
2
- import {Badge, Card, Checkbox, Radio, Select, Switch, TextInput} from '@sanity/ui'
3
- import {useBoolean} from '@sanity/ui-workshop'
4
-
5
- import {CardWrapper} from '$workshop'
6
-
7
- export default function PrimitivesStory() {
8
- const disabled = useBoolean('Disabled', false)
9
-
10
- return (
11
- <CardWrapper pattern="halftone">
12
- <Card
13
- display="flex"
14
- flexDirection="column"
15
- gap={4}
16
- padding={4}
17
- radius={5}
18
- shadow={3}
19
- sizing="border"
20
- >
21
- <Badge>Badge</Badge>
22
- <TextInput
23
- disabled={disabled}
24
- fontSize={1}
25
- icon={SearchIcon}
26
- placeholder="Search"
27
- radius="full"
28
- />
29
- <div>
30
- <Checkbox disabled={disabled} />
31
- </div>
32
- <div>
33
- <Radio disabled={disabled} />
34
- </div>
35
- <div>
36
- <Switch disabled={disabled} />
37
- </div>
38
- <Select disabled={disabled} fontSize={1}>
39
- <option disabled selected>
40
- Choose an option
41
- </option>
42
- <option value="1">1</option>
43
- <option value="2">2</option>
44
- <option value="3">3</option>
45
- </Select>
46
- </Card>
47
- </CardWrapper>
48
- )
49
- }
@@ -1,65 +0,0 @@
1
- import {Box, Card, Code, Portal, PortalProvider, Root, Text, usePrefersDark} from '@sanity/ui'
2
- import {useState} from 'react'
3
-
4
- import {CardWrapper} from '$workshop'
5
-
6
- export default function ToneInheritanceStory() {
7
- const dark = usePrefersDark()
8
- const [cardPortal, setCardPortal] = useState<HTMLDivElement | null>(null)
9
-
10
- return (
11
- <CardWrapper pattern="halftone" tone="transparent">
12
- <Root as="div" radius={4} scheme={dark ? 'dark' : 'light'} shadow={4}>
13
- <Box padding={4}>
14
- <Code language="jsx" size={1}>{`<Root
15
- scheme=${JSON.stringify(dark ? 'dark' : 'light')}
16
- tone="transparent"
17
- />`}</Code>
18
-
19
- <PortalProvider element={cardPortal}>
20
- <Card
21
- marginTop={4}
22
- radius={4}
23
- scheme={dark ? 'light' : 'dark'}
24
- shadow={1}
25
- tone="suggest"
26
- >
27
- <Box padding={4}>
28
- <Code language="jsx" size={1}>{`<Card
29
- scheme=${JSON.stringify(dark ? 'light' : 'dark')}
30
- tone="suggest"
31
- />`}</Code>
32
- </Box>
33
- <Portal>
34
- <Card
35
- padding={4}
36
- radius={4}
37
- shadow={1}
38
- // tone="critical"
39
- >
40
- <Text muted size={1}>
41
- Card in portal (card)
42
- </Text>
43
- </Card>
44
- </Portal>
45
- <div ref={setCardPortal} />
46
- </Card>
47
- </PortalProvider>
48
- </Box>
49
-
50
- <Portal>
51
- <Card
52
- padding={4}
53
- radius={4}
54
- shadow={1}
55
- // tone="critical"
56
- >
57
- <Text muted size={1}>
58
- Card in portal (root)
59
- </Text>
60
- </Card>
61
- </Portal>
62
- </Root>
63
- </CardWrapper>
64
- )
65
- }
@@ -1,50 +0,0 @@
1
- import {Component, type ErrorInfo, type PropsWithChildren, type ReactNode} from 'react'
2
-
3
- import {Code} from '../primitives/code/Code'
4
-
5
- /**
6
- * DO NOT USE IN PRODUCTION
7
- * @beta
8
- */
9
- export type ErrorBoundaryProps = PropsWithChildren<{
10
- onCatch: (params: {error: Error; info: ErrorInfo}) => void
11
- }>
12
-
13
- /**
14
- * DO NOT USE IN PRODUCTION
15
- * @beta
16
- */
17
- export interface ErrorBoundaryState {
18
- error: Error | null
19
- }
20
-
21
- /**
22
- * DO NOT USE IN PRODUCTION
23
- * @beta
24
- */
25
- export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
26
- override state: ErrorBoundaryState = {error: null}
27
-
28
- static displayName = 'ErrorBoundary'
29
-
30
- static getDerivedStateFromError(error: Error): ErrorBoundaryState {
31
- // Update state so the next render will show the fallback UI.
32
- return {error}
33
- }
34
-
35
- override componentDidCatch(error: Error, info: ErrorInfo): void {
36
- this.props.onCatch({error, info})
37
- }
38
-
39
- override render(): ReactNode {
40
- const {error} = this.state
41
-
42
- if (error) {
43
- const message = typeof error?.message === 'string' ? error.message : 'Error'
44
-
45
- return <Code>{message}</Code>
46
- }
47
-
48
- return this.props.children
49
- }
50
- }
@@ -1,7 +0,0 @@
1
- import type {Context} from 'react'
2
-
3
- import {createGlobalScopedContext} from '../../core/lib/createGlobalScopedContext'
4
- import type {BoundaryElementContextValue} from './types'
5
-
6
- export const BoundaryElementContext: Context<BoundaryElementContextValue> =
7
- createGlobalScopedContext<BoundaryElementContextValue>('@sanity/ui/v4/boundaryElement', null)
@@ -1,16 +0,0 @@
1
- import {type ReactNode} from 'react'
2
-
3
- import {BoundaryElementContext} from './BoundaryElementContext'
4
-
5
- /** @public */
6
- export interface BoundaryElementProviderProps {
7
- children: ReactNode
8
- element: HTMLElement | null
9
- }
10
-
11
- /** @public */
12
- export function BoundaryElementProvider(props: BoundaryElementProviderProps): React.JSX.Element {
13
- const {children, element} = props
14
-
15
- return <BoundaryElementContext value={element}>{children}</BoundaryElementContext>
16
- }
@@ -1,49 +0,0 @@
1
- import {BoundaryElementProvider, Button, Card, Text, TooltipDelayGroupProvider} from '@sanity/ui'
2
- import {useState} from 'react'
3
-
4
- import {CardWrapper} from '$workshop'
5
-
6
- export default function PlainStory(): React.JSX.Element {
7
- const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
8
-
9
- return (
10
- <CardWrapper pattern="halftone" tone="transparent" width={0}>
11
- <Text marginBottom={4} muted size={1}>
12
- Hover the button. The tooltip should render within the bounds of the box, despite of{' '}
13
- <code>placement="bottom"</code>.
14
- </Text>
15
-
16
- <TooltipDelayGroupProvider>
17
- <Card
18
- ref={setBoundaryElement}
19
- display="flex"
20
- justifyContent="space-between"
21
- padding={3}
22
- radius={5}
23
- shadow={1}
24
- tone="default"
25
- >
26
- <BoundaryElementProvider element={boundaryElement}>
27
- <Button
28
- mode="ghost"
29
- text="Button"
30
- tooltip={{
31
- placement: 'bottom',
32
- text: 'Tooltip',
33
- }}
34
- />
35
-
36
- <Button
37
- mode="ghost"
38
- text="Button"
39
- tooltip={{
40
- placement: 'bottom',
41
- text: 'Tooltip',
42
- }}
43
- />
44
- </BoundaryElementProvider>
45
- </Card>
46
- </TooltipDelayGroupProvider>
47
- </CardWrapper>
48
- )
49
- }
@@ -1,16 +0,0 @@
1
- import type {WorkshopScope} from '@sanity/ui-workshop'
2
- import {lazy} from 'react'
3
-
4
- const scope: WorkshopScope = {
5
- name: 'utils/boundaryElement',
6
- title: 'BoundaryElement',
7
- stories: [
8
- {
9
- name: 'plain',
10
- title: 'Plain',
11
- component: lazy(() => import('./Plain')),
12
- },
13
- ],
14
- }
15
-
16
- export default scope
@@ -1,2 +0,0 @@
1
- /** @public */
2
- export type BoundaryElementContextValue = HTMLElement | null
@@ -1,12 +0,0 @@
1
- import {use, useMemo} from 'react'
2
-
3
- import {BoundaryElementContext} from './BoundaryElementContext'
4
- import type {BoundaryElementContextValue} from './types'
5
-
6
- /** @public */
7
- export function useBoundaryElement(): {version: 0.0; element: BoundaryElementContextValue} {
8
- // eslint-disable-next-line no-warning-comments
9
- // @TODO this wrapping is for BC and should be removed
10
- const element = use(BoundaryElementContext)
11
- return useMemo(() => ({version: 0.0, element}), [element])
12
- }
@@ -1,75 +0,0 @@
1
- import {BREAKPOINTS} from '@sanity/ui-css'
2
- import {useImperativeHandle, useMemo, useState} from 'react'
3
-
4
- import type {ComponentType, Props} from '../../core/types'
5
- import {useElementSize} from '../../hooks/useElementSize'
6
- import {findMaxBreakpoints, findMinBreakpoints} from './helpers'
7
-
8
- /** @beta */
9
- export const DEFAULT_ELEMENT_QUERY_ELEMENT = 'div'
10
-
11
- /**
12
- * DO NOT USE IN PRODUCTION.
13
- * @beta
14
- */
15
- export type ElementQueryOwnProps = {
16
- media?: number[]
17
- }
18
-
19
- /** @beta */
20
- export type ElementQueryElementType = 'div' | ComponentType
21
-
22
- /**
23
- * DO NOT USE IN PRODUCTION.
24
- * @beta
25
- */
26
- export type ElementQueryProps<E extends ElementQueryElementType = ElementQueryElementType> = Props<
27
- ElementQueryOwnProps,
28
- E
29
- >
30
-
31
- const DEFAULT_BREAKPOINTS = Object.values(BREAKPOINTS)
32
-
33
- /**
34
- * DO NOT USE IN PRODUCTION.
35
- * @beta
36
- */
37
- export function ElementQuery<
38
- E extends ElementQueryElementType = typeof DEFAULT_ELEMENT_QUERY_ELEMENT,
39
- >(props: ElementQueryProps<E>): React.JSX.Element {
40
- const {
41
- as: Element = DEFAULT_ELEMENT_QUERY_ELEMENT,
42
- children,
43
- media: mediaProp,
44
- ref: forwardedRef,
45
- ...rest
46
- } = props as ElementQueryProps<typeof DEFAULT_ELEMENT_QUERY_ELEMENT>
47
-
48
- const breakpoints = mediaProp ?? DEFAULT_BREAKPOINTS
49
-
50
- const [element, setElement] = useState<HTMLDivElement | null>(null)
51
- const elementSize = useElementSize(element)
52
- const width = useMemo(() => elementSize?.border.width ?? window.innerWidth, [elementSize])
53
-
54
- const max = useMemo(() => {
55
- const eq = findMaxBreakpoints(breakpoints, width)
56
-
57
- return eq.length ? eq.join(' ') : undefined
58
- }, [breakpoints, width])
59
-
60
- const min = useMemo(() => {
61
- const eq = findMinBreakpoints(breakpoints, width)
62
-
63
- return eq.length ? eq.join(' ') : undefined
64
- }, [breakpoints, width])
65
-
66
- useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => element, [
67
- element,
68
- ])
69
-
70
- return (
71
- <Element data-ui="ElementQuery" {...rest} ref={setElement} data-eq-max={max} data-eq-min={min}>
72
- {children}
73
- </Element>
74
- )
75
- }
@@ -1,19 +0,0 @@
1
- import {Box, Card, ElementQuery, Text} from '@sanity/ui'
2
-
3
- import {testCard} from './styles.css'
4
-
5
- export default function CustomMediaQuery(): React.JSX.Element {
6
- return (
7
- <Box padding={4}>
8
- <Box marginBottom={4}>
9
- <Text>Resize this frame to see the text color change:</Text>
10
- </Box>
11
-
12
- <ElementQuery media={[0, 100, 200, 300]}>
13
- <Card className={testCard} padding={3} shadow={1}>
14
- <Text>This card sits inside an element query.</Text>
15
- </Card>
16
- </ElementQuery>
17
- </Box>
18
- )
19
- }
@@ -1,16 +0,0 @@
1
- import type {WorkshopScope} from '@sanity/ui-workshop'
2
- import {lazy} from 'react'
3
-
4
- const scope: WorkshopScope = {
5
- name: 'utils/elementQuery',
6
- title: 'ElementQuery',
7
- stories: [
8
- {
9
- name: 'custom-media',
10
- title: 'Custom media',
11
- component: lazy(() => import('./CustomMedia')),
12
- },
13
- ],
14
- }
15
-
16
- export default scope
@@ -1,31 +0,0 @@
1
- import {vars} from '@sanity/ui'
2
- import {style} from '@vanilla-extract/css'
3
-
4
- export const testCard: string = style({
5
- selectors: {
6
- '[data-eq-min~="0"] > &': {
7
- vars: {
8
- [vars.color.fg]:
9
- `light-dark(${vars.color.palette.orange[600]}, ${vars.color.palette.orange[400]})`,
10
- },
11
- },
12
- '[data-eq-min~="1"] > &': {
13
- vars: {
14
- [vars.color.fg]:
15
- `light-dark(${vars.color.palette.red[600]}, ${vars.color.palette.red[400]})`,
16
- },
17
- },
18
- '[data-eq-min~="2"] > &': {
19
- vars: {
20
- [vars.color.fg]:
21
- `light-dark(${vars.color.palette.magenta[600]}, ${vars.color.palette.magenta[400]})`,
22
- },
23
- },
24
- '[data-eq-min~="3"] > &': {
25
- vars: {
26
- [vars.color.fg]:
27
- `light-dark(${vars.color.palette.purple[600]}, ${vars.color.palette.purple[400]})`,
28
- },
29
- },
30
- },
31
- })
@@ -1,27 +0,0 @@
1
- export function findMaxBreakpoints(media: number[], width: number): number[] {
2
- const ret: number[] = []
3
-
4
- for (let i = 0; i < media.length; i += 1) {
5
- const bp = media[i]
6
-
7
- if (bp > width) {
8
- ret.push(i)
9
- }
10
- }
11
-
12
- return ret
13
- }
14
-
15
- export function findMinBreakpoints(media: number[], width: number): number[] {
16
- const ret: number[] = []
17
-
18
- for (let i = 0; i < media.length; i += 1) {
19
- const bp = media[i]
20
-
21
- if (bp <= width) {
22
- ret.push(i)
23
- }
24
- }
25
-
26
- return ret
27
- }
@@ -1,105 +0,0 @@
1
- import {describe, expect, it, vi} from 'vitest'
2
-
3
- import {render} from '$test/utils'
4
-
5
- import {PortalContext} from './PortalContext'
6
- import type {PortalContextValue} from './types'
7
- import {usePortal} from './usePortal'
8
-
9
- describe('utils/portal', () => {
10
- describe('usePortal', () => {
11
- it('should get context value', async () => {
12
- const log = vi.fn()
13
-
14
- function Debug() {
15
- const rootPortal = usePortal()
16
-
17
- log(rootPortal)
18
-
19
- return <>debug</>
20
- }
21
-
22
- function Root() {
23
- const value: PortalContextValue = {
24
- version: 0.0,
25
- boundaryElement: null,
26
- element: null,
27
- }
28
-
29
- return (
30
- <PortalContext value={value}>
31
- <Debug />
32
- </PortalContext>
33
- )
34
- }
35
-
36
- render(<Root />)
37
-
38
- expect(log.mock.calls[0][0].version).toBe(0.0)
39
- expect(log.mock.calls[0][0].boundaryElement).toBe(null)
40
- expect(log.mock.calls[0][0].element).toBe(null)
41
- })
42
-
43
- it('should fail when no context value is provided', async () => {
44
- const log = vi.fn()
45
-
46
- function Debug() {
47
- try {
48
- usePortal()
49
- } catch (err) {
50
- log(err)
51
- }
52
-
53
- return null
54
- }
55
-
56
- function Root() {
57
- return (
58
- <PortalContext
59
- // @ts-expect-error - we want to test the error case
60
- value={undefined}
61
- >
62
- <Debug />
63
- </PortalContext>
64
- )
65
- }
66
-
67
- render(<Root />)
68
-
69
- expect(log.mock.calls[0][0].message).toEqual('usePortal(): missing context value')
70
- })
71
-
72
- it('should fail when context value is not compatible', async () => {
73
- const log = vi.fn()
74
-
75
- function Debug() {
76
- try {
77
- usePortal()
78
- } catch (err) {
79
- log(err)
80
- }
81
-
82
- return null
83
- }
84
-
85
- function Root() {
86
- // NOTE: we’re testing this because the context value may be a function in the future
87
-
88
- return (
89
- <PortalContext
90
- // @ts-expect-error - we want to test the error case
91
- value={() => ({version: 1})}
92
- >
93
- <Debug />
94
- </PortalContext>
95
- )
96
- }
97
-
98
- render(<Root />)
99
-
100
- expect(log.mock.calls[0][0].message).toEqual(
101
- 'usePortal(): the context value is not compatible',
102
- )
103
- })
104
- })
105
- })