diff --git a/.changeset/cloudinary-vanilla-extract.md b/.changeset/cloudinary-vanilla-extract.md new file mode 100644 index 0000000000..0bb954b389 --- /dev/null +++ b/.changeset/cloudinary-vanilla-extract.md @@ -0,0 +1,5 @@ +--- +"sanity-plugin-cloudinary": patch +--- + +Migrate styling from styled-components to vanilla-extract (zero-runtime CSS) diff --git a/plugins/sanity-plugin-cloudinary/package.json b/plugins/sanity-plugin-cloudinary/package.json index e4ca0db93a..12ad952c46 100644 --- a/plugins/sanity-plugin-cloudinary/package.json +++ b/plugins/sanity-plugin-cloudinary/package.json @@ -24,11 +24,25 @@ "types": "./dist/index.d.ts", "exports": { ".": "./src/index.ts", + "./bundle.css": { + "types": "./dist/bundle-css.d.ts", + "browser": "./dist/bundle.css", + "style": "./dist/bundle.css", + "node": "./dist/bundle-css.js", + "default": "./dist/bundle-css.js" + }, "./package.json": "./package.json" }, "publishConfig": { "exports": { ".": "./dist/index.js", + "./bundle.css": { + "types": "./dist/bundle-css.d.ts", + "browser": "./dist/bundle.css", + "style": "./dist/bundle.css", + "node": "./dist/bundle-css.js", + "default": "./dist/bundle-css.js" + }, "./package.json": "./package.json" } }, @@ -41,13 +55,16 @@ "@sanity/icons": "catalog:", "@sanity/studio-secrets": "workspace:^", "@sanity/ui": "catalog:", + "clsx": "catalog:", "nanoid": "catalog:" }, "devDependencies": { "@sanity/tsconfig": "catalog:", "@sanity/tsdown-config": "catalog:", + "@sanity/vanilla-extract-vite-plugin": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", + "@vanilla-extract/css": "catalog:", "babel-plugin-react-compiler": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -58,8 +75,7 @@ "peerDependencies": { "react": "catalog:peer", "react-dom": "catalog:peer", - "sanity": "catalog:peer", - "styled-components": "catalog:peer" + "sanity": "catalog:peer" }, "engines": { "node": ">=20.19 <22 || >=22.12" diff --git a/plugins/sanity-plugin-cloudinary/src/components/AssetDiff.css.ts b/plugins/sanity-plugin-cloudinary/src/components/AssetDiff.css.ts new file mode 100644 index 0000000000..d9a3d9d8c7 --- /dev/null +++ b/plugins/sanity-plugin-cloudinary/src/components/AssetDiff.css.ts @@ -0,0 +1,12 @@ +import {style} from '@vanilla-extract/css' + +export const videoDiff = style({ + display: 'flex', + flexWrap: 'wrap', + justifyContent: 'space-between', +}) + +export const previewImage = style({ + maxWidth: '100%', + height: 'auto', +}) diff --git a/plugins/sanity-plugin-cloudinary/src/components/AssetDiff.tsx b/plugins/sanity-plugin-cloudinary/src/components/AssetDiff.tsx index e5f00ce495..8078b6a5f1 100644 --- a/plugins/sanity-plugin-cloudinary/src/components/AssetDiff.tsx +++ b/plugins/sanity-plugin-cloudinary/src/components/AssetDiff.tsx @@ -6,6 +6,8 @@ import {assetUrl} from '../utils' import {namespace, type Secrets} from './SecretsConfigView' import VideoPlayer from './VideoPlayer' +import {previewImage, videoDiff} from './AssetDiff.css' + type Props = { value: CloudinaryAsset | undefined } @@ -22,19 +24,13 @@ const CloudinaryDiffPreview = ({value}: Props) => { if (value.resource_type === 'video' && url) { return ( -
+
) } - return preview + return preview } type DiffProps = { diff --git a/plugins/sanity-plugin-cloudinary/src/components/AssetListFunctions.css.ts b/plugins/sanity-plugin-cloudinary/src/components/AssetListFunctions.css.ts new file mode 100644 index 0000000000..7438a092b7 --- /dev/null +++ b/plugins/sanity-plugin-cloudinary/src/components/AssetListFunctions.css.ts @@ -0,0 +1,10 @@ +import {style} from '@vanilla-extract/css' + +export const fullWidthButton = style({ + selectors: { + // Match the previous inline `width: 100%` against Button's own width rules. + '&&': { + width: '100%', + }, + }, +}) diff --git a/plugins/sanity-plugin-cloudinary/src/components/AssetListFunctions.tsx b/plugins/sanity-plugin-cloudinary/src/components/AssetListFunctions.tsx index 102253457b..6cd644a554 100644 --- a/plugins/sanity-plugin-cloudinary/src/components/AssetListFunctions.tsx +++ b/plugins/sanity-plugin-cloudinary/src/components/AssetListFunctions.tsx @@ -1,7 +1,8 @@ import {PlugIcon} from '@sanity/icons/Plug' import {useSecrets} from '@sanity/studio-secrets' import {Box, Button, Flex} from '@sanity/ui' -import {useCallback, useState} from 'react' +import {clsx} from 'clsx/lite' +import {type ComponentProps, useCallback, useState} from 'react' import { type ArrayInputFunctionsProps, ArrayOfObjectsFunctions, @@ -17,6 +18,12 @@ import type {InsertHandlerParams} from '../types' import {openMediaSelector} from '../utils' import SecretsConfigView, {namespace} from './SecretsConfigView' +import {fullWidthButton} from './AssetListFunctions.css' + +function FullWidthButton({className, ...props}: ComponentProps) { + return