@sanity/ui 4.0.0-static.9 → 5.0.0-alpha.1

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 (808) hide show
  1. package/README.md +201 -17
  2. package/bin/sanity-ui.js +14 -0
  3. package/dist/_chunks-es/LazyRefractor.js +20 -0
  4. package/dist/_chunks-es/LazyRefractor.js.map +1 -0
  5. package/dist/cli/checks.js +148 -0
  6. package/dist/cli/config.js +23 -0
  7. package/dist/cli/detect.js +181 -0
  8. package/dist/cli/doctor.js +49 -0
  9. package/dist/cli/index.js +69 -0
  10. package/dist/cli/init.js +189 -0
  11. package/dist/cli/install.js +78 -0
  12. package/dist/cli/log.js +66 -0
  13. package/dist/cli/selfPackage.js +11 -0
  14. package/dist/cli/styles.js +185 -0
  15. package/dist/cli/test-utils.js +8 -0
  16. package/dist/cli/tsconfig.js +236 -0
  17. package/dist/cli/types.js +1 -0
  18. package/dist/cli/versions.js +45 -0
  19. package/dist/index.d.ts +744 -2272
  20. package/dist/index.js +1743 -4395
  21. package/dist/index.js.map +1 -1
  22. package/dist/styles.css +1 -0
  23. package/package.json +66 -206
  24. package/src/cli/checks.test.ts +38 -0
  25. package/src/cli/checks.ts +200 -0
  26. package/src/cli/config.ts +44 -0
  27. package/src/cli/detect.test.ts +191 -0
  28. package/src/cli/detect.ts +205 -0
  29. package/src/cli/doctor.test.ts +52 -0
  30. package/src/cli/doctor.ts +65 -0
  31. package/src/cli/index.ts +77 -0
  32. package/src/cli/init.ts +225 -0
  33. package/src/cli/install.test.ts +52 -0
  34. package/src/cli/install.ts +107 -0
  35. package/src/cli/log.ts +79 -0
  36. package/src/cli/selfPackage.ts +14 -0
  37. package/src/cli/styles.test.ts +130 -0
  38. package/src/cli/styles.ts +205 -0
  39. package/src/cli/test-utils.ts +10 -0
  40. package/src/cli/tsconfig.test.ts +174 -0
  41. package/src/cli/tsconfig.ts +282 -0
  42. package/src/cli/types.ts +77 -0
  43. package/src/cli/versions.test.ts +35 -0
  44. package/src/cli/versions.ts +41 -0
  45. package/src/components/box/Box.tsx +25 -0
  46. package/src/components/box/box.css +4 -0
  47. package/src/components/box/box.props.ts +24 -0
  48. package/src/components/button/Button.tsx +78 -0
  49. package/src/components/button/button.css +72 -0
  50. package/src/components/button/button.props.ts +104 -0
  51. package/src/components/card/Card.tsx +31 -0
  52. package/src/components/card/card.css +4 -0
  53. package/src/components/card/card.props.ts +54 -0
  54. package/src/components/checkbox/Checkbox.tsx +63 -0
  55. package/src/components/checkbox/checkbox.css +100 -0
  56. package/src/components/checkbox/checkbox.props.ts +25 -0
  57. package/src/components/code/Code.tsx +38 -0
  58. package/src/components/code/LazyRefractor.tsx +9 -0
  59. package/src/components/code/code.css +40 -0
  60. package/src/components/code/code.props.ts +37 -0
  61. package/src/components/container/Container.tsx +30 -0
  62. package/src/components/container/container.css +4 -0
  63. package/src/components/container/container.props.ts +24 -0
  64. package/src/components/divider/Divider.tsx +23 -0
  65. package/src/components/divider/divider.props.ts +9 -0
  66. package/src/components/eyebrow/Eyebrow.tsx +54 -0
  67. package/src/components/eyebrow/eyebrow.css +11 -0
  68. package/src/components/eyebrow/eyebrow.props.ts +24 -0
  69. package/src/components/flex/Flex.tsx +25 -0
  70. package/src/components/flex/flex.css +4 -0
  71. package/src/components/flex/flex.props.ts +29 -0
  72. package/src/components/grid/Grid.tsx +25 -0
  73. package/src/components/grid/grid.css +4 -0
  74. package/src/components/grid/grid.props.ts +29 -0
  75. package/src/components/h-stack/HStack.tsx +34 -0
  76. package/src/components/h-stack/hStack.props.ts +15 -0
  77. package/src/components/heading/Heading.tsx +54 -0
  78. package/src/components/heading/heading.css +9 -0
  79. package/src/components/heading/heading.props.ts +25 -0
  80. package/src/components/icon/Icon.tsx +24 -0
  81. package/src/components/icon/icon.css +17 -0
  82. package/src/components/icon/icon.props.ts +31 -0
  83. package/src/components/icon-button/IconButton.tsx +32 -0
  84. package/src/components/icon-button/iconButton.props.ts +26 -0
  85. package/src/components/index.css +25 -0
  86. package/src/components/indicator/Indicator.tsx +42 -0
  87. package/src/components/indicator/indicator.css +4 -0
  88. package/src/components/indicator/indicator.props.ts +20 -0
  89. package/src/components/indicator-stack/IndicatorStack.tsx +31 -0
  90. package/src/components/indicator-stack/indicator-stack.css +7 -0
  91. package/src/components/indicator-stack/indicatorStack.props.ts +13 -0
  92. package/src/components/inline/Inline.tsx +38 -0
  93. package/src/components/inline/inline.css +4 -0
  94. package/src/components/inline/inline.props.ts +96 -0
  95. package/src/components/label/Label.tsx +34 -0
  96. package/src/components/label/label.css +3 -0
  97. package/src/components/label/label.props.ts +19 -0
  98. package/src/components/link/Link.tsx +29 -0
  99. package/src/components/link/link.css +12 -0
  100. package/src/components/link/link.props.ts +23 -0
  101. package/src/components/list/List.tsx +167 -0
  102. package/src/components/list/list.css +25 -0
  103. package/src/components/list/list.props.ts +112 -0
  104. package/src/components/press-area/PressArea.tsx +29 -0
  105. package/src/components/press-area/press-area.css +22 -0
  106. package/src/components/press-area/pressArea.props.ts +14 -0
  107. package/src/components/radio/Radio.tsx +48 -0
  108. package/src/components/radio/radio.css +97 -0
  109. package/src/components/radio/radio.props.ts +20 -0
  110. package/src/components/skip-to-content/SkipToContent.tsx +35 -0
  111. package/src/components/skip-to-content/skip-to-content.css +9 -0
  112. package/src/components/skip-to-content/skipToContent.props.ts +19 -0
  113. package/src/components/spinner/Spinner.tsx +28 -0
  114. package/src/components/spinner/spinner.css +10 -0
  115. package/src/components/spinner/spinner.props.ts +16 -0
  116. package/src/components/switch/Switch.tsx +48 -0
  117. package/src/components/switch/switch.css +119 -0
  118. package/src/components/switch/switch.props.ts +20 -0
  119. package/src/components/text/Text.tsx +53 -0
  120. package/src/components/text/text.css +9 -0
  121. package/src/components/text/text.props.ts +24 -0
  122. package/src/components/tooltip/Tooltip.tsx +93 -0
  123. package/src/components/tooltip/tooltip.css +52 -0
  124. package/src/components/tooltip/tooltip.props.ts +20 -0
  125. package/src/components/tooltip-group/TooltipGroup.tsx +67 -0
  126. package/src/components/tooltip-group/tooltipGroup.props.ts +13 -0
  127. package/src/components/v-stack/VStack.tsx +32 -0
  128. package/src/components/v-stack/vStack.props.ts +15 -0
  129. package/src/components/visually-hidden/VisuallyHidden.tsx +29 -0
  130. package/src/components/visually-hidden/visually-hidden.css +9 -0
  131. package/src/components/visually-hidden/visuallyHidden.props.ts +19 -0
  132. package/src/css/classes/dynamic/flex-child.css +5 -0
  133. package/src/css/classes/dynamic/grid-child.css +8 -0
  134. package/src/css/classes/dynamic/grid-parent.css +6 -0
  135. package/src/css/classes/dynamic/height.css +5 -0
  136. package/src/css/classes/dynamic/index.css +7 -0
  137. package/src/css/classes/dynamic/line-clamp.css +5 -0
  138. package/src/css/classes/dynamic/readme.md +3 -0
  139. package/src/css/classes/dynamic/width.css +7 -0
  140. package/src/css/classes/dynamic/z-index.css +3 -0
  141. package/src/css/classes/generic/display.css +10 -0
  142. package/src/css/classes/generic/flex.css +24 -0
  143. package/src/css/classes/generic/grid.css +7 -0
  144. package/src/css/classes/generic/index.css +7 -0
  145. package/src/css/classes/generic/overflow.css +19 -0
  146. package/src/css/classes/generic/placement.css +171 -0
  147. package/src/css/classes/generic/position.css +7 -0
  148. package/src/css/classes/generic/readme.md +3 -0
  149. package/src/css/classes/generic/text-align.css +5 -0
  150. package/src/css/classes/index.css +4 -0
  151. package/src/css/classes/local/border.css +20 -0
  152. package/src/css/classes/local/index.css +4 -0
  153. package/src/css/classes/local/readme.md +3 -0
  154. package/src/css/classes/local/text-overflow.css +5 -0
  155. package/src/css/classes/local/text-trim.css +45 -0
  156. package/src/css/classes/local/tone.css +75 -0
  157. package/src/css/classes/system/color.css +223 -0
  158. package/src/css/classes/system/container.css +8 -0
  159. package/src/css/classes/system/font-family.css +2 -0
  160. package/src/css/classes/system/font-weight.css +4 -0
  161. package/src/css/classes/system/gap.css +37 -0
  162. package/src/css/classes/system/index.css +10 -0
  163. package/src/css/classes/system/inset.css +56 -0
  164. package/src/css/classes/system/margin.css +148 -0
  165. package/src/css/classes/system/padding.css +78 -0
  166. package/src/css/classes/system/radius.css +10 -0
  167. package/src/css/classes/system/readme.md +3 -0
  168. package/src/css/classes/system/shadow.css +6 -0
  169. package/src/css/classes/system/typography.css +31 -0
  170. package/src/css/global/font-face.css +20 -0
  171. package/src/css/global/index.css +2 -0
  172. package/src/css/global/reset.css +74 -0
  173. package/src/css/tokens/index.css +3 -0
  174. package/src/css/tokens/opacity.css +6 -0
  175. package/src/css/tokens/semantic.css +21 -0
  176. package/src/css/tokens/surface.css +27 -0
  177. package/src/index.css +18 -0
  178. package/src/index.ts +60 -0
  179. package/src/props/border.ts +51 -0
  180. package/src/props/flexChild.ts +29 -0
  181. package/src/props/flexParent.ts +47 -0
  182. package/src/props/gap.ts +31 -0
  183. package/src/props/gridChild.ts +50 -0
  184. package/src/props/gridParent.ts +45 -0
  185. package/src/props/height.ts +29 -0
  186. package/src/props/layout.ts +44 -0
  187. package/src/props/margin.ts +59 -0
  188. package/src/props/overflow.ts +30 -0
  189. package/src/props/padding.ts +59 -0
  190. package/src/props/placement.ts +16 -0
  191. package/src/props/position.ts +52 -0
  192. package/src/props/shadow.ts +15 -0
  193. package/src/props/tone.ts +15 -0
  194. package/src/props/typography.ts +62 -0
  195. package/src/props/width.ts +29 -0
  196. package/src/props/zIndex.ts +15 -0
  197. package/src/styles.css.d.ts +1 -0
  198. package/src/styles.css.node.js +2 -0
  199. package/src/styles.css.test.ts +24 -0
  200. package/src/types/Button.ts +8 -0
  201. package/src/types/Code.ts +6 -0
  202. package/src/types/Container.ts +3 -0
  203. package/src/types/Density.ts +3 -0
  204. package/src/types/Display.ts +11 -0
  205. package/src/types/Eyebrow.ts +3 -0
  206. package/src/types/Flex.ts +22 -0
  207. package/src/types/FontWeight.ts +3 -0
  208. package/src/types/Grid.ts +3 -0
  209. package/src/types/Heading.ts +6 -0
  210. package/src/types/Icon.ts +3 -0
  211. package/src/types/Interactive.ts +8 -0
  212. package/src/types/List.ts +2 -0
  213. package/src/types/Overflow.ts +3 -0
  214. package/src/types/Placement.ts +16 -0
  215. package/src/types/Position.ts +3 -0
  216. package/src/types/PropDef.ts +73 -0
  217. package/src/types/Radius.ts +3 -0
  218. package/src/types/Responsive.ts +10 -0
  219. package/src/types/Shadow.ts +3 -0
  220. package/src/types/Space.ts +15 -0
  221. package/src/types/Text.ts +3 -0
  222. package/src/types/TextAlign.ts +3 -0
  223. package/src/types/Tone.ts +3 -0
  224. package/src/utils/getProps.test.ts +156 -0
  225. package/src/utils/getProps.ts +156 -0
  226. package/src/utils/suffixClassName.ts +5 -0
  227. package/src/version.ts +3 -0
  228. package/LICENSE +0 -21
  229. package/dist/_chunks-cjs/refractor.cjs +0 -22
  230. package/dist/_chunks-cjs/refractor.cjs.map +0 -1
  231. package/dist/_chunks-es/refractor.js +0 -25
  232. package/dist/_chunks-es/refractor.js.map +0 -1
  233. package/dist/css/index.cjs +0 -966
  234. package/dist/css/index.cjs.map +0 -1
  235. package/dist/css/index.css +0 -23387
  236. package/dist/css/index.css.map +0 -1
  237. package/dist/css/index.d.cts +0 -1394
  238. package/dist/css/index.d.ts +0 -1394
  239. package/dist/css/index.js +0 -967
  240. package/dist/css/index.js.map +0 -1
  241. package/dist/index.cjs +0 -4515
  242. package/dist/index.cjs.map +0 -1
  243. package/dist/index.d.cts +0 -2521
  244. package/dist/theme.cjs +0 -870
  245. package/dist/theme.cjs.map +0 -1
  246. package/dist/theme.d.cts +0 -499
  247. package/dist/theme.d.ts +0 -499
  248. package/dist/theme.js +0 -870
  249. package/dist/theme.js.map +0 -1
  250. package/exports/css.ts +0 -1
  251. package/exports/index.ts +0 -1
  252. package/exports/theme.ts +0 -1
  253. package/src/core/Root.tsx +0 -88
  254. package/src/core/RootProvider.tsx +0 -40
  255. package/src/core/__workshop__/boundary.tsx +0 -28
  256. package/src/core/__workshop__/index.ts +0 -16
  257. package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
  258. package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -131
  259. package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -91
  260. package/src/core/components/autocomplete/__workshop__/example.tsx +0 -80
  261. package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
  262. package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -292
  263. package/src/core/components/autocomplete/__workshop__/index.ts +0 -41
  264. package/src/core/components/autocomplete/__workshop__/mock/apiStore.ts +0 -49
  265. package/src/core/components/autocomplete/__workshop__/mock/countries.ts +0 -245
  266. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  267. package/src/core/components/autocomplete/autocomplete.tsx +0 -690
  268. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
  269. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  270. package/src/core/components/autocomplete/constants.ts +0 -28
  271. package/src/core/components/autocomplete/types.ts +0 -103
  272. package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -61
  273. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -16
  274. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -131
  275. package/src/core/components/dialog/__workshop__/activate.tsx +0 -141
  276. package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
  277. package/src/core/components/dialog/__workshop__/index.ts +0 -21
  278. package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
  279. package/src/core/components/dialog/__workshop__/nested.tsx +0 -71
  280. package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -51
  281. package/src/core/components/dialog/__workshop__/panes.tsx +0 -89
  282. package/src/core/components/dialog/__workshop__/position.tsx +0 -30
  283. package/src/core/components/dialog/__workshop__/props.tsx +0 -77
  284. package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
  285. package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
  286. package/src/core/components/dialog/dialog.tsx +0 -232
  287. package/src/core/components/dialog/dialogCard.tsx +0 -233
  288. package/src/core/components/dialog/dialogContext.ts +0 -21
  289. package/src/core/components/dialog/dialogProvider.tsx +0 -34
  290. package/src/core/components/dialog/isTargetWithinScope.ts +0 -14
  291. package/src/core/components/dialog/types.ts +0 -2
  292. package/src/core/components/dialog/useDialog.ts +0 -11
  293. package/src/core/components/hotkeys/__workshop__/index.ts +0 -16
  294. package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
  295. package/src/core/components/hotkeys/hotkeys.tsx +0 -60
  296. package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
  297. package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -57
  298. package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -47
  299. package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -133
  300. package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
  301. package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -35
  302. package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
  303. package/src/core/components/menu/__workshop__/groups.tsx +0 -156
  304. package/src/core/components/menu/__workshop__/index.ts +0 -91
  305. package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
  306. package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -65
  307. package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
  308. package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -50
  309. package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
  310. package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -42
  311. package/src/core/components/menu/__workshop__/tones.tsx +0 -25
  312. package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
  313. package/src/core/components/menu/helpers.ts +0 -82
  314. package/src/core/components/menu/menu.test.tsx +0 -129
  315. package/src/core/components/menu/menu.tsx +0 -179
  316. package/src/core/components/menu/menuButton.tsx +0 -225
  317. package/src/core/components/menu/menuContext.ts +0 -19
  318. package/src/core/components/menu/menuDivider.tsx +0 -32
  319. package/src/core/components/menu/menuGroup.tsx +0 -233
  320. package/src/core/components/menu/menuItem.tsx +0 -184
  321. package/src/core/components/menu/useMenu.ts +0 -21
  322. package/src/core/components/menu/useMenuController.ts +0 -241
  323. package/src/core/components/tab/__workshop__/example.tsx +0 -79
  324. package/src/core/components/tab/__workshop__/index.ts +0 -16
  325. package/src/core/components/tab/tab.tsx +0 -109
  326. package/src/core/components/tab/tabList.tsx +0 -90
  327. package/src/core/components/tab/tabPanel.tsx +0 -47
  328. package/src/core/components/toast/__workshop__/hook.tsx +0 -71
  329. package/src/core/components/toast/__workshop__/index.ts +0 -21
  330. package/src/core/components/toast/__workshop__/toast.tsx +0 -26
  331. package/src/core/components/toast/toast.test.tsx +0 -103
  332. package/src/core/components/toast/toast.tsx +0 -191
  333. package/src/core/components/toast/toastContext.ts +0 -7
  334. package/src/core/components/toast/toastLayer.tsx +0 -54
  335. package/src/core/components/toast/toastProvider.tsx +0 -112
  336. package/src/core/components/toast/toastState.ts +0 -6
  337. package/src/core/components/toast/types.ts +0 -24
  338. package/src/core/components/toast/useToast.ts +0 -23
  339. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  340. package/src/core/components/tree/__workshop__/basic.tsx +0 -105
  341. package/src/core/components/tree/__workshop__/index.ts +0 -23
  342. package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
  343. package/src/core/components/tree/helpers.ts +0 -105
  344. package/src/core/components/tree/tree.tsx +0 -248
  345. package/src/core/components/tree/treeContext.ts +0 -10
  346. package/src/core/components/tree/treeGroup.tsx +0 -46
  347. package/src/core/components/tree/treeItem.tsx +0 -237
  348. package/src/core/components/tree/types.ts +0 -24
  349. package/src/core/components/tree/useTree.ts +0 -17
  350. package/src/core/components/virtualList/__workshop__/changingProps.tsx +0 -36
  351. package/src/core/components/virtualList/__workshop__/elementScroll.tsx +0 -24
  352. package/src/core/components/virtualList/__workshop__/index.ts +0 -31
  353. package/src/core/components/virtualList/__workshop__/infiniteList.tsx +0 -48
  354. package/src/core/components/virtualList/__workshop__/windowScrolll.tsx +0 -22
  355. package/src/core/components/virtualList/virtualList.tsx +0 -209
  356. package/src/core/constants.ts +0 -67
  357. package/src/core/helpers/animation.ts +0 -27
  358. package/src/core/helpers/element.ts +0 -55
  359. package/src/core/helpers/focus.ts +0 -92
  360. package/src/core/helpers/props.ts +0 -28
  361. package/src/core/helpers/scroll.ts +0 -15
  362. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -114
  363. package/src/core/hooks/useClickOutsideEvent.ts +0 -67
  364. package/src/core/hooks/useCustomValidity.ts +0 -13
  365. package/src/core/hooks/useDelayed.test.ts +0 -67
  366. package/src/core/hooks/useDelayedState.ts +0 -28
  367. package/src/core/hooks/useElementSize.ts +0 -19
  368. package/src/core/hooks/useGlobalKeyDown.ts +0 -17
  369. package/src/core/hooks/useMatchMedia.ts +0 -28
  370. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -16
  371. package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
  372. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -21
  373. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -107
  374. package/src/core/hooks/useMounted.ts +0 -15
  375. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
  376. package/src/core/hooks/usePrefersDark.test.tsx +0 -20
  377. package/src/core/hooks/usePrefersDark.ts +0 -16
  378. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  379. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -20
  380. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  381. package/src/core/hooks/useResponsiveProp.ts +0 -28
  382. package/src/core/index.ts +0 -115
  383. package/src/core/lib/createGlobalScopedContext.ts +0 -37
  384. package/src/core/lib/globalScope.ts +0 -19
  385. package/src/core/lib/isArray.ts +0 -3
  386. package/src/core/lib/isRecord.ts +0 -3
  387. package/src/core/middleware/origin.ts +0 -47
  388. package/src/core/observers/elementSize.ts +0 -116
  389. package/src/core/observers/resize.ts +0 -9
  390. package/src/core/primitives/arrow/arrow.tsx +0 -74
  391. package/src/core/primitives/arrow/cmds.ts +0 -91
  392. package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
  393. package/src/core/primitives/avatar/__workshop__/index.ts +0 -31
  394. package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
  395. package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -55
  396. package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -72
  397. package/src/core/primitives/avatar/avatar.tsx +0 -147
  398. package/src/core/primitives/avatar/avatarCounter.tsx +0 -69
  399. package/src/core/primitives/avatar/avatarStack.tsx +0 -79
  400. package/src/core/primitives/avatar/types.ts +0 -2
  401. package/src/core/primitives/badge/__workshop__/index.ts +0 -21
  402. package/src/core/primitives/badge/__workshop__/props.tsx +0 -19
  403. package/src/core/primitives/badge/__workshop__/tones.tsx +0 -16
  404. package/src/core/primitives/badge/badge.test.tsx +0 -16
  405. package/src/core/primitives/badge/badge.tsx +0 -61
  406. package/src/core/primitives/box/__workshop__/index.ts +0 -21
  407. package/src/core/primitives/box/__workshop__/props.tsx +0 -20
  408. package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
  409. package/src/core/primitives/box/box.tsx +0 -222
  410. package/src/core/primitives/button/__workshop__/custom.tsx +0 -27
  411. package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
  412. package/src/core/primitives/button/__workshop__/disabled.tsx +0 -54
  413. package/src/core/primitives/button/__workshop__/index.ts +0 -66
  414. package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
  415. package/src/core/primitives/button/__workshop__/props.tsx +0 -55
  416. package/src/core/primitives/button/__workshop__/sanityUploadButton.tsx +0 -36
  417. package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
  418. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  419. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  420. package/src/core/primitives/button/__workshop__/textOverflow.tsx +0 -13
  421. package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -29
  422. package/src/core/primitives/button/button.test.tsx +0 -30
  423. package/src/core/primitives/button/button.tsx +0 -193
  424. package/src/core/primitives/button/types.ts +0 -2
  425. package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
  426. package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
  427. package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
  428. package/src/core/primitives/card/__workshop__/index.ts +0 -20
  429. package/src/core/primitives/card/__workshop__/interactive.tsx +0 -29
  430. package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -78
  431. package/src/core/primitives/card/__workshop__/props.tsx +0 -52
  432. package/src/core/primitives/card/__workshop__/selected.tsx +0 -62
  433. package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
  434. package/src/core/primitives/card/__workshop__/tones.tsx +0 -27
  435. package/src/core/primitives/card/card.tsx +0 -109
  436. package/src/core/primitives/card/cardContext.ts +0 -10
  437. package/src/core/primitives/card/cardProvider.tsx +0 -27
  438. package/src/core/primitives/card/types.ts +0 -17
  439. package/src/core/primitives/card/useCard.ts +0 -15
  440. package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
  441. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -15
  442. package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -35
  443. package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
  444. package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -27
  445. package/src/core/primitives/checkbox/checkbox.tsx +0 -80
  446. package/src/core/primitives/code/__workshop__/index.ts +0 -21
  447. package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -23
  448. package/src/core/primitives/code/__workshop__/props.tsx +0 -18
  449. package/src/core/primitives/code/code.tsx +0 -48
  450. package/src/core/primitives/code/refractor.tsx +0 -18
  451. package/src/core/primitives/container/__workshop__/example.tsx +0 -20
  452. package/src/core/primitives/container/__workshop__/index.ts +0 -10
  453. package/src/core/primitives/container/container.tsx +0 -37
  454. package/src/core/primitives/container/types.ts +0 -6
  455. package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
  456. package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
  457. package/src/core/primitives/flex/__workshop__/index.ts +0 -13
  458. package/src/core/primitives/flex/flex.tsx +0 -58
  459. package/src/core/primitives/grid/__workshop__/index.ts +0 -12
  460. package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
  461. package/src/core/primitives/grid/grid.tsx +0 -35
  462. package/src/core/primitives/heading/__workshop__/index.ts +0 -21
  463. package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
  464. package/src/core/primitives/heading/__workshop__/plain.tsx +0 -29
  465. package/src/core/primitives/heading/heading.tsx +0 -78
  466. package/src/core/primitives/inline/__workshop__/index.ts +0 -10
  467. package/src/core/primitives/inline/__workshop__/plain.tsx +0 -24
  468. package/src/core/primitives/inline/inline.tsx +0 -62
  469. package/src/core/primitives/kbd/__workshop__/index.ts +0 -10
  470. package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
  471. package/src/core/primitives/kbd/kbd.tsx +0 -57
  472. package/src/core/primitives/label/__workshop__/index.ts +0 -21
  473. package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -54
  474. package/src/core/primitives/label/__workshop__/plain.tsx +0 -28
  475. package/src/core/primitives/label/label.tsx +0 -75
  476. package/src/core/primitives/layer/__workshop__/_debug.tsx +0 -17
  477. package/src/core/primitives/layer/__workshop__/index.ts +0 -26
  478. package/src/core/primitives/layer/__workshop__/multipleRoots.tsx +0 -49
  479. package/src/core/primitives/layer/__workshop__/nested.tsx +0 -98
  480. package/src/core/primitives/layer/__workshop__/responsiveZOffset.tsx +0 -17
  481. package/src/core/primitives/layer/getLayerContext.test.ts +0 -32
  482. package/src/core/primitives/layer/getLayerContext.ts +0 -21
  483. package/src/core/primitives/layer/layer.test.tsx +0 -110
  484. package/src/core/primitives/layer/layer.tsx +0 -42
  485. package/src/core/primitives/layer/layerCard.tsx +0 -90
  486. package/src/core/primitives/layer/layerContext.ts +0 -7
  487. package/src/core/primitives/layer/layerProvider.tsx +0 -106
  488. package/src/core/primitives/layer/types.ts +0 -9
  489. package/src/core/primitives/layer/useLayer.ts +0 -24
  490. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
  491. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  492. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  493. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  494. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
  495. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -69
  496. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -96
  497. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -100
  498. package/src/core/primitives/popover/__workshop__/index.ts +0 -51
  499. package/src/core/primitives/popover/constants.ts +0 -22
  500. package/src/core/primitives/popover/floating-ui/size.ts +0 -83
  501. package/src/core/primitives/popover/helpers.ts +0 -32
  502. package/src/core/primitives/popover/popover.tsx +0 -443
  503. package/src/core/primitives/popover/popoverLayer.tsx +0 -149
  504. package/src/core/primitives/popover/types.ts +0 -12
  505. package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
  506. package/src/core/primitives/radio/__workshop__/index.ts +0 -13
  507. package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
  508. package/src/core/primitives/radio/radio.tsx +0 -64
  509. package/src/core/primitives/select/__workshop__/index.ts +0 -13
  510. package/src/core/primitives/select/__workshop__/plain.tsx +0 -39
  511. package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
  512. package/src/core/primitives/select/select.tsx +0 -75
  513. package/src/core/primitives/selectable/selectable.tsx +0 -50
  514. package/src/core/primitives/skeleton/__workshop__/delay.tsx +0 -70
  515. package/src/core/primitives/skeleton/__workshop__/index.ts +0 -13
  516. package/src/core/primitives/skeleton/__workshop__/skeleton.tsx +0 -64
  517. package/src/core/primitives/skeleton/codeSkeleton.tsx +0 -49
  518. package/src/core/primitives/skeleton/headingSkeleton.tsx +0 -48
  519. package/src/core/primitives/skeleton/labelSkeleton.tsx +0 -47
  520. package/src/core/primitives/skeleton/skeleton.tsx +0 -70
  521. package/src/core/primitives/skeleton/textSkeleton.tsx +0 -49
  522. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
  523. package/src/core/primitives/spinner/__workshop__/index.ts +0 -16
  524. package/src/core/primitives/spinner/animatedSpinnerIcon.tsx +0 -14
  525. package/src/core/primitives/spinner/spinner.tsx +0 -45
  526. package/src/core/primitives/srOnly/srOnly.tsx +0 -33
  527. package/src/core/primitives/stack/__workshop__/index.ts +0 -16
  528. package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
  529. package/src/core/primitives/stack/stack.tsx +0 -60
  530. package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
  531. package/src/core/primitives/switch/__workshop__/index.ts +0 -13
  532. package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
  533. package/src/core/primitives/switch/switch.tsx +0 -84
  534. package/src/core/primitives/text/__workshop__/colored.tsx +0 -23
  535. package/src/core/primitives/text/__workshop__/example.tsx +0 -28
  536. package/src/core/primitives/text/__workshop__/index.ts +0 -26
  537. package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -23
  538. package/src/core/primitives/text/text.tsx +0 -76
  539. package/src/core/primitives/textArea/__workshop__/index.ts +0 -16
  540. package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -61
  541. package/src/core/primitives/textArea/textArea.tsx +0 -84
  542. package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
  543. package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
  544. package/src/core/primitives/textInput/__workshop__/index.ts +0 -46
  545. package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -110
  546. package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
  547. package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
  548. package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
  549. package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
  550. package/src/core/primitives/textInput/textInput.tsx +0 -258
  551. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
  552. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -31
  553. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
  554. package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -112
  555. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
  556. package/src/core/primitives/tooltip/constants.ts +0 -23
  557. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
  558. package/src/core/primitives/tooltip/tooltip.tsx +0 -482
  559. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  560. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -13
  561. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -55
  562. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
  563. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  564. package/src/core/primitives/tooltip/tooltipLayer.tsx +0 -106
  565. package/src/core/types.ts +0 -56
  566. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -16
  567. package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
  568. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -102
  569. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -10
  570. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -18
  571. package/src/core/utils/boundaryElement/types.ts +0 -5
  572. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -24
  573. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -41
  574. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -16
  575. package/src/core/utils/elementQuery/elementQuery.tsx +0 -75
  576. package/src/core/utils/elementQuery/helpers.ts +0 -27
  577. package/src/core/utils/errorBoundary.tsx +0 -50
  578. package/src/core/utils/getElementRef.ts +0 -29
  579. package/src/core/utils/portal/__workshop__/index.ts +0 -16
  580. package/src/core/utils/portal/__workshop__/named.tsx +0 -63
  581. package/src/core/utils/portal/portal.test.tsx +0 -105
  582. package/src/core/utils/portal/portal.tsx +0 -36
  583. package/src/core/utils/portal/portalContext.ts +0 -37
  584. package/src/core/utils/portal/portalProvider.tsx +0 -70
  585. package/src/core/utils/portal/types.ts +0 -7
  586. package/src/core/utils/portal/usePortal.ts +0 -23
  587. package/src/css/_assign.ts +0 -3
  588. package/src/css/_composeClassNames.ts +0 -12
  589. package/src/css/_fromEntries.ts +0 -3
  590. package/src/css/_getClassNames.ts +0 -9
  591. package/src/css/_responsiveClassName.ts +0 -45
  592. package/src/css/_responsiveStyle.css.ts +0 -34
  593. package/src/css/_style.css.ts +0 -9
  594. package/src/css/components/breadcrumbs/breadcrumbs.css.ts +0 -6
  595. package/src/css/components/breadcrumbs/breadcrumbs.ts +0 -7
  596. package/src/css/components/dialog/dialog.css.ts +0 -98
  597. package/src/css/components/dialog/dialog.ts +0 -58
  598. package/src/css/components/menu/menu.css.ts +0 -14
  599. package/src/css/components/menu/menu.ts +0 -12
  600. package/src/css/components/skeleton/skeleton.css.ts +0 -128
  601. package/src/css/components/skeleton/skeleton.ts +0 -38
  602. package/src/css/components/skeleton/types.ts +0 -36
  603. package/src/css/components/toast/toast.css.ts +0 -17
  604. package/src/css/components/toast/toast.ts +0 -11
  605. package/src/css/components/tree/tree.css.ts +0 -65
  606. package/src/css/components/tree/tree.ts +0 -7
  607. package/src/css/constants.ts +0 -10
  608. package/src/css/getVarName.ts +0 -27
  609. package/src/css/index.ts +0 -146
  610. package/src/css/layers.css.ts +0 -12
  611. package/src/css/primitives/_arrow/_arrow.css.ts +0 -68
  612. package/src/css/primitives/_arrow/_arrow.ts +0 -26
  613. package/src/css/primitives/_input/_input.css.ts +0 -261
  614. package/src/css/primitives/_input/input.ts +0 -29
  615. package/src/css/primitives/_input/types.ts +0 -13
  616. package/src/css/primitives/avatar/avatar.css.ts +0 -201
  617. package/src/css/primitives/avatar/avatar.ts +0 -68
  618. package/src/css/primitives/avatar/types.ts +0 -10
  619. package/src/css/primitives/badge/badge.css.ts +0 -27
  620. package/src/css/primitives/badge/badge.ts +0 -8
  621. package/src/css/primitives/badge/types.ts +0 -13
  622. package/src/css/primitives/box/box.css.ts +0 -19
  623. package/src/css/primitives/box/box.ts +0 -82
  624. package/src/css/primitives/box/types.ts +0 -75
  625. package/src/css/primitives/button/button.css.ts +0 -287
  626. package/src/css/primitives/button/button.ts +0 -26
  627. package/src/css/primitives/button/types.ts +0 -12
  628. package/src/css/primitives/card/__workshop__/color.tsx +0 -75
  629. package/src/css/primitives/card/__workshop__/index.ts +0 -16
  630. package/src/css/primitives/card/card.css.ts +0 -387
  631. package/src/css/primitives/card/card.ts +0 -13
  632. package/src/css/primitives/card/types.ts +0 -9
  633. package/src/css/primitives/checkbox/checkbox.css.ts +0 -193
  634. package/src/css/primitives/checkbox/checkbox.ts +0 -17
  635. package/src/css/primitives/code/code.css.ts +0 -272
  636. package/src/css/primitives/code/code.ts +0 -19
  637. package/src/css/primitives/code/types.ts +0 -11
  638. package/src/css/primitives/container/container.css.ts +0 -4
  639. package/src/css/primitives/container/container.ts +0 -17
  640. package/src/css/primitives/container/types.ts +0 -9
  641. package/src/css/primitives/heading/heading.css.ts +0 -86
  642. package/src/css/primitives/heading/heading.ts +0 -22
  643. package/src/css/primitives/heading/types.ts +0 -14
  644. package/src/css/primitives/kbd/kbd.css.ts +0 -16
  645. package/src/css/primitives/kbd/kbd.ts +0 -9
  646. package/src/css/primitives/kbd/types.ts +0 -6
  647. package/src/css/primitives/label/label.css.ts +0 -87
  648. package/src/css/primitives/label/label.ts +0 -22
  649. package/src/css/primitives/label/types.ts +0 -14
  650. package/src/css/primitives/popover/popover.css.ts +0 -6
  651. package/src/css/primitives/popover/popover.ts +0 -12
  652. package/src/css/primitives/radio/radio.css.ts +0 -78
  653. package/src/css/primitives/radio/radio.ts +0 -17
  654. package/src/css/primitives/root/root.css.ts +0 -19
  655. package/src/css/primitives/root/root.ts +0 -17
  656. package/src/css/primitives/root/types.ts +0 -10
  657. package/src/css/primitives/select/select.css.ts +0 -24
  658. package/src/css/primitives/select/select.ts +0 -14
  659. package/src/css/primitives/select/types.ts +0 -5
  660. package/src/css/primitives/selectable/selectable.css.ts +0 -131
  661. package/src/css/primitives/selectable/selectable.ts +0 -9
  662. package/src/css/primitives/selectable/types.ts +0 -9
  663. package/src/css/primitives/spinner/spinner.css.ts +0 -19
  664. package/src/css/primitives/spinner/spinner.ts +0 -13
  665. package/src/css/primitives/spinner/types.ts +0 -4
  666. package/src/css/primitives/srOnly/srOnly.css.ts +0 -10
  667. package/src/css/primitives/srOnly/srOnly.ts +0 -7
  668. package/src/css/primitives/stack/stack.css.ts +0 -6
  669. package/src/css/primitives/stack/stack.ts +0 -7
  670. package/src/css/primitives/switch/switch.css.ts +0 -98
  671. package/src/css/primitives/switch/switch.ts +0 -27
  672. package/src/css/primitives/text/text.css.ts +0 -86
  673. package/src/css/primitives/text/text.ts +0 -24
  674. package/src/css/primitives/text/types.ts +0 -18
  675. package/src/css/primitives/textArea/textArea.css.ts +0 -4
  676. package/src/css/primitives/textArea/textArea.ts +0 -9
  677. package/src/css/primitives/textArea/types.ts +0 -7
  678. package/src/css/primitives/textInput/textInput.css.ts +0 -43
  679. package/src/css/primitives/textInput/textInput.ts +0 -24
  680. package/src/css/primitives/textInput/types.ts +0 -7
  681. package/src/css/primitives/tooltip/tooltip.css.ts +0 -4
  682. package/src/css/primitives/tooltip/tooltip.ts +0 -8
  683. package/src/css/primitives/tooltip/types.ts +0 -4
  684. package/src/css/props/alignItems/alignItems.css.ts +0 -22
  685. package/src/css/props/alignItems/alignItems.ts +0 -8
  686. package/src/css/props/alignItems/types.ts +0 -9
  687. package/src/css/props/border/border.css.ts +0 -65
  688. package/src/css/props/border/border.ts +0 -21
  689. package/src/css/props/border/types.ts +0 -13
  690. package/src/css/props/boxSizing/boxSizing.css.ts +0 -12
  691. package/src/css/props/boxSizing/boxSizing.ts +0 -7
  692. package/src/css/props/boxSizing/types.ts +0 -7
  693. package/src/css/props/display/display.css.ts +0 -56
  694. package/src/css/props/display/display.ts +0 -8
  695. package/src/css/props/display/types.ts +0 -16
  696. package/src/css/props/flex/flex.css.ts +0 -52
  697. package/src/css/props/flex/flex.ts +0 -8
  698. package/src/css/props/flex/types.ts +0 -9
  699. package/src/css/props/flexDirection/flexDirection.css.ts +0 -19
  700. package/src/css/props/flexDirection/flexDirection.ts +0 -8
  701. package/src/css/props/flexDirection/types.ts +0 -9
  702. package/src/css/props/flexWrap/flexWrap.css.ts +0 -16
  703. package/src/css/props/flexWrap/flexWrap.ts +0 -8
  704. package/src/css/props/flexWrap/types.ts +0 -9
  705. package/src/css/props/font/font.css.ts +0 -94
  706. package/src/css/props/font/font.ts +0 -8
  707. package/src/css/props/font/types.ts +0 -6
  708. package/src/css/props/gap/gap.css.ts +0 -40
  709. package/src/css/props/gap/gap.ts +0 -13
  710. package/src/css/props/gap/types.ts +0 -10
  711. package/src/css/props/gridAutoColumns/gridAutoColumns.css.ts +0 -19
  712. package/src/css/props/gridAutoColumns/gridAutoColumns.ts +0 -8
  713. package/src/css/props/gridAutoColumns/types.ts +0 -9
  714. package/src/css/props/gridAutoFlow/gridAutoFlow.css.ts +0 -19
  715. package/src/css/props/gridAutoFlow/gridAutoFlow.ts +0 -8
  716. package/src/css/props/gridAutoFlow/types.ts +0 -9
  717. package/src/css/props/gridAutoRows/gridAutoRows.css.ts +0 -19
  718. package/src/css/props/gridAutoRows/gridAutoRows.ts +0 -8
  719. package/src/css/props/gridAutoRows/types.ts +0 -9
  720. package/src/css/props/gridColumn/gridColumn.css.ts +0 -49
  721. package/src/css/props/gridColumn/gridColumn.ts +0 -8
  722. package/src/css/props/gridColumn/types.ts +0 -9
  723. package/src/css/props/gridColumnEnd/gridColumnEnd.css.ts +0 -46
  724. package/src/css/props/gridColumnEnd/gridColumnEnd.ts +0 -8
  725. package/src/css/props/gridColumnEnd/types.ts +0 -9
  726. package/src/css/props/gridColumnStart/gridColumnStart.css.ts +0 -46
  727. package/src/css/props/gridColumnStart/gridColumnStart.ts +0 -8
  728. package/src/css/props/gridColumnStart/types.ts +0 -9
  729. package/src/css/props/gridRow/gridRow.css.ts +0 -49
  730. package/src/css/props/gridRow/gridRow.ts +0 -8
  731. package/src/css/props/gridRow/types.ts +0 -9
  732. package/src/css/props/gridRowEnd/gridRowEnd.css.ts +0 -46
  733. package/src/css/props/gridRowEnd/gridRowEnd.ts +0 -8
  734. package/src/css/props/gridRowEnd/types.ts +0 -9
  735. package/src/css/props/gridRowStart/gridRowStart.css.ts +0 -46
  736. package/src/css/props/gridRowStart/gridRowStart.ts +0 -8
  737. package/src/css/props/gridRowStart/types.ts +0 -9
  738. package/src/css/props/gridTemplateColumns/gridTemplateColumns.css.ts +0 -43
  739. package/src/css/props/gridTemplateColumns/gridTemplateColumns.ts +0 -8
  740. package/src/css/props/gridTemplateColumns/types.ts +0 -9
  741. package/src/css/props/gridTemplateRows/gridTemplateRows.css.ts +0 -43
  742. package/src/css/props/gridTemplateRows/gridTemplateRows.ts +0 -8
  743. package/src/css/props/gridTemplateRows/types.ts +0 -9
  744. package/src/css/props/height/height.css.ts +0 -25
  745. package/src/css/props/height/height.ts +0 -8
  746. package/src/css/props/height/types.ts +0 -9
  747. package/src/css/props/inset/inset.css.ts +0 -37
  748. package/src/css/props/inset/inset.ts +0 -21
  749. package/src/css/props/inset/types.ts +0 -13
  750. package/src/css/props/justifyContent/justifyContent.css.ts +0 -25
  751. package/src/css/props/justifyContent/justifyContent.ts +0 -8
  752. package/src/css/props/justifyContent/types.ts +0 -15
  753. package/src/css/props/margin/margin.css.ts +0 -117
  754. package/src/css/props/margin/margin.ts +0 -25
  755. package/src/css/props/margin/types.ts +0 -17
  756. package/src/css/props/maxWidth/maxWidth.css.ts +0 -32
  757. package/src/css/props/maxWidth/maxWidth.ts +0 -8
  758. package/src/css/props/maxWidth/types.ts +0 -11
  759. package/src/css/props/minHeight/minHeight.css.ts +0 -13
  760. package/src/css/props/minHeight/minHeight.ts +0 -8
  761. package/src/css/props/minHeight/types.ts +0 -9
  762. package/src/css/props/minWidth/minWidth.css.ts +0 -25
  763. package/src/css/props/minWidth/minWidth.ts +0 -8
  764. package/src/css/props/minWidth/types.ts +0 -9
  765. package/src/css/props/outline/outline.css.ts +0 -10
  766. package/src/css/props/outline/outline.ts +0 -8
  767. package/src/css/props/outline/types.ts +0 -7
  768. package/src/css/props/overflow/overflow.css.ts +0 -16
  769. package/src/css/props/overflow/overflow.ts +0 -8
  770. package/src/css/props/overflow/types.ts +0 -11
  771. package/src/css/props/padding/padding.css.ts +0 -87
  772. package/src/css/props/padding/padding.ts +0 -25
  773. package/src/css/props/padding/types.ts +0 -17
  774. package/src/css/props/pointerEvents/pointerEvents.css.ts +0 -13
  775. package/src/css/props/pointerEvents/pointerEvents.ts +0 -8
  776. package/src/css/props/pointerEvents/types.ts +0 -7
  777. package/src/css/props/position/position.css.ts +0 -22
  778. package/src/css/props/position/position.ts +0 -8
  779. package/src/css/props/position/types.ts +0 -9
  780. package/src/css/props/radius/radius.css.ts +0 -21
  781. package/src/css/props/radius/radius.ts +0 -8
  782. package/src/css/props/radius/types.ts +0 -8
  783. package/src/css/props/shadow/shadow.css.ts +0 -23
  784. package/src/css/props/shadow/shadow.ts +0 -8
  785. package/src/css/props/shadow/types.ts +0 -8
  786. package/src/css/props/textAlign/textAlign.css.ts +0 -22
  787. package/src/css/props/textAlign/textAlign.ts +0 -8
  788. package/src/css/props/textAlign/types.ts +0 -7
  789. package/src/css/props/textOverflow/textOverflow.css.ts +0 -19
  790. package/src/css/props/textOverflow/textOverflow.ts +0 -8
  791. package/src/css/props/textOverflow/types.ts +0 -12
  792. package/src/css/props/width/types.ts +0 -11
  793. package/src/css/props/width/width.css.ts +0 -31
  794. package/src/css/props/width/width.ts +0 -8
  795. package/src/css/theme/buildCSSTheme.ts +0 -488
  796. package/src/css/theme/defaultTheme.css.ts +0 -64
  797. package/src/css/types.ts +0 -427
  798. package/src/css/vars.css.ts +0 -676
  799. package/src/theme/_parseColorToken.ts +0 -180
  800. package/src/theme/buildTheme.ts +0 -32
  801. package/src/theme/constants.ts +0 -90
  802. package/src/theme/defaults/color.ts +0 -197
  803. package/src/theme/defaults/common.ts +0 -71
  804. package/src/theme/defaults/fonts.ts +0 -250
  805. package/src/theme/index.ts +0 -5
  806. package/src/theme/merge.ts +0 -24
  807. package/src/theme/resolveTokens.ts +0 -204
  808. package/src/theme/types.ts +0 -366
package/README.md CHANGED
@@ -1,31 +1,215 @@
1
- # @sanity/ui
1
+ # Sanity UI 5
2
2
 
3
- The Sanity UI components.
3
+ The next version of Sanity's component library. Faster, simpler, and built on CSS instead of styled-components.
4
+
5
+ ## What's different from v3
6
+
7
+ - **CSS classes instead of styled-components.** No runtime style generation. Smaller bundles, faster renders.
8
+ - **Direct props for layout.** Width, height, position, border, and overflow are first-class props — no more `style={{ ... }}` escape hatches.
9
+ - **Works alongside v3.** Both versions run in the same app, in the same component tree. No forced migration.
10
+
11
+ Requires React 19.2+ and Node >=20.19 <22 || >=22.12.
12
+
13
+ ## For new apps
14
+
15
+ ### Install
16
+
17
+ #### Recommended: the setup CLI
4
18
 
5
19
  ```sh
6
- npm install @sanity/ui
20
+ npx @sanity/ui@alpha init
21
+ ```
22
+
23
+ `init` detects your framework and package manager, checks your React and Node versions, then installs the package along with `@sanity/icons`, adds the stylesheet import to your entry file, reconciles `tsconfig.json`, and writes a `sanity-ui.json`. It prints a plan and asks before changing anything.
24
+
25
+ `@sanity/icons` is a dependency of this package, so your package manager installs it either way. `init` also adds it to your own `package.json` because you import icons directly to pass to components, and under pnpm an import that isn't declared in your project doesn't resolve.
26
+
27
+ - `--dry` print the plan and exit without changing anything
28
+ - `--yes` accept every prompt with its default (non-interactive, for CI and agents)
29
+ - `--cwd <dir>` run against another directory
30
+
31
+ #### Manual
32
+
33
+ ```sh
34
+ pnpm add @sanity/ui@alpha
35
+ ```
36
+
37
+ Using npm or yarn? Use `npm add` or `yarn add` instead. (`init` above picks the right one for you.)
7
38
 
8
- # Install peer dependencies
9
- npm install react react-dom react-is
39
+ Then import the stylesheet at your app entry point. Without it, components render as unstyled HTML.
40
+
41
+ ```tsx
42
+ import '@sanity/ui/styles.css'
43
+ ```
44
+
45
+ ### Usage
46
+
47
+ ```tsx
48
+ import {Box, Flex, Card, Heading, Text, Button} from '@sanity/ui'
49
+ import {AddIcon} from '@sanity/icons'
50
+
51
+ export default function App() {
52
+ return (
53
+ <Flex minHeight="100vh">
54
+ <Box as="nav" aria-label="Main" padding={3} borderRight width="240px">
55
+ <Heading as="h2" size={1}>
56
+ My App
57
+ </Heading>
58
+ </Box>
59
+ <Box as="main" padding={4} flexGrow={1}>
60
+ <Flex alignItems="center" justifyContent="space-between" flexWrap="wrap" gap={2}>
61
+ <Heading as="h1" size={2}>
62
+ Documents
63
+ </Heading>
64
+ <Button iconStart={AddIcon} text="New" />
65
+ </Flex>
66
+ <Box marginTop={3}>
67
+ <Card density="loose">
68
+ <Text size={1}>First document</Text>
69
+ <Text size={1} muted>
70
+ Edited 2 hours ago
71
+ </Text>
72
+ </Card>
73
+ </Box>
74
+ </Box>
75
+ </Flex>
76
+ )
77
+ }
10
78
  ```
11
79
 
12
- [![npm version](https://img.shields.io/npm/v/@sanity/ui.svg?style=flat-square)](https://www.npmjs.com/package/@sanity/ui)
80
+ ### Checking your setup
81
+
82
+ Run `doctor` at any time to verify an install and get a one-line fix for anything broken:
13
83
 
14
- ## Usage
84
+ ```sh
85
+ npx @sanity/ui@alpha doctor
86
+ ```
15
87
 
16
- ```jsx
17
- import '@sanity/ui/css/index.css'
88
+ It checks that the package and `@sanity/icons` are installed, the stylesheet resolves and is imported, `tsconfig.json` has the options the components need, and your React and Node versions are supported.
89
+
90
+ ## For apps using Sanity UI v3
91
+
92
+ ### Install
93
+
94
+ v3 and v5 are the same npm package at different majors, so an app that wants both needs a package alias to tell them apart.
95
+
96
+ In apps still using v3 components, we recommend installing v5 with a package alias. This way, your existing `@sanity/ui` imports keep resolving to v3, so nothing you have already written needs to change.
97
+
98
+ ```sh
99
+ pnpm add ui5@npm:@sanity/ui@alpha
100
+ ```
18
101
 
19
- import {Button, Root} from '@sanity/ui'
20
- import {createRoot} from 'react-dom/client'
102
+ This gives you:
21
103
 
22
- createRoot(document).render(
23
- <Root lang="en">
24
- <Button text="Hello, world" />
25
- </Root>,
104
+ ```json
105
+ {
106
+ "dependencies": {
107
+ "@sanity/ui": "^3.5.1",
108
+ "ui5": "npm:@sanity/ui@alpha"
109
+ }
110
+ }
111
+ ```
112
+
113
+ Now `@sanity/ui` means v3 everywhere in your codebase and `ui5` means v5. You migrate one import at a time, at whatever pace suits you, instead of rewriting every file before anything runs.
114
+
115
+ The alias name is yours to choose. `ui5` is what we use internally. npm, pnpm, and yarn all support the `npm:` protocol.
116
+
117
+ ### Setup
118
+
119
+ v5 has no `ThemeProvider`, and it does not read v3's theme. Keep your existing provider setup exactly as it is: v3 components still need it, and it has no effect on v5.
120
+
121
+ With v5 installed under an alias, the stylesheet comes from the alias too.
122
+
123
+ ```tsx
124
+ import {ThemeProvider, studioTheme, ToastProvider} from '@sanity/ui' // v3
125
+ import 'ui5/styles.css' // v5
126
+ import App from './App'
127
+
128
+ createRoot(document.getElementById('root')!).render(
129
+ <ThemeProvider theme={studioTheme}>
130
+ <ToastProvider>
131
+ <App />
132
+ </ToastProvider>
133
+ </ThemeProvider>,
26
134
  )
27
135
  ```
28
136
 
29
- ## License
137
+ ### Usage
138
+
139
+ With v5 aliased, which version you get is just which specifier you import from. Anything without a v5 equivalent keeps coming from `@sanity/ui`, and the two sit next to each other in the same tree.
140
+
141
+ ```tsx
142
+ import {Dialog} from '@sanity/ui' // v3
143
+ import {Button, Card, Text} from 'ui5' // v5
144
+ ```
145
+
146
+ ## Components
147
+
148
+ ### Layout
149
+
150
+ | Component | What it does |
151
+ | ----------- | ----------------------------------------------------------------------------------- |
152
+ | `Box` | General container. Padding, margin, border, overflow, and position as direct props. |
153
+ | `Flex` | Flexbox layout. `alignItems`, `justifyContent`, `flexDirection`, `gap`. |
154
+ | `Grid` | CSS grid. Use `gridTemplateColumns` with a CSS string (e.g. `"repeat(3, 1fr)"`). |
155
+ | `Container` | Max-width content wrapper. |
156
+ | `HStack` | Horizontal stack. Accepts `gap` and `as` only — use `Flex` for alignment control. |
157
+ | `VStack` | Vertical stack. Accepts `gap` and `as` only — use `Flex` for alignment control. |
158
+ | `Inline` | Inline flow layout with wrapping and gap. |
159
+
160
+ ### Typography
161
+
162
+ | Component | What it does |
163
+ | --------- | ----------------------------------------------------------------------- |
164
+ | `Heading` | Semantic headings (`h1`–`h6`). Always set `as` to match the level. |
165
+ | `Text` | Body copy, captions, labels. Props: `size`, `weight`, `muted`, `align`. |
166
+ | `Label` | Form input label. Use only with form elements. |
167
+ | `Code` | Inline or block code. Uses the system monospace font. |
168
+
169
+ ### Interactive
170
+
171
+ | Component | What it does |
172
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------ |
173
+ | `Button` | `level` (primary/secondary/tertiary), `tone` (neutral/critical), `iconStart`, `iconEnd`, `text`, `fullWidth`, `loading`. |
174
+ | `Checkbox` | Controlled checkbox. Requires `label` (string). |
175
+ | `Radio` | Controlled radio button. |
176
+ | `Switch` | Toggle control. Requires `label` (string). |
177
+ | `Link` | Anchor element styled as a link. |
178
+
179
+ ### Display
180
+
181
+ | Component | What it does |
182
+ | ---------------- | -------------------------------------------------------------------------------------------------------------------- |
183
+ | `Card` | Raised surface with background and `tone`. Does not accept padding, margin, or layout props — wrap content in `Box`. |
184
+ | `Divider` | Horizontal rule between content sections. |
185
+ | `Icon` | Renders a `@sanity/icons` icon component. Always set `aria-label` or `aria-hidden`. |
186
+ | `Indicator` | Status dot with `tone`. |
187
+ | `IndicatorStack` | Grouped `Indicator` elements. |
188
+ | `Spinner` | Loading indicator. |
189
+
190
+ ### Lists
191
+
192
+ | Component | What it does |
193
+ | --------- | --------------------------------------------------- |
194
+ | `List` | Semantic list. Use `List.Item` and `List.ItemText`. |
195
+
196
+ ### Accessibility
197
+
198
+ | Component | What it does |
199
+ | ---------------- | ------------------------------------------------------------------------------------------------ |
200
+ | `SkipToContent` | Visually hidden skip-nav link. Must be the first focusable element. Requires `href` and `label`. |
201
+ | `VisuallyHidden` | Hides content visually while keeping it in the accessibility tree. |
202
+
203
+ ### Still only in v3
204
+
205
+ Menu, Dialog, TextInput, Select, Stack, Badge, ThemeProvider, ToastProvider, and other components not yet migrated to v5. Import these from `@sanity/ui` exactly as you do today.
206
+
207
+ ## Contributing
208
+
209
+ We welcome feedback and contributions. Start here:
210
+
211
+ 1. **Try the components** and report what breaks, what confuses, or what's missing.
212
+ 2. **Read the contribution model** — build a recipe with existing building block components, then propose graduating it.
213
+ 3. **Open a PR** following the branch naming and checklist in the developer contribution docs.
30
214
 
31
- MIT-licensed. See LICENSE.
215
+ During preview, the most useful contribution is using the components and telling us what happens.
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+
3
+ import process from 'node:process'
4
+
5
+ import {main} from '../dist/cli/index.js'
6
+ import {errorLine} from '../dist/cli/log.js'
7
+
8
+ try {
9
+ const code = await main(process.argv.slice(2))
10
+ process.exitCode = code ?? 0
11
+ } catch (error) {
12
+ errorLine(error instanceof Error ? error.message : String(error))
13
+ process.exitCode = 1
14
+ }
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { c } from "react/compiler-runtime";
4
+ import { hasLanguage, Refractor } from "react-refractor";
5
+ function LazyRefractor(t0) {
6
+ const $ = c(5), {
7
+ language,
8
+ value
9
+ } = t0;
10
+ if (!hasLanguage(language)) {
11
+ let t12;
12
+ return $[0] !== value ? (t12 = /* @__PURE__ */ jsx("code", { children: value }), $[0] = value, $[1] = t12) : t12 = $[1], t12;
13
+ }
14
+ let t1;
15
+ return $[2] !== language || $[3] !== value ? (t1 = /* @__PURE__ */ jsx(Refractor, { inline: !0, language, value }), $[2] = language, $[3] = value, $[4] = t1) : t1 = $[4], t1;
16
+ }
17
+ export {
18
+ LazyRefractor as default
19
+ };
20
+ //# sourceMappingURL=LazyRefractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LazyRefractor.js","sources":["../../src/components/code/LazyRefractor.tsx"],"sourcesContent":["import {hasLanguage, Refractor, type RefractorProps} from 'react-refractor'\n\nexport default function LazyRefractor({language, value}: RefractorProps) {\n if (!hasLanguage(language)) {\n return <code>{value}</code>\n }\n\n return <Refractor inline language={language} value={value} />\n}\n"],"names":["LazyRefractor","t0","$","_c","language","value","hasLanguage","t1"],"mappings":";;;;AAEA,SAAeA,cAAAC,IAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAuB;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAAJ;AACpC,MAAI,CAACK,YAAYF,QAAQ,GAAC;AAAA,QAAAG;AAAA,WAAAL,SAAAG,SACjBE,MAAA,oBAAA,QAAA,EAAOF,iBAAM,GAAOH,OAAAG,OAAAH,OAAAK,OAAAA,MAAAL,EAAA,CAAA,GAApBK;AAAAA,EAAoB;AAC5B,MAAAA;AAAA,SAAAL,EAAA,CAAA,MAAAE,YAAAF,SAAAG,SAEME,yBAAC,WAAA,EAAU,YAAiBH,UAAiBC,MAAAA,CAAK,GAAIH,OAAAE,UAAAF,OAAAG,OAAAH,OAAAK,MAAAA,KAAAL,EAAA,CAAA,GAAtDK;AAAsD;"}
@@ -0,0 +1,148 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { dirname, join } from 'node:path';
4
+ import process from 'node:process';
5
+ import { detect, isPackageInstalled, isLegacyUiVersion, PACKAGE_NAME, readInstalledPackageVersion, } from './detect.js';
6
+ import { inspectStylesheet, STYLES_SPECIFIER } from './styles.js';
7
+ import { inspectTsconfig } from './tsconfig.js';
8
+ import { meetsNode, meetsReact, NODE_REQUIREMENT, REACT_MIN } from './versions.js';
9
+ const ICONS = '@sanity/icons';
10
+ /** Resolves the built stylesheet on disk (not the Node no-op shim). */
11
+ function resolveStylesheet(cwd) {
12
+ try {
13
+ const require = createRequire(join(cwd, 'noop.js'));
14
+ const pkgJsonPath = require.resolve(`${PACKAGE_NAME}/package.json`);
15
+ const path = join(dirname(pkgJsonPath), 'dist/styles.css');
16
+ return existsSync(path) ? path : null;
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ /**
23
+ * Without a browser, "a component renders with a computed background" is
24
+ * verified by confirming the resolved stylesheet ships the component class and
25
+ * a background declaration for it. If both are present and the import is wired,
26
+ * the component renders styled.
27
+ */
28
+ function stylesheetHasComponentStyles(path) {
29
+ try {
30
+ const css = readFileSync(path, 'utf8');
31
+ return /\.sui-Card\b/.test(css) && /background/.test(css);
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ function check(id, ok, meta) {
38
+ return {
39
+ id,
40
+ title: meta.title,
41
+ ok,
42
+ status: meta.status ?? (ok ? 'pass' : 'fail'),
43
+ detail: meta.detail,
44
+ fix: meta.fix,
45
+ };
46
+ }
47
+ /**
48
+ * Runs every verification and returns structured results. `doctor` prints them
49
+ * all; `init` reuses a subset on exit. Pure read-only.
50
+ */
51
+ export function collectChecks(cwd) {
52
+ const detected = detect(cwd);
53
+ const checks = [];
54
+ const installedVersion = readInstalledPackageVersion(cwd, PACKAGE_NAME);
55
+ checks.push(check('install', Boolean(installedVersion), {
56
+ title: 'Package installed',
57
+ detail: installedVersion ? `${PACKAGE_NAME}@${installedVersion}` : 'not installed',
58
+ fix: `Run \`npx ${PACKAGE_NAME}@alpha init\` or install it with your package manager`,
59
+ }));
60
+ if (installedVersion) {
61
+ const legacyInstalled = isLegacyUiVersion(installedVersion);
62
+ checks.push(check('version', !legacyInstalled, {
63
+ title: 'Package version',
64
+ detail: legacyInstalled
65
+ ? `${PACKAGE_NAME}@${installedVersion} is pre-v5 (expected v5)`
66
+ : `${PACKAGE_NAME}@${installedVersion}`,
67
+ fix: `Remove the existing @sanity/ui version, or install v5 with a package alias — see README "For apps using Sanity UI v3"`,
68
+ }));
69
+ }
70
+ const iconsInstalled = isPackageInstalled(cwd, ICONS);
71
+ checks.push(check('icons', iconsInstalled, {
72
+ title: 'Icons installed',
73
+ detail: iconsInstalled ? `${ICONS} present` : `${ICONS} missing`,
74
+ fix: `Install it: add ${ICONS}`,
75
+ }));
76
+ const stylesheetPath = resolveStylesheet(cwd);
77
+ const stylesheetResolves = Boolean(stylesheetPath);
78
+ checks.push(check('stylesheet-resolves', stylesheetResolves, {
79
+ title: 'Stylesheet resolves',
80
+ detail: stylesheetResolves ? `${PACKAGE_NAME}/styles.css` : 'cannot resolve styles.css',
81
+ fix: 'Reinstall the package, or build it if working inside this monorepo',
82
+ }));
83
+ const stylesheet = inspectStylesheet(cwd, detected.entry);
84
+ checks.push(check('stylesheet-wired', stylesheet.imported, {
85
+ title: 'Stylesheet imported',
86
+ detail: stylesheet.imported
87
+ ? `imported in ${stylesheet.importedIn ?? detected.entry}`
88
+ : stylesheet.exists
89
+ ? `missing from ${detected.entry}`
90
+ : `entry file ${detected.entry} not found`,
91
+ fix: `Add \`import '${STYLES_SPECIFIER}'\` to ${detected.entry}`,
92
+ }));
93
+ if (detected.typescript) {
94
+ const tsconfig = inspectTsconfig(cwd);
95
+ const loadBearing = tsconfig.changes.filter((c) => c.load);
96
+ // An unreadable file has no changes to report, so guard against it explicitly
97
+ // rather than letting an empty change list read as "all good".
98
+ const ok = tsconfig.exists && !tsconfig.unreadable && loadBearing.length === 0;
99
+ checks.push(check('tsconfig', ok, {
100
+ title: 'tsconfig options',
101
+ detail: !tsconfig.exists
102
+ ? 'tsconfig.json not found'
103
+ : tsconfig.unreadable
104
+ ? 'tsconfig.json could not be parsed'
105
+ : loadBearing.length === 0
106
+ ? tsconfig.changes.length === 0
107
+ ? 'all required options set'
108
+ : 'required options set (some optional additions available)'
109
+ : `needs: ${loadBearing.map((c) => `${c.key}: ${String(c.to)}`).join(', ')}`,
110
+ fix: tsconfig.unreadable
111
+ ? 'Fix the JSON syntax in tsconfig.json'
112
+ : `Run \`npx ${PACKAGE_NAME}@alpha init\` to reconcile tsconfig.json`,
113
+ }));
114
+ }
115
+ const reactVersion = detected.react.version;
116
+ const reactOk = reactVersion ? meetsReact(reactVersion) : false;
117
+ checks.push(check('react', reactOk, {
118
+ title: 'React version',
119
+ status: reactVersion ? (reactOk ? 'pass' : 'fail') : 'warn',
120
+ detail: reactVersion ? `react ${reactVersion}` : 'react not detected',
121
+ fix: `Upgrade React to >= ${REACT_MIN}`,
122
+ }));
123
+ const nodeVersion = process.versions.node;
124
+ checks.push(check('node', meetsNode(nodeVersion), {
125
+ title: 'Node version',
126
+ detail: `node ${nodeVersion} (requires ${NODE_REQUIREMENT})`,
127
+ fix: `Use Node ${NODE_REQUIREMENT}`,
128
+ }));
129
+ return { detected, checks, stylesheetPath };
130
+ }
131
+ /** The subset `init` verifies on exit, plus the render probe. */
132
+ export function verifyAfterInit(cwd) {
133
+ const { checks, stylesheetPath } = collectChecks(cwd);
134
+ const ids = new Set(['stylesheet-resolves', 'stylesheet-wired', 'tsconfig']);
135
+ const subset = checks.filter((c) => ids.has(c.id));
136
+ const probeOk = stylesheetPath ? stylesheetHasComponentStyles(stylesheetPath) : false;
137
+ subset.push({
138
+ id: 'probe',
139
+ title: 'Probe renders with background',
140
+ ok: probeOk,
141
+ status: probeOk ? 'pass' : 'fail',
142
+ detail: stylesheetPath
143
+ ? 'Card ships a background declaration'
144
+ : 'stylesheet not resolved, cannot probe',
145
+ fix: 'Ensure the package is installed and built',
146
+ });
147
+ return subset;
148
+ }
@@ -0,0 +1,23 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ export const CONFIG_FILE = 'sanity-ui.json';
4
+ /**
5
+ * Builds the sanity-ui.json contents: a small record of the detected setup
6
+ * (framework, entry) written to the project root for tooling to read.
7
+ */
8
+ export function buildConfig({ framework, entry, }) {
9
+ return {
10
+ $schema: 'https://sanity-ui.sanity.dev/schema.json',
11
+ framework,
12
+ entry,
13
+ };
14
+ }
15
+ export function configExists(cwd) {
16
+ return existsSync(join(cwd, CONFIG_FILE));
17
+ }
18
+ export function writeConfig(cwd, config, { dryRun = false } = {}) {
19
+ const file = join(cwd, CONFIG_FILE);
20
+ if (!dryRun)
21
+ writeFileSync(file, `${JSON.stringify(config, null, 2)}\n`);
22
+ return { file, wrote: !dryRun };
23
+ }
@@ -0,0 +1,181 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { parseVersion } from './versions.js';
4
+ export const PACKAGE_NAME = '@sanity/ui';
5
+ export const LEGACY_COEXISTENCE_HINT = 'To add v5 alongside an existing @sanity/ui install, use a package alias — see the README section "For apps using Sanity UI v3".';
6
+ /**
7
+ * Framework ids map 1:1 to the `framework` field written into sanity-ui.json.
8
+ * Each carries the ordered list of candidate entry files where the stylesheet
9
+ * import belongs.
10
+ */
11
+ const FRAMEWORK_ENTRIES = {
12
+ 'next-app': ['app/layout.tsx', 'app/layout.jsx', 'src/app/layout.tsx', 'src/app/layout.jsx'],
13
+ 'next-pages': ['pages/_app.tsx', 'pages/_app.jsx', 'src/pages/_app.tsx', 'src/pages/_app.jsx'],
14
+ 'react-router': ['app/root.tsx', 'app/root.jsx'],
15
+ 'remix': ['app/root.tsx', 'app/root.jsx'],
16
+ 'vite': ['src/main.tsx', 'src/main.jsx', 'src/main.ts'],
17
+ 'astro': [],
18
+ 'react': ['src/index.tsx', 'src/main.tsx', 'src/index.jsx', 'src/main.jsx'],
19
+ };
20
+ export function readPackageJson(cwd) {
21
+ const file = join(cwd, 'package.json');
22
+ if (!existsSync(file))
23
+ return null;
24
+ try {
25
+ return JSON.parse(readFileSync(file, 'utf8'));
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ export function allDeps(pkg) {
32
+ if (!pkg)
33
+ return {};
34
+ return { ...pkg.dependencies, ...pkg.devDependencies, ...pkg.peerDependencies };
35
+ }
36
+ export function detectPackageManager(cwd) {
37
+ if (existsSync(join(cwd, 'bun.lockb')) || existsSync(join(cwd, 'bun.lock')))
38
+ return 'bun';
39
+ if (existsSync(join(cwd, 'pnpm-lock.yaml')))
40
+ return 'pnpm';
41
+ if (existsSync(join(cwd, 'yarn.lock')))
42
+ return 'yarn';
43
+ if (existsSync(join(cwd, 'package-lock.json')))
44
+ return 'npm';
45
+ const declared = readPackageJson(cwd)?.packageManager;
46
+ if (typeof declared === 'string') {
47
+ const name = declared.split('@')[0];
48
+ if (name === 'pnpm' || name === 'yarn' || name === 'npm' || name === 'bun')
49
+ return name;
50
+ }
51
+ return 'npm';
52
+ }
53
+ export function detectFramework(cwd, pkg = readPackageJson(cwd)) {
54
+ const deps = allDeps(pkg);
55
+ const has = (name) => Boolean(deps[name]);
56
+ const dir = (relative) => existsSync(join(cwd, relative));
57
+ if (has('next')) {
58
+ if (dir('app') || dir('src/app'))
59
+ return 'next-app';
60
+ if (dir('pages') || dir('src/pages'))
61
+ return 'next-pages';
62
+ return 'next-app';
63
+ }
64
+ if (has('@remix-run/react') || has('@remix-run/dev'))
65
+ return 'remix';
66
+ if (has('@react-router/dev') || has('react-router'))
67
+ return 'react-router';
68
+ if (has('astro'))
69
+ return 'astro';
70
+ if (has('vite'))
71
+ return 'vite';
72
+ return 'react';
73
+ }
74
+ export function detectTypeScript(cwd, pkg = readPackageJson(cwd)) {
75
+ return existsSync(join(cwd, 'tsconfig.json')) || Boolean(allDeps(pkg)['typescript']);
76
+ }
77
+ /**
78
+ * Returns the first existing candidate entry file, otherwise the first
79
+ * candidate as the place to create one. Astro has no fixed entry, so we look
80
+ * for a layout component.
81
+ */
82
+ export function detectEntry(cwd, framework) {
83
+ if (framework === 'astro')
84
+ return detectAstroLayout(cwd);
85
+ const candidates = FRAMEWORK_ENTRIES[framework];
86
+ const existing = candidates.find((rel) => existsSync(join(cwd, rel)));
87
+ return { entry: existing ?? candidates[0] ?? 'src/index.tsx', exists: Boolean(existing) };
88
+ }
89
+ function detectAstroLayout(cwd) {
90
+ const candidates = [
91
+ 'src/layouts/Layout.astro',
92
+ 'src/layouts/BaseLayout.astro',
93
+ 'src/layouts/index.astro',
94
+ 'src/pages/index.astro',
95
+ ];
96
+ const existing = candidates.find((rel) => existsSync(join(cwd, rel)));
97
+ return { entry: existing ?? candidates[0] ?? 'src/layouts/Layout.astro', exists: Boolean(existing) };
98
+ }
99
+ /**
100
+ * Resolves the installed React version from node_modules, falling back to the
101
+ * declared range in package.json (carets/tildes stripped).
102
+ */
103
+ export function detectReactVersion(cwd, pkg = readPackageJson(cwd)) {
104
+ const installed = readInstalledVersion(cwd, 'react');
105
+ if (installed)
106
+ return { version: installed, source: 'installed' };
107
+ const declared = allDeps(pkg)['react'];
108
+ if (typeof declared === 'string') {
109
+ return { version: declared.replace(/^[\^~>=<\s]+/, ''), source: 'declared' };
110
+ }
111
+ return { version: null, source: 'missing' };
112
+ }
113
+ function readInstalledVersion(cwd, name) {
114
+ const file = join(cwd, 'node_modules', name, 'package.json');
115
+ if (!existsSync(file))
116
+ return null;
117
+ try {
118
+ const pkg = JSON.parse(readFileSync(file, 'utf8'));
119
+ return pkg.version ?? null;
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ }
125
+ export function isPackageInstalled(cwd, name) {
126
+ return existsSync(join(cwd, 'node_modules', name, 'package.json'));
127
+ }
128
+ export function readInstalledPackageVersion(cwd, name) {
129
+ return readInstalledVersion(cwd, name);
130
+ }
131
+ export function isLegacyUiVersion(version) {
132
+ const major = parseVersion(version)?.[0];
133
+ return major !== undefined && major < 5;
134
+ }
135
+ function detectAliasedInstall(deps) {
136
+ for (const [name, spec] of Object.entries(deps)) {
137
+ if (typeof spec === 'string' && /^npm:@sanity\/ui@(5(?:\..*)?|alpha)$/.test(spec))
138
+ return name;
139
+ }
140
+ return null;
141
+ }
142
+ /** Reads the major from a declared range, skipping workspace/catalog/link specs. */
143
+ function declaredMajor(spec) {
144
+ if (typeof spec !== 'string')
145
+ return null;
146
+ if (/^(workspace:|catalog:|link:|file:)/.test(spec))
147
+ return null;
148
+ const npmAlias = spec.match(/^npm:@sanity\/ui@(\d+)/);
149
+ if (npmAlias)
150
+ return Number(npmAlias[1]);
151
+ return parseVersion(spec.replace(/^[\^~>=<\s]+/, ''))?.[0] ?? null;
152
+ }
153
+ function detectLegacyInstall(cwd, deps) {
154
+ const installed = readInstalledPackageVersion(cwd, PACKAGE_NAME);
155
+ if (installed && isLegacyUiVersion(installed)) {
156
+ return installed;
157
+ }
158
+ const declared = deps[PACKAGE_NAME];
159
+ const major = declaredMajor(declared);
160
+ if (major !== null && major < 5) {
161
+ return declared ?? 'unknown';
162
+ }
163
+ return null;
164
+ }
165
+ export function detect(cwd) {
166
+ const pkg = readPackageJson(cwd);
167
+ const deps = allDeps(pkg);
168
+ const framework = detectFramework(cwd, pkg);
169
+ const entry = detectEntry(cwd, framework);
170
+ const typescript = detectTypeScript(cwd, pkg) || (entry.exists && /\.tsx?$/.test(entry.entry));
171
+ return {
172
+ pkg,
173
+ packageManager: detectPackageManager(cwd),
174
+ framework,
175
+ typescript,
176
+ ...entry,
177
+ react: detectReactVersion(cwd, pkg),
178
+ aliasedInstall: detectAliasedInstall(deps),
179
+ legacyInstall: detectLegacyInstall(cwd, deps),
180
+ };
181
+ }
@@ -0,0 +1,49 @@
1
+ import { collectChecks } from './checks.js';
2
+ import { detect, LEGACY_COEXISTENCE_HINT, PACKAGE_NAME } from './detect.js';
3
+ import { color, fail, heading, info, success, warn } from './log.js';
4
+ export function printChecks(checks) {
5
+ for (const c of checks) {
6
+ const label = `${color.bold(c.title)}${c.detail ? ` ${color.dim(`— ${c.detail}`)}` : ''}`;
7
+ if (c.status === 'pass')
8
+ success(label);
9
+ else if (c.status === 'warn')
10
+ warn(label);
11
+ else
12
+ fail(label);
13
+ if (c.status !== 'pass' && c.fix) {
14
+ info(` ${color.dim('fix:')} ${c.fix}`);
15
+ }
16
+ }
17
+ }
18
+ /** Runs every check and prints it. Returns 1 only when something fails; warnings still pass. */
19
+ export function runDoctor({ cwd }) {
20
+ const detected = detect(cwd);
21
+ heading('Sanity UI doctor');
22
+ if (detected.aliasedInstall) {
23
+ warn(`This project installs v5 under the alias "${detected.aliasedInstall}". doctor checks direct @sanity/ui v5 installs only.`);
24
+ info(` ${color.dim('hint:')} ${LEGACY_COEXISTENCE_HINT}`);
25
+ return 0;
26
+ }
27
+ if (detected.legacyInstall) {
28
+ warn(`This project has ${PACKAGE_NAME}@${detected.legacyInstall} (pre-v5). doctor checks v5 installs only.`);
29
+ info(` ${color.dim('hint:')} ${LEGACY_COEXISTENCE_HINT}`);
30
+ return 0;
31
+ }
32
+ const { checks } = collectChecks(cwd);
33
+ info(color.dim(`framework: ${detected.framework} · package manager: ${detected.packageManager} · entry: ${detected.entry}`));
34
+ info('');
35
+ printChecks(checks);
36
+ const failed = checks.filter((c) => c.status === 'fail');
37
+ const warned = checks.filter((c) => c.status === 'warn');
38
+ info('');
39
+ if (failed.length === 0 && warned.length === 0) {
40
+ success('Everything looks good.');
41
+ return 0;
42
+ }
43
+ if (failed.length === 0) {
44
+ warn(`${warned.length} warning${warned.length === 1 ? '' : 's'}, no blocking issues.`);
45
+ return 0;
46
+ }
47
+ fail(`${failed.length} issue${failed.length === 1 ? '' : 's'} found. See fixes above.`);
48
+ return 1;
49
+ }