@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.
- package/README.md +201 -17
- package/bin/sanity-ui.js +14 -0
- package/dist/_chunks-es/LazyRefractor.js +20 -0
- package/dist/_chunks-es/LazyRefractor.js.map +1 -0
- package/dist/cli/checks.js +148 -0
- package/dist/cli/config.js +23 -0
- package/dist/cli/detect.js +181 -0
- package/dist/cli/doctor.js +49 -0
- package/dist/cli/index.js +69 -0
- package/dist/cli/init.js +189 -0
- package/dist/cli/install.js +78 -0
- package/dist/cli/log.js +66 -0
- package/dist/cli/selfPackage.js +11 -0
- package/dist/cli/styles.js +185 -0
- package/dist/cli/test-utils.js +8 -0
- package/dist/cli/tsconfig.js +236 -0
- package/dist/cli/types.js +1 -0
- package/dist/cli/versions.js +45 -0
- package/dist/index.d.ts +744 -2272
- package/dist/index.js +1743 -4395
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -0
- package/package.json +66 -206
- package/src/cli/checks.test.ts +38 -0
- package/src/cli/checks.ts +200 -0
- package/src/cli/config.ts +44 -0
- package/src/cli/detect.test.ts +191 -0
- package/src/cli/detect.ts +205 -0
- package/src/cli/doctor.test.ts +52 -0
- package/src/cli/doctor.ts +65 -0
- package/src/cli/index.ts +77 -0
- package/src/cli/init.ts +225 -0
- package/src/cli/install.test.ts +52 -0
- package/src/cli/install.ts +107 -0
- package/src/cli/log.ts +79 -0
- package/src/cli/selfPackage.ts +14 -0
- package/src/cli/styles.test.ts +130 -0
- package/src/cli/styles.ts +205 -0
- package/src/cli/test-utils.ts +10 -0
- package/src/cli/tsconfig.test.ts +174 -0
- package/src/cli/tsconfig.ts +282 -0
- package/src/cli/types.ts +77 -0
- package/src/cli/versions.test.ts +35 -0
- package/src/cli/versions.ts +41 -0
- package/src/components/box/Box.tsx +25 -0
- package/src/components/box/box.css +4 -0
- package/src/components/box/box.props.ts +24 -0
- package/src/components/button/Button.tsx +78 -0
- package/src/components/button/button.css +72 -0
- package/src/components/button/button.props.ts +104 -0
- package/src/components/card/Card.tsx +31 -0
- package/src/components/card/card.css +4 -0
- package/src/components/card/card.props.ts +54 -0
- package/src/components/checkbox/Checkbox.tsx +63 -0
- package/src/components/checkbox/checkbox.css +100 -0
- package/src/components/checkbox/checkbox.props.ts +25 -0
- package/src/components/code/Code.tsx +38 -0
- package/src/components/code/LazyRefractor.tsx +9 -0
- package/src/components/code/code.css +40 -0
- package/src/components/code/code.props.ts +37 -0
- package/src/components/container/Container.tsx +30 -0
- package/src/components/container/container.css +4 -0
- package/src/components/container/container.props.ts +24 -0
- package/src/components/divider/Divider.tsx +23 -0
- package/src/components/divider/divider.props.ts +9 -0
- package/src/components/eyebrow/Eyebrow.tsx +54 -0
- package/src/components/eyebrow/eyebrow.css +11 -0
- package/src/components/eyebrow/eyebrow.props.ts +24 -0
- package/src/components/flex/Flex.tsx +25 -0
- package/src/components/flex/flex.css +4 -0
- package/src/components/flex/flex.props.ts +29 -0
- package/src/components/grid/Grid.tsx +25 -0
- package/src/components/grid/grid.css +4 -0
- package/src/components/grid/grid.props.ts +29 -0
- package/src/components/h-stack/HStack.tsx +34 -0
- package/src/components/h-stack/hStack.props.ts +15 -0
- package/src/components/heading/Heading.tsx +54 -0
- package/src/components/heading/heading.css +9 -0
- package/src/components/heading/heading.props.ts +25 -0
- package/src/components/icon/Icon.tsx +24 -0
- package/src/components/icon/icon.css +17 -0
- package/src/components/icon/icon.props.ts +31 -0
- package/src/components/icon-button/IconButton.tsx +32 -0
- package/src/components/icon-button/iconButton.props.ts +26 -0
- package/src/components/index.css +25 -0
- package/src/components/indicator/Indicator.tsx +42 -0
- package/src/components/indicator/indicator.css +4 -0
- package/src/components/indicator/indicator.props.ts +20 -0
- package/src/components/indicator-stack/IndicatorStack.tsx +31 -0
- package/src/components/indicator-stack/indicator-stack.css +7 -0
- package/src/components/indicator-stack/indicatorStack.props.ts +13 -0
- package/src/components/inline/Inline.tsx +38 -0
- package/src/components/inline/inline.css +4 -0
- package/src/components/inline/inline.props.ts +96 -0
- package/src/components/label/Label.tsx +34 -0
- package/src/components/label/label.css +3 -0
- package/src/components/label/label.props.ts +19 -0
- package/src/components/link/Link.tsx +29 -0
- package/src/components/link/link.css +12 -0
- package/src/components/link/link.props.ts +23 -0
- package/src/components/list/List.tsx +167 -0
- package/src/components/list/list.css +25 -0
- package/src/components/list/list.props.ts +112 -0
- package/src/components/press-area/PressArea.tsx +29 -0
- package/src/components/press-area/press-area.css +22 -0
- package/src/components/press-area/pressArea.props.ts +14 -0
- package/src/components/radio/Radio.tsx +48 -0
- package/src/components/radio/radio.css +97 -0
- package/src/components/radio/radio.props.ts +20 -0
- package/src/components/skip-to-content/SkipToContent.tsx +35 -0
- package/src/components/skip-to-content/skip-to-content.css +9 -0
- package/src/components/skip-to-content/skipToContent.props.ts +19 -0
- package/src/components/spinner/Spinner.tsx +28 -0
- package/src/components/spinner/spinner.css +10 -0
- package/src/components/spinner/spinner.props.ts +16 -0
- package/src/components/switch/Switch.tsx +48 -0
- package/src/components/switch/switch.css +119 -0
- package/src/components/switch/switch.props.ts +20 -0
- package/src/components/text/Text.tsx +53 -0
- package/src/components/text/text.css +9 -0
- package/src/components/text/text.props.ts +24 -0
- package/src/components/tooltip/Tooltip.tsx +93 -0
- package/src/components/tooltip/tooltip.css +52 -0
- package/src/components/tooltip/tooltip.props.ts +20 -0
- package/src/components/tooltip-group/TooltipGroup.tsx +67 -0
- package/src/components/tooltip-group/tooltipGroup.props.ts +13 -0
- package/src/components/v-stack/VStack.tsx +32 -0
- package/src/components/v-stack/vStack.props.ts +15 -0
- package/src/components/visually-hidden/VisuallyHidden.tsx +29 -0
- package/src/components/visually-hidden/visually-hidden.css +9 -0
- package/src/components/visually-hidden/visuallyHidden.props.ts +19 -0
- package/src/css/classes/dynamic/flex-child.css +5 -0
- package/src/css/classes/dynamic/grid-child.css +8 -0
- package/src/css/classes/dynamic/grid-parent.css +6 -0
- package/src/css/classes/dynamic/height.css +5 -0
- package/src/css/classes/dynamic/index.css +7 -0
- package/src/css/classes/dynamic/line-clamp.css +5 -0
- package/src/css/classes/dynamic/readme.md +3 -0
- package/src/css/classes/dynamic/width.css +7 -0
- package/src/css/classes/dynamic/z-index.css +3 -0
- package/src/css/classes/generic/display.css +10 -0
- package/src/css/classes/generic/flex.css +24 -0
- package/src/css/classes/generic/grid.css +7 -0
- package/src/css/classes/generic/index.css +7 -0
- package/src/css/classes/generic/overflow.css +19 -0
- package/src/css/classes/generic/placement.css +171 -0
- package/src/css/classes/generic/position.css +7 -0
- package/src/css/classes/generic/readme.md +3 -0
- package/src/css/classes/generic/text-align.css +5 -0
- package/src/css/classes/index.css +4 -0
- package/src/css/classes/local/border.css +20 -0
- package/src/css/classes/local/index.css +4 -0
- package/src/css/classes/local/readme.md +3 -0
- package/src/css/classes/local/text-overflow.css +5 -0
- package/src/css/classes/local/text-trim.css +45 -0
- package/src/css/classes/local/tone.css +75 -0
- package/src/css/classes/system/color.css +223 -0
- package/src/css/classes/system/container.css +8 -0
- package/src/css/classes/system/font-family.css +2 -0
- package/src/css/classes/system/font-weight.css +4 -0
- package/src/css/classes/system/gap.css +37 -0
- package/src/css/classes/system/index.css +10 -0
- package/src/css/classes/system/inset.css +56 -0
- package/src/css/classes/system/margin.css +148 -0
- package/src/css/classes/system/padding.css +78 -0
- package/src/css/classes/system/radius.css +10 -0
- package/src/css/classes/system/readme.md +3 -0
- package/src/css/classes/system/shadow.css +6 -0
- package/src/css/classes/system/typography.css +31 -0
- package/src/css/global/font-face.css +20 -0
- package/src/css/global/index.css +2 -0
- package/src/css/global/reset.css +74 -0
- package/src/css/tokens/index.css +3 -0
- package/src/css/tokens/opacity.css +6 -0
- package/src/css/tokens/semantic.css +21 -0
- package/src/css/tokens/surface.css +27 -0
- package/src/index.css +18 -0
- package/src/index.ts +60 -0
- package/src/props/border.ts +51 -0
- package/src/props/flexChild.ts +29 -0
- package/src/props/flexParent.ts +47 -0
- package/src/props/gap.ts +31 -0
- package/src/props/gridChild.ts +50 -0
- package/src/props/gridParent.ts +45 -0
- package/src/props/height.ts +29 -0
- package/src/props/layout.ts +44 -0
- package/src/props/margin.ts +59 -0
- package/src/props/overflow.ts +30 -0
- package/src/props/padding.ts +59 -0
- package/src/props/placement.ts +16 -0
- package/src/props/position.ts +52 -0
- package/src/props/shadow.ts +15 -0
- package/src/props/tone.ts +15 -0
- package/src/props/typography.ts +62 -0
- package/src/props/width.ts +29 -0
- package/src/props/zIndex.ts +15 -0
- package/src/styles.css.d.ts +1 -0
- package/src/styles.css.node.js +2 -0
- package/src/styles.css.test.ts +24 -0
- package/src/types/Button.ts +8 -0
- package/src/types/Code.ts +6 -0
- package/src/types/Container.ts +3 -0
- package/src/types/Density.ts +3 -0
- package/src/types/Display.ts +11 -0
- package/src/types/Eyebrow.ts +3 -0
- package/src/types/Flex.ts +22 -0
- package/src/types/FontWeight.ts +3 -0
- package/src/types/Grid.ts +3 -0
- package/src/types/Heading.ts +6 -0
- package/src/types/Icon.ts +3 -0
- package/src/types/Interactive.ts +8 -0
- package/src/types/List.ts +2 -0
- package/src/types/Overflow.ts +3 -0
- package/src/types/Placement.ts +16 -0
- package/src/types/Position.ts +3 -0
- package/src/types/PropDef.ts +73 -0
- package/src/types/Radius.ts +3 -0
- package/src/types/Responsive.ts +10 -0
- package/src/types/Shadow.ts +3 -0
- package/src/types/Space.ts +15 -0
- package/src/types/Text.ts +3 -0
- package/src/types/TextAlign.ts +3 -0
- package/src/types/Tone.ts +3 -0
- package/src/utils/getProps.test.ts +156 -0
- package/src/utils/getProps.ts +156 -0
- package/src/utils/suffixClassName.ts +5 -0
- package/src/version.ts +3 -0
- package/LICENSE +0 -21
- package/dist/_chunks-cjs/refractor.cjs +0 -22
- package/dist/_chunks-cjs/refractor.cjs.map +0 -1
- package/dist/_chunks-es/refractor.js +0 -25
- package/dist/_chunks-es/refractor.js.map +0 -1
- package/dist/css/index.cjs +0 -966
- package/dist/css/index.cjs.map +0 -1
- package/dist/css/index.css +0 -23387
- package/dist/css/index.css.map +0 -1
- package/dist/css/index.d.cts +0 -1394
- package/dist/css/index.d.ts +0 -1394
- package/dist/css/index.js +0 -967
- package/dist/css/index.js.map +0 -1
- package/dist/index.cjs +0 -4515
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -2521
- package/dist/theme.cjs +0 -870
- package/dist/theme.cjs.map +0 -1
- package/dist/theme.d.cts +0 -499
- package/dist/theme.d.ts +0 -499
- package/dist/theme.js +0 -870
- package/dist/theme.js.map +0 -1
- package/exports/css.ts +0 -1
- package/exports/index.ts +0 -1
- package/exports/theme.ts +0 -1
- package/src/core/Root.tsx +0 -88
- package/src/core/RootProvider.tsx +0 -40
- package/src/core/__workshop__/boundary.tsx +0 -28
- package/src/core/__workshop__/index.ts +0 -16
- package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
- package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -131
- package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -91
- package/src/core/components/autocomplete/__workshop__/example.tsx +0 -80
- package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
- package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -292
- package/src/core/components/autocomplete/__workshop__/index.ts +0 -41
- package/src/core/components/autocomplete/__workshop__/mock/apiStore.ts +0 -49
- package/src/core/components/autocomplete/__workshop__/mock/countries.ts +0 -245
- package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
- package/src/core/components/autocomplete/autocomplete.tsx +0 -690
- package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
- package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
- package/src/core/components/autocomplete/constants.ts +0 -28
- package/src/core/components/autocomplete/types.ts +0 -103
- package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -61
- package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -16
- package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -131
- package/src/core/components/dialog/__workshop__/activate.tsx +0 -141
- package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
- package/src/core/components/dialog/__workshop__/index.ts +0 -21
- package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
- package/src/core/components/dialog/__workshop__/nested.tsx +0 -71
- package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -51
- package/src/core/components/dialog/__workshop__/panes.tsx +0 -89
- package/src/core/components/dialog/__workshop__/position.tsx +0 -30
- package/src/core/components/dialog/__workshop__/props.tsx +0 -77
- package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
- package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
- package/src/core/components/dialog/dialog.tsx +0 -232
- package/src/core/components/dialog/dialogCard.tsx +0 -233
- package/src/core/components/dialog/dialogContext.ts +0 -21
- package/src/core/components/dialog/dialogProvider.tsx +0 -34
- package/src/core/components/dialog/isTargetWithinScope.ts +0 -14
- package/src/core/components/dialog/types.ts +0 -2
- package/src/core/components/dialog/useDialog.ts +0 -11
- package/src/core/components/hotkeys/__workshop__/index.ts +0 -16
- package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
- package/src/core/components/hotkeys/hotkeys.tsx +0 -60
- package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
- package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -57
- package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -47
- package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -133
- package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
- package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -35
- package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
- package/src/core/components/menu/__workshop__/groups.tsx +0 -156
- package/src/core/components/menu/__workshop__/index.ts +0 -91
- package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
- package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -65
- package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
- package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -50
- package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
- package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -42
- package/src/core/components/menu/__workshop__/tones.tsx +0 -25
- package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
- package/src/core/components/menu/helpers.ts +0 -82
- package/src/core/components/menu/menu.test.tsx +0 -129
- package/src/core/components/menu/menu.tsx +0 -179
- package/src/core/components/menu/menuButton.tsx +0 -225
- package/src/core/components/menu/menuContext.ts +0 -19
- package/src/core/components/menu/menuDivider.tsx +0 -32
- package/src/core/components/menu/menuGroup.tsx +0 -233
- package/src/core/components/menu/menuItem.tsx +0 -184
- package/src/core/components/menu/useMenu.ts +0 -21
- package/src/core/components/menu/useMenuController.ts +0 -241
- package/src/core/components/tab/__workshop__/example.tsx +0 -79
- package/src/core/components/tab/__workshop__/index.ts +0 -16
- package/src/core/components/tab/tab.tsx +0 -109
- package/src/core/components/tab/tabList.tsx +0 -90
- package/src/core/components/tab/tabPanel.tsx +0 -47
- package/src/core/components/toast/__workshop__/hook.tsx +0 -71
- package/src/core/components/toast/__workshop__/index.ts +0 -21
- package/src/core/components/toast/__workshop__/toast.tsx +0 -26
- package/src/core/components/toast/toast.test.tsx +0 -103
- package/src/core/components/toast/toast.tsx +0 -191
- package/src/core/components/toast/toastContext.ts +0 -7
- package/src/core/components/toast/toastLayer.tsx +0 -54
- package/src/core/components/toast/toastProvider.tsx +0 -112
- package/src/core/components/toast/toastState.ts +0 -6
- package/src/core/components/toast/types.ts +0 -24
- package/src/core/components/toast/useToast.ts +0 -23
- package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
- package/src/core/components/tree/__workshop__/basic.tsx +0 -105
- package/src/core/components/tree/__workshop__/index.ts +0 -23
- package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
- package/src/core/components/tree/helpers.ts +0 -105
- package/src/core/components/tree/tree.tsx +0 -248
- package/src/core/components/tree/treeContext.ts +0 -10
- package/src/core/components/tree/treeGroup.tsx +0 -46
- package/src/core/components/tree/treeItem.tsx +0 -237
- package/src/core/components/tree/types.ts +0 -24
- package/src/core/components/tree/useTree.ts +0 -17
- package/src/core/components/virtualList/__workshop__/changingProps.tsx +0 -36
- package/src/core/components/virtualList/__workshop__/elementScroll.tsx +0 -24
- package/src/core/components/virtualList/__workshop__/index.ts +0 -31
- package/src/core/components/virtualList/__workshop__/infiniteList.tsx +0 -48
- package/src/core/components/virtualList/__workshop__/windowScrolll.tsx +0 -22
- package/src/core/components/virtualList/virtualList.tsx +0 -209
- package/src/core/constants.ts +0 -67
- package/src/core/helpers/animation.ts +0 -27
- package/src/core/helpers/element.ts +0 -55
- package/src/core/helpers/focus.ts +0 -92
- package/src/core/helpers/props.ts +0 -28
- package/src/core/helpers/scroll.ts +0 -15
- package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -114
- package/src/core/hooks/useClickOutsideEvent.ts +0 -67
- package/src/core/hooks/useCustomValidity.ts +0 -13
- package/src/core/hooks/useDelayed.test.ts +0 -67
- package/src/core/hooks/useDelayedState.ts +0 -28
- package/src/core/hooks/useElementSize.ts +0 -19
- package/src/core/hooks/useGlobalKeyDown.ts +0 -17
- package/src/core/hooks/useMatchMedia.ts +0 -28
- package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -16
- package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
- package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -21
- package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -107
- package/src/core/hooks/useMounted.ts +0 -15
- package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
- package/src/core/hooks/usePrefersDark.test.tsx +0 -20
- package/src/core/hooks/usePrefersDark.ts +0 -16
- package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
- package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -20
- package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
- package/src/core/hooks/useResponsiveProp.ts +0 -28
- package/src/core/index.ts +0 -115
- package/src/core/lib/createGlobalScopedContext.ts +0 -37
- package/src/core/lib/globalScope.ts +0 -19
- package/src/core/lib/isArray.ts +0 -3
- package/src/core/lib/isRecord.ts +0 -3
- package/src/core/middleware/origin.ts +0 -47
- package/src/core/observers/elementSize.ts +0 -116
- package/src/core/observers/resize.ts +0 -9
- package/src/core/primitives/arrow/arrow.tsx +0 -74
- package/src/core/primitives/arrow/cmds.ts +0 -91
- package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
- package/src/core/primitives/avatar/__workshop__/index.ts +0 -31
- package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
- package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -55
- package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -72
- package/src/core/primitives/avatar/avatar.tsx +0 -147
- package/src/core/primitives/avatar/avatarCounter.tsx +0 -69
- package/src/core/primitives/avatar/avatarStack.tsx +0 -79
- package/src/core/primitives/avatar/types.ts +0 -2
- package/src/core/primitives/badge/__workshop__/index.ts +0 -21
- package/src/core/primitives/badge/__workshop__/props.tsx +0 -19
- package/src/core/primitives/badge/__workshop__/tones.tsx +0 -16
- package/src/core/primitives/badge/badge.test.tsx +0 -16
- package/src/core/primitives/badge/badge.tsx +0 -61
- package/src/core/primitives/box/__workshop__/index.ts +0 -21
- package/src/core/primitives/box/__workshop__/props.tsx +0 -20
- package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
- package/src/core/primitives/box/box.tsx +0 -222
- package/src/core/primitives/button/__workshop__/custom.tsx +0 -27
- package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
- package/src/core/primitives/button/__workshop__/disabled.tsx +0 -54
- package/src/core/primitives/button/__workshop__/index.ts +0 -66
- package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
- package/src/core/primitives/button/__workshop__/props.tsx +0 -55
- package/src/core/primitives/button/__workshop__/sanityUploadButton.tsx +0 -36
- package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
- package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
- package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
- package/src/core/primitives/button/__workshop__/textOverflow.tsx +0 -13
- package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -29
- package/src/core/primitives/button/button.test.tsx +0 -30
- package/src/core/primitives/button/button.tsx +0 -193
- package/src/core/primitives/button/types.ts +0 -2
- package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
- package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
- package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
- package/src/core/primitives/card/__workshop__/index.ts +0 -20
- package/src/core/primitives/card/__workshop__/interactive.tsx +0 -29
- package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -78
- package/src/core/primitives/card/__workshop__/props.tsx +0 -52
- package/src/core/primitives/card/__workshop__/selected.tsx +0 -62
- package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
- package/src/core/primitives/card/__workshop__/tones.tsx +0 -27
- package/src/core/primitives/card/card.tsx +0 -109
- package/src/core/primitives/card/cardContext.ts +0 -10
- package/src/core/primitives/card/cardProvider.tsx +0 -27
- package/src/core/primitives/card/types.ts +0 -17
- package/src/core/primitives/card/useCard.ts +0 -15
- package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
- package/src/core/primitives/checkbox/__workshop__/index.ts +0 -15
- package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -35
- package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
- package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -27
- package/src/core/primitives/checkbox/checkbox.tsx +0 -80
- package/src/core/primitives/code/__workshop__/index.ts +0 -21
- package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -23
- package/src/core/primitives/code/__workshop__/props.tsx +0 -18
- package/src/core/primitives/code/code.tsx +0 -48
- package/src/core/primitives/code/refractor.tsx +0 -18
- package/src/core/primitives/container/__workshop__/example.tsx +0 -20
- package/src/core/primitives/container/__workshop__/index.ts +0 -10
- package/src/core/primitives/container/container.tsx +0 -37
- package/src/core/primitives/container/types.ts +0 -6
- package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
- package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
- package/src/core/primitives/flex/__workshop__/index.ts +0 -13
- package/src/core/primitives/flex/flex.tsx +0 -58
- package/src/core/primitives/grid/__workshop__/index.ts +0 -12
- package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
- package/src/core/primitives/grid/grid.tsx +0 -35
- package/src/core/primitives/heading/__workshop__/index.ts +0 -21
- package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
- package/src/core/primitives/heading/__workshop__/plain.tsx +0 -29
- package/src/core/primitives/heading/heading.tsx +0 -78
- package/src/core/primitives/inline/__workshop__/index.ts +0 -10
- package/src/core/primitives/inline/__workshop__/plain.tsx +0 -24
- package/src/core/primitives/inline/inline.tsx +0 -62
- package/src/core/primitives/kbd/__workshop__/index.ts +0 -10
- package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
- package/src/core/primitives/kbd/kbd.tsx +0 -57
- package/src/core/primitives/label/__workshop__/index.ts +0 -21
- package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -54
- package/src/core/primitives/label/__workshop__/plain.tsx +0 -28
- package/src/core/primitives/label/label.tsx +0 -75
- package/src/core/primitives/layer/__workshop__/_debug.tsx +0 -17
- package/src/core/primitives/layer/__workshop__/index.ts +0 -26
- package/src/core/primitives/layer/__workshop__/multipleRoots.tsx +0 -49
- package/src/core/primitives/layer/__workshop__/nested.tsx +0 -98
- package/src/core/primitives/layer/__workshop__/responsiveZOffset.tsx +0 -17
- package/src/core/primitives/layer/getLayerContext.test.ts +0 -32
- package/src/core/primitives/layer/getLayerContext.ts +0 -21
- package/src/core/primitives/layer/layer.test.tsx +0 -110
- package/src/core/primitives/layer/layer.tsx +0 -42
- package/src/core/primitives/layer/layerCard.tsx +0 -90
- package/src/core/primitives/layer/layerContext.ts +0 -7
- package/src/core/primitives/layer/layerProvider.tsx +0 -106
- package/src/core/primitives/layer/types.ts +0 -9
- package/src/core/primitives/layer/useLayer.ts +0 -24
- package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
- package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
- package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
- package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
- package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
- package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -69
- package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -96
- package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -100
- package/src/core/primitives/popover/__workshop__/index.ts +0 -51
- package/src/core/primitives/popover/constants.ts +0 -22
- package/src/core/primitives/popover/floating-ui/size.ts +0 -83
- package/src/core/primitives/popover/helpers.ts +0 -32
- package/src/core/primitives/popover/popover.tsx +0 -443
- package/src/core/primitives/popover/popoverLayer.tsx +0 -149
- package/src/core/primitives/popover/types.ts +0 -12
- package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
- package/src/core/primitives/radio/__workshop__/index.ts +0 -13
- package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
- package/src/core/primitives/radio/radio.tsx +0 -64
- package/src/core/primitives/select/__workshop__/index.ts +0 -13
- package/src/core/primitives/select/__workshop__/plain.tsx +0 -39
- package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
- package/src/core/primitives/select/select.tsx +0 -75
- package/src/core/primitives/selectable/selectable.tsx +0 -50
- package/src/core/primitives/skeleton/__workshop__/delay.tsx +0 -70
- package/src/core/primitives/skeleton/__workshop__/index.ts +0 -13
- package/src/core/primitives/skeleton/__workshop__/skeleton.tsx +0 -64
- package/src/core/primitives/skeleton/codeSkeleton.tsx +0 -49
- package/src/core/primitives/skeleton/headingSkeleton.tsx +0 -48
- package/src/core/primitives/skeleton/labelSkeleton.tsx +0 -47
- package/src/core/primitives/skeleton/skeleton.tsx +0 -70
- package/src/core/primitives/skeleton/textSkeleton.tsx +0 -49
- package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
- package/src/core/primitives/spinner/__workshop__/index.ts +0 -16
- package/src/core/primitives/spinner/animatedSpinnerIcon.tsx +0 -14
- package/src/core/primitives/spinner/spinner.tsx +0 -45
- package/src/core/primitives/srOnly/srOnly.tsx +0 -33
- package/src/core/primitives/stack/__workshop__/index.ts +0 -16
- package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
- package/src/core/primitives/stack/stack.tsx +0 -60
- package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
- package/src/core/primitives/switch/__workshop__/index.ts +0 -13
- package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
- package/src/core/primitives/switch/switch.tsx +0 -84
- package/src/core/primitives/text/__workshop__/colored.tsx +0 -23
- package/src/core/primitives/text/__workshop__/example.tsx +0 -28
- package/src/core/primitives/text/__workshop__/index.ts +0 -26
- package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -23
- package/src/core/primitives/text/text.tsx +0 -76
- package/src/core/primitives/textArea/__workshop__/index.ts +0 -16
- package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -61
- package/src/core/primitives/textArea/textArea.tsx +0 -84
- package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
- package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
- package/src/core/primitives/textInput/__workshop__/index.ts +0 -46
- package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -110
- package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
- package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
- package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
- package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
- package/src/core/primitives/textInput/textInput.tsx +0 -258
- package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
- package/src/core/primitives/tooltip/__workshop__/index.ts +0 -31
- package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
- package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -112
- package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
- package/src/core/primitives/tooltip/constants.ts +0 -23
- package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
- package/src/core/primitives/tooltip/tooltip.tsx +0 -482
- package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
- package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -13
- package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -55
- package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
- package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
- package/src/core/primitives/tooltip/tooltipLayer.tsx +0 -106
- package/src/core/types.ts +0 -56
- package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -16
- package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
- package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -102
- package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -10
- package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -18
- package/src/core/utils/boundaryElement/types.ts +0 -5
- package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -24
- package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -41
- package/src/core/utils/elementQuery/__workshop__/index.ts +0 -16
- package/src/core/utils/elementQuery/elementQuery.tsx +0 -75
- package/src/core/utils/elementQuery/helpers.ts +0 -27
- package/src/core/utils/errorBoundary.tsx +0 -50
- package/src/core/utils/getElementRef.ts +0 -29
- package/src/core/utils/portal/__workshop__/index.ts +0 -16
- package/src/core/utils/portal/__workshop__/named.tsx +0 -63
- package/src/core/utils/portal/portal.test.tsx +0 -105
- package/src/core/utils/portal/portal.tsx +0 -36
- package/src/core/utils/portal/portalContext.ts +0 -37
- package/src/core/utils/portal/portalProvider.tsx +0 -70
- package/src/core/utils/portal/types.ts +0 -7
- package/src/core/utils/portal/usePortal.ts +0 -23
- package/src/css/_assign.ts +0 -3
- package/src/css/_composeClassNames.ts +0 -12
- package/src/css/_fromEntries.ts +0 -3
- package/src/css/_getClassNames.ts +0 -9
- package/src/css/_responsiveClassName.ts +0 -45
- package/src/css/_responsiveStyle.css.ts +0 -34
- package/src/css/_style.css.ts +0 -9
- package/src/css/components/breadcrumbs/breadcrumbs.css.ts +0 -6
- package/src/css/components/breadcrumbs/breadcrumbs.ts +0 -7
- package/src/css/components/dialog/dialog.css.ts +0 -98
- package/src/css/components/dialog/dialog.ts +0 -58
- package/src/css/components/menu/menu.css.ts +0 -14
- package/src/css/components/menu/menu.ts +0 -12
- package/src/css/components/skeleton/skeleton.css.ts +0 -128
- package/src/css/components/skeleton/skeleton.ts +0 -38
- package/src/css/components/skeleton/types.ts +0 -36
- package/src/css/components/toast/toast.css.ts +0 -17
- package/src/css/components/toast/toast.ts +0 -11
- package/src/css/components/tree/tree.css.ts +0 -65
- package/src/css/components/tree/tree.ts +0 -7
- package/src/css/constants.ts +0 -10
- package/src/css/getVarName.ts +0 -27
- package/src/css/index.ts +0 -146
- package/src/css/layers.css.ts +0 -12
- package/src/css/primitives/_arrow/_arrow.css.ts +0 -68
- package/src/css/primitives/_arrow/_arrow.ts +0 -26
- package/src/css/primitives/_input/_input.css.ts +0 -261
- package/src/css/primitives/_input/input.ts +0 -29
- package/src/css/primitives/_input/types.ts +0 -13
- package/src/css/primitives/avatar/avatar.css.ts +0 -201
- package/src/css/primitives/avatar/avatar.ts +0 -68
- package/src/css/primitives/avatar/types.ts +0 -10
- package/src/css/primitives/badge/badge.css.ts +0 -27
- package/src/css/primitives/badge/badge.ts +0 -8
- package/src/css/primitives/badge/types.ts +0 -13
- package/src/css/primitives/box/box.css.ts +0 -19
- package/src/css/primitives/box/box.ts +0 -82
- package/src/css/primitives/box/types.ts +0 -75
- package/src/css/primitives/button/button.css.ts +0 -287
- package/src/css/primitives/button/button.ts +0 -26
- package/src/css/primitives/button/types.ts +0 -12
- package/src/css/primitives/card/__workshop__/color.tsx +0 -75
- package/src/css/primitives/card/__workshop__/index.ts +0 -16
- package/src/css/primitives/card/card.css.ts +0 -387
- package/src/css/primitives/card/card.ts +0 -13
- package/src/css/primitives/card/types.ts +0 -9
- package/src/css/primitives/checkbox/checkbox.css.ts +0 -193
- package/src/css/primitives/checkbox/checkbox.ts +0 -17
- package/src/css/primitives/code/code.css.ts +0 -272
- package/src/css/primitives/code/code.ts +0 -19
- package/src/css/primitives/code/types.ts +0 -11
- package/src/css/primitives/container/container.css.ts +0 -4
- package/src/css/primitives/container/container.ts +0 -17
- package/src/css/primitives/container/types.ts +0 -9
- package/src/css/primitives/heading/heading.css.ts +0 -86
- package/src/css/primitives/heading/heading.ts +0 -22
- package/src/css/primitives/heading/types.ts +0 -14
- package/src/css/primitives/kbd/kbd.css.ts +0 -16
- package/src/css/primitives/kbd/kbd.ts +0 -9
- package/src/css/primitives/kbd/types.ts +0 -6
- package/src/css/primitives/label/label.css.ts +0 -87
- package/src/css/primitives/label/label.ts +0 -22
- package/src/css/primitives/label/types.ts +0 -14
- package/src/css/primitives/popover/popover.css.ts +0 -6
- package/src/css/primitives/popover/popover.ts +0 -12
- package/src/css/primitives/radio/radio.css.ts +0 -78
- package/src/css/primitives/radio/radio.ts +0 -17
- package/src/css/primitives/root/root.css.ts +0 -19
- package/src/css/primitives/root/root.ts +0 -17
- package/src/css/primitives/root/types.ts +0 -10
- package/src/css/primitives/select/select.css.ts +0 -24
- package/src/css/primitives/select/select.ts +0 -14
- package/src/css/primitives/select/types.ts +0 -5
- package/src/css/primitives/selectable/selectable.css.ts +0 -131
- package/src/css/primitives/selectable/selectable.ts +0 -9
- package/src/css/primitives/selectable/types.ts +0 -9
- package/src/css/primitives/spinner/spinner.css.ts +0 -19
- package/src/css/primitives/spinner/spinner.ts +0 -13
- package/src/css/primitives/spinner/types.ts +0 -4
- package/src/css/primitives/srOnly/srOnly.css.ts +0 -10
- package/src/css/primitives/srOnly/srOnly.ts +0 -7
- package/src/css/primitives/stack/stack.css.ts +0 -6
- package/src/css/primitives/stack/stack.ts +0 -7
- package/src/css/primitives/switch/switch.css.ts +0 -98
- package/src/css/primitives/switch/switch.ts +0 -27
- package/src/css/primitives/text/text.css.ts +0 -86
- package/src/css/primitives/text/text.ts +0 -24
- package/src/css/primitives/text/types.ts +0 -18
- package/src/css/primitives/textArea/textArea.css.ts +0 -4
- package/src/css/primitives/textArea/textArea.ts +0 -9
- package/src/css/primitives/textArea/types.ts +0 -7
- package/src/css/primitives/textInput/textInput.css.ts +0 -43
- package/src/css/primitives/textInput/textInput.ts +0 -24
- package/src/css/primitives/textInput/types.ts +0 -7
- package/src/css/primitives/tooltip/tooltip.css.ts +0 -4
- package/src/css/primitives/tooltip/tooltip.ts +0 -8
- package/src/css/primitives/tooltip/types.ts +0 -4
- package/src/css/props/alignItems/alignItems.css.ts +0 -22
- package/src/css/props/alignItems/alignItems.ts +0 -8
- package/src/css/props/alignItems/types.ts +0 -9
- package/src/css/props/border/border.css.ts +0 -65
- package/src/css/props/border/border.ts +0 -21
- package/src/css/props/border/types.ts +0 -13
- package/src/css/props/boxSizing/boxSizing.css.ts +0 -12
- package/src/css/props/boxSizing/boxSizing.ts +0 -7
- package/src/css/props/boxSizing/types.ts +0 -7
- package/src/css/props/display/display.css.ts +0 -56
- package/src/css/props/display/display.ts +0 -8
- package/src/css/props/display/types.ts +0 -16
- package/src/css/props/flex/flex.css.ts +0 -52
- package/src/css/props/flex/flex.ts +0 -8
- package/src/css/props/flex/types.ts +0 -9
- package/src/css/props/flexDirection/flexDirection.css.ts +0 -19
- package/src/css/props/flexDirection/flexDirection.ts +0 -8
- package/src/css/props/flexDirection/types.ts +0 -9
- package/src/css/props/flexWrap/flexWrap.css.ts +0 -16
- package/src/css/props/flexWrap/flexWrap.ts +0 -8
- package/src/css/props/flexWrap/types.ts +0 -9
- package/src/css/props/font/font.css.ts +0 -94
- package/src/css/props/font/font.ts +0 -8
- package/src/css/props/font/types.ts +0 -6
- package/src/css/props/gap/gap.css.ts +0 -40
- package/src/css/props/gap/gap.ts +0 -13
- package/src/css/props/gap/types.ts +0 -10
- package/src/css/props/gridAutoColumns/gridAutoColumns.css.ts +0 -19
- package/src/css/props/gridAutoColumns/gridAutoColumns.ts +0 -8
- package/src/css/props/gridAutoColumns/types.ts +0 -9
- package/src/css/props/gridAutoFlow/gridAutoFlow.css.ts +0 -19
- package/src/css/props/gridAutoFlow/gridAutoFlow.ts +0 -8
- package/src/css/props/gridAutoFlow/types.ts +0 -9
- package/src/css/props/gridAutoRows/gridAutoRows.css.ts +0 -19
- package/src/css/props/gridAutoRows/gridAutoRows.ts +0 -8
- package/src/css/props/gridAutoRows/types.ts +0 -9
- package/src/css/props/gridColumn/gridColumn.css.ts +0 -49
- package/src/css/props/gridColumn/gridColumn.ts +0 -8
- package/src/css/props/gridColumn/types.ts +0 -9
- package/src/css/props/gridColumnEnd/gridColumnEnd.css.ts +0 -46
- package/src/css/props/gridColumnEnd/gridColumnEnd.ts +0 -8
- package/src/css/props/gridColumnEnd/types.ts +0 -9
- package/src/css/props/gridColumnStart/gridColumnStart.css.ts +0 -46
- package/src/css/props/gridColumnStart/gridColumnStart.ts +0 -8
- package/src/css/props/gridColumnStart/types.ts +0 -9
- package/src/css/props/gridRow/gridRow.css.ts +0 -49
- package/src/css/props/gridRow/gridRow.ts +0 -8
- package/src/css/props/gridRow/types.ts +0 -9
- package/src/css/props/gridRowEnd/gridRowEnd.css.ts +0 -46
- package/src/css/props/gridRowEnd/gridRowEnd.ts +0 -8
- package/src/css/props/gridRowEnd/types.ts +0 -9
- package/src/css/props/gridRowStart/gridRowStart.css.ts +0 -46
- package/src/css/props/gridRowStart/gridRowStart.ts +0 -8
- package/src/css/props/gridRowStart/types.ts +0 -9
- package/src/css/props/gridTemplateColumns/gridTemplateColumns.css.ts +0 -43
- package/src/css/props/gridTemplateColumns/gridTemplateColumns.ts +0 -8
- package/src/css/props/gridTemplateColumns/types.ts +0 -9
- package/src/css/props/gridTemplateRows/gridTemplateRows.css.ts +0 -43
- package/src/css/props/gridTemplateRows/gridTemplateRows.ts +0 -8
- package/src/css/props/gridTemplateRows/types.ts +0 -9
- package/src/css/props/height/height.css.ts +0 -25
- package/src/css/props/height/height.ts +0 -8
- package/src/css/props/height/types.ts +0 -9
- package/src/css/props/inset/inset.css.ts +0 -37
- package/src/css/props/inset/inset.ts +0 -21
- package/src/css/props/inset/types.ts +0 -13
- package/src/css/props/justifyContent/justifyContent.css.ts +0 -25
- package/src/css/props/justifyContent/justifyContent.ts +0 -8
- package/src/css/props/justifyContent/types.ts +0 -15
- package/src/css/props/margin/margin.css.ts +0 -117
- package/src/css/props/margin/margin.ts +0 -25
- package/src/css/props/margin/types.ts +0 -17
- package/src/css/props/maxWidth/maxWidth.css.ts +0 -32
- package/src/css/props/maxWidth/maxWidth.ts +0 -8
- package/src/css/props/maxWidth/types.ts +0 -11
- package/src/css/props/minHeight/minHeight.css.ts +0 -13
- package/src/css/props/minHeight/minHeight.ts +0 -8
- package/src/css/props/minHeight/types.ts +0 -9
- package/src/css/props/minWidth/minWidth.css.ts +0 -25
- package/src/css/props/minWidth/minWidth.ts +0 -8
- package/src/css/props/minWidth/types.ts +0 -9
- package/src/css/props/outline/outline.css.ts +0 -10
- package/src/css/props/outline/outline.ts +0 -8
- package/src/css/props/outline/types.ts +0 -7
- package/src/css/props/overflow/overflow.css.ts +0 -16
- package/src/css/props/overflow/overflow.ts +0 -8
- package/src/css/props/overflow/types.ts +0 -11
- package/src/css/props/padding/padding.css.ts +0 -87
- package/src/css/props/padding/padding.ts +0 -25
- package/src/css/props/padding/types.ts +0 -17
- package/src/css/props/pointerEvents/pointerEvents.css.ts +0 -13
- package/src/css/props/pointerEvents/pointerEvents.ts +0 -8
- package/src/css/props/pointerEvents/types.ts +0 -7
- package/src/css/props/position/position.css.ts +0 -22
- package/src/css/props/position/position.ts +0 -8
- package/src/css/props/position/types.ts +0 -9
- package/src/css/props/radius/radius.css.ts +0 -21
- package/src/css/props/radius/radius.ts +0 -8
- package/src/css/props/radius/types.ts +0 -8
- package/src/css/props/shadow/shadow.css.ts +0 -23
- package/src/css/props/shadow/shadow.ts +0 -8
- package/src/css/props/shadow/types.ts +0 -8
- package/src/css/props/textAlign/textAlign.css.ts +0 -22
- package/src/css/props/textAlign/textAlign.ts +0 -8
- package/src/css/props/textAlign/types.ts +0 -7
- package/src/css/props/textOverflow/textOverflow.css.ts +0 -19
- package/src/css/props/textOverflow/textOverflow.ts +0 -8
- package/src/css/props/textOverflow/types.ts +0 -12
- package/src/css/props/width/types.ts +0 -11
- package/src/css/props/width/width.css.ts +0 -31
- package/src/css/props/width/width.ts +0 -8
- package/src/css/theme/buildCSSTheme.ts +0 -488
- package/src/css/theme/defaultTheme.css.ts +0 -64
- package/src/css/types.ts +0 -427
- package/src/css/vars.css.ts +0 -676
- package/src/theme/_parseColorToken.ts +0 -180
- package/src/theme/buildTheme.ts +0 -32
- package/src/theme/constants.ts +0 -90
- package/src/theme/defaults/color.ts +0 -197
- package/src/theme/defaults/common.ts +0 -71
- package/src/theme/defaults/fonts.ts +0 -250
- package/src/theme/index.ts +0 -5
- package/src/theme/merge.ts +0 -24
- package/src/theme/resolveTokens.ts +0 -204
- package/src/theme/types.ts +0 -366
package/src/cli/init.ts
ADDED
|
@@ -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
|
+
})
|