@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
@@ -0,0 +1,225 @@
1
+ import {basename} from 'node:path'
2
+ import process from 'node:process'
3
+
4
+ import {verifyAfterInit} from './checks.js'
5
+ import {buildConfig, CONFIG_FILE, configExists, writeConfig} from './config.js'
6
+ import {detect, LEGACY_COEXISTENCE_HINT, PACKAGE_NAME} from './detect.js'
7
+ import {printChecks} from './doctor.js'
8
+ import {installCommand, resolveInstallSpecs, resolveTypeSpecs, runInstall} from './install.js'
9
+ import {color, confirm, fail, heading, info, step, success, warn} from './log.js'
10
+ import {inspectStylesheet, STYLES_SPECIFIER, wireStylesheet} from './styles.js'
11
+ import type {StylesheetInfo} from './styles.js'
12
+ import {inspectTsconfig, reconcileTsconfig} from './tsconfig.js'
13
+ import type {TsconfigInspection} from './tsconfig.js'
14
+ import type {CliOptions, Detected} from './types.js'
15
+ import {meetsNode, meetsReact, NODE_REQUIREMENT, REACT_MIN} from './versions.js'
16
+
17
+ interface Plan {
18
+ specs: string[]
19
+ typeSpecs: string[]
20
+ install: string
21
+ stylesheet: StylesheetInfo
22
+ tsconfig: TsconfigInspection | null
23
+ }
24
+
25
+ /**
26
+ * Prints the React and Node checks. Missing React only warns, since the user may
27
+ * be scaffolding before installing it; an out-of-range React or Node sets
28
+ * `blocking`. `blocking` never hard-stops init. It only triggers a louder warning
29
+ * before the apply confirmation, so the user stays in control either way.
30
+ */
31
+ function reportPrereqs({react}: Detected): {blocking: boolean} {
32
+ let blocking = false
33
+
34
+ const reactVersion = react.version
35
+ if (!reactVersion) {
36
+ warn(`React not detected. This package needs React >= ${REACT_MIN}.`)
37
+ } else if (meetsReact(reactVersion)) {
38
+ success(`React ${reactVersion} meets the >= ${REACT_MIN} requirement.`)
39
+ } else {
40
+ warn(`React ${reactVersion} is below ${REACT_MIN}. Components may not render correctly.`)
41
+ info(` ${color.dim('fix:')} Upgrade React to >= ${REACT_MIN}`)
42
+ blocking = true
43
+ }
44
+
45
+ const nodeVersion = process.versions.node
46
+ if (meetsNode(nodeVersion)) {
47
+ success(`Node ${nodeVersion} meets the ${NODE_REQUIREMENT} requirement.`)
48
+ } else {
49
+ warn(`Node ${nodeVersion} is outside ${NODE_REQUIREMENT}. Install may behave unexpectedly.`)
50
+ info(` ${color.dim('fix:')} Use Node ${NODE_REQUIREMENT}`)
51
+ blocking = true
52
+ }
53
+
54
+ return {blocking}
55
+ }
56
+
57
+ function parseReactMajor(version: string | null): number {
58
+ const match = typeof version === 'string' ? version.match(/\d+/) : null
59
+ return match ? Number(match[0]) : 19
60
+ }
61
+
62
+ function buildPlan(cwd: string, detected: Detected): Plan {
63
+ const specs = resolveInstallSpecs()
64
+ const {command, args} = installCommand(detected.packageManager, specs)
65
+ const reactMajor = parseReactMajor(detected.react.version)
66
+ const typeSpecs = detected.typescript ? resolveTypeSpecs(cwd, {reactMajor}) : []
67
+ const stylesheet = inspectStylesheet(cwd, detected.entry)
68
+ const tsconfig = detected.typescript ? inspectTsconfig(cwd) : null
69
+
70
+ return {specs, typeSpecs, install: `${command} ${args.join(' ')}`, stylesheet, tsconfig}
71
+ }
72
+
73
+ function printPlan(cwd: string, detected: Detected, plan: Plan): void {
74
+ heading('Plan')
75
+
76
+ step(`Install: ${color.bold(plan.install)}`)
77
+
78
+ if (plan.typeSpecs.length > 0) {
79
+ step(`Dev types: ${color.bold(plan.typeSpecs.join(' '))}`)
80
+ }
81
+
82
+ if (plan.stylesheet.imported) {
83
+ step(`Stylesheet: already imported in ${plan.stylesheet.importedIn ?? detected.entry}`)
84
+ } else if (plan.stylesheet.exists) {
85
+ step(`Stylesheet: add ${color.bold(`import '${STYLES_SPECIFIER}'`)} to ${detected.entry}`)
86
+ } else {
87
+ step(`Stylesheet: entry ${detected.entry} not found, will skip (add the import manually)`)
88
+ }
89
+
90
+ if (!detected.typescript || !plan.tsconfig) {
91
+ step('tsconfig: no TypeScript detected, skipping')
92
+ } else if (!plan.tsconfig.exists) {
93
+ step('tsconfig: create tsconfig.json with required options')
94
+ } else if (plan.tsconfig.changes.length === 0) {
95
+ step('tsconfig: already has required options')
96
+ } else {
97
+ const summary = plan.tsconfig.changes.map((c) => c.key).join(', ')
98
+ step(`tsconfig: update ${basename(plan.tsconfig.file)} (${summary})`)
99
+ }
100
+
101
+ step(configExists(cwd) ? `${CONFIG_FILE}: overwrite` : `${CONFIG_FILE}: create`)
102
+ }
103
+
104
+ /**
105
+ * The init lifecycle: detect the project, report prerequisites, build and print
106
+ * the plan, confirm, apply each step, then verify. `--dry` stops after the plan;
107
+ * `--yes` accepts the confirmation without prompting.
108
+ */
109
+ export async function runInit(options: CliOptions): Promise<number> {
110
+ const {cwd, dry, yes} = options
111
+ const detected = detect(cwd)
112
+
113
+ heading('Sanity UI init')
114
+ info(
115
+ color.dim(
116
+ `framework: ${detected.framework} · package manager: ${detected.packageManager} · entry: ${detected.entry} · typescript: ${detected.typescript}`,
117
+ ),
118
+ )
119
+
120
+ if (detected.aliasedInstall) {
121
+ fail(
122
+ `This project installs v5 under the alias "${detected.aliasedInstall}". init is for new apps only.`,
123
+ )
124
+ info(` ${color.dim('fix:')} ${LEGACY_COEXISTENCE_HINT}`)
125
+ return 1
126
+ }
127
+
128
+ if (detected.legacyInstall) {
129
+ fail(
130
+ `This project already has ${PACKAGE_NAME}@${detected.legacyInstall} (pre-v5). init is for new apps only.`,
131
+ )
132
+ info(` ${color.dim('fix:')} ${LEGACY_COEXISTENCE_HINT}`)
133
+ return 1
134
+ }
135
+
136
+ heading('Requirements')
137
+ const {blocking} = reportPrereqs(detected)
138
+
139
+ const plan = buildPlan(cwd, detected)
140
+ printPlan(cwd, detected, plan)
141
+
142
+ if (dry) {
143
+ info('')
144
+ info(color.dim('Dry run: no changes made.'))
145
+ return 0
146
+ }
147
+
148
+ if (blocking) {
149
+ info('')
150
+ warn('Some requirements are unmet (see above). Continuing may not work.')
151
+ }
152
+
153
+ // Without a TTY there's no one to answer the prompt, so confirm() falls back to
154
+ // the default (apply). Say so explicitly rather than appearing to act silently;
155
+ // --dry is the preview-only path for anyone who doesn't want writes.
156
+ if (!yes && !process.stdin.isTTY) {
157
+ info('')
158
+ info(color.dim('Non-interactive (no TTY): applying automatically. Use --dry to preview.'))
159
+ }
160
+
161
+ const proceed = await confirm('\nApply these changes?', {defaultValue: true, assumeYes: yes})
162
+ if (!proceed) {
163
+ info('Aborted. No changes made.')
164
+ return 0
165
+ }
166
+
167
+ heading('Applying')
168
+
169
+ step(`Installing with ${detected.packageManager}…`)
170
+ const install = runInstall(cwd, detected.packageManager, plan.specs)
171
+ if (install.ok) {
172
+ success('Dependencies installed.')
173
+ } else if (install.reason === 'spawn') {
174
+ warn(`Could not run ${detected.packageManager}: ${install.message ?? 'unknown error'}`)
175
+ info(` ${color.dim('fix:')} Install manually: ${install.command} ${install.args.join(' ')}`)
176
+ } else {
177
+ warn(`Install exited with code ${install.status ?? 'unknown'}.`)
178
+ info(
179
+ ` ${color.dim('hint:')} This is usually a peer-dependency conflict. Re-run the install and read the conflict, or retry with your package manager's legacy peer-deps flag.`,
180
+ )
181
+ }
182
+
183
+ if (plan.typeSpecs.length > 0) {
184
+ step('Installing React type definitions…')
185
+ const typeInstall = runInstall(cwd, detected.packageManager, plan.typeSpecs, {dev: true})
186
+ if (typeInstall.ok) success('Type definitions installed.')
187
+ else warn(`Could not install ${plan.typeSpecs.join(' ')}. Add them manually.`)
188
+ }
189
+
190
+ if (plan.stylesheet.exists && !plan.stylesheet.imported) {
191
+ const wired = wireStylesheet(cwd, detected.entry, {dryRun: false})
192
+ if (wired.wrote) success(`Imported the stylesheet in ${detected.entry}.`)
193
+ } else if (plan.stylesheet.imported) {
194
+ success('Stylesheet already imported.')
195
+ } else {
196
+ warn(`Could not find ${detected.entry}. Add \`import '${STYLES_SPECIFIER}'\` manually.`)
197
+ }
198
+
199
+ if (detected.typescript) {
200
+ const result = reconcileTsconfig(cwd, {dryRun: false})
201
+ if (result.created) success('Created tsconfig.json with required options.')
202
+ else if (result.unreadable) warn('tsconfig.json could not be parsed; left untouched.')
203
+ else if (result.changes.length === 0) success('tsconfig already has the required options.')
204
+ else success(`Updated tsconfig: ${result.changes.map((c) => c.key).join(', ')}.`)
205
+ }
206
+
207
+ const config = buildConfig({framework: detected.framework, entry: detected.entry})
208
+ writeConfig(cwd, config)
209
+ success(`Wrote ${CONFIG_FILE}.`)
210
+
211
+ heading('Verifying')
212
+ const results = verifyAfterInit(cwd)
213
+ printChecks(results)
214
+
215
+ const failed = results.filter((c) => c.status === 'fail')
216
+ info('')
217
+ if (failed.length === 0) {
218
+ success('Setup verified. Import components from @sanity/ui and start building.')
219
+ return 0
220
+ }
221
+ fail(
222
+ `${failed.length} check${failed.length === 1 ? '' : 's'} failed. Run \`npx ${PACKAGE_NAME}@alpha doctor\` for details.`,
223
+ )
224
+ return 1
225
+ }
@@ -0,0 +1,52 @@
1
+ import {mkdtempSync, rmSync} from 'node:fs'
2
+ import {tmpdir} from 'node:os'
3
+ import {join} from 'node:path'
4
+
5
+ import {afterEach, beforeEach, describe, expect, it} from 'vitest'
6
+
7
+ import {installCommand, resolveInstallSpecs, resolveTypeSpecs} from './install.js'
8
+
9
+ describe('resolveInstallSpecs', () => {
10
+ it('pins the package to its shipped version and icons to the declared version', () => {
11
+ const specs = resolveInstallSpecs()
12
+ expect(specs[0]).toMatch(/^@sanity\/ui@\d+\.\d+\.\d+/)
13
+ expect(specs.some((s) => s.startsWith('@sanity/icons@'))).toBe(true)
14
+ })
15
+
16
+ it('leaves dependencies the app never imports itself to the package manager', () => {
17
+ const specs = resolveInstallSpecs()
18
+ expect(specs.some((s) => s.startsWith('react-refractor'))).toBe(false)
19
+ expect(specs.some((s) => s.startsWith('clsx'))).toBe(false)
20
+ })
21
+ })
22
+
23
+ describe('installCommand', () => {
24
+ it('uses install for npm and add for others', () => {
25
+ expect(installCommand('npm', ['x']).args).toEqual(['install', 'x'])
26
+ expect(installCommand('pnpm', ['x']).args).toEqual(['add', 'x'])
27
+ })
28
+
29
+ it('applies the right dev flag per package manager', () => {
30
+ expect(installCommand('npm', ['x'], {dev: true}).args).toEqual(['install', '--save-dev', 'x'])
31
+ expect(installCommand('pnpm', ['x'], {dev: true}).args).toEqual(['add', '-D', 'x'])
32
+ expect(installCommand('yarn', ['x'], {dev: true}).args).toEqual(['add', '-D', 'x'])
33
+ expect(installCommand('bun', ['x'], {dev: true}).args).toEqual(['add', '-d', 'x'])
34
+ })
35
+ })
36
+
37
+ describe('resolveTypeSpecs', () => {
38
+ let dir: string
39
+ beforeEach(() => {
40
+ dir = mkdtempSync(join(tmpdir(), 'sui-types-'))
41
+ })
42
+ afterEach(() => {
43
+ rmSync(dir, {recursive: true, force: true})
44
+ })
45
+
46
+ it('returns React type packages pinned to the major when none are installed', () => {
47
+ expect(resolveTypeSpecs(dir, {reactMajor: 19})).toEqual([
48
+ '@types/react@^19',
49
+ '@types/react-dom@^19',
50
+ ])
51
+ })
52
+ })
@@ -0,0 +1,107 @@
1
+ import {spawnSync} from 'node:child_process'
2
+ import process from 'node:process'
3
+
4
+ import {isPackageInstalled, PACKAGE_NAME} from './detect.js'
5
+ import {readSelfPackage} from './selfPackage.js'
6
+ import type {PackageManager} from './types.js'
7
+
8
+ const ICONS = '@sanity/icons'
9
+ const DEV_FLAG: Record<PackageManager, string> = {
10
+ npm: '--save-dev',
11
+ pnpm: '-D',
12
+ yarn: '-D',
13
+ bun: '-d',
14
+ }
15
+
16
+ export interface InstallResult {
17
+ ok: boolean
18
+ command: string
19
+ args: string[]
20
+ reason?: 'spawn' | 'exit'
21
+ message?: string
22
+ status?: number | null
23
+ }
24
+
25
+ /** Strips range operators to the exact floor version, e.g. "^3.7.4" -> "3.7.4". */
26
+ function exactFromRange(range: string | undefined): string | null {
27
+ if (typeof range !== 'string') return null
28
+ const match = range.match(/\d+\.\d+\.\d+(?:-[\w.]+)?/)
29
+ return match ? match[0] : null
30
+ }
31
+
32
+ /**
33
+ * Builds the exact specs to install from this package's own manifest: the
34
+ * package at its shipped version, and icons at the version it declares in
35
+ * dependencies. Nothing here is invented.
36
+ *
37
+ * Icons is already a dependency, so the package manager installs it either way.
38
+ * It is listed explicitly because apps import icons directly to pass to
39
+ * components (`<Button iconStart={AddIcon} />`), and under pnpm an import that
40
+ * isn't in the app's own package.json doesn't resolve. Dependencies the app
41
+ * never imports itself (react-refractor, clsx) are left to the package manager.
42
+ * React/react-dom are peers that belong to the host app, so they are left out
43
+ * too (the prereq check verifies them).
44
+ */
45
+ export function resolveInstallSpecs(): string[] {
46
+ const self = readSelfPackage()
47
+ const deps = self.dependencies ?? {}
48
+
49
+ const specs = [`${PACKAGE_NAME}@${self.version ?? 'latest'}`]
50
+
51
+ const iconsVersion = exactFromRange(deps[ICONS])
52
+ specs.push(iconsVersion ? `${ICONS}@${iconsVersion}` : ICONS)
53
+
54
+ return specs
55
+ }
56
+
57
+ /**
58
+ * The React type packages a TypeScript project needs to type-check JSX and the
59
+ * component props. Only the ones not already installed are returned, pinned to
60
+ * the project's React major (defaulting to the supported React 19).
61
+ */
62
+ export function resolveTypeSpecs(cwd: string, {reactMajor = 19} = {}): string[] {
63
+ const major = Number.isInteger(reactMajor) ? reactMajor : 19
64
+ return ['@types/react', '@types/react-dom']
65
+ .filter((name) => !isPackageInstalled(cwd, name))
66
+ .map((name) => `${name}@^${major}`)
67
+ }
68
+
69
+ export function installCommand(
70
+ packageManager: PackageManager,
71
+ specs: string[],
72
+ {dev = false} = {},
73
+ ): {command: string; args: string[]} {
74
+ const verb = packageManager === 'npm' ? 'install' : 'add'
75
+ const flags = dev ? [DEV_FLAG[packageManager]] : []
76
+ return {command: packageManager, args: [verb, ...flags, ...specs]}
77
+ }
78
+
79
+ /**
80
+ * Runs the install with inherited stdio. Returns a structured result so the
81
+ * caller can explain a peer-dependency conflict in plain language instead of
82
+ * failing silently.
83
+ */
84
+ export function runInstall(
85
+ cwd: string,
86
+ packageManager: PackageManager,
87
+ specs: string[],
88
+ {dev = false} = {},
89
+ ): InstallResult {
90
+ const {command, args} = installCommand(packageManager, specs, {dev})
91
+ // On Windows the package managers are .cmd shims, and spawning them without a
92
+ // shell throws (ENOENT, or EINVAL since the Node .cmd security fix). The args
93
+ // are package specs we build ourselves, so there is nothing to escape.
94
+ const result = spawnSync(command, args, {
95
+ cwd,
96
+ stdio: 'inherit',
97
+ shell: process.platform === 'win32',
98
+ })
99
+
100
+ if (result.error) {
101
+ return {ok: false, reason: 'spawn', message: result.error.message, command, args}
102
+ }
103
+ if (result.status !== 0) {
104
+ return {ok: false, reason: 'exit', status: result.status, command, args}
105
+ }
106
+ return {ok: true, command, args}
107
+ }
package/src/cli/log.ts ADDED
@@ -0,0 +1,79 @@
1
+ import process from 'node:process'
2
+ import readline from 'node:readline/promises'
3
+
4
+ // Colorize only a real terminal, and honor the NO_COLOR convention (https://no-color.org).
5
+ const noColor = process.env['NO_COLOR'] !== undefined
6
+ const supportsColor = process.stdout.isTTY && !noColor
7
+
8
+ function paint(code: string, text: string): string {
9
+ if (!supportsColor) return text
10
+ return `\u001b[${code}m${text}\u001b[0m`
11
+ }
12
+
13
+ export const color = {
14
+ bold: (t: string) => paint('1', t),
15
+ dim: (t: string) => paint('2', t),
16
+ red: (t: string) => paint('31', t),
17
+ green: (t: string) => paint('32', t),
18
+ yellow: (t: string) => paint('33', t),
19
+ blue: (t: string) => paint('34', t),
20
+ cyan: (t: string) => paint('36', t),
21
+ }
22
+
23
+ export function info(message: string): void {
24
+ process.stdout.write(`${message}\n`)
25
+ }
26
+
27
+ export function step(message: string): void {
28
+ process.stdout.write(`${color.cyan('›')} ${message}\n`)
29
+ }
30
+
31
+ export function success(message: string): void {
32
+ process.stdout.write(`${color.green('✓')} ${message}\n`)
33
+ }
34
+
35
+ export function warn(message: string): void {
36
+ process.stdout.write(`${color.yellow('!')} ${message}\n`)
37
+ }
38
+
39
+ export function fail(message: string): void {
40
+ process.stdout.write(`${color.red('✗')} ${message}\n`)
41
+ }
42
+
43
+ /** Real errors (unexpected exceptions) go to stderr; report output uses fail(). */
44
+ export function errorLine(message: string): void {
45
+ // Gate color on stderr (where this writes), not stdout, so a redirected stderr
46
+ // doesn't receive ANSI codes while stdout is still a TTY.
47
+ const mark = process.stderr.isTTY && !noColor ? '\u001b[31m✗\u001b[0m' : '✗'
48
+ process.stderr.write(`${mark} ${message}\n`)
49
+ }
50
+
51
+ export function heading(message: string): void {
52
+ process.stdout.write(`\n${color.bold(message)}\n`)
53
+ }
54
+
55
+ interface ConfirmOptions {
56
+ defaultValue?: boolean
57
+ assumeYes?: boolean
58
+ }
59
+
60
+ /**
61
+ * Ask a yes/no question. In non-interactive contexts (no TTY) it resolves to
62
+ * the provided default so CI and agents never block.
63
+ */
64
+ export async function confirm(question: string, options: ConfirmOptions = {}): Promise<boolean> {
65
+ const {defaultValue = true, assumeYes = false} = options
66
+ if (assumeYes || !process.stdin.isTTY) return defaultValue
67
+
68
+ const rl = readline.createInterface({input: process.stdin, output: process.stdout})
69
+ try {
70
+ const hint = defaultValue ? 'Y/n' : 'y/N'
71
+ const answer = (await rl.question(`${question} ${color.dim(`(${hint})`)} `))
72
+ .trim()
73
+ .toLowerCase()
74
+ if (answer === '') return defaultValue
75
+ return answer === 'y' || answer === 'yes'
76
+ } finally {
77
+ rl.close()
78
+ }
79
+ }
@@ -0,0 +1,14 @@
1
+ import {readFileSync} from 'node:fs'
2
+
3
+ import type {PackageJson} from './types.js'
4
+
5
+ /**
6
+ * Reads this package's own package.json so the CLI installs the exact version
7
+ * it ships with and the real declared ranges, never invented ones. The path is
8
+ * two levels up from both src/cli (dev) and dist/cli (published), which both
9
+ * resolve to the package root.
10
+ */
11
+ export function readSelfPackage(): PackageJson {
12
+ const url = new URL('../../package.json', import.meta.url)
13
+ return JSON.parse(readFileSync(url, 'utf8')) as PackageJson
14
+ }
@@ -0,0 +1,130 @@
1
+ import {mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync} from 'node:fs'
2
+ import {tmpdir} from 'node:os'
3
+ import {join} from 'node:path'
4
+
5
+ import {afterEach, beforeEach, describe, expect, it} from 'vitest'
6
+
7
+ import {hasStylesImport, inspectStylesheet, wireStylesheet} from './styles.js'
8
+
9
+ describe('hasStylesImport', () => {
10
+ it('matches single and double quoted imports', () => {
11
+ expect(hasStylesImport(`import '@sanity/ui/styles.css'`)).toBe(true)
12
+ expect(hasStylesImport(`import "@sanity/ui/styles.css"`)).toBe(true)
13
+ expect(hasStylesImport(`import './app.css'`)).toBe(false)
14
+ })
15
+
16
+ it('matches a require of the stylesheet', () => {
17
+ expect(hasStylesImport(`require('@sanity/ui/styles.css')`)).toBe(true)
18
+ })
19
+
20
+ it('ignores a commented-out or string mention of the path', () => {
21
+ expect(hasStylesImport(`// import '@sanity/ui/styles.css'`)).toBe(false)
22
+ expect(hasStylesImport(`const note = 'see @sanity/ui/styles.css'`)).toBe(false)
23
+ })
24
+ })
25
+
26
+ describe('wireStylesheet', () => {
27
+ let dir: string
28
+ beforeEach(() => {
29
+ dir = mkdtempSync(join(tmpdir(), 'sui-styles-'))
30
+ })
31
+ afterEach(() => {
32
+ rmSync(dir, {recursive: true, force: true})
33
+ })
34
+
35
+ function write(rel: string, content: string): string {
36
+ const full = join(dir, rel)
37
+ mkdirSync(join(full, '..'), {recursive: true})
38
+ writeFileSync(full, content)
39
+ return full
40
+ }
41
+
42
+ it('inserts after the leading import block', () => {
43
+ write(
44
+ 'src/main.tsx',
45
+ `import {createRoot} from 'react-dom/client'\nimport App from './App'\n\ncreateRoot()\n`,
46
+ )
47
+ const result = wireStylesheet(dir, 'src/main.tsx')
48
+ expect(result.wrote).toBe(true)
49
+ const lines = readFileSync(join(dir, 'src/main.tsx'), 'utf8').split('\n')
50
+ expect(lines[2]).toBe(`import '@sanity/ui/styles.css'`)
51
+ })
52
+
53
+ it('inserts after a multiline import without splitting it', () => {
54
+ write(
55
+ 'src/main.tsx',
56
+ `import {\n StrictMode,\n useState,\n} from 'react'\nimport App from './App'\n\ncreateRoot()\n`,
57
+ )
58
+ wireStylesheet(dir, 'src/main.tsx')
59
+ const content = readFileSync(join(dir, 'src/main.tsx'), 'utf8')
60
+ // The import must land after the whole react import, not between its lines.
61
+ expect(content).toContain(
62
+ `} from 'react'\nimport App from './App'\nimport '@sanity/ui/styles.css'`,
63
+ )
64
+ expect(content).not.toMatch(/import \{\nimport '@sanity-labs/)
65
+ })
66
+
67
+ it('keeps a leading use-client directive first', () => {
68
+ write('app/layout.tsx', `'use client'\nimport {x} from 'y'\n`)
69
+ wireStylesheet(dir, 'app/layout.tsx')
70
+ const lines = readFileSync(join(dir, 'app/layout.tsx'), 'utf8').split('\n')
71
+ expect(lines[0]).toBe(`'use client'`)
72
+ expect(lines.includes(`import '@sanity/ui/styles.css'`)).toBe(true)
73
+ })
74
+
75
+ it('injects into astro frontmatter', () => {
76
+ write('src/layouts/Layout.astro', `---\nconst {title} = Astro.props\n---\n<html></html>\n`)
77
+ wireStylesheet(dir, 'src/layouts/Layout.astro')
78
+ const content = readFileSync(join(dir, 'src/layouts/Layout.astro'), 'utf8')
79
+ expect(content).toContain(`import '@sanity/ui/styles.css'`)
80
+ expect(content.indexOf(`import '@sanity/ui/styles.css'`)).toBeLessThan(
81
+ content.indexOf('<html>'),
82
+ )
83
+ })
84
+
85
+ it('is idempotent', () => {
86
+ write('src/main.tsx', `import App from './App'\n`)
87
+ wireStylesheet(dir, 'src/main.tsx')
88
+ const second = wireStylesheet(dir, 'src/main.tsx')
89
+ expect(second.already).toBe(true)
90
+ expect(second.wrote).toBe(false)
91
+ })
92
+
93
+ it('reports a missing entry instead of throwing', () => {
94
+ const result = wireStylesheet(dir, 'src/main.tsx')
95
+ expect(result.missing).toBe(true)
96
+ })
97
+ })
98
+
99
+ describe('inspectStylesheet', () => {
100
+ let dir: string
101
+ beforeEach(() => {
102
+ dir = mkdtempSync(join(tmpdir(), 'sui-inspect-'))
103
+ })
104
+ afterEach(() => {
105
+ rmSync(dir, {recursive: true, force: true})
106
+ })
107
+
108
+ it('finds the import in a sibling file when not in the entry', () => {
109
+ mkdirSync(join(dir, 'src'), {recursive: true})
110
+ writeFileSync(join(dir, 'src/main.tsx'), `import App from './App'\n`)
111
+ writeFileSync(join(dir, 'src/App.tsx'), `import '@sanity/ui/styles.css'\n`)
112
+ const result = inspectStylesheet(dir, 'src/main.tsx')
113
+ expect(result.imported).toBe(true)
114
+ expect(result.importedIn).toBe(join('src', 'App.tsx'))
115
+ })
116
+
117
+ it('finds the import in a nested route file', () => {
118
+ mkdirSync(join(dir, 'app/routes'), {recursive: true})
119
+ writeFileSync(join(dir, 'app/root.tsx'), `export default function Root() {}\n`)
120
+ writeFileSync(join(dir, 'app/routes/home.tsx'), `import '@sanity/ui/styles.css'\n`)
121
+ const result = inspectStylesheet(dir, 'app/root.tsx')
122
+ expect(result.imported).toBe(true)
123
+ })
124
+
125
+ it('reports missing when absent everywhere', () => {
126
+ mkdirSync(join(dir, 'src'), {recursive: true})
127
+ writeFileSync(join(dir, 'src/main.tsx'), `import App from './App'\n`)
128
+ expect(inspectStylesheet(dir, 'src/main.tsx').imported).toBe(false)
129
+ })
130
+ })