From a7912e0b9a901717949bcb2e919f25b8903f25b2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 6 Jul 2026 10:57:50 +0000 Subject: [PATCH 1/3] refactor: structure as a pnpm monorepo matching main Move the published @sanity/ui package from the repo root into packages/ui, the Figma plugin into packages/figma, and Storybook into apps/storybook, mirroring the monorepo layout on the main branch. The repo root becomes a private workspace root (sanity-ui-monorepo) that orchestrates via pnpm filters. - semantic-release now runs from packages/ui (release config and CHANGELOG moved along with the package) - eslint configs are now per-package (packages/ui and apps/storybook) - stories import @sanity/ui sources from packages/ui; the storybook app is a private workspace package with its own vercel.json - cypress e2e stays at the root and keeps testing the workshop build; the root workshop:build copies packages/ui/dist into dist/ so the existing Vercel setup and CI keep working, and packages/ui gets its own vercel.json for deploys rooted at the package - pnpm overrides now use literal versions (previously $-references to root devDependencies which no longer exist) --- .github/workflows/main.yml | 6 +- .github/workflows/pkg-pr-new.yml | 4 +- .prettierignore | 1 + AGENTS.md | 33 ++ CONTRIBUTING.md | 25 ++ README.md | 34 +- .../decorators/withSanityTheme.decorator.tsx | 0 .../storybook/.storybook}/main.ts | 0 .../storybook/.storybook}/manager-head.html | 0 .../storybook/.storybook}/manager.ts | 0 .../storybook/.storybook}/preview-head.html | 0 .../storybook/.storybook}/preview.tsx | 0 apps/storybook/eslint.config.mjs | 116 ++++++ apps/storybook/package.json | 61 ++++ .../storybook/stories}/README.mdx | 0 .../components/Autocomplete.stories.tsx | 4 +- .../components/Breadcrumbs.stories.tsx | 4 +- .../components/CodeSkeleton.stories.tsx | 4 +- .../stories}/components/Dialog.stories.tsx | 14 +- .../components/HeadingSkeleton.stories.tsx | 4 +- .../stories}/components/Hotkeys.stories.tsx | 2 +- .../components/LabelSkeleton.stories.tsx | 4 +- .../stories}/components/Menu.stories.tsx | 13 +- .../components/MenuButton.stories.tsx | 10 +- .../stories}/components/MenuItem.stories.tsx | 6 +- .../stories}/components/Skeleton.stories.tsx | 4 +- .../stories}/components/Tab.stories.tsx | 2 +- .../stories}/components/TabList.stories.tsx | 2 +- .../components/TextSkeleton.stories.tsx | 4 +- .../stories}/components/Toast.stories.tsx | 4 +- .../stories}/components/Tree.stories.tsx | 2 +- .../storybook/stories}/constants.ts | 4 +- .../storybook/stories}/controls.ts | 2 +- .../stories}/helpers/columnBuilder.tsx | 4 +- .../stories}/helpers/matrixBuilder.tsx | 4 +- .../storybook/stories}/helpers/rowBuilder.tsx | 4 +- .../stories}/primitives/Avatar.stories.tsx | 2 +- .../primitives/AvatarCounter.stories.tsx | 2 +- .../primitives/AvatarStack.stories.tsx | 2 +- .../stories}/primitives/Badge.stories.tsx | 2 +- .../stories}/primitives/Box.stories.tsx | 2 +- .../stories}/primitives/Button.stories.tsx | 2 +- .../stories}/primitives/Card.stories.tsx | 13 +- .../stories}/primitives/Checkbox.stories.tsx | 2 +- .../stories}/primitives/Code.stories.tsx | 2 +- .../stories}/primitives/Container.stories.tsx | 2 +- .../stories}/primitives/Flex.stories.tsx | 2 +- .../stories}/primitives/Grid.stories.tsx | 2 +- .../stories}/primitives/Heading.stories.tsx | 2 +- .../stories}/primitives/Inline.stories.tsx | 2 +- .../stories}/primitives/KBD.stories.tsx | 2 +- .../stories}/primitives/Label.stories.tsx | 2 +- .../stories}/primitives/Popover.stories.tsx | 2 +- .../stories}/primitives/Radio.stories.tsx | 2 +- .../stories}/primitives/Select.stories.tsx | 2 +- .../stories}/primitives/Spinner.stories.tsx | 2 +- .../stories}/primitives/Stack.stories.tsx | 2 +- .../stories}/primitives/Switch.stories.tsx | 2 +- .../stories}/primitives/Text.stories.tsx | 2 +- .../stories}/primitives/TextArea.stories.tsx | 2 +- .../stories}/primitives/TextInput.stories.tsx | 2 +- .../stories}/primitives/Tooltip.stories.tsx | 8 +- .../primitives/components/FieldWrapper.tsx | 2 +- .../storybook/stories}/tests/FocusRings.mdx | 0 .../storybook/stories}/tests/FocusRings.tsx | 4 +- .../storybook/stories}/tests/Tones.mdx | 0 .../storybook/stories}/tests/Tones.tsx | 4 +- .../stories}/tokens/ColorPalette.tsx | 13 +- .../storybook/stories}/tokens/Colors.mdx | 0 apps/storybook/tsconfig.json | 16 + .../storybook/typings}/styled-components.d.ts | 0 apps/storybook/vercel.json | 5 + cypress/tsconfig.json | 2 +- figma/tsconfig.json | 15 - package.json | 204 ++--------- {figma => packages/figma}/manifest.json | 0 {figma => packages/figma}/package.config.ts | 0 {figma => packages/figma}/package.json | 5 +- {figma => packages/figma}/src/config.ts | 0 {figma => packages/figma}/src/index.html | 0 {figma => packages/figma}/src/index.ts | 0 {figma => packages/figma}/src/styles/write.ts | 0 {figma => packages/figma}/src/theme.ts | 0 {figma => packages/figma}/src/vars/helpers.ts | 0 .../src/vars/prepareSanityUIColorVariables.ts | 0 {figma => packages/figma}/src/vars/types.ts | 0 {figma => packages/figma}/src/vars/write.ts | 0 {figma => packages/figma}/tsconfig.dist.json | 2 +- packages/figma/tsconfig.json | 15 + CHANGELOG.md => packages/ui/CHANGELOG.md | 0 packages/ui/README.md | 33 ++ .../ui/eslint.config.mjs | 39 +- .../ui/exports}/_visual-editing.ts | 0 {exports => packages/ui/exports}/index.ts | 0 {exports => packages/ui/exports}/theme.ts | 0 jest.config.js => packages/ui/jest.config.js | 0 .../ui/package.config.ts | 0 packages/ui/package.json | 168 +++++++++ .../ui/src}/core/__workshop__/constants.ts | 0 {src => packages/ui/src}/core/_compat.ts | 0 .../autocomplete/__mocks__/apiStore.ts | 0 .../autocomplete/__mocks__/countries.ts | 0 .../autocomplete/__workshop__/async.tsx | 0 .../__workshop__/constrainedHeight.tsx | 0 .../autocomplete/__workshop__/custom.tsx | 0 .../autocomplete/__workshop__/example.tsx | 0 .../__workshop__/focusAndBlur.tsx | 0 .../autocomplete/__workshop__/fullscreen.tsx | 0 .../autocomplete/__workshop__/index.ts | 0 .../autocomplete/__workshop__/types.ts | 0 .../autocomplete/autocomplete.styles.tsx | 0 .../components/autocomplete/autocomplete.tsx | 0 .../autocomplete/autocompleteOption.tsx | 0 .../autocomplete/autocompleteReducer.ts | 0 .../core/components/autocomplete/constants.ts | 0 .../core/components/autocomplete/index.ts | 0 .../core/components/autocomplete/types.ts | 0 .../breadcrumbs/__workshop__/example.tsx | 0 .../breadcrumbs/__workshop__/index.ts | 0 .../breadcrumbs/breadcrumbs.styles.ts | 0 .../components/breadcrumbs/breadcrumbs.tsx | 0 .../src}/core/components/breadcrumbs/index.ts | 0 .../dialog/__workshop__/activate.tsx | 0 .../dialog/__workshop__/autoFocus.tsx | 0 .../components/dialog/__workshop__/index.ts | 0 .../dialog/__workshop__/layering.tsx | 0 .../components/dialog/__workshop__/nested.tsx | 0 .../dialog/__workshop__/onScroll.tsx | 0 .../components/dialog/__workshop__/panes.tsx | 0 .../dialog/__workshop__/position.tsx | 0 .../components/dialog/__workshop__/props.tsx | 0 .../dialog/__workshop__/provider.tsx | 0 .../dialog/__workshop__/wrapped.tsx | 0 .../ui/src}/core/components/dialog/dialog.tsx | 0 .../core/components/dialog/dialogContext.ts | 0 .../core/components/dialog/dialogProvider.tsx | 0 .../ui/src}/core/components/dialog/index.ts | 0 .../ui/src}/core/components/dialog/styles.ts | 0 .../src}/core/components/dialog/useDialog.ts | 0 .../components/hotkeys/__workshop__/index.ts | 0 .../components/hotkeys/__workshop__/plain.tsx | 0 .../src}/core/components/hotkeys/hotkeys.tsx | 0 .../ui/src}/core/components/hotkeys/index.ts | 0 .../ui/src}/core/components/index.ts | 0 .../menu/__workshop__/asComponent.tsx | 0 .../menu/__workshop__/avatarMenu.tsx | 0 .../menu/__workshop__/closableMenuButton.tsx | 0 .../__workshop__/constrainedInBoundary.tsx | 0 .../menu/__workshop__/customMenuItem.tsx | 0 .../menu/__workshop__/customSelectedState.tsx | 0 .../menu/__workshop__/disableFocusOnClose.tsx | 0 .../components/menu/__workshop__/groups.tsx | 0 .../components/menu/__workshop__/index.ts | 0 .../menu/__workshop__/menuButton.tsx | 0 .../menu/__workshop__/menuGroupRight.tsx | 0 .../menu/__workshop__/nestedMenu.tsx | 0 .../menu/__workshop__/onCloseMenuButton.tsx | 0 .../menu/__workshop__/selectedItem.tsx | 0 .../menu/__workshop__/shouldFocus.tsx | 0 .../components/menu/__workshop__/tones.tsx | 0 .../menu/__workshop__/withoutArrow.tsx | 0 .../ui/src}/core/components/menu/helpers.ts | 0 .../ui/src}/core/components/menu/index.ts | 0 .../src}/core/components/menu/menu.test.tsx | 0 .../ui/src}/core/components/menu/menu.tsx | 0 .../src}/core/components/menu/menuButton.tsx | 0 .../src}/core/components/menu/menuContext.ts | 0 .../src}/core/components/menu/menuDivider.ts | 0 .../src}/core/components/menu/menuGroup.tsx | 0 .../ui/src}/core/components/menu/menuItem.tsx | 0 .../ui/src}/core/components/menu/useMenu.ts | 0 .../core/components/menu/useMenuController.ts | 0 .../skeleton/__workshop__/delay.tsx | 0 .../components/skeleton/__workshop__/index.ts | 0 .../skeleton/__workshop__/skeleton.tsx | 0 .../ui/src}/core/components/skeleton/index.ts | 0 .../core/components/skeleton/skeleton.tsx | 0 .../src}/core/components/skeleton/styles.ts | 0 .../core/components/skeleton/textSkeleton.tsx | 0 .../components/tab/__workshop__/example.tsx | 0 .../core/components/tab/__workshop__/index.ts | 0 .../ui/src}/core/components/tab/index.ts | 0 .../ui/src}/core/components/tab/tab.tsx | 0 .../ui/src}/core/components/tab/tabList.tsx | 0 .../ui/src}/core/components/tab/tabPanel.tsx | 0 .../components/toast/__workshop__/hook.tsx | 0 .../components/toast/__workshop__/index.ts | 0 .../components/toast/__workshop__/toast.tsx | 0 .../ui/src}/core/components/toast/index.ts | 0 .../ui/src}/core/components/toast/styles.ts | 0 .../src}/core/components/toast/toast.test.tsx | 0 .../ui/src}/core/components/toast/toast.tsx | 0 .../core/components/toast/toastContext.ts | 0 .../src}/core/components/toast/toastLayer.tsx | 0 .../core/components/toast/toastProvider.tsx | 0 .../src}/core/components/toast/toastState.ts | 0 .../ui/src}/core/components/toast/types.ts | 0 .../ui/src}/core/components/toast/useToast.ts | 0 .../tree/__workshop__/basic.perf.ts | 0 .../components/tree/__workshop__/basic.tsx | 0 .../components/tree/__workshop__/index.ts | 0 .../tree/__workshop__/tabFromElement.tsx | 0 .../ui/src}/core/components/tree/helpers.ts | 0 .../ui/src}/core/components/tree/index.ts | 0 .../ui/src}/core/components/tree/style.ts | 0 .../ui/src}/core/components/tree/tree.tsx | 0 .../src}/core/components/tree/treeContext.ts | 0 .../src}/core/components/tree/treeGroup.tsx | 0 .../ui/src}/core/components/tree/treeItem.tsx | 0 .../ui/src}/core/components/tree/types.ts | 0 .../ui/src}/core/components/tree/useTree.ts | 0 {src => packages/ui/src}/core/constants.ts | 0 .../ui/src}/core/helpers/animation.ts | 0 .../ui/src}/core/helpers/element.ts | 0 .../ui/src}/core/helpers/focus.ts | 0 .../ui/src}/core/helpers/index.ts | 0 .../ui/src}/core/helpers/scroll.ts | 0 {src => packages/ui/src}/core/hooks/index.ts | 0 .../ui/src}/core/hooks/useArrayProp.ts | 0 .../src}/core/hooks/useClickOutside.test.tsx | 0 .../ui/src}/core/hooks/useClickOutside.ts | 0 .../core/hooks/useClickOutsideEvent.test.tsx | 0 .../src}/core/hooks/useClickOutsideEvent.ts | 0 .../ui/src}/core/hooks/useCustomValidity.ts | 0 .../ui/src}/core/hooks/useDelayed.test.ts | 0 .../ui/src}/core/hooks/useDelayedState.ts | 0 .../useElementRect/__workshop__/example.tsx | 0 .../useElementRect/__workshop__/index.ts | 0 .../src}/core/hooks/useElementRect/index.ts | 0 .../hooks/useElementRect/useElementRect.ts | 0 .../ui/src}/core/hooks/useElementSize.ts | 0 .../ui/src}/core/hooks/useForwardedRef.ts | 0 .../ui/src}/core/hooks/useGlobalKeyDown.ts | 0 .../ui/src}/core/hooks/useIsomorphicEffect.ts | 0 .../ui/src}/core/hooks/useMatchMedia.ts | 0 .../hooks/useMediaIndex/__workshop__/index.ts | 0 .../hooks/useMediaIndex/__workshop__/test.tsx | 0 .../ui/src}/core/hooks/useMediaIndex/index.ts | 0 .../useMediaIndex/useMediaIndex.test.tsx | 0 .../core/hooks/useMediaIndex/useMediaIndex.ts | 0 .../ui/src}/core/hooks/useMounted.ts | 0 .../hooks/usePrefersDark.hydration.test.tsx | 0 .../src}/core/hooks/usePrefersDark.test.tsx | 0 .../ui/src}/core/hooks/usePrefersDark.ts | 0 ...usePrefersReducedMotion.hydration.test.tsx | 0 .../hooks/usePrefersReducedMotion.test.tsx | 0 .../core/hooks/usePrefersReducedMotion.ts | 0 {src => packages/ui/src}/core/index.ts | 0 .../core/lib/createGlobalScopedContext.ts | 0 .../ui/src}/core/lib/globalScope.ts | 0 {src => packages/ui/src}/core/lib/isRecord.ts | 0 .../ui/src}/core/middleware/origin.ts | 0 .../core/observers/elementSizeObserver.ts | 0 .../ui/src}/core/observers/index.ts | 0 .../ui/src}/core/observers/resizeObserver.ts | 0 .../src}/core/primitives/_selectable/index.ts | 0 .../primitives/_selectable/selectable.tsx | 0 .../src}/core/primitives/_selectable/style.ts | 0 .../avatar/__workshop__/asButton.tsx | 0 .../primitives/avatar/__workshop__/index.ts | 0 .../primitives/avatar/__workshop__/stack.tsx | 0 .../avatar/__workshop__/withinButton.tsx | 0 .../avatar/__workshop__/withinMenuItem.tsx | 0 .../ui/src}/core/primitives/avatar/avatar.tsx | 0 .../core/primitives/avatar/avatarCounter.tsx | 0 .../core/primitives/avatar/avatarStack.tsx | 0 .../ui/src}/core/primitives/avatar/index.ts | 0 .../ui/src}/core/primitives/avatar/styles.ts | 0 .../ui/src}/core/primitives/avatar/types.ts | 0 .../primitives/badge/__workshop__/index.ts | 0 .../primitives/badge/__workshop__/props.tsx | 0 .../primitives/badge/__workshop__/tones.tsx | 0 .../src}/core/primitives/badge/badge.test.tsx | 0 .../ui/src}/core/primitives/badge/badge.tsx | 0 .../ui/src}/core/primitives/badge/index.ts | 0 .../ui/src}/core/primitives/badge/styles.ts | 0 .../ui/src}/core/primitives/badge/types.ts | 0 .../core/primitives/box/__workshop__/index.ts | 0 .../primitives/box/__workshop__/props.tsx | 0 .../box/__workshop__/responsive.tsx | 0 .../ui/src}/core/primitives/box/box.tsx | 0 .../ui/src}/core/primitives/box/index.ts | 0 .../primitives/button/__workshop__/custom.tsx | 0 .../button/__workshop__/customIcons.tsx | 0 .../button/__workshop__/disabled.tsx | 0 .../primitives/button/__workshop__/index.ts | 0 .../button/__workshop__/mixedChildren.tsx | 0 .../primitives/button/__workshop__/props.tsx | 0 .../__workshop__/sanityUploadButton.tsx | 0 .../button/__workshop__/stacked.tsx | 0 .../button/__workshop__/styled1.tsx | 0 .../button/__workshop__/styled2.tsx | 0 .../button/__workshop__/uploadButton.tsx | 0 .../core/primitives/button/button.test.tsx | 0 .../ui/src}/core/primitives/button/button.tsx | 0 .../ui/src}/core/primitives/button/index.ts | 0 .../ui/src}/core/primitives/button/styles.ts | 0 .../primitives/card/__workshop__/allTones.tsx | 0 .../primitives/card/__workshop__/asButton.tsx | 0 .../card/__workshop__/asComponent.tsx | 0 .../card/__workshop__/checkered.tsx | 0 .../primitives/card/__workshop__/index.ts | 0 .../card/__workshop__/interactive.tsx | 0 .../card/__workshop__/listNavigation.tsx | 0 .../primitives/card/__workshop__/props.tsx | 0 .../primitives/card/__workshop__/selected.tsx | 0 .../primitives/card/__workshop__/styled.tsx | 0 .../ui/src}/core/primitives/card/card.tsx | 0 .../ui/src}/core/primitives/card/index.ts | 0 .../ui/src}/core/primitives/card/styles.ts | 0 .../ui/src}/core/primitives/card/types.ts | 0 .../checkbox/__workshop__/example.tsx | 0 .../primitives/checkbox/__workshop__/index.ts | 0 .../checkbox/__workshop__/props.tsx | 0 .../checkbox/__workshop__/readOnly.tsx | 0 .../checkbox/__workshop__/tones.tsx | 0 .../core/primitives/checkbox/checkbox.tsx | 0 .../ui/src}/core/primitives/checkbox/index.ts | 0 .../src}/core/primitives/checkbox/styles.ts | 0 .../primitives/code/__workshop__/index.ts | 0 .../code/__workshop__/opticalAlignment.tsx | 0 .../primitives/code/__workshop__/props.tsx | 0 .../ui/src}/core/primitives/code/code.tsx | 0 .../ui/src}/core/primitives/code/index.ts | 0 .../src}/core/primitives/code/refractor.tsx | 0 .../ui/src}/core/primitives/code/styles.ts | 0 .../container/__workshop__/example.tsx | 0 .../container/__workshop__/index.ts | 0 .../core/primitives/container/container.tsx | 0 .../src}/core/primitives/container/index.ts | 0 .../src}/core/primitives/container/styles.ts | 0 .../src}/core/primitives/container/types.ts | 0 .../primitives/flex/__workshop__/example.tsx | 0 .../core/primitives/flex/__workshop__/gap.tsx | 0 .../primitives/flex/__workshop__/index.ts | 0 .../ui/src}/core/primitives/flex/flex.tsx | 0 .../ui/src}/core/primitives/flex/index.ts | 0 .../primitives/grid/__workshop__/index.ts | 0 .../grid/__workshop__/responsive.tsx | 0 .../ui/src}/core/primitives/grid/grid.tsx | 0 .../ui/src}/core/primitives/grid/index.ts | 0 .../primitives/heading/__workshop__/index.ts | 0 .../heading/__workshop__/opticalAlignment.tsx | 0 .../primitives/heading/__workshop__/plain.tsx | 0 .../src}/core/primitives/heading/heading.tsx | 0 .../ui/src}/core/primitives/heading/index.ts | 0 .../ui/src}/core/primitives/heading/styles.ts | 0 .../ui/src}/core/primitives/heading/types.ts | 0 .../ui/src}/core/primitives/index.ts | 0 .../primitives/inline/__workshop__/index.ts | 0 .../primitives/inline/__workshop__/plain.tsx | 0 .../ui/src}/core/primitives/inline/index.ts | 0 .../ui/src}/core/primitives/inline/inline.tsx | 0 .../ui/src}/core/primitives/inline/styles.ts | 0 .../ui/src}/core/primitives/inline/types.ts | 0 .../core/primitives/kbd/__workshop__/index.ts | 0 .../primitives/kbd/__workshop__/plain.tsx | 0 .../ui/src}/core/primitives/kbd/index.ts | 0 .../ui/src}/core/primitives/kbd/kbd.tsx | 0 .../primitives/label/__workshop__/index.ts | 0 .../label/__workshop__/opticalAlignment.tsx | 0 .../primitives/label/__workshop__/plain.tsx | 0 .../ui/src}/core/primitives/label/index.ts | 0 .../ui/src}/core/primitives/label/label.tsx | 0 .../ui/src}/core/primitives/label/styles.ts | 0 .../popover/__workshop__/AlignedStory.tsx | 0 .../popover/__workshop__/MarginsStory.tsx | 0 .../__workshop__/MatchReferenceWidthStory.tsx | 0 .../popover/__workshop__/OpenOnMountStory.tsx | 0 .../popover/__workshop__/PlainStory.tsx | 0 .../popover/__workshop__/RecursiveStory.tsx | 0 .../popover/__workshop__/SidePanelStory.tsx | 0 .../popover/__workshop__/TestStory.tsx | 0 .../primitives/popover/__workshop__/index.ts | 0 .../src}/core/primitives/popover/constants.ts | 0 .../primitives/popover/floating-ui/size.ts | 0 .../src}/core/primitives/popover/helpers.ts | 0 .../ui/src}/core/primitives/popover/index.ts | 0 .../src}/core/primitives/popover/popover.tsx | 0 .../core/primitives/popover/popoverCard.tsx | 0 .../ui/src}/core/primitives/popover/types.ts | 0 .../primitives/radio/__workshop__/example.tsx | 0 .../primitives/radio/__workshop__/index.ts | 0 .../primitives/radio/__workshop__/plain.tsx | 0 .../ui/src}/core/primitives/radio/index.ts | 0 .../ui/src}/core/primitives/radio/radio.tsx | 0 .../ui/src}/core/primitives/radio/styles.ts | 0 .../primitives/select/__workshop__/index.ts | 0 .../primitives/select/__workshop__/plain.tsx | 0 .../select/__workshop__/readOnly.tsx | 0 .../ui/src}/core/primitives/select/index.ts | 0 .../ui/src}/core/primitives/select/select.tsx | 0 .../ui/src}/core/primitives/select/styles.ts | 0 .../primitives/spinner/__workshop__/Props.tsx | 0 .../primitives/spinner/__workshop__/index.ts | 0 .../ui/src}/core/primitives/spinner/index.ts | 0 .../src}/core/primitives/spinner/spinner.tsx | 0 .../primitives/stack/__workshop__/index.ts | 0 .../primitives/stack/__workshop__/plain.tsx | 0 .../ui/src}/core/primitives/stack/index.ts | 0 .../ui/src}/core/primitives/stack/stack.tsx | 0 .../ui/src}/core/primitives/stack/styles.ts | 0 .../switch/__workshop__/example.tsx | 0 .../primitives/switch/__workshop__/index.ts | 0 .../primitives/switch/__workshop__/props.tsx | 0 .../ui/src}/core/primitives/switch/index.ts | 0 .../ui/src}/core/primitives/switch/styles.ts | 0 .../ui/src}/core/primitives/switch/switch.tsx | 0 .../primitives/text/__workshop__/colored.tsx | 0 .../primitives/text/__workshop__/example.tsx | 0 .../primitives/text/__workshop__/index.ts | 0 .../text/__workshop__/opticalAlignment.tsx | 0 .../ui/src}/core/primitives/text/index.ts | 0 .../ui/src}/core/primitives/text/styles.ts | 0 .../ui/src}/core/primitives/text/text.tsx | 0 .../primitives/textArea/__workshop__/index.ts | 0 .../textArea/__workshop__/plain.tsx | 0 .../ui/src}/core/primitives/textArea/index.ts | 0 .../core/primitives/textArea/textArea.tsx | 0 .../textInput/__workshop__/clearButton.tsx | 0 .../textInput/__workshop__/customValidity.tsx | 0 .../textInput/__workshop__/index.ts | 0 .../textInput/__workshop__/plain.tsx | 0 .../textInput/__workshop__/readOnly.tsx | 0 .../textInput/__workshop__/states.tsx | 0 .../textInput/__workshop__/tones.tsx | 0 .../textInput/__workshop__/typed.tsx | 0 .../src}/core/primitives/textInput/index.ts | 0 .../core/primitives/textInput/textInput.tsx | 0 .../tooltip/__workshop__/customPortal.tsx | 0 .../primitives/tooltip/__workshop__/index.ts | 0 .../__workshop__/overflowingBoundary.tsx | 0 .../primitives/tooltip/__workshop__/props.tsx | 0 .../__workshop__/resizableBoundary.tsx | 0 .../src}/core/primitives/tooltip/constants.ts | 0 .../ui/src}/core/primitives/tooltip/index.ts | 0 .../core/primitives/tooltip/tooltip.test.tsx | 0 .../src}/core/primitives/tooltip/tooltip.tsx | 0 .../core/primitives/tooltip/tooltipCard.tsx | 0 .../tooltip/tooltipDelayGroup/index.ts | 0 .../tooltipDelayGroupContext.tsx | 0 .../tooltipDelayGroupProvider.tsx | 0 .../tooltip/tooltipDelayGroup/types.ts | 0 .../tooltipDelayGroup/useTooltipDelayGroup.ts | 0 .../ui/src}/core/primitives/types.ts | 0 .../ui/src}/core/styles/border/borderStyle.ts | 0 .../ui/src}/core/styles/border/index.ts | 0 .../ui/src}/core/styles/border/types.ts | 0 .../ui/src}/core/styles/box/boxStyle.ts | 0 .../ui/src}/core/styles/box/index.ts | 0 .../ui/src}/core/styles/box/types.ts | 0 .../src}/core/styles/card/_cardColorStyle.ts | 0 .../ui/src}/core/styles/card/index.ts | 0 .../ui/src}/core/styles/flex/flexItemStyle.ts | 0 .../ui/src}/core/styles/flex/flexStyle.ts | 0 .../ui/src}/core/styles/flex/index.ts | 0 .../ui/src}/core/styles/flex/types.ts | 0 .../ui/src}/core/styles/focusRing/index.ts | 0 .../ui/src}/core/styles/font/codeFontStyle.ts | 0 .../src}/core/styles/font/headingFontStyle.ts | 0 .../ui/src}/core/styles/font/index.ts | 0 .../src}/core/styles/font/labelFontStyle.ts | 0 .../src}/core/styles/font/responsiveFont.ts | 0 .../src}/core/styles/font/textAlignStyle.ts | 0 .../ui/src}/core/styles/font/textFontStyle.ts | 0 .../ui/src}/core/styles/font/types.ts | 0 .../ui/src}/core/styles/grid/gridItemStyle.ts | 0 .../ui/src}/core/styles/grid/gridStyle.ts | 0 .../ui/src}/core/styles/grid/index.ts | 0 .../ui/src}/core/styles/grid/types.ts | 0 .../ui/src}/core/styles/helpers.ts | 0 {src => packages/ui/src}/core/styles/index.ts | 0 .../ui/src}/core/styles/input/index.ts | 0 .../input/responsiveInputPaddingStyle.ts | 0 .../src}/core/styles/input/textInputStyle.ts | 0 .../ui/src}/core/styles/internal.ts | 0 .../ui/src}/core/styles/margin/index.ts | 0 .../ui/src}/core/styles/margin/marginStyle.ts | 0 .../core/styles/margin/marginsStyle.test.ts | 0 .../ui/src}/core/styles/margin/types.ts | 0 .../ui/src}/core/styles/padding/index.ts | 0 .../core/styles/padding/paddingStyle.test.ts | 0 .../src}/core/styles/padding/paddingStyle.ts | 0 .../ui/src}/core/styles/padding/types.ts | 0 .../ui/src}/core/styles/radius/index.ts | 0 .../ui/src}/core/styles/radius/radiusStyle.ts | 0 .../ui/src}/core/styles/radius/types.ts | 0 .../ui/src}/core/styles/shadow/index.ts | 0 .../ui/src}/core/styles/shadow/shadowStyle.ts | 0 .../ui/src}/core/styles/shadow/types.ts | 0 {src => packages/ui/src}/core/styles/types.ts | 0 .../core/theme/__workshop__/build/Root.tsx | 0 .../core/theme/__workshop__/build/helpers.ts | 0 .../core/theme/__workshop__/build/story.tsx | 0 .../src}/core/theme/__workshop__/canvas.tsx | 0 .../ui/src}/core/theme/__workshop__/color.tsx | 0 .../core/theme/__workshop__/debug/story.tsx | 0 .../ui/src}/core/theme/__workshop__/index.ts | 0 .../ui/src}/core/theme/__workshop__/layer.tsx | 0 .../theme/__workshop__/nestedProvider.tsx | 0 {src => packages/ui/src}/core/theme/index.ts | 0 .../ui/src}/core/theme/theme.test.tsx | 0 .../ui/src}/core/theme/themeColorProvider.tsx | 0 .../ui/src}/core/theme/themeContext.ts | 0 .../ui/src}/core/theme/themeProvider.tsx | 0 {src => packages/ui/src}/core/theme/types.ts | 0 .../ui/src}/core/theme/useRootTheme.ts | 0 .../ui/src}/core/theme/useTheme.ts | 0 {src => packages/ui/src}/core/types/avatar.ts | 0 {src => packages/ui/src}/core/types/badge.ts | 0 {src => packages/ui/src}/core/types/box.ts | 0 {src => packages/ui/src}/core/types/button.ts | 0 {src => packages/ui/src}/core/types/card.ts | 0 {src => packages/ui/src}/core/types/dialog.ts | 0 {src => packages/ui/src}/core/types/flex.ts | 0 {src => packages/ui/src}/core/types/grid.ts | 0 .../ui/src}/core/types/gridItem.ts | 0 {src => packages/ui/src}/core/types/index.ts | 0 .../ui/src}/core/types/placement.ts | 0 .../ui/src}/core/types/popover.ts | 0 {src => packages/ui/src}/core/types/radius.ts | 0 .../ui/src}/core/types/selectable.ts | 0 {src => packages/ui/src}/core/types/text.ts | 0 .../ui/src}/core/utils/arrow/arrow.tsx | 0 .../ui/src}/core/utils/arrow/cmds.ts | 0 .../ui/src}/core/utils/arrow/index.ts | 0 .../boundaryElement/__workshop__/index.ts | 0 .../boundaryElement/__workshop__/plain.tsx | 0 .../boundaryElement/boundaryElement.test.tsx | 0 .../boundaryElement/boundaryElementContext.ts | 0 .../boundaryElementProvider.tsx | 0 .../src}/core/utils/boundaryElement/index.ts | 0 .../src}/core/utils/boundaryElement/types.ts | 0 .../boundaryElement/useBoundaryElement.ts | 0 .../conditionalWrapper/conditionalWrapper.tsx | 0 .../core/utils/conditionalWrapper/index.ts | 0 .../elementQuery/__workshop__/customMedia.tsx | 0 .../utils/elementQuery/__workshop__/index.ts | 0 .../core/utils/elementQuery/elementQuery.tsx | 0 .../src}/core/utils/elementQuery/helpers.ts | 0 .../ui/src}/core/utils/elementQuery/index.ts | 0 .../ui/src}/core/utils/errorBoundary.tsx | 0 .../ui/src}/core/utils/getElementRef.ts | 0 {src => packages/ui/src}/core/utils/index.ts | 0 .../core/utils/layer/__workshop__/_debug.tsx | 0 .../core/utils/layer/__workshop__/index.ts | 0 .../layer/__workshop__/multipleRoots.tsx | 0 .../core/utils/layer/__workshop__/nested.tsx | 0 .../layer/__workshop__/responsiveZOffset.tsx | 0 .../core/utils/layer/getLayerContext.test.ts | 0 .../src}/core/utils/layer/getLayerContext.ts | 0 .../ui/src}/core/utils/layer/index.ts | 0 .../ui/src}/core/utils/layer/layer.test.tsx | 0 .../ui/src}/core/utils/layer/layer.tsx | 0 .../ui/src}/core/utils/layer/layerContext.ts | 0 .../src}/core/utils/layer/layerProvider.tsx | 0 .../ui/src}/core/utils/layer/types.ts | 0 .../ui/src}/core/utils/layer/useLayer.ts | 0 .../core/utils/portal/__workshop__/index.ts | 0 .../core/utils/portal/__workshop__/named.tsx | 0 .../ui/src}/core/utils/portal/index.ts | 0 .../ui/src}/core/utils/portal/portal.test.tsx | 0 .../ui/src}/core/utils/portal/portal.ts | 0 .../src}/core/utils/portal/portalContext.ts | 0 .../src}/core/utils/portal/portalProvider.tsx | 0 .../ui/src}/core/utils/portal/types.ts | 0 .../ui/src}/core/utils/portal/usePortal.ts | 0 .../src}/core/utils/spanWithTextOverflow.tsx | 0 .../ui/src}/core/utils/srOnly/index.ts | 0 .../ui/src}/core/utils/srOnly/srOnly.tsx | 0 .../__workshop__/changingProps.tsx | 0 .../__workshop__/elementScroll.tsx | 0 .../utils/virtualList/__workshop__/index.ts | 0 .../virtualList/__workshop__/infiniteList.tsx | 0 .../__workshop__/windowScrolll.tsx | 0 .../ui/src}/core/utils/virtualList/index.ts | 0 .../core/utils/virtualList/virtualList.tsx | 0 .../_selectable/createSelectableTones.ts | 0 .../color/_solid/createSolidTones.ts | 0 .../color/button/createButtonModes.ts | 0 .../color/button/createButtonTones.ts | 0 .../color/card/createCardStates.ts | 0 .../build/_deprecated/color/color.test.ts | 0 .../theme/build/_deprecated/color/defaults.ts | 0 .../theme/build/_deprecated/color/factory.ts | 0 .../theme/build/_deprecated/color/index.ts | 0 .../color/input/createInputModes.ts | 0 .../_deprecated/color/muted/createMuted.ts | 0 .../_deprecated/color/spot/createSpot.ts | 0 .../src}/theme/build/buildColorTheme.test.ts | 0 .../ui/src}/theme/build/buildColorTheme.ts | 0 .../ui/src}/theme/build/buildTheme.test.ts | 0 .../ui/src}/theme/build/buildTheme.ts | 0 .../src}/theme/build/colorToken/colorToken.ts | 0 .../build/colorToken/compileColorToken.ts | 0 .../ui/src}/theme/build/colorToken/index.ts | 0 .../ui/src}/theme/build/colorToken/types.ts | 0 {src => packages/ui/src}/theme/build/index.ts | 0 .../theme/build/lib/color-fns/blend/index.ts | 0 .../theme/build/lib/color-fns/blend/mix.ts | 0 .../build/lib/color-fns/blend/multiply.ts | 0 .../theme/build/lib/color-fns/blend/screen.ts | 0 .../build/lib/color-fns/color-fns.test.ts | 0 .../build/lib/color-fns/contrastRatio.ts | 0 .../src}/theme/build/lib/color-fns/convert.ts | 0 .../src}/theme/build/lib/color-fns/index.ts | 0 .../src}/theme/build/lib/color-fns/parse.ts | 0 .../ui/src}/theme/build/lib/color-fns/rgba.ts | 0 .../src}/theme/build/lib/color-fns/types.ts | 0 .../ui/src}/theme/build/lib/isRecord.ts | 0 .../ui/src}/theme/build/lib/utils.ts | 0 {src => packages/ui/src}/theme/build/merge.ts | 0 .../ui/src}/theme/build/mixThemeColor.test.ts | 0 .../ui/src}/theme/build/mixThemeColor.ts | 0 .../ui/src}/theme/build/renderColorTheme.ts | 0 .../ui/src}/theme/build/renderColorValue.ts | 0 .../ui/src}/theme/build/resolveColorTokens.ts | 0 .../ui/src}/theme/build/theme.test.ts | 0 .../ui/src}/theme/config/helpers.ts | 0 .../ui/src}/theme/config/index.ts | 0 .../ui/src}/theme/config/system.ts | 0 .../src}/theme/config/tokens/color/index.ts | 0 .../src}/theme/config/tokens/color/types.ts | 0 .../ui/src}/theme/config/tokens/index.ts | 0 .../theme/config/tokens/parseTokenKey.test.ts | 0 .../src}/theme/config/tokens/parseTokenKey.ts | 0 .../config/tokens/parseTokenValue.test.ts | 0 .../theme/config/tokens/parseTokenValue.ts | 0 .../ui/src}/theme/config/tokens/types.ts | 0 .../ui/src}/theme/config/types.ts | 0 .../ui/src}/theme/defaults/colorPalette.ts | 0 .../ui/src}/theme/defaults/colorTokens.ts | 0 .../ui/src}/theme/defaults/config.ts | 0 .../ui/src}/theme/defaults/fonts.ts | 0 .../ui/src}/theme/getScopedTheme.ts | 0 {src => packages/ui/src}/theme/index.ts | 0 .../ui/src}/theme/system/avatar.ts | 0 .../ui/src}/theme/system/color/_constants.ts | 0 .../ui/src}/theme/system/color/_helpers.ts | 0 .../ui/src}/theme/system/color/_system.ts | 0 .../ui/src}/theme/system/color/avatar.ts | 0 .../ui/src}/theme/system/color/badge.ts | 0 .../ui/src}/theme/system/color/button.ts | 0 .../ui/src}/theme/system/color/color.ts | 0 .../ui/src}/theme/system/color/index.ts | 0 .../ui/src}/theme/system/color/input.ts | 0 .../ui/src}/theme/system/color/kbd.ts | 0 .../ui/src}/theme/system/color/selectable.ts | 0 .../ui/src}/theme/system/color/shadow.ts | 0 .../ui/src}/theme/system/color/state.ts | 0 .../ui/src}/theme/system/color/syntax.ts | 0 {src => packages/ui/src}/theme/system/css.ts | 0 .../ui/src}/theme/system/focusRing.ts | 0 {src => packages/ui/src}/theme/system/font.ts | 0 .../ui/src}/theme/system/index.ts | 0 .../ui/src}/theme/system/input.ts | 0 .../ui/src}/theme/system/layer.ts | 0 .../ui/src}/theme/system/shadow.ts | 0 .../ui/src}/theme/system/styles.ts | 0 .../ui/src}/theme/system/theme.ts | 0 .../ui/src}/theme/system/v0/avatar.ts | 0 .../ui/src}/theme/system/v0/color/_generic.ts | 0 .../ui/src}/theme/system/v0/color/_system.ts | 0 .../ui/src}/theme/system/v0/color/base.ts | 0 .../ui/src}/theme/system/v0/color/button.ts | 0 .../ui/src}/theme/system/v0/color/card.ts | 0 .../ui/src}/theme/system/v0/color/color.ts | 0 .../ui/src}/theme/system/v0/color/index.ts | 0 .../ui/src}/theme/system/v0/color/input.ts | 0 .../ui/src}/theme/system/v0/color/muted.ts | 0 .../src}/theme/system/v0/color/selectable.ts | 0 .../ui/src}/theme/system/v0/color/solid.ts | 0 .../ui/src}/theme/system/v0/color/spot.ts | 0 .../ui/src}/theme/system/v0/index.ts | 0 .../ui/src}/theme/system/v0/input.ts | 0 .../ui/src}/theme/versioning/getTheme_v2.ts | 0 .../ui/src}/theme/versioning/index.ts | 0 .../ui/src}/theme/versioning/is_v0.ts | 0 .../ui/src}/theme/versioning/is_v2.ts | 0 .../src}/theme/versioning/themeColor_v0_v2.ts | 0 .../theme/versioning/themeColor_v2_v2_9.ts | 0 .../ui/src}/theme/versioning/v0_v2.ts | 0 .../ui/src}/theme/versioning/v2_v0.ts | 0 {test => packages/ui/test}/index.ts | 0 .../ui/test}/mocks/matchMedia.mock.ts | 0 .../ui/test}/mocks/resizeObserver.mock.ts | 0 .../ui/test}/setupFilesAfterEnv.ts | 0 {test => packages/ui/test}/utils.tsx | 0 .../ui/tsconfig.dist.json | 2 +- tsconfig.json => packages/ui/tsconfig.json | 5 +- .../ui/typings}/ResizeObserver.d.ts | 0 {typings => packages/ui/typings}/dom.d.ts | 0 packages/ui/typings/styled-components.d.ts | 6 + .../ui/typings}/workshop-env.d.ts | 0 packages/ui/vercel.json | 16 + .../ui/workshop.config.ts | 0 .../ui/workshop.runtime.ts | 0 .../ui/workshop}/fontsPlugin.tsx | 0 pnpm-lock.yaml | 337 ++++++++++++------ pnpm-workspace.yaml | 3 +- 700 files changed, 876 insertions(+), 470 deletions(-) create mode 100644 AGENTS.md mode change 100644 => 120000 README.md rename {.storybook => apps/storybook/.storybook}/decorators/withSanityTheme.decorator.tsx (100%) rename {.storybook => apps/storybook/.storybook}/main.ts (100%) rename {.storybook => apps/storybook/.storybook}/manager-head.html (100%) rename {.storybook => apps/storybook/.storybook}/manager.ts (100%) rename {.storybook => apps/storybook/.storybook}/preview-head.html (100%) rename {.storybook => apps/storybook/.storybook}/preview.tsx (100%) create mode 100644 apps/storybook/eslint.config.mjs create mode 100644 apps/storybook/package.json rename {stories => apps/storybook/stories}/README.mdx (100%) rename {stories => apps/storybook/stories}/components/Autocomplete.stories.tsx (89%) rename {stories => apps/storybook/stories}/components/Breadcrumbs.stories.tsx (85%) rename {stories => apps/storybook/stories}/components/CodeSkeleton.stories.tsx (88%) rename {stories => apps/storybook/stories}/components/Dialog.stories.tsx (96%) rename {stories => apps/storybook/stories}/components/HeadingSkeleton.stories.tsx (88%) rename {stories => apps/storybook/stories}/components/Hotkeys.stories.tsx (92%) rename {stories => apps/storybook/stories}/components/LabelSkeleton.stories.tsx (88%) rename {stories => apps/storybook/stories}/components/Menu.stories.tsx (96%) rename {stories => apps/storybook/stories}/components/MenuButton.stories.tsx (96%) rename {stories => apps/storybook/stories}/components/MenuItem.stories.tsx (82%) rename {stories => apps/storybook/stories}/components/Skeleton.stories.tsx (94%) rename {stories => apps/storybook/stories}/components/Tab.stories.tsx (96%) rename {stories => apps/storybook/stories}/components/TabList.stories.tsx (97%) rename {stories => apps/storybook/stories}/components/TextSkeleton.stories.tsx (88%) rename {stories => apps/storybook/stories}/components/Toast.stories.tsx (98%) rename {stories => apps/storybook/stories}/components/Tree.stories.tsx (95%) rename {stories => apps/storybook/stories}/constants.ts (91%) rename {stories => apps/storybook/stories}/controls.ts (97%) rename {stories => apps/storybook/stories}/helpers/columnBuilder.tsx (80%) rename {stories => apps/storybook/stories}/helpers/matrixBuilder.tsx (94%) rename {stories => apps/storybook/stories}/helpers/rowBuilder.tsx (80%) rename {stories => apps/storybook/stories}/primitives/Avatar.stories.tsx (96%) rename {stories => apps/storybook/stories}/primitives/AvatarCounter.stories.tsx (87%) rename {stories => apps/storybook/stories}/primitives/AvatarStack.stories.tsx (89%) rename {stories => apps/storybook/stories}/primitives/Badge.stories.tsx (95%) rename {stories => apps/storybook/stories}/primitives/Box.stories.tsx (90%) rename {stories => apps/storybook/stories}/primitives/Button.stories.tsx (98%) rename {stories => apps/storybook/stories}/primitives/Card.stories.tsx (98%) rename {stories => apps/storybook/stories}/primitives/Checkbox.stories.tsx (97%) rename {stories => apps/storybook/stories}/primitives/Code.stories.tsx (94%) rename {stories => apps/storybook/stories}/primitives/Container.stories.tsx (95%) rename {stories => apps/storybook/stories}/primitives/Flex.stories.tsx (94%) rename {stories => apps/storybook/stories}/primitives/Grid.stories.tsx (94%) rename {stories => apps/storybook/stories}/primitives/Heading.stories.tsx (96%) rename {stories => apps/storybook/stories}/primitives/Inline.stories.tsx (94%) rename {stories => apps/storybook/stories}/primitives/KBD.stories.tsx (94%) rename {stories => apps/storybook/stories}/primitives/Label.stories.tsx (95%) rename {stories => apps/storybook/stories}/primitives/Popover.stories.tsx (98%) rename {stories => apps/storybook/stories}/primitives/Radio.stories.tsx (97%) rename {stories => apps/storybook/stories}/primitives/Select.stories.tsx (95%) rename {stories => apps/storybook/stories}/primitives/Spinner.stories.tsx (87%) rename {stories => apps/storybook/stories}/primitives/Stack.stories.tsx (94%) rename {stories => apps/storybook/stories}/primitives/Switch.stories.tsx (97%) rename {stories => apps/storybook/stories}/primitives/Text.stories.tsx (97%) rename {stories => apps/storybook/stories}/primitives/TextArea.stories.tsx (97%) rename {stories => apps/storybook/stories}/primitives/TextInput.stories.tsx (98%) rename {stories => apps/storybook/stories}/primitives/Tooltip.stories.tsx (95%) rename {stories => apps/storybook/stories}/primitives/components/FieldWrapper.tsx (81%) rename {stories => apps/storybook/stories}/tests/FocusRings.mdx (100%) rename {stories => apps/storybook/stories}/tests/FocusRings.tsx (98%) rename {stories => apps/storybook/stories}/tests/Tones.mdx (100%) rename {stories => apps/storybook/stories}/tests/Tones.tsx (98%) rename {stories => apps/storybook/stories}/tokens/ColorPalette.tsx (90%) rename {stories => apps/storybook/stories}/tokens/Colors.mdx (100%) create mode 100644 apps/storybook/tsconfig.json rename {typings => apps/storybook/typings}/styled-components.d.ts (100%) create mode 100644 apps/storybook/vercel.json delete mode 100644 figma/tsconfig.json rename {figma => packages/figma}/manifest.json (100%) rename {figma => packages/figma}/package.config.ts (100%) rename {figma => packages/figma}/package.json (86%) rename {figma => packages/figma}/src/config.ts (100%) rename {figma => packages/figma}/src/index.html (100%) rename {figma => packages/figma}/src/index.ts (100%) rename {figma => packages/figma}/src/styles/write.ts (100%) rename {figma => packages/figma}/src/theme.ts (100%) rename {figma => packages/figma}/src/vars/helpers.ts (100%) rename {figma => packages/figma}/src/vars/prepareSanityUIColorVariables.ts (100%) rename {figma => packages/figma}/src/vars/types.ts (100%) rename {figma => packages/figma}/src/vars/write.ts (100%) rename {figma => packages/figma}/tsconfig.dist.json (86%) create mode 100644 packages/figma/tsconfig.json rename CHANGELOG.md => packages/ui/CHANGELOG.md (100%) create mode 100644 packages/ui/README.md rename eslint.config.mjs => packages/ui/eslint.config.mjs (80%) rename {exports => packages/ui/exports}/_visual-editing.ts (100%) rename {exports => packages/ui/exports}/index.ts (100%) rename {exports => packages/ui/exports}/theme.ts (100%) rename jest.config.js => packages/ui/jest.config.js (100%) rename package.config.ts => packages/ui/package.config.ts (100%) create mode 100644 packages/ui/package.json rename {src => packages/ui/src}/core/__workshop__/constants.ts (100%) rename {src => packages/ui/src}/core/_compat.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/__mocks__/apiStore.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/__mocks__/countries.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/async.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/constrainedHeight.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/custom.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/focusAndBlur.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/fullscreen.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/__workshop__/types.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/autocomplete.styles.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/autocomplete.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/autocompleteOption.tsx (100%) rename {src => packages/ui/src}/core/components/autocomplete/autocompleteReducer.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/constants.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/index.ts (100%) rename {src => packages/ui/src}/core/components/autocomplete/types.ts (100%) rename {src => packages/ui/src}/core/components/breadcrumbs/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/components/breadcrumbs/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/breadcrumbs/breadcrumbs.styles.ts (100%) rename {src => packages/ui/src}/core/components/breadcrumbs/breadcrumbs.tsx (100%) rename {src => packages/ui/src}/core/components/breadcrumbs/index.ts (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/activate.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/autoFocus.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/layering.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/nested.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/onScroll.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/panes.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/position.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/provider.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/__workshop__/wrapped.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/dialog.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/dialogContext.ts (100%) rename {src => packages/ui/src}/core/components/dialog/dialogProvider.tsx (100%) rename {src => packages/ui/src}/core/components/dialog/index.ts (100%) rename {src => packages/ui/src}/core/components/dialog/styles.ts (100%) rename {src => packages/ui/src}/core/components/dialog/useDialog.ts (100%) rename {src => packages/ui/src}/core/components/hotkeys/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/hotkeys/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/components/hotkeys/hotkeys.tsx (100%) rename {src => packages/ui/src}/core/components/hotkeys/index.ts (100%) rename {src => packages/ui/src}/core/components/index.ts (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/asComponent.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/avatarMenu.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/closableMenuButton.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/constrainedInBoundary.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/customMenuItem.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/customSelectedState.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/disableFocusOnClose.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/groups.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/menuButton.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/menuGroupRight.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/nestedMenu.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/onCloseMenuButton.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/selectedItem.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/shouldFocus.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/tones.tsx (100%) rename {src => packages/ui/src}/core/components/menu/__workshop__/withoutArrow.tsx (100%) rename {src => packages/ui/src}/core/components/menu/helpers.ts (100%) rename {src => packages/ui/src}/core/components/menu/index.ts (100%) rename {src => packages/ui/src}/core/components/menu/menu.test.tsx (100%) rename {src => packages/ui/src}/core/components/menu/menu.tsx (100%) rename {src => packages/ui/src}/core/components/menu/menuButton.tsx (100%) rename {src => packages/ui/src}/core/components/menu/menuContext.ts (100%) rename {src => packages/ui/src}/core/components/menu/menuDivider.ts (100%) rename {src => packages/ui/src}/core/components/menu/menuGroup.tsx (100%) rename {src => packages/ui/src}/core/components/menu/menuItem.tsx (100%) rename {src => packages/ui/src}/core/components/menu/useMenu.ts (100%) rename {src => packages/ui/src}/core/components/menu/useMenuController.ts (100%) rename {src => packages/ui/src}/core/components/skeleton/__workshop__/delay.tsx (100%) rename {src => packages/ui/src}/core/components/skeleton/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/skeleton/__workshop__/skeleton.tsx (100%) rename {src => packages/ui/src}/core/components/skeleton/index.ts (100%) rename {src => packages/ui/src}/core/components/skeleton/skeleton.tsx (100%) rename {src => packages/ui/src}/core/components/skeleton/styles.ts (100%) rename {src => packages/ui/src}/core/components/skeleton/textSkeleton.tsx (100%) rename {src => packages/ui/src}/core/components/tab/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/components/tab/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/tab/index.ts (100%) rename {src => packages/ui/src}/core/components/tab/tab.tsx (100%) rename {src => packages/ui/src}/core/components/tab/tabList.tsx (100%) rename {src => packages/ui/src}/core/components/tab/tabPanel.tsx (100%) rename {src => packages/ui/src}/core/components/toast/__workshop__/hook.tsx (100%) rename {src => packages/ui/src}/core/components/toast/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/toast/__workshop__/toast.tsx (100%) rename {src => packages/ui/src}/core/components/toast/index.ts (100%) rename {src => packages/ui/src}/core/components/toast/styles.ts (100%) rename {src => packages/ui/src}/core/components/toast/toast.test.tsx (100%) rename {src => packages/ui/src}/core/components/toast/toast.tsx (100%) rename {src => packages/ui/src}/core/components/toast/toastContext.ts (100%) rename {src => packages/ui/src}/core/components/toast/toastLayer.tsx (100%) rename {src => packages/ui/src}/core/components/toast/toastProvider.tsx (100%) rename {src => packages/ui/src}/core/components/toast/toastState.ts (100%) rename {src => packages/ui/src}/core/components/toast/types.ts (100%) rename {src => packages/ui/src}/core/components/toast/useToast.ts (100%) rename {src => packages/ui/src}/core/components/tree/__workshop__/basic.perf.ts (100%) rename {src => packages/ui/src}/core/components/tree/__workshop__/basic.tsx (100%) rename {src => packages/ui/src}/core/components/tree/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/components/tree/__workshop__/tabFromElement.tsx (100%) rename {src => packages/ui/src}/core/components/tree/helpers.ts (100%) rename {src => packages/ui/src}/core/components/tree/index.ts (100%) rename {src => packages/ui/src}/core/components/tree/style.ts (100%) rename {src => packages/ui/src}/core/components/tree/tree.tsx (100%) rename {src => packages/ui/src}/core/components/tree/treeContext.ts (100%) rename {src => packages/ui/src}/core/components/tree/treeGroup.tsx (100%) rename {src => packages/ui/src}/core/components/tree/treeItem.tsx (100%) rename {src => packages/ui/src}/core/components/tree/types.ts (100%) rename {src => packages/ui/src}/core/components/tree/useTree.ts (100%) rename {src => packages/ui/src}/core/constants.ts (100%) rename {src => packages/ui/src}/core/helpers/animation.ts (100%) rename {src => packages/ui/src}/core/helpers/element.ts (100%) rename {src => packages/ui/src}/core/helpers/focus.ts (100%) rename {src => packages/ui/src}/core/helpers/index.ts (100%) rename {src => packages/ui/src}/core/helpers/scroll.ts (100%) rename {src => packages/ui/src}/core/hooks/index.ts (100%) rename {src => packages/ui/src}/core/hooks/useArrayProp.ts (100%) rename {src => packages/ui/src}/core/hooks/useClickOutside.test.tsx (100%) rename {src => packages/ui/src}/core/hooks/useClickOutside.ts (100%) rename {src => packages/ui/src}/core/hooks/useClickOutsideEvent.test.tsx (100%) rename {src => packages/ui/src}/core/hooks/useClickOutsideEvent.ts (100%) rename {src => packages/ui/src}/core/hooks/useCustomValidity.ts (100%) rename {src => packages/ui/src}/core/hooks/useDelayed.test.ts (100%) rename {src => packages/ui/src}/core/hooks/useDelayedState.ts (100%) rename {src => packages/ui/src}/core/hooks/useElementRect/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/hooks/useElementRect/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/hooks/useElementRect/index.ts (100%) rename {src => packages/ui/src}/core/hooks/useElementRect/useElementRect.ts (100%) rename {src => packages/ui/src}/core/hooks/useElementSize.ts (100%) rename {src => packages/ui/src}/core/hooks/useForwardedRef.ts (100%) rename {src => packages/ui/src}/core/hooks/useGlobalKeyDown.ts (100%) rename {src => packages/ui/src}/core/hooks/useIsomorphicEffect.ts (100%) rename {src => packages/ui/src}/core/hooks/useMatchMedia.ts (100%) rename {src => packages/ui/src}/core/hooks/useMediaIndex/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/hooks/useMediaIndex/__workshop__/test.tsx (100%) rename {src => packages/ui/src}/core/hooks/useMediaIndex/index.ts (100%) rename {src => packages/ui/src}/core/hooks/useMediaIndex/useMediaIndex.test.tsx (100%) rename {src => packages/ui/src}/core/hooks/useMediaIndex/useMediaIndex.ts (100%) rename {src => packages/ui/src}/core/hooks/useMounted.ts (100%) rename {src => packages/ui/src}/core/hooks/usePrefersDark.hydration.test.tsx (100%) rename {src => packages/ui/src}/core/hooks/usePrefersDark.test.tsx (100%) rename {src => packages/ui/src}/core/hooks/usePrefersDark.ts (100%) rename {src => packages/ui/src}/core/hooks/usePrefersReducedMotion.hydration.test.tsx (100%) rename {src => packages/ui/src}/core/hooks/usePrefersReducedMotion.test.tsx (100%) rename {src => packages/ui/src}/core/hooks/usePrefersReducedMotion.ts (100%) rename {src => packages/ui/src}/core/index.ts (100%) rename {src => packages/ui/src}/core/lib/createGlobalScopedContext.ts (100%) rename {src => packages/ui/src}/core/lib/globalScope.ts (100%) rename {src => packages/ui/src}/core/lib/isRecord.ts (100%) rename {src => packages/ui/src}/core/middleware/origin.ts (100%) rename {src => packages/ui/src}/core/observers/elementSizeObserver.ts (100%) rename {src => packages/ui/src}/core/observers/index.ts (100%) rename {src => packages/ui/src}/core/observers/resizeObserver.ts (100%) rename {src => packages/ui/src}/core/primitives/_selectable/index.ts (100%) rename {src => packages/ui/src}/core/primitives/_selectable/selectable.tsx (100%) rename {src => packages/ui/src}/core/primitives/_selectable/style.ts (100%) rename {src => packages/ui/src}/core/primitives/avatar/__workshop__/asButton.tsx (100%) rename {src => packages/ui/src}/core/primitives/avatar/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/avatar/__workshop__/stack.tsx (100%) rename {src => packages/ui/src}/core/primitives/avatar/__workshop__/withinButton.tsx (100%) rename {src => packages/ui/src}/core/primitives/avatar/__workshop__/withinMenuItem.tsx (100%) rename {src => packages/ui/src}/core/primitives/avatar/avatar.tsx (100%) rename {src => packages/ui/src}/core/primitives/avatar/avatarCounter.tsx (100%) rename {src => packages/ui/src}/core/primitives/avatar/avatarStack.tsx (100%) rename {src => packages/ui/src}/core/primitives/avatar/index.ts (100%) rename {src => packages/ui/src}/core/primitives/avatar/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/avatar/types.ts (100%) rename {src => packages/ui/src}/core/primitives/badge/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/badge/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/badge/__workshop__/tones.tsx (100%) rename {src => packages/ui/src}/core/primitives/badge/badge.test.tsx (100%) rename {src => packages/ui/src}/core/primitives/badge/badge.tsx (100%) rename {src => packages/ui/src}/core/primitives/badge/index.ts (100%) rename {src => packages/ui/src}/core/primitives/badge/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/badge/types.ts (100%) rename {src => packages/ui/src}/core/primitives/box/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/box/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/box/__workshop__/responsive.tsx (100%) rename {src => packages/ui/src}/core/primitives/box/box.tsx (100%) rename {src => packages/ui/src}/core/primitives/box/index.ts (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/custom.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/customIcons.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/disabled.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/mixedChildren.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/sanityUploadButton.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/stacked.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/styled1.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/styled2.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/__workshop__/uploadButton.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/button.test.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/button.tsx (100%) rename {src => packages/ui/src}/core/primitives/button/index.ts (100%) rename {src => packages/ui/src}/core/primitives/button/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/allTones.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/asButton.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/asComponent.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/checkered.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/interactive.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/listNavigation.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/selected.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/__workshop__/styled.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/card.tsx (100%) rename {src => packages/ui/src}/core/primitives/card/index.ts (100%) rename {src => packages/ui/src}/core/primitives/card/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/card/types.ts (100%) rename {src => packages/ui/src}/core/primitives/checkbox/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/primitives/checkbox/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/checkbox/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/checkbox/__workshop__/readOnly.tsx (100%) rename {src => packages/ui/src}/core/primitives/checkbox/__workshop__/tones.tsx (100%) rename {src => packages/ui/src}/core/primitives/checkbox/checkbox.tsx (100%) rename {src => packages/ui/src}/core/primitives/checkbox/index.ts (100%) rename {src => packages/ui/src}/core/primitives/checkbox/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/code/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/code/__workshop__/opticalAlignment.tsx (100%) rename {src => packages/ui/src}/core/primitives/code/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/code/code.tsx (100%) rename {src => packages/ui/src}/core/primitives/code/index.ts (100%) rename {src => packages/ui/src}/core/primitives/code/refractor.tsx (100%) rename {src => packages/ui/src}/core/primitives/code/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/container/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/primitives/container/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/container/container.tsx (100%) rename {src => packages/ui/src}/core/primitives/container/index.ts (100%) rename {src => packages/ui/src}/core/primitives/container/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/container/types.ts (100%) rename {src => packages/ui/src}/core/primitives/flex/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/primitives/flex/__workshop__/gap.tsx (100%) rename {src => packages/ui/src}/core/primitives/flex/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/flex/flex.tsx (100%) rename {src => packages/ui/src}/core/primitives/flex/index.ts (100%) rename {src => packages/ui/src}/core/primitives/grid/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/grid/__workshop__/responsive.tsx (100%) rename {src => packages/ui/src}/core/primitives/grid/grid.tsx (100%) rename {src => packages/ui/src}/core/primitives/grid/index.ts (100%) rename {src => packages/ui/src}/core/primitives/heading/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/heading/__workshop__/opticalAlignment.tsx (100%) rename {src => packages/ui/src}/core/primitives/heading/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/heading/heading.tsx (100%) rename {src => packages/ui/src}/core/primitives/heading/index.ts (100%) rename {src => packages/ui/src}/core/primitives/heading/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/heading/types.ts (100%) rename {src => packages/ui/src}/core/primitives/index.ts (100%) rename {src => packages/ui/src}/core/primitives/inline/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/inline/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/inline/index.ts (100%) rename {src => packages/ui/src}/core/primitives/inline/inline.tsx (100%) rename {src => packages/ui/src}/core/primitives/inline/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/inline/types.ts (100%) rename {src => packages/ui/src}/core/primitives/kbd/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/kbd/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/kbd/index.ts (100%) rename {src => packages/ui/src}/core/primitives/kbd/kbd.tsx (100%) rename {src => packages/ui/src}/core/primitives/label/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/label/__workshop__/opticalAlignment.tsx (100%) rename {src => packages/ui/src}/core/primitives/label/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/label/index.ts (100%) rename {src => packages/ui/src}/core/primitives/label/label.tsx (100%) rename {src => packages/ui/src}/core/primitives/label/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/AlignedStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/MarginsStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/OpenOnMountStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/PlainStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/RecursiveStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/SidePanelStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/TestStory.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/popover/constants.ts (100%) rename {src => packages/ui/src}/core/primitives/popover/floating-ui/size.ts (100%) rename {src => packages/ui/src}/core/primitives/popover/helpers.ts (100%) rename {src => packages/ui/src}/core/primitives/popover/index.ts (100%) rename {src => packages/ui/src}/core/primitives/popover/popover.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/popoverCard.tsx (100%) rename {src => packages/ui/src}/core/primitives/popover/types.ts (100%) rename {src => packages/ui/src}/core/primitives/radio/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/primitives/radio/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/radio/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/radio/index.ts (100%) rename {src => packages/ui/src}/core/primitives/radio/radio.tsx (100%) rename {src => packages/ui/src}/core/primitives/radio/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/select/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/select/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/select/__workshop__/readOnly.tsx (100%) rename {src => packages/ui/src}/core/primitives/select/index.ts (100%) rename {src => packages/ui/src}/core/primitives/select/select.tsx (100%) rename {src => packages/ui/src}/core/primitives/select/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/spinner/__workshop__/Props.tsx (100%) rename {src => packages/ui/src}/core/primitives/spinner/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/spinner/index.ts (100%) rename {src => packages/ui/src}/core/primitives/spinner/spinner.tsx (100%) rename {src => packages/ui/src}/core/primitives/stack/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/stack/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/stack/index.ts (100%) rename {src => packages/ui/src}/core/primitives/stack/stack.tsx (100%) rename {src => packages/ui/src}/core/primitives/stack/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/switch/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/primitives/switch/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/switch/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/switch/index.ts (100%) rename {src => packages/ui/src}/core/primitives/switch/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/switch/switch.tsx (100%) rename {src => packages/ui/src}/core/primitives/text/__workshop__/colored.tsx (100%) rename {src => packages/ui/src}/core/primitives/text/__workshop__/example.tsx (100%) rename {src => packages/ui/src}/core/primitives/text/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/text/__workshop__/opticalAlignment.tsx (100%) rename {src => packages/ui/src}/core/primitives/text/index.ts (100%) rename {src => packages/ui/src}/core/primitives/text/styles.ts (100%) rename {src => packages/ui/src}/core/primitives/text/text.tsx (100%) rename {src => packages/ui/src}/core/primitives/textArea/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/textArea/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/textArea/index.ts (100%) rename {src => packages/ui/src}/core/primitives/textArea/textArea.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/clearButton.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/customValidity.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/readOnly.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/states.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/tones.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/__workshop__/typed.tsx (100%) rename {src => packages/ui/src}/core/primitives/textInput/index.ts (100%) rename {src => packages/ui/src}/core/primitives/textInput/textInput.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/__workshop__/customPortal.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/__workshop__/props.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/__workshop__/resizableBoundary.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/constants.ts (100%) rename {src => packages/ui/src}/core/primitives/tooltip/index.ts (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltip.test.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltip.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltipCard.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltipDelayGroup/index.ts (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltipDelayGroup/types.ts (100%) rename {src => packages/ui/src}/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts (100%) rename {src => packages/ui/src}/core/primitives/types.ts (100%) rename {src => packages/ui/src}/core/styles/border/borderStyle.ts (100%) rename {src => packages/ui/src}/core/styles/border/index.ts (100%) rename {src => packages/ui/src}/core/styles/border/types.ts (100%) rename {src => packages/ui/src}/core/styles/box/boxStyle.ts (100%) rename {src => packages/ui/src}/core/styles/box/index.ts (100%) rename {src => packages/ui/src}/core/styles/box/types.ts (100%) rename {src => packages/ui/src}/core/styles/card/_cardColorStyle.ts (100%) rename {src => packages/ui/src}/core/styles/card/index.ts (100%) rename {src => packages/ui/src}/core/styles/flex/flexItemStyle.ts (100%) rename {src => packages/ui/src}/core/styles/flex/flexStyle.ts (100%) rename {src => packages/ui/src}/core/styles/flex/index.ts (100%) rename {src => packages/ui/src}/core/styles/flex/types.ts (100%) rename {src => packages/ui/src}/core/styles/focusRing/index.ts (100%) rename {src => packages/ui/src}/core/styles/font/codeFontStyle.ts (100%) rename {src => packages/ui/src}/core/styles/font/headingFontStyle.ts (100%) rename {src => packages/ui/src}/core/styles/font/index.ts (100%) rename {src => packages/ui/src}/core/styles/font/labelFontStyle.ts (100%) rename {src => packages/ui/src}/core/styles/font/responsiveFont.ts (100%) rename {src => packages/ui/src}/core/styles/font/textAlignStyle.ts (100%) rename {src => packages/ui/src}/core/styles/font/textFontStyle.ts (100%) rename {src => packages/ui/src}/core/styles/font/types.ts (100%) rename {src => packages/ui/src}/core/styles/grid/gridItemStyle.ts (100%) rename {src => packages/ui/src}/core/styles/grid/gridStyle.ts (100%) rename {src => packages/ui/src}/core/styles/grid/index.ts (100%) rename {src => packages/ui/src}/core/styles/grid/types.ts (100%) rename {src => packages/ui/src}/core/styles/helpers.ts (100%) rename {src => packages/ui/src}/core/styles/index.ts (100%) rename {src => packages/ui/src}/core/styles/input/index.ts (100%) rename {src => packages/ui/src}/core/styles/input/responsiveInputPaddingStyle.ts (100%) rename {src => packages/ui/src}/core/styles/input/textInputStyle.ts (100%) rename {src => packages/ui/src}/core/styles/internal.ts (100%) rename {src => packages/ui/src}/core/styles/margin/index.ts (100%) rename {src => packages/ui/src}/core/styles/margin/marginStyle.ts (100%) rename {src => packages/ui/src}/core/styles/margin/marginsStyle.test.ts (100%) rename {src => packages/ui/src}/core/styles/margin/types.ts (100%) rename {src => packages/ui/src}/core/styles/padding/index.ts (100%) rename {src => packages/ui/src}/core/styles/padding/paddingStyle.test.ts (100%) rename {src => packages/ui/src}/core/styles/padding/paddingStyle.ts (100%) rename {src => packages/ui/src}/core/styles/padding/types.ts (100%) rename {src => packages/ui/src}/core/styles/radius/index.ts (100%) rename {src => packages/ui/src}/core/styles/radius/radiusStyle.ts (100%) rename {src => packages/ui/src}/core/styles/radius/types.ts (100%) rename {src => packages/ui/src}/core/styles/shadow/index.ts (100%) rename {src => packages/ui/src}/core/styles/shadow/shadowStyle.ts (100%) rename {src => packages/ui/src}/core/styles/shadow/types.ts (100%) rename {src => packages/ui/src}/core/styles/types.ts (100%) rename {src => packages/ui/src}/core/theme/__workshop__/build/Root.tsx (100%) rename {src => packages/ui/src}/core/theme/__workshop__/build/helpers.ts (100%) rename {src => packages/ui/src}/core/theme/__workshop__/build/story.tsx (100%) rename {src => packages/ui/src}/core/theme/__workshop__/canvas.tsx (100%) rename {src => packages/ui/src}/core/theme/__workshop__/color.tsx (100%) rename {src => packages/ui/src}/core/theme/__workshop__/debug/story.tsx (100%) rename {src => packages/ui/src}/core/theme/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/theme/__workshop__/layer.tsx (100%) rename {src => packages/ui/src}/core/theme/__workshop__/nestedProvider.tsx (100%) rename {src => packages/ui/src}/core/theme/index.ts (100%) rename {src => packages/ui/src}/core/theme/theme.test.tsx (100%) rename {src => packages/ui/src}/core/theme/themeColorProvider.tsx (100%) rename {src => packages/ui/src}/core/theme/themeContext.ts (100%) rename {src => packages/ui/src}/core/theme/themeProvider.tsx (100%) rename {src => packages/ui/src}/core/theme/types.ts (100%) rename {src => packages/ui/src}/core/theme/useRootTheme.ts (100%) rename {src => packages/ui/src}/core/theme/useTheme.ts (100%) rename {src => packages/ui/src}/core/types/avatar.ts (100%) rename {src => packages/ui/src}/core/types/badge.ts (100%) rename {src => packages/ui/src}/core/types/box.ts (100%) rename {src => packages/ui/src}/core/types/button.ts (100%) rename {src => packages/ui/src}/core/types/card.ts (100%) rename {src => packages/ui/src}/core/types/dialog.ts (100%) rename {src => packages/ui/src}/core/types/flex.ts (100%) rename {src => packages/ui/src}/core/types/grid.ts (100%) rename {src => packages/ui/src}/core/types/gridItem.ts (100%) rename {src => packages/ui/src}/core/types/index.ts (100%) rename {src => packages/ui/src}/core/types/placement.ts (100%) rename {src => packages/ui/src}/core/types/popover.ts (100%) rename {src => packages/ui/src}/core/types/radius.ts (100%) rename {src => packages/ui/src}/core/types/selectable.ts (100%) rename {src => packages/ui/src}/core/types/text.ts (100%) rename {src => packages/ui/src}/core/utils/arrow/arrow.tsx (100%) rename {src => packages/ui/src}/core/utils/arrow/cmds.ts (100%) rename {src => packages/ui/src}/core/utils/arrow/index.ts (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/__workshop__/plain.tsx (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/boundaryElement.test.tsx (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/boundaryElementContext.ts (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/boundaryElementProvider.tsx (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/index.ts (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/types.ts (100%) rename {src => packages/ui/src}/core/utils/boundaryElement/useBoundaryElement.ts (100%) rename {src => packages/ui/src}/core/utils/conditionalWrapper/conditionalWrapper.tsx (100%) rename {src => packages/ui/src}/core/utils/conditionalWrapper/index.ts (100%) rename {src => packages/ui/src}/core/utils/elementQuery/__workshop__/customMedia.tsx (100%) rename {src => packages/ui/src}/core/utils/elementQuery/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/utils/elementQuery/elementQuery.tsx (100%) rename {src => packages/ui/src}/core/utils/elementQuery/helpers.ts (100%) rename {src => packages/ui/src}/core/utils/elementQuery/index.ts (100%) rename {src => packages/ui/src}/core/utils/errorBoundary.tsx (100%) rename {src => packages/ui/src}/core/utils/getElementRef.ts (100%) rename {src => packages/ui/src}/core/utils/index.ts (100%) rename {src => packages/ui/src}/core/utils/layer/__workshop__/_debug.tsx (100%) rename {src => packages/ui/src}/core/utils/layer/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/utils/layer/__workshop__/multipleRoots.tsx (100%) rename {src => packages/ui/src}/core/utils/layer/__workshop__/nested.tsx (100%) rename {src => packages/ui/src}/core/utils/layer/__workshop__/responsiveZOffset.tsx (100%) rename {src => packages/ui/src}/core/utils/layer/getLayerContext.test.ts (100%) rename {src => packages/ui/src}/core/utils/layer/getLayerContext.ts (100%) rename {src => packages/ui/src}/core/utils/layer/index.ts (100%) rename {src => packages/ui/src}/core/utils/layer/layer.test.tsx (100%) rename {src => packages/ui/src}/core/utils/layer/layer.tsx (100%) rename {src => packages/ui/src}/core/utils/layer/layerContext.ts (100%) rename {src => packages/ui/src}/core/utils/layer/layerProvider.tsx (100%) rename {src => packages/ui/src}/core/utils/layer/types.ts (100%) rename {src => packages/ui/src}/core/utils/layer/useLayer.ts (100%) rename {src => packages/ui/src}/core/utils/portal/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/utils/portal/__workshop__/named.tsx (100%) rename {src => packages/ui/src}/core/utils/portal/index.ts (100%) rename {src => packages/ui/src}/core/utils/portal/portal.test.tsx (100%) rename {src => packages/ui/src}/core/utils/portal/portal.ts (100%) rename {src => packages/ui/src}/core/utils/portal/portalContext.ts (100%) rename {src => packages/ui/src}/core/utils/portal/portalProvider.tsx (100%) rename {src => packages/ui/src}/core/utils/portal/types.ts (100%) rename {src => packages/ui/src}/core/utils/portal/usePortal.ts (100%) rename {src => packages/ui/src}/core/utils/spanWithTextOverflow.tsx (100%) rename {src => packages/ui/src}/core/utils/srOnly/index.ts (100%) rename {src => packages/ui/src}/core/utils/srOnly/srOnly.tsx (100%) rename {src => packages/ui/src}/core/utils/virtualList/__workshop__/changingProps.tsx (100%) rename {src => packages/ui/src}/core/utils/virtualList/__workshop__/elementScroll.tsx (100%) rename {src => packages/ui/src}/core/utils/virtualList/__workshop__/index.ts (100%) rename {src => packages/ui/src}/core/utils/virtualList/__workshop__/infiniteList.tsx (100%) rename {src => packages/ui/src}/core/utils/virtualList/__workshop__/windowScrolll.tsx (100%) rename {src => packages/ui/src}/core/utils/virtualList/index.ts (100%) rename {src => packages/ui/src}/core/utils/virtualList/virtualList.tsx (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/_selectable/createSelectableTones.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/_solid/createSolidTones.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/button/createButtonModes.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/button/createButtonTones.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/card/createCardStates.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/color.test.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/defaults.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/factory.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/index.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/input/createInputModes.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/muted/createMuted.ts (100%) rename {src => packages/ui/src}/theme/build/_deprecated/color/spot/createSpot.ts (100%) rename {src => packages/ui/src}/theme/build/buildColorTheme.test.ts (100%) rename {src => packages/ui/src}/theme/build/buildColorTheme.ts (100%) rename {src => packages/ui/src}/theme/build/buildTheme.test.ts (100%) rename {src => packages/ui/src}/theme/build/buildTheme.ts (100%) rename {src => packages/ui/src}/theme/build/colorToken/colorToken.ts (100%) rename {src => packages/ui/src}/theme/build/colorToken/compileColorToken.ts (100%) rename {src => packages/ui/src}/theme/build/colorToken/index.ts (100%) rename {src => packages/ui/src}/theme/build/colorToken/types.ts (100%) rename {src => packages/ui/src}/theme/build/index.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/blend/index.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/blend/mix.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/blend/multiply.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/blend/screen.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/color-fns.test.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/contrastRatio.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/convert.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/index.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/parse.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/rgba.ts (100%) rename {src => packages/ui/src}/theme/build/lib/color-fns/types.ts (100%) rename {src => packages/ui/src}/theme/build/lib/isRecord.ts (100%) rename {src => packages/ui/src}/theme/build/lib/utils.ts (100%) rename {src => packages/ui/src}/theme/build/merge.ts (100%) rename {src => packages/ui/src}/theme/build/mixThemeColor.test.ts (100%) rename {src => packages/ui/src}/theme/build/mixThemeColor.ts (100%) rename {src => packages/ui/src}/theme/build/renderColorTheme.ts (100%) rename {src => packages/ui/src}/theme/build/renderColorValue.ts (100%) rename {src => packages/ui/src}/theme/build/resolveColorTokens.ts (100%) rename {src => packages/ui/src}/theme/build/theme.test.ts (100%) rename {src => packages/ui/src}/theme/config/helpers.ts (100%) rename {src => packages/ui/src}/theme/config/index.ts (100%) rename {src => packages/ui/src}/theme/config/system.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/color/index.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/color/types.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/index.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/parseTokenKey.test.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/parseTokenKey.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/parseTokenValue.test.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/parseTokenValue.ts (100%) rename {src => packages/ui/src}/theme/config/tokens/types.ts (100%) rename {src => packages/ui/src}/theme/config/types.ts (100%) rename {src => packages/ui/src}/theme/defaults/colorPalette.ts (100%) rename {src => packages/ui/src}/theme/defaults/colorTokens.ts (100%) rename {src => packages/ui/src}/theme/defaults/config.ts (100%) rename {src => packages/ui/src}/theme/defaults/fonts.ts (100%) rename {src => packages/ui/src}/theme/getScopedTheme.ts (100%) rename {src => packages/ui/src}/theme/index.ts (100%) rename {src => packages/ui/src}/theme/system/avatar.ts (100%) rename {src => packages/ui/src}/theme/system/color/_constants.ts (100%) rename {src => packages/ui/src}/theme/system/color/_helpers.ts (100%) rename {src => packages/ui/src}/theme/system/color/_system.ts (100%) rename {src => packages/ui/src}/theme/system/color/avatar.ts (100%) rename {src => packages/ui/src}/theme/system/color/badge.ts (100%) rename {src => packages/ui/src}/theme/system/color/button.ts (100%) rename {src => packages/ui/src}/theme/system/color/color.ts (100%) rename {src => packages/ui/src}/theme/system/color/index.ts (100%) rename {src => packages/ui/src}/theme/system/color/input.ts (100%) rename {src => packages/ui/src}/theme/system/color/kbd.ts (100%) rename {src => packages/ui/src}/theme/system/color/selectable.ts (100%) rename {src => packages/ui/src}/theme/system/color/shadow.ts (100%) rename {src => packages/ui/src}/theme/system/color/state.ts (100%) rename {src => packages/ui/src}/theme/system/color/syntax.ts (100%) rename {src => packages/ui/src}/theme/system/css.ts (100%) rename {src => packages/ui/src}/theme/system/focusRing.ts (100%) rename {src => packages/ui/src}/theme/system/font.ts (100%) rename {src => packages/ui/src}/theme/system/index.ts (100%) rename {src => packages/ui/src}/theme/system/input.ts (100%) rename {src => packages/ui/src}/theme/system/layer.ts (100%) rename {src => packages/ui/src}/theme/system/shadow.ts (100%) rename {src => packages/ui/src}/theme/system/styles.ts (100%) rename {src => packages/ui/src}/theme/system/theme.ts (100%) rename {src => packages/ui/src}/theme/system/v0/avatar.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/_generic.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/_system.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/base.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/button.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/card.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/color.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/index.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/input.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/muted.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/selectable.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/solid.ts (100%) rename {src => packages/ui/src}/theme/system/v0/color/spot.ts (100%) rename {src => packages/ui/src}/theme/system/v0/index.ts (100%) rename {src => packages/ui/src}/theme/system/v0/input.ts (100%) rename {src => packages/ui/src}/theme/versioning/getTheme_v2.ts (100%) rename {src => packages/ui/src}/theme/versioning/index.ts (100%) rename {src => packages/ui/src}/theme/versioning/is_v0.ts (100%) rename {src => packages/ui/src}/theme/versioning/is_v2.ts (100%) rename {src => packages/ui/src}/theme/versioning/themeColor_v0_v2.ts (100%) rename {src => packages/ui/src}/theme/versioning/themeColor_v2_v2_9.ts (100%) rename {src => packages/ui/src}/theme/versioning/v0_v2.ts (100%) rename {src => packages/ui/src}/theme/versioning/v2_v0.ts (100%) rename {test => packages/ui/test}/index.ts (100%) rename {test => packages/ui/test}/mocks/matchMedia.mock.ts (100%) rename {test => packages/ui/test}/mocks/resizeObserver.mock.ts (100%) rename {test => packages/ui/test}/setupFilesAfterEnv.ts (100%) rename {test => packages/ui/test}/utils.tsx (100%) rename tsconfig.dist.json => packages/ui/tsconfig.dist.json (90%) rename tsconfig.json => packages/ui/tsconfig.json (69%) rename {typings => packages/ui/typings}/ResizeObserver.d.ts (100%) rename {typings => packages/ui/typings}/dom.d.ts (100%) create mode 100644 packages/ui/typings/styled-components.d.ts rename {typings => packages/ui/typings}/workshop-env.d.ts (100%) create mode 100644 packages/ui/vercel.json rename workshop.config.ts => packages/ui/workshop.config.ts (100%) rename workshop.runtime.ts => packages/ui/workshop.runtime.ts (100%) rename {workshop => packages/ui/workshop}/fontsPlugin.tsx (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2f85a362c..22a80a025 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -73,8 +73,6 @@ jobs: build: pnpm workshop:build start: pnpm workshop:start wait-on: http://localhost:1337 - env: - NODE_OPTIONS: "--no-experimental-require-module --no-experimental-detect-module" - uses: actions/upload-artifact@v4 if: failure() with: @@ -114,8 +112,8 @@ jobs: with: node-version: lts/* - run: pnpm install - # Branches that will release new versions are defined in .releaserc.json - - run: pnpm exec semantic-release + # Branches that will release new versions are defined in packages/ui/package.json + - run: pnpm --filter @sanity/ui exec semantic-release env: NPM_CONFIG_PROVENANCE: true GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index 46826918a..0878ca74f 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -33,7 +33,7 @@ jobs: - id: pre-flight run: | - VERSION="$(jq -r .version package.json)-pkg.pr.new@$(git rev-parse --short HEAD)" + VERSION="$(jq -r .version packages/ui/package.json)-pkg.pr.new@$(git rev-parse --short HEAD)" echo "version=${VERSION}" >> "$GITHUB_OUTPUT" - run: pnpm build @@ -42,4 +42,4 @@ jobs: - run: | echo "Publishing to pkg.pr.new" - pnpm pnpx pkg-pr-new publish + pnpm pnpx pkg-pr-new publish ./packages/ui diff --git a/.prettierignore b/.prettierignore index f036e9100..33fef3373 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ .workshop dist pnpm-lock.yaml +CHANGELOG.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..9c929e2d5 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,33 @@ +# AGENTS.md + +## Cursor Cloud specific instructions + +This is the `v2` maintenance branch of the `@sanity/ui` React component +library, structured as a pnpm monorepo: the published package lives in +`packages/ui`, the Figma plugin in `packages/figma`, and the Storybook app in +`apps/storybook` (`pnpm-workspace.yaml`). The root `package.json` is a private +workspace root whose scripts orchestrate via pnpm filters. Package manager is +pnpm (`packageManager` pin in `package.json`). + +Standard scripts live in the root `package.json` (`lint`, `ts:check`, `test`, +`build`, `dev`) and forward to the workspace packages. Notes that are not +obvious from the scripts: + +- Tests require a built package first. `pnpm test` (jest) resolves `@sanity/ui` + and `@sanity/ui/theme` from `packages/ui/dist` (via package `exports`), so you + must run `pnpm build` at least once before `pnpm test` or every suite fails + with "Cannot find module '@sanity/ui'". Re-run `pnpm build` after changing + source that tests import through the package entrypoints. +- `pnpm dev` runs two servers in parallel: Storybook (`apps/storybook`) on + http://localhost:6006 and the Workshop (`packages/ui`) on + http://localhost:1337. Both are Vite-based and resolve `@sanity/ui` to the + `packages/ui` source, so they hot-reload source edits directly (no rebuild + needed); only jest depends on `dist`. +- The Workshop's first component render can show a long loading spinner while + Vite optimizes deps on demand; it is warm after the first load. This is + expected, not a failure. +- `pnpm test:browser` builds the Workshop and runs the Cypress e2e suite + against http://localhost:1337. +- Releases are automated with semantic-release: commit messages must follow + Conventional Commits (enforced via commitlint), and pushes to the `v2` + branch publish `@sanity/ui` to npm from `packages/ui`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index be582d777..791558d43 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,30 @@ # Contributing guidelines +This repository is a pnpm monorepo. The published `@sanity/ui` package lives in +[`packages/ui`](packages/ui), the Figma plugin lives in +[`packages/figma`](packages/figma), and the Storybook app lives in +[`apps/storybook`](apps/storybook). + +## Getting started + +```sh +pnpm install +pnpm build +pnpm test +``` + +Run `pnpm dev` to start Storybook (http://localhost:6006) and the Workshop +(http://localhost:1337) in parallel. + +## Releasing + +Releases are automated with +[semantic-release](https://github.com/semantic-release/semantic-release): +commits that land on the `v2` branch are analyzed (commit messages must follow +[Conventional Commits](https://www.conventionalcommits.org)), and new versions +of `@sanity/ui` are published to npm from `packages/ui` by the +[CI & Release workflow](https://github.com/sanity-io/ui/actions/workflows/main.yml). + ## Working with prereleases ### Going from `alpha => beta` diff --git a/README.md b/README.md deleted file mode 100644 index c91e5f5e0..000000000 --- a/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# @sanity/ui - -The Sanity UI components. - -```sh -npm install @sanity/ui - -# Install peer dependencies -npm install react react-dom styled-components -``` - -[![npm version](https://img.shields.io/npm/v/%40sanity%2Fui/release-v2?style=flat-square)](https://www.npmjs.com/package/@sanity/ui/v/release-v2) - -## Usage - -```jsx -import {Button, ThemeProvider} from '@sanity/ui' -import {buildTheme} from '@sanity/ui/theme' -import {createRoot} from 'react-dom/client' - -const root = createRoot(document.getElementById('root')) -const theme = buildTheme() - -root.render( - - + + + + + ), +} + +export const WithinMenuItem: Story = { + parameters: {controls: {include: []}}, + render: () => ( + + + + + + {[1, 2, 3].map((index) => ( + + + + Menu item {index} + + + + + + + + + + + ))} + + + + + + ), +} diff --git a/apps/storybook/stories/primitives/AvatarCounter.stories.tsx b/apps/storybook/stories/primitives/AvatarCounter.stories.tsx index 7d7b49d81..feba5ccf5 100644 --- a/apps/storybook/stories/primitives/AvatarCounter.stories.tsx +++ b/apps/storybook/stories/primitives/AvatarCounter.stories.tsx @@ -1,6 +1,6 @@ +import {AvatarCounter, AvatarStack} from '@sanity/ui' import type {Meta, StoryFn, StoryObj} from '@storybook/react-vite' -import {AvatarCounter, AvatarStack} from '../../../../packages/ui/src/core/primitives' import {getAvatarSizeControls} from '../controls' const meta: Meta = { diff --git a/apps/storybook/stories/primitives/AvatarStack.stories.tsx b/apps/storybook/stories/primitives/AvatarStack.stories.tsx index b357f184b..cb792b877 100644 --- a/apps/storybook/stories/primitives/AvatarStack.stories.tsx +++ b/apps/storybook/stories/primitives/AvatarStack.stories.tsx @@ -1,6 +1,6 @@ +import {Avatar, AvatarCounter, AvatarStack} from '@sanity/ui' import type {Meta, StoryObj} from '@storybook/react-vite' -import {Avatar, AvatarCounter, AvatarStack} from '../../../../packages/ui/src/core/primitives' import {AVATAR_SRC} from '../constants' import {getAvatarSizeControls} from '../controls' diff --git a/apps/storybook/stories/primitives/Badge.stories.tsx b/apps/storybook/stories/primitives/Badge.stories.tsx index f88f395d6..efb42029a 100644 --- a/apps/storybook/stories/primitives/Badge.stories.tsx +++ b/apps/storybook/stories/primitives/Badge.stories.tsx @@ -1,6 +1,6 @@ +import {Badge, Card, Flex, Stack} from '@sanity/ui' import type {Meta, StoryObj} from '@storybook/react-vite' -import {Badge, Card, Flex, Stack} from '../../../../packages/ui/src/core/primitives' import {BADGE_TONES, CARD_TONES, RADII} from '../constants' import {getFontSizeControls, getRadiusControls, getSpaceControls} from '../controls' import {rowBuilder} from '../helpers/rowBuilder' diff --git a/apps/storybook/stories/primitives/Box.stories.tsx b/apps/storybook/stories/primitives/Box.stories.tsx index e80614cbb..f62c30a6f 100644 --- a/apps/storybook/stories/primitives/Box.stories.tsx +++ b/apps/storybook/stories/primitives/Box.stories.tsx @@ -1,6 +1,7 @@ +import {Box, Flex, Grid, Text} from '@sanity/ui' import type {Meta, StoryObj} from '@storybook/react-vite' +import {forwardRef} from 'react' -import {Box, Text} from '../../../../packages/ui/src/core/primitives' import {getSpaceControls} from '../controls' const meta: Meta = { @@ -29,6 +30,34 @@ export const Default: Story = { }, } +export const AsGridItem: Story = { + args: { + column: 2, + children: Cell B, + }, + argTypes: { + column: {control: {type: 'number', min: 1, max: 12}}, + columnStart: {control: {type: 'number', min: 1, max: 12}}, + columnEnd: {control: {type: 'number', min: 1, max: 12}}, + row: {control: {type: 'number', min: 1, max: 12}}, + rowStart: {control: {type: 'number', min: 1, max: 12}}, + rowEnd: {control: {type: 'number', min: 1, max: 12}}, + }, + render: (props) => { + return ( + + + Cell A + + + + Cell C + + + ) + }, +} + export const Responsive: Story = { parameters: {controls: {include: []}}, render: () => ( @@ -48,3 +77,33 @@ export const Responsive: Story = { ), } + +// A custom component with its own props. When passed to `Box`'s `as` prop, these props are +// inferred on `Box` itself: `href` is required and `target` is optional, and unknown props +// are rejected by the type checker. +const Link = forwardRef(function Link( + props: {href: string; target?: string} & Omit< + React.HTMLProps, + 'as' | 'href' | 'target' + >, + ref: React.ForwardedRef, +): React.JSX.Element { + const {children, ...restProps} = props + + return ( + + {children} + + ) +}) + +export const AsComponent: Story = { + parameters: {controls: {include: []}}, + render: () => ( + + + As component + + + ), +} diff --git a/apps/storybook/stories/primitives/Button.stories.tsx b/apps/storybook/stories/primitives/Button.stories.tsx index fa75bf2e7..4a77d4f55 100644 --- a/apps/storybook/stories/primitives/Button.stories.tsx +++ b/apps/storybook/stories/primitives/Button.stories.tsx @@ -1,7 +1,20 @@ -import {CloseIcon, SearchIcon} from '@sanity/icons' +import {AddIcon, CloseIcon, RocketIcon, SearchIcon, SquareIcon, UploadIcon} from '@sanity/icons' +import { + Box, + Button, + ButtonProps, + Card, + Container, + Flex, + Grid, + Inline, + Stack, + Text, +} from '@sanity/ui' import type {Meta, StoryObj} from '@storybook/react-vite' +import {useCallback, useRef} from 'react' +import {styled} from 'styled-components' -import {Button, Flex, Grid, Stack, Text} from '../../../../packages/ui/src/core/primitives' import {BUTTON_MODES, BUTTON_TONES, RADII} from '../constants' import { getButtonWidthControls, @@ -51,7 +64,7 @@ export const WithIcons: Story = { }, parameters: { controls: { - include: ['icon', 'iconRight', 'mode', 'space', 'tone'], + include: ['icon', 'iconRight', 'mode', 'gap', 'space', 'tone'], }, }, render: (props) => + + ), +} + +function UploadButtonStory() { + const inputRef = useRef(null) + + const handleKeyDown = useCallback((event: React.KeyboardEvent) => { + if (event.key === 'Enter' || event.key === ' ') { + inputRef.current?.click() + } + }, []) + + return ( + + - - - - - ) -} diff --git a/packages/ui/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx b/packages/ui/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx deleted file mode 100644 index e766bf0c1..000000000 --- a/packages/ui/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import {useBoolean} from '@sanity/ui-workshop' - -import {Menu, MenuItem} from '../../../components' -import {Layer} from '../../../utils' -import {Box} from '../../box' -import {Card} from '../../card' -import {Container} from '../../container' -import {Flex} from '../../flex' -import {Text} from '../../text' -import {Avatar} from '../avatar' -import {AvatarStack} from '../avatarStack' - -export default function WithinMenuItemStory() { - const disabled = useBoolean('Disabled', false, 'Props') - - return ( - - - - - - - - - Menu item 1 - - - - - - - - - - - - - - Menu item 1 - - - - - - - - - - - - - - Menu item 1 - - - - - - - - - - - - - - - - ) -} diff --git a/packages/ui/src/core/primitives/badge/__workshop__/index.ts b/packages/ui/src/core/primitives/badge/__workshop__/index.ts deleted file mode 100644 index cb4101b9b..000000000 --- a/packages/ui/src/core/primitives/badge/__workshop__/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {defineScope} from '@sanity/ui-workshop' -import {lazy} from 'react' - -export default defineScope({ - name: 'primitives/badge', - title: 'Badge', - stories: [ - { - name: 'props', - title: 'Props', - component: lazy(() => import('./props')), - }, - { - name: 'tones', - title: 'Tones', - component: lazy(() => import('./tones')), - }, - ], -}) diff --git a/packages/ui/src/core/primitives/badge/__workshop__/props.tsx b/packages/ui/src/core/primitives/badge/__workshop__/props.tsx deleted file mode 100644 index 8452073cd..000000000 --- a/packages/ui/src/core/primitives/badge/__workshop__/props.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import {Badge, Flex} from '@sanity/ui' -import {useAction, useSelect, useText} from '@sanity/ui-workshop' - -import { - WORKSHOP_BADGE_MODE_OPTIONS, - WORKSHOP_BADGE_TONE_OPTIONS, - WORKSHOP_SPACE_OPTIONS, -} from '../../../__workshop__/constants' - -export default function PropsStory() { - const mode = useSelect('Mode (deprecated)', WORKSHOP_BADGE_MODE_OPTIONS, 'default', 'Props') - const paddingX = useSelect('Padding X', WORKSHOP_SPACE_OPTIONS, 1, 'Props') - const paddingY = useSelect('Padding Y', WORKSHOP_SPACE_OPTIONS, 1, 'Props') - const tone = useSelect('Tone', WORKSHOP_BADGE_TONE_OPTIONS, 'default', 'Props') - const textProp = useText('Text', 'Label', 'Props') - - return ( - - - {textProp} - - - ) -} diff --git a/packages/ui/src/core/primitives/badge/__workshop__/tones.tsx b/packages/ui/src/core/primitives/badge/__workshop__/tones.tsx deleted file mode 100644 index a55a4efa4..000000000 --- a/packages/ui/src/core/primitives/badge/__workshop__/tones.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import {Badge, Flex, Inline} from '@sanity/ui' -import {THEME_COLOR_STATE_TONES} from '@sanity/ui/theme' -import {useSelect} from '@sanity/ui-workshop' - -import {WORKSHOP_BADGE_MODE_OPTIONS} from '../../../__workshop__/constants' - -export default function Tones() { - const mode = useSelect('Mode (deprecated)', WORKSHOP_BADGE_MODE_OPTIONS, 'default', 'Props') - - return ( - - - {THEME_COLOR_STATE_TONES.map((tone) => ( - - {tone} - - ))} - - - ) -} diff --git a/packages/ui/src/core/primitives/box/__workshop__/index.ts b/packages/ui/src/core/primitives/box/__workshop__/index.ts deleted file mode 100644 index 88de67629..000000000 --- a/packages/ui/src/core/primitives/box/__workshop__/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {defineScope} from '@sanity/ui-workshop' -import {lazy} from 'react' - -export default defineScope({ - name: 'primitives/box', - title: 'Box', - stories: [ - { - name: 'props', - title: 'Props', - component: lazy(() => import('./props')), - }, - { - name: 'responsive', - title: 'Responsive', - component: lazy(() => import('./responsive')), - }, - ], -}) diff --git a/packages/ui/src/core/primitives/box/__workshop__/props.tsx b/packages/ui/src/core/primitives/box/__workshop__/props.tsx deleted file mode 100644 index 968bbc625..000000000 --- a/packages/ui/src/core/primitives/box/__workshop__/props.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import {Box, Card, Text} from '@sanity/ui' -import {useAction, useSelect} from '@sanity/ui-workshop' - -import {WORKSHOP_SPACE_OPTIONS} from '../../../__workshop__/constants' - -export default function PropsStory() { - const padding = useSelect('Padding', WORKSHOP_SPACE_OPTIONS, 0, 'Props') - - return ( - - - - - Box with padding={padding} - - - - - ) -} diff --git a/packages/ui/src/core/primitives/box/__workshop__/responsive.tsx b/packages/ui/src/core/primitives/box/__workshop__/responsive.tsx deleted file mode 100644 index 962475901..000000000 --- a/packages/ui/src/core/primitives/box/__workshop__/responsive.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import {Box, Text} from '@sanity/ui' - -export default function ResponsiveStory() { - return ( - - - - This is a box with responsive props - - - - ) -} diff --git a/packages/ui/src/core/primitives/button/__workshop__/custom.tsx b/packages/ui/src/core/primitives/button/__workshop__/custom.tsx deleted file mode 100644 index 5b0c10e06..000000000 --- a/packages/ui/src/core/primitives/button/__workshop__/custom.tsx +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-disable jsx-a11y/anchor-is-valid */ - -import {Button, Flex, Grid, Stack, Text} from '@sanity/ui' - -import {WORKSHOP_BUTTON_TONE_OPTIONS} from '../../../__workshop__/constants' - -export default function CustomStory() { - const tones = Object.entries(WORKSHOP_BUTTON_TONE_OPTIONS) - const len = tones.length - - return ( - - - - {tones.map(([title, tone]) => ( - - ))} - - - {tones.map(([title, tone]) => ( - - ))} - - - - ) -} diff --git a/packages/ui/src/core/primitives/button/__workshop__/customIcons.tsx b/packages/ui/src/core/primitives/button/__workshop__/customIcons.tsx deleted file mode 100644 index 29105c8d4..000000000 --- a/packages/ui/src/core/primitives/button/__workshop__/customIcons.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import {RocketIcon} from '@sanity/icons' -import {Button, Flex, Inline} from '@sanity/ui' - -export default function CustomIconsStory() { - return ( - - - - - ) -} diff --git a/packages/ui/src/core/primitives/button/__workshop__/props.tsx b/packages/ui/src/core/primitives/button/__workshop__/props.tsx deleted file mode 100644 index 8ff5d0499..000000000 --- a/packages/ui/src/core/primitives/button/__workshop__/props.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import {icons} from '@sanity/icons' -import {Button, Flex} from '@sanity/ui' -import {useAction, useBoolean, useSelect, useText} from '@sanity/ui-workshop' - -import { - WORKSHOP_BUTTON_MODE_OPTIONS, - WORKSHOP_BUTTON_TEXT_ALIGN_OPTIONS, - WORKSHOP_BUTTON_TONE_OPTIONS, - WORKSHOP_FLEX_JUSTIFY_OPTIONS, - WORKSHOP_ICON_SYMBOL_OPTIONS, - WORKSHOP_SPACE_OPTIONS, - WORKSHOP_TEXT_SIZE_OPTIONS, - WORKSHOP_TEXT_WEIGHT_OPTIONS, -} from '../../../__workshop__/constants' - -export default function ButtonStory() { - const disabled = useBoolean('Disabled', false, 'Props') - const fontSize = useSelect('Font size', WORKSHOP_TEXT_SIZE_OPTIONS, 2, 'Props') - const icon = useSelect('Icon', WORKSHOP_ICON_SYMBOL_OPTIONS, 'add-circle', 'Props') - const iconRight = useSelect('Icon (right)', WORKSHOP_ICON_SYMBOL_OPTIONS, '', 'Props') - const justify = useSelect('Justify', WORKSHOP_FLEX_JUSTIFY_OPTIONS, 'center', 'Props') - const mode = useSelect('Mode', WORKSHOP_BUTTON_MODE_OPTIONS, 'default', 'Props') - const paddingX = useSelect('Padding X', WORKSHOP_SPACE_OPTIONS, 3, 'Props') - const paddingY = useSelect('Padding Y', WORKSHOP_SPACE_OPTIONS, 3, 'Props') - const selected = useBoolean('Selected', false, 'Props') - const space = useSelect('Space', WORKSHOP_SPACE_OPTIONS, 3, 'Props') - const tone = useSelect('Tone', WORKSHOP_BUTTON_TONE_OPTIONS, 'default', 'Props') - const textAlign = - useSelect('Text align', WORKSHOP_BUTTON_TEXT_ALIGN_OPTIONS, undefined, 'Props') || undefined - const textProp = useText('Text', 'Label', 'Props') - const textWeight = - useSelect('Text weight', WORKSHOP_TEXT_WEIGHT_OPTIONS, '', 'Props') || undefined - - return ( - -