@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/README.md
CHANGED
|
@@ -1,31 +1,215 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Sanity UI 5
|
|
2
2
|
|
|
3
|
-
The Sanity
|
|
3
|
+
The next version of Sanity's component library. Faster, simpler, and built on CSS instead of styled-components.
|
|
4
|
+
|
|
5
|
+
## What's different from v3
|
|
6
|
+
|
|
7
|
+
- **CSS classes instead of styled-components.** No runtime style generation. Smaller bundles, faster renders.
|
|
8
|
+
- **Direct props for layout.** Width, height, position, border, and overflow are first-class props — no more `style={{ ... }}` escape hatches.
|
|
9
|
+
- **Works alongside v3.** Both versions run in the same app, in the same component tree. No forced migration.
|
|
10
|
+
|
|
11
|
+
Requires React 19.2+ and Node >=20.19 <22 || >=22.12.
|
|
12
|
+
|
|
13
|
+
## For new apps
|
|
14
|
+
|
|
15
|
+
### Install
|
|
16
|
+
|
|
17
|
+
#### Recommended: the setup CLI
|
|
4
18
|
|
|
5
19
|
```sh
|
|
6
|
-
|
|
20
|
+
npx @sanity/ui@alpha init
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`init` detects your framework and package manager, checks your React and Node versions, then installs the package along with `@sanity/icons`, adds the stylesheet import to your entry file, reconciles `tsconfig.json`, and writes a `sanity-ui.json`. It prints a plan and asks before changing anything.
|
|
24
|
+
|
|
25
|
+
`@sanity/icons` is a dependency of this package, so your package manager installs it either way. `init` also adds it to your own `package.json` because you import icons directly to pass to components, and under pnpm an import that isn't declared in your project doesn't resolve.
|
|
26
|
+
|
|
27
|
+
- `--dry` print the plan and exit without changing anything
|
|
28
|
+
- `--yes` accept every prompt with its default (non-interactive, for CI and agents)
|
|
29
|
+
- `--cwd <dir>` run against another directory
|
|
30
|
+
|
|
31
|
+
#### Manual
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
pnpm add @sanity/ui@alpha
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Using npm or yarn? Use `npm add` or `yarn add` instead. (`init` above picks the right one for you.)
|
|
7
38
|
|
|
8
|
-
|
|
9
|
-
|
|
39
|
+
Then import the stylesheet at your app entry point. Without it, components render as unstyled HTML.
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import '@sanity/ui/styles.css'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Usage
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import {Box, Flex, Card, Heading, Text, Button} from '@sanity/ui'
|
|
49
|
+
import {AddIcon} from '@sanity/icons'
|
|
50
|
+
|
|
51
|
+
export default function App() {
|
|
52
|
+
return (
|
|
53
|
+
<Flex minHeight="100vh">
|
|
54
|
+
<Box as="nav" aria-label="Main" padding={3} borderRight width="240px">
|
|
55
|
+
<Heading as="h2" size={1}>
|
|
56
|
+
My App
|
|
57
|
+
</Heading>
|
|
58
|
+
</Box>
|
|
59
|
+
<Box as="main" padding={4} flexGrow={1}>
|
|
60
|
+
<Flex alignItems="center" justifyContent="space-between" flexWrap="wrap" gap={2}>
|
|
61
|
+
<Heading as="h1" size={2}>
|
|
62
|
+
Documents
|
|
63
|
+
</Heading>
|
|
64
|
+
<Button iconStart={AddIcon} text="New" />
|
|
65
|
+
</Flex>
|
|
66
|
+
<Box marginTop={3}>
|
|
67
|
+
<Card density="loose">
|
|
68
|
+
<Text size={1}>First document</Text>
|
|
69
|
+
<Text size={1} muted>
|
|
70
|
+
Edited 2 hours ago
|
|
71
|
+
</Text>
|
|
72
|
+
</Card>
|
|
73
|
+
</Box>
|
|
74
|
+
</Box>
|
|
75
|
+
</Flex>
|
|
76
|
+
)
|
|
77
|
+
}
|
|
10
78
|
```
|
|
11
79
|
|
|
12
|
-
|
|
80
|
+
### Checking your setup
|
|
81
|
+
|
|
82
|
+
Run `doctor` at any time to verify an install and get a one-line fix for anything broken:
|
|
13
83
|
|
|
14
|
-
|
|
84
|
+
```sh
|
|
85
|
+
npx @sanity/ui@alpha doctor
|
|
86
|
+
```
|
|
15
87
|
|
|
16
|
-
|
|
17
|
-
|
|
88
|
+
It checks that the package and `@sanity/icons` are installed, the stylesheet resolves and is imported, `tsconfig.json` has the options the components need, and your React and Node versions are supported.
|
|
89
|
+
|
|
90
|
+
## For apps using Sanity UI v3
|
|
91
|
+
|
|
92
|
+
### Install
|
|
93
|
+
|
|
94
|
+
v3 and v5 are the same npm package at different majors, so an app that wants both needs a package alias to tell them apart.
|
|
95
|
+
|
|
96
|
+
In apps still using v3 components, we recommend installing v5 with a package alias. This way, your existing `@sanity/ui` imports keep resolving to v3, so nothing you have already written needs to change.
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
pnpm add ui5@npm:@sanity/ui@alpha
|
|
100
|
+
```
|
|
18
101
|
|
|
19
|
-
|
|
20
|
-
import {createRoot} from 'react-dom/client'
|
|
102
|
+
This gives you:
|
|
21
103
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"dependencies": {
|
|
107
|
+
"@sanity/ui": "^3.5.1",
|
|
108
|
+
"ui5": "npm:@sanity/ui@alpha"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Now `@sanity/ui` means v3 everywhere in your codebase and `ui5` means v5. You migrate one import at a time, at whatever pace suits you, instead of rewriting every file before anything runs.
|
|
114
|
+
|
|
115
|
+
The alias name is yours to choose. `ui5` is what we use internally. npm, pnpm, and yarn all support the `npm:` protocol.
|
|
116
|
+
|
|
117
|
+
### Setup
|
|
118
|
+
|
|
119
|
+
v5 has no `ThemeProvider`, and it does not read v3's theme. Keep your existing provider setup exactly as it is: v3 components still need it, and it has no effect on v5.
|
|
120
|
+
|
|
121
|
+
With v5 installed under an alias, the stylesheet comes from the alias too.
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
import {ThemeProvider, studioTheme, ToastProvider} from '@sanity/ui' // v3
|
|
125
|
+
import 'ui5/styles.css' // v5
|
|
126
|
+
import App from './App'
|
|
127
|
+
|
|
128
|
+
createRoot(document.getElementById('root')!).render(
|
|
129
|
+
<ThemeProvider theme={studioTheme}>
|
|
130
|
+
<ToastProvider>
|
|
131
|
+
<App />
|
|
132
|
+
</ToastProvider>
|
|
133
|
+
</ThemeProvider>,
|
|
26
134
|
)
|
|
27
135
|
```
|
|
28
136
|
|
|
29
|
-
|
|
137
|
+
### Usage
|
|
138
|
+
|
|
139
|
+
With v5 aliased, which version you get is just which specifier you import from. Anything without a v5 equivalent keeps coming from `@sanity/ui`, and the two sit next to each other in the same tree.
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
import {Dialog} from '@sanity/ui' // v3
|
|
143
|
+
import {Button, Card, Text} from 'ui5' // v5
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Components
|
|
147
|
+
|
|
148
|
+
### Layout
|
|
149
|
+
|
|
150
|
+
| Component | What it does |
|
|
151
|
+
| ----------- | ----------------------------------------------------------------------------------- |
|
|
152
|
+
| `Box` | General container. Padding, margin, border, overflow, and position as direct props. |
|
|
153
|
+
| `Flex` | Flexbox layout. `alignItems`, `justifyContent`, `flexDirection`, `gap`. |
|
|
154
|
+
| `Grid` | CSS grid. Use `gridTemplateColumns` with a CSS string (e.g. `"repeat(3, 1fr)"`). |
|
|
155
|
+
| `Container` | Max-width content wrapper. |
|
|
156
|
+
| `HStack` | Horizontal stack. Accepts `gap` and `as` only — use `Flex` for alignment control. |
|
|
157
|
+
| `VStack` | Vertical stack. Accepts `gap` and `as` only — use `Flex` for alignment control. |
|
|
158
|
+
| `Inline` | Inline flow layout with wrapping and gap. |
|
|
159
|
+
|
|
160
|
+
### Typography
|
|
161
|
+
|
|
162
|
+
| Component | What it does |
|
|
163
|
+
| --------- | ----------------------------------------------------------------------- |
|
|
164
|
+
| `Heading` | Semantic headings (`h1`–`h6`). Always set `as` to match the level. |
|
|
165
|
+
| `Text` | Body copy, captions, labels. Props: `size`, `weight`, `muted`, `align`. |
|
|
166
|
+
| `Label` | Form input label. Use only with form elements. |
|
|
167
|
+
| `Code` | Inline or block code. Uses the system monospace font. |
|
|
168
|
+
|
|
169
|
+
### Interactive
|
|
170
|
+
|
|
171
|
+
| Component | What it does |
|
|
172
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
173
|
+
| `Button` | `level` (primary/secondary/tertiary), `tone` (neutral/critical), `iconStart`, `iconEnd`, `text`, `fullWidth`, `loading`. |
|
|
174
|
+
| `Checkbox` | Controlled checkbox. Requires `label` (string). |
|
|
175
|
+
| `Radio` | Controlled radio button. |
|
|
176
|
+
| `Switch` | Toggle control. Requires `label` (string). |
|
|
177
|
+
| `Link` | Anchor element styled as a link. |
|
|
178
|
+
|
|
179
|
+
### Display
|
|
180
|
+
|
|
181
|
+
| Component | What it does |
|
|
182
|
+
| ---------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
183
|
+
| `Card` | Raised surface with background and `tone`. Does not accept padding, margin, or layout props — wrap content in `Box`. |
|
|
184
|
+
| `Divider` | Horizontal rule between content sections. |
|
|
185
|
+
| `Icon` | Renders a `@sanity/icons` icon component. Always set `aria-label` or `aria-hidden`. |
|
|
186
|
+
| `Indicator` | Status dot with `tone`. |
|
|
187
|
+
| `IndicatorStack` | Grouped `Indicator` elements. |
|
|
188
|
+
| `Spinner` | Loading indicator. |
|
|
189
|
+
|
|
190
|
+
### Lists
|
|
191
|
+
|
|
192
|
+
| Component | What it does |
|
|
193
|
+
| --------- | --------------------------------------------------- |
|
|
194
|
+
| `List` | Semantic list. Use `List.Item` and `List.ItemText`. |
|
|
195
|
+
|
|
196
|
+
### Accessibility
|
|
197
|
+
|
|
198
|
+
| Component | What it does |
|
|
199
|
+
| ---------------- | ------------------------------------------------------------------------------------------------ |
|
|
200
|
+
| `SkipToContent` | Visually hidden skip-nav link. Must be the first focusable element. Requires `href` and `label`. |
|
|
201
|
+
| `VisuallyHidden` | Hides content visually while keeping it in the accessibility tree. |
|
|
202
|
+
|
|
203
|
+
### Still only in v3
|
|
204
|
+
|
|
205
|
+
Menu, Dialog, TextInput, Select, Stack, Badge, ThemeProvider, ToastProvider, and other components not yet migrated to v5. Import these from `@sanity/ui` exactly as you do today.
|
|
206
|
+
|
|
207
|
+
## Contributing
|
|
208
|
+
|
|
209
|
+
We welcome feedback and contributions. Start here:
|
|
210
|
+
|
|
211
|
+
1. **Try the components** and report what breaks, what confuses, or what's missing.
|
|
212
|
+
2. **Read the contribution model** — build a recipe with existing building block components, then propose graduating it.
|
|
213
|
+
3. **Open a PR** following the branch naming and checklist in the developer contribution docs.
|
|
30
214
|
|
|
31
|
-
|
|
215
|
+
During preview, the most useful contribution is using the components and telling us what happens.
|
package/bin/sanity-ui.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import process from 'node:process'
|
|
4
|
+
|
|
5
|
+
import {main} from '../dist/cli/index.js'
|
|
6
|
+
import {errorLine} from '../dist/cli/log.js'
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
const code = await main(process.argv.slice(2))
|
|
10
|
+
process.exitCode = code ?? 0
|
|
11
|
+
} catch (error) {
|
|
12
|
+
errorLine(error instanceof Error ? error.message : String(error))
|
|
13
|
+
process.exitCode = 1
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { c } from "react/compiler-runtime";
|
|
4
|
+
import { hasLanguage, Refractor } from "react-refractor";
|
|
5
|
+
function LazyRefractor(t0) {
|
|
6
|
+
const $ = c(5), {
|
|
7
|
+
language,
|
|
8
|
+
value
|
|
9
|
+
} = t0;
|
|
10
|
+
if (!hasLanguage(language)) {
|
|
11
|
+
let t12;
|
|
12
|
+
return $[0] !== value ? (t12 = /* @__PURE__ */ jsx("code", { children: value }), $[0] = value, $[1] = t12) : t12 = $[1], t12;
|
|
13
|
+
}
|
|
14
|
+
let t1;
|
|
15
|
+
return $[2] !== language || $[3] !== value ? (t1 = /* @__PURE__ */ jsx(Refractor, { inline: !0, language, value }), $[2] = language, $[3] = value, $[4] = t1) : t1 = $[4], t1;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
LazyRefractor as default
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=LazyRefractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LazyRefractor.js","sources":["../../src/components/code/LazyRefractor.tsx"],"sourcesContent":["import {hasLanguage, Refractor, type RefractorProps} from 'react-refractor'\n\nexport default function LazyRefractor({language, value}: RefractorProps) {\n if (!hasLanguage(language)) {\n return <code>{value}</code>\n }\n\n return <Refractor inline language={language} value={value} />\n}\n"],"names":["LazyRefractor","t0","$","_c","language","value","hasLanguage","t1"],"mappings":";;;;AAEA,SAAeA,cAAAC,IAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAuB;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAAJ;AACpC,MAAI,CAACK,YAAYF,QAAQ,GAAC;AAAA,QAAAG;AAAA,WAAAL,SAAAG,SACjBE,MAAA,oBAAA,QAAA,EAAOF,iBAAM,GAAOH,OAAAG,OAAAH,OAAAK,OAAAA,MAAAL,EAAA,CAAA,GAApBK;AAAAA,EAAoB;AAC5B,MAAAA;AAAA,SAAAL,EAAA,CAAA,MAAAE,YAAAF,SAAAG,SAEME,yBAAC,WAAA,EAAU,YAAiBH,UAAiBC,MAAAA,CAAK,GAAIH,OAAAE,UAAAF,OAAAG,OAAAH,OAAAK,MAAAA,KAAAL,EAAA,CAAA,GAAtDK;AAAsD;"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
import { detect, isPackageInstalled, isLegacyUiVersion, PACKAGE_NAME, readInstalledPackageVersion, } from './detect.js';
|
|
6
|
+
import { inspectStylesheet, STYLES_SPECIFIER } from './styles.js';
|
|
7
|
+
import { inspectTsconfig } from './tsconfig.js';
|
|
8
|
+
import { meetsNode, meetsReact, NODE_REQUIREMENT, REACT_MIN } from './versions.js';
|
|
9
|
+
const ICONS = '@sanity/icons';
|
|
10
|
+
/** Resolves the built stylesheet on disk (not the Node no-op shim). */
|
|
11
|
+
function resolveStylesheet(cwd) {
|
|
12
|
+
try {
|
|
13
|
+
const require = createRequire(join(cwd, 'noop.js'));
|
|
14
|
+
const pkgJsonPath = require.resolve(`${PACKAGE_NAME}/package.json`);
|
|
15
|
+
const path = join(dirname(pkgJsonPath), 'dist/styles.css');
|
|
16
|
+
return existsSync(path) ? path : null;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Without a browser, "a component renders with a computed background" is
|
|
24
|
+
* verified by confirming the resolved stylesheet ships the component class and
|
|
25
|
+
* a background declaration for it. If both are present and the import is wired,
|
|
26
|
+
* the component renders styled.
|
|
27
|
+
*/
|
|
28
|
+
function stylesheetHasComponentStyles(path) {
|
|
29
|
+
try {
|
|
30
|
+
const css = readFileSync(path, 'utf8');
|
|
31
|
+
return /\.sui-Card\b/.test(css) && /background/.test(css);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function check(id, ok, meta) {
|
|
38
|
+
return {
|
|
39
|
+
id,
|
|
40
|
+
title: meta.title,
|
|
41
|
+
ok,
|
|
42
|
+
status: meta.status ?? (ok ? 'pass' : 'fail'),
|
|
43
|
+
detail: meta.detail,
|
|
44
|
+
fix: meta.fix,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Runs every verification and returns structured results. `doctor` prints them
|
|
49
|
+
* all; `init` reuses a subset on exit. Pure read-only.
|
|
50
|
+
*/
|
|
51
|
+
export function collectChecks(cwd) {
|
|
52
|
+
const detected = detect(cwd);
|
|
53
|
+
const checks = [];
|
|
54
|
+
const installedVersion = readInstalledPackageVersion(cwd, PACKAGE_NAME);
|
|
55
|
+
checks.push(check('install', Boolean(installedVersion), {
|
|
56
|
+
title: 'Package installed',
|
|
57
|
+
detail: installedVersion ? `${PACKAGE_NAME}@${installedVersion}` : 'not installed',
|
|
58
|
+
fix: `Run \`npx ${PACKAGE_NAME}@alpha init\` or install it with your package manager`,
|
|
59
|
+
}));
|
|
60
|
+
if (installedVersion) {
|
|
61
|
+
const legacyInstalled = isLegacyUiVersion(installedVersion);
|
|
62
|
+
checks.push(check('version', !legacyInstalled, {
|
|
63
|
+
title: 'Package version',
|
|
64
|
+
detail: legacyInstalled
|
|
65
|
+
? `${PACKAGE_NAME}@${installedVersion} is pre-v5 (expected v5)`
|
|
66
|
+
: `${PACKAGE_NAME}@${installedVersion}`,
|
|
67
|
+
fix: `Remove the existing @sanity/ui version, or install v5 with a package alias — see README "For apps using Sanity UI v3"`,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
const iconsInstalled = isPackageInstalled(cwd, ICONS);
|
|
71
|
+
checks.push(check('icons', iconsInstalled, {
|
|
72
|
+
title: 'Icons installed',
|
|
73
|
+
detail: iconsInstalled ? `${ICONS} present` : `${ICONS} missing`,
|
|
74
|
+
fix: `Install it: add ${ICONS}`,
|
|
75
|
+
}));
|
|
76
|
+
const stylesheetPath = resolveStylesheet(cwd);
|
|
77
|
+
const stylesheetResolves = Boolean(stylesheetPath);
|
|
78
|
+
checks.push(check('stylesheet-resolves', stylesheetResolves, {
|
|
79
|
+
title: 'Stylesheet resolves',
|
|
80
|
+
detail: stylesheetResolves ? `${PACKAGE_NAME}/styles.css` : 'cannot resolve styles.css',
|
|
81
|
+
fix: 'Reinstall the package, or build it if working inside this monorepo',
|
|
82
|
+
}));
|
|
83
|
+
const stylesheet = inspectStylesheet(cwd, detected.entry);
|
|
84
|
+
checks.push(check('stylesheet-wired', stylesheet.imported, {
|
|
85
|
+
title: 'Stylesheet imported',
|
|
86
|
+
detail: stylesheet.imported
|
|
87
|
+
? `imported in ${stylesheet.importedIn ?? detected.entry}`
|
|
88
|
+
: stylesheet.exists
|
|
89
|
+
? `missing from ${detected.entry}`
|
|
90
|
+
: `entry file ${detected.entry} not found`,
|
|
91
|
+
fix: `Add \`import '${STYLES_SPECIFIER}'\` to ${detected.entry}`,
|
|
92
|
+
}));
|
|
93
|
+
if (detected.typescript) {
|
|
94
|
+
const tsconfig = inspectTsconfig(cwd);
|
|
95
|
+
const loadBearing = tsconfig.changes.filter((c) => c.load);
|
|
96
|
+
// An unreadable file has no changes to report, so guard against it explicitly
|
|
97
|
+
// rather than letting an empty change list read as "all good".
|
|
98
|
+
const ok = tsconfig.exists && !tsconfig.unreadable && loadBearing.length === 0;
|
|
99
|
+
checks.push(check('tsconfig', ok, {
|
|
100
|
+
title: 'tsconfig options',
|
|
101
|
+
detail: !tsconfig.exists
|
|
102
|
+
? 'tsconfig.json not found'
|
|
103
|
+
: tsconfig.unreadable
|
|
104
|
+
? 'tsconfig.json could not be parsed'
|
|
105
|
+
: loadBearing.length === 0
|
|
106
|
+
? tsconfig.changes.length === 0
|
|
107
|
+
? 'all required options set'
|
|
108
|
+
: 'required options set (some optional additions available)'
|
|
109
|
+
: `needs: ${loadBearing.map((c) => `${c.key}: ${String(c.to)}`).join(', ')}`,
|
|
110
|
+
fix: tsconfig.unreadable
|
|
111
|
+
? 'Fix the JSON syntax in tsconfig.json'
|
|
112
|
+
: `Run \`npx ${PACKAGE_NAME}@alpha init\` to reconcile tsconfig.json`,
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
const reactVersion = detected.react.version;
|
|
116
|
+
const reactOk = reactVersion ? meetsReact(reactVersion) : false;
|
|
117
|
+
checks.push(check('react', reactOk, {
|
|
118
|
+
title: 'React version',
|
|
119
|
+
status: reactVersion ? (reactOk ? 'pass' : 'fail') : 'warn',
|
|
120
|
+
detail: reactVersion ? `react ${reactVersion}` : 'react not detected',
|
|
121
|
+
fix: `Upgrade React to >= ${REACT_MIN}`,
|
|
122
|
+
}));
|
|
123
|
+
const nodeVersion = process.versions.node;
|
|
124
|
+
checks.push(check('node', meetsNode(nodeVersion), {
|
|
125
|
+
title: 'Node version',
|
|
126
|
+
detail: `node ${nodeVersion} (requires ${NODE_REQUIREMENT})`,
|
|
127
|
+
fix: `Use Node ${NODE_REQUIREMENT}`,
|
|
128
|
+
}));
|
|
129
|
+
return { detected, checks, stylesheetPath };
|
|
130
|
+
}
|
|
131
|
+
/** The subset `init` verifies on exit, plus the render probe. */
|
|
132
|
+
export function verifyAfterInit(cwd) {
|
|
133
|
+
const { checks, stylesheetPath } = collectChecks(cwd);
|
|
134
|
+
const ids = new Set(['stylesheet-resolves', 'stylesheet-wired', 'tsconfig']);
|
|
135
|
+
const subset = checks.filter((c) => ids.has(c.id));
|
|
136
|
+
const probeOk = stylesheetPath ? stylesheetHasComponentStyles(stylesheetPath) : false;
|
|
137
|
+
subset.push({
|
|
138
|
+
id: 'probe',
|
|
139
|
+
title: 'Probe renders with background',
|
|
140
|
+
ok: probeOk,
|
|
141
|
+
status: probeOk ? 'pass' : 'fail',
|
|
142
|
+
detail: stylesheetPath
|
|
143
|
+
? 'Card ships a background declaration'
|
|
144
|
+
: 'stylesheet not resolved, cannot probe',
|
|
145
|
+
fix: 'Ensure the package is installed and built',
|
|
146
|
+
});
|
|
147
|
+
return subset;
|
|
148
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { existsSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
export const CONFIG_FILE = 'sanity-ui.json';
|
|
4
|
+
/**
|
|
5
|
+
* Builds the sanity-ui.json contents: a small record of the detected setup
|
|
6
|
+
* (framework, entry) written to the project root for tooling to read.
|
|
7
|
+
*/
|
|
8
|
+
export function buildConfig({ framework, entry, }) {
|
|
9
|
+
return {
|
|
10
|
+
$schema: 'https://sanity-ui.sanity.dev/schema.json',
|
|
11
|
+
framework,
|
|
12
|
+
entry,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function configExists(cwd) {
|
|
16
|
+
return existsSync(join(cwd, CONFIG_FILE));
|
|
17
|
+
}
|
|
18
|
+
export function writeConfig(cwd, config, { dryRun = false } = {}) {
|
|
19
|
+
const file = join(cwd, CONFIG_FILE);
|
|
20
|
+
if (!dryRun)
|
|
21
|
+
writeFileSync(file, `${JSON.stringify(config, null, 2)}\n`);
|
|
22
|
+
return { file, wrote: !dryRun };
|
|
23
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { parseVersion } from './versions.js';
|
|
4
|
+
export const PACKAGE_NAME = '@sanity/ui';
|
|
5
|
+
export const LEGACY_COEXISTENCE_HINT = 'To add v5 alongside an existing @sanity/ui install, use a package alias — see the README section "For apps using Sanity UI v3".';
|
|
6
|
+
/**
|
|
7
|
+
* Framework ids map 1:1 to the `framework` field written into sanity-ui.json.
|
|
8
|
+
* Each carries the ordered list of candidate entry files where the stylesheet
|
|
9
|
+
* import belongs.
|
|
10
|
+
*/
|
|
11
|
+
const FRAMEWORK_ENTRIES = {
|
|
12
|
+
'next-app': ['app/layout.tsx', 'app/layout.jsx', 'src/app/layout.tsx', 'src/app/layout.jsx'],
|
|
13
|
+
'next-pages': ['pages/_app.tsx', 'pages/_app.jsx', 'src/pages/_app.tsx', 'src/pages/_app.jsx'],
|
|
14
|
+
'react-router': ['app/root.tsx', 'app/root.jsx'],
|
|
15
|
+
'remix': ['app/root.tsx', 'app/root.jsx'],
|
|
16
|
+
'vite': ['src/main.tsx', 'src/main.jsx', 'src/main.ts'],
|
|
17
|
+
'astro': [],
|
|
18
|
+
'react': ['src/index.tsx', 'src/main.tsx', 'src/index.jsx', 'src/main.jsx'],
|
|
19
|
+
};
|
|
20
|
+
export function readPackageJson(cwd) {
|
|
21
|
+
const file = join(cwd, 'package.json');
|
|
22
|
+
if (!existsSync(file))
|
|
23
|
+
return null;
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(readFileSync(file, 'utf8'));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function allDeps(pkg) {
|
|
32
|
+
if (!pkg)
|
|
33
|
+
return {};
|
|
34
|
+
return { ...pkg.dependencies, ...pkg.devDependencies, ...pkg.peerDependencies };
|
|
35
|
+
}
|
|
36
|
+
export function detectPackageManager(cwd) {
|
|
37
|
+
if (existsSync(join(cwd, 'bun.lockb')) || existsSync(join(cwd, 'bun.lock')))
|
|
38
|
+
return 'bun';
|
|
39
|
+
if (existsSync(join(cwd, 'pnpm-lock.yaml')))
|
|
40
|
+
return 'pnpm';
|
|
41
|
+
if (existsSync(join(cwd, 'yarn.lock')))
|
|
42
|
+
return 'yarn';
|
|
43
|
+
if (existsSync(join(cwd, 'package-lock.json')))
|
|
44
|
+
return 'npm';
|
|
45
|
+
const declared = readPackageJson(cwd)?.packageManager;
|
|
46
|
+
if (typeof declared === 'string') {
|
|
47
|
+
const name = declared.split('@')[0];
|
|
48
|
+
if (name === 'pnpm' || name === 'yarn' || name === 'npm' || name === 'bun')
|
|
49
|
+
return name;
|
|
50
|
+
}
|
|
51
|
+
return 'npm';
|
|
52
|
+
}
|
|
53
|
+
export function detectFramework(cwd, pkg = readPackageJson(cwd)) {
|
|
54
|
+
const deps = allDeps(pkg);
|
|
55
|
+
const has = (name) => Boolean(deps[name]);
|
|
56
|
+
const dir = (relative) => existsSync(join(cwd, relative));
|
|
57
|
+
if (has('next')) {
|
|
58
|
+
if (dir('app') || dir('src/app'))
|
|
59
|
+
return 'next-app';
|
|
60
|
+
if (dir('pages') || dir('src/pages'))
|
|
61
|
+
return 'next-pages';
|
|
62
|
+
return 'next-app';
|
|
63
|
+
}
|
|
64
|
+
if (has('@remix-run/react') || has('@remix-run/dev'))
|
|
65
|
+
return 'remix';
|
|
66
|
+
if (has('@react-router/dev') || has('react-router'))
|
|
67
|
+
return 'react-router';
|
|
68
|
+
if (has('astro'))
|
|
69
|
+
return 'astro';
|
|
70
|
+
if (has('vite'))
|
|
71
|
+
return 'vite';
|
|
72
|
+
return 'react';
|
|
73
|
+
}
|
|
74
|
+
export function detectTypeScript(cwd, pkg = readPackageJson(cwd)) {
|
|
75
|
+
return existsSync(join(cwd, 'tsconfig.json')) || Boolean(allDeps(pkg)['typescript']);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns the first existing candidate entry file, otherwise the first
|
|
79
|
+
* candidate as the place to create one. Astro has no fixed entry, so we look
|
|
80
|
+
* for a layout component.
|
|
81
|
+
*/
|
|
82
|
+
export function detectEntry(cwd, framework) {
|
|
83
|
+
if (framework === 'astro')
|
|
84
|
+
return detectAstroLayout(cwd);
|
|
85
|
+
const candidates = FRAMEWORK_ENTRIES[framework];
|
|
86
|
+
const existing = candidates.find((rel) => existsSync(join(cwd, rel)));
|
|
87
|
+
return { entry: existing ?? candidates[0] ?? 'src/index.tsx', exists: Boolean(existing) };
|
|
88
|
+
}
|
|
89
|
+
function detectAstroLayout(cwd) {
|
|
90
|
+
const candidates = [
|
|
91
|
+
'src/layouts/Layout.astro',
|
|
92
|
+
'src/layouts/BaseLayout.astro',
|
|
93
|
+
'src/layouts/index.astro',
|
|
94
|
+
'src/pages/index.astro',
|
|
95
|
+
];
|
|
96
|
+
const existing = candidates.find((rel) => existsSync(join(cwd, rel)));
|
|
97
|
+
return { entry: existing ?? candidates[0] ?? 'src/layouts/Layout.astro', exists: Boolean(existing) };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolves the installed React version from node_modules, falling back to the
|
|
101
|
+
* declared range in package.json (carets/tildes stripped).
|
|
102
|
+
*/
|
|
103
|
+
export function detectReactVersion(cwd, pkg = readPackageJson(cwd)) {
|
|
104
|
+
const installed = readInstalledVersion(cwd, 'react');
|
|
105
|
+
if (installed)
|
|
106
|
+
return { version: installed, source: 'installed' };
|
|
107
|
+
const declared = allDeps(pkg)['react'];
|
|
108
|
+
if (typeof declared === 'string') {
|
|
109
|
+
return { version: declared.replace(/^[\^~>=<\s]+/, ''), source: 'declared' };
|
|
110
|
+
}
|
|
111
|
+
return { version: null, source: 'missing' };
|
|
112
|
+
}
|
|
113
|
+
function readInstalledVersion(cwd, name) {
|
|
114
|
+
const file = join(cwd, 'node_modules', name, 'package.json');
|
|
115
|
+
if (!existsSync(file))
|
|
116
|
+
return null;
|
|
117
|
+
try {
|
|
118
|
+
const pkg = JSON.parse(readFileSync(file, 'utf8'));
|
|
119
|
+
return pkg.version ?? null;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function isPackageInstalled(cwd, name) {
|
|
126
|
+
return existsSync(join(cwd, 'node_modules', name, 'package.json'));
|
|
127
|
+
}
|
|
128
|
+
export function readInstalledPackageVersion(cwd, name) {
|
|
129
|
+
return readInstalledVersion(cwd, name);
|
|
130
|
+
}
|
|
131
|
+
export function isLegacyUiVersion(version) {
|
|
132
|
+
const major = parseVersion(version)?.[0];
|
|
133
|
+
return major !== undefined && major < 5;
|
|
134
|
+
}
|
|
135
|
+
function detectAliasedInstall(deps) {
|
|
136
|
+
for (const [name, spec] of Object.entries(deps)) {
|
|
137
|
+
if (typeof spec === 'string' && /^npm:@sanity\/ui@(5(?:\..*)?|alpha)$/.test(spec))
|
|
138
|
+
return name;
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
/** Reads the major from a declared range, skipping workspace/catalog/link specs. */
|
|
143
|
+
function declaredMajor(spec) {
|
|
144
|
+
if (typeof spec !== 'string')
|
|
145
|
+
return null;
|
|
146
|
+
if (/^(workspace:|catalog:|link:|file:)/.test(spec))
|
|
147
|
+
return null;
|
|
148
|
+
const npmAlias = spec.match(/^npm:@sanity\/ui@(\d+)/);
|
|
149
|
+
if (npmAlias)
|
|
150
|
+
return Number(npmAlias[1]);
|
|
151
|
+
return parseVersion(spec.replace(/^[\^~>=<\s]+/, ''))?.[0] ?? null;
|
|
152
|
+
}
|
|
153
|
+
function detectLegacyInstall(cwd, deps) {
|
|
154
|
+
const installed = readInstalledPackageVersion(cwd, PACKAGE_NAME);
|
|
155
|
+
if (installed && isLegacyUiVersion(installed)) {
|
|
156
|
+
return installed;
|
|
157
|
+
}
|
|
158
|
+
const declared = deps[PACKAGE_NAME];
|
|
159
|
+
const major = declaredMajor(declared);
|
|
160
|
+
if (major !== null && major < 5) {
|
|
161
|
+
return declared ?? 'unknown';
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
export function detect(cwd) {
|
|
166
|
+
const pkg = readPackageJson(cwd);
|
|
167
|
+
const deps = allDeps(pkg);
|
|
168
|
+
const framework = detectFramework(cwd, pkg);
|
|
169
|
+
const entry = detectEntry(cwd, framework);
|
|
170
|
+
const typescript = detectTypeScript(cwd, pkg) || (entry.exists && /\.tsx?$/.test(entry.entry));
|
|
171
|
+
return {
|
|
172
|
+
pkg,
|
|
173
|
+
packageManager: detectPackageManager(cwd),
|
|
174
|
+
framework,
|
|
175
|
+
typescript,
|
|
176
|
+
...entry,
|
|
177
|
+
react: detectReactVersion(cwd, pkg),
|
|
178
|
+
aliasedInstall: detectAliasedInstall(deps),
|
|
179
|
+
legacyInstall: detectLegacyInstall(cwd, deps),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { collectChecks } from './checks.js';
|
|
2
|
+
import { detect, LEGACY_COEXISTENCE_HINT, PACKAGE_NAME } from './detect.js';
|
|
3
|
+
import { color, fail, heading, info, success, warn } from './log.js';
|
|
4
|
+
export function printChecks(checks) {
|
|
5
|
+
for (const c of checks) {
|
|
6
|
+
const label = `${color.bold(c.title)}${c.detail ? ` ${color.dim(`— ${c.detail}`)}` : ''}`;
|
|
7
|
+
if (c.status === 'pass')
|
|
8
|
+
success(label);
|
|
9
|
+
else if (c.status === 'warn')
|
|
10
|
+
warn(label);
|
|
11
|
+
else
|
|
12
|
+
fail(label);
|
|
13
|
+
if (c.status !== 'pass' && c.fix) {
|
|
14
|
+
info(` ${color.dim('fix:')} ${c.fix}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Runs every check and prints it. Returns 1 only when something fails; warnings still pass. */
|
|
19
|
+
export function runDoctor({ cwd }) {
|
|
20
|
+
const detected = detect(cwd);
|
|
21
|
+
heading('Sanity UI doctor');
|
|
22
|
+
if (detected.aliasedInstall) {
|
|
23
|
+
warn(`This project installs v5 under the alias "${detected.aliasedInstall}". doctor checks direct @sanity/ui v5 installs only.`);
|
|
24
|
+
info(` ${color.dim('hint:')} ${LEGACY_COEXISTENCE_HINT}`);
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
if (detected.legacyInstall) {
|
|
28
|
+
warn(`This project has ${PACKAGE_NAME}@${detected.legacyInstall} (pre-v5). doctor checks v5 installs only.`);
|
|
29
|
+
info(` ${color.dim('hint:')} ${LEGACY_COEXISTENCE_HINT}`);
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
const { checks } = collectChecks(cwd);
|
|
33
|
+
info(color.dim(`framework: ${detected.framework} · package manager: ${detected.packageManager} · entry: ${detected.entry}`));
|
|
34
|
+
info('');
|
|
35
|
+
printChecks(checks);
|
|
36
|
+
const failed = checks.filter((c) => c.status === 'fail');
|
|
37
|
+
const warned = checks.filter((c) => c.status === 'warn');
|
|
38
|
+
info('');
|
|
39
|
+
if (failed.length === 0 && warned.length === 0) {
|
|
40
|
+
success('Everything looks good.');
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
if (failed.length === 0) {
|
|
44
|
+
warn(`${warned.length} warning${warned.length === 1 ? '' : 's'}, no blocking issues.`);
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
fail(`${failed.length} issue${failed.length === 1 ? '' : 's'} found. See fixes above.`);
|
|
48
|
+
return 1;
|
|
49
|
+
}
|