diff --git a/bin/packages/build-v2.mjs b/bin/packages/build-v2.mjs index 3a41d6423a90f4..8f80a869c2225b 100644 --- a/bin/packages/build-v2.mjs +++ b/bin/packages/build-v2.mjs @@ -13,6 +13,10 @@ import watch from 'node-watch'; // See https://github.com/WordPress/gutenberg/issues/72136 // eslint-disable-next-line import/no-unresolved import browserslistToEsbuild from 'browserslist-to-esbuild'; +import { sassPlugin } from 'esbuild-sass-plugin'; +import postcss from 'postcss'; +import autoprefixer from 'autoprefixer'; +import rtlcss from 'rtlcss'; /** * Internal dependencies @@ -513,6 +517,33 @@ async function bundlePackage( packageName ) { } } + // Copy CSS files from build-style to build directory (for wpScript packages) + if ( packageJson.wpScript ) { + const buildStyleDir = path.join( packageDir, 'build-style' ); + const outputDir = path.join( PACKAGES_DIR, '..', 'build', packageName ); + + try { + // Find CSS files in build-style directory + const cssFiles = await glob( + normalizePath( path.join( buildStyleDir, '*.css' ) ) + ); + + if ( cssFiles.length > 0 ) { + // Ensure output directory exists + await mkdir( outputDir, { recursive: true } ); + + // Copy each CSS file + for ( const cssFile of cssFiles ) { + const filename = path.basename( cssFile ); + const destPath = path.join( outputDir, filename ); + builds.push( copyFile( cssFile, destPath ) ); + } + } + } catch ( error ) { + // build-style doesn't exist or is empty - that's fine, not all packages have styles + } + } + if ( builds.length === 0 ) { return false; } @@ -625,11 +656,84 @@ async function transpilePackage( packageName ) { } } + await compileStyles( packageName ); + await Promise.all( builds ); return Date.now() - startTime; } +/** + * Compile styles for a single package. + * + * @param {string} packageName Package name. + * @return {Promise} Build time in milliseconds, or null if no styles. + */ +async function compileStyles( packageName ) { + const packageDir = path.join( PACKAGES_DIR, packageName ); + const styleEntryPath = path.join( packageDir, 'src', 'style.scss' ); + + // Check if style entry point exists + try { + await readFile( styleEntryPath ); + } catch { + return null; + } + + const startTime = Date.now(); + const buildStyleDir = path.join( packageDir, 'build-style' ); + + // Create build-style directory + await mkdir( buildStyleDir, { recursive: true } ); + + // Build with Sass plugin + await esbuild.build( { + entryPoints: [ styleEntryPath ], + outdir: buildStyleDir, + bundle: true, + write: false, + loader: { + '.scss': 'css', + }, + plugins: [ + sassPlugin( { + loadPaths: [ + 'node_modules', + path.join( PACKAGES_DIR, 'base-styles' ), + ], + async transform( source ) { + // Process with autoprefixer for LTR version + const ltrResult = await postcss( [ + autoprefixer( { grid: true } ), + ] ).process( source, { from: undefined } ); + + // Process with rtlcss for RTL version + const rtlResult = await postcss( [ rtlcss() ] ).process( + ltrResult.css, + { from: undefined } + ); + + // Write both versions + await Promise.all( [ + writeFile( + path.join( buildStyleDir, 'style.css' ), + ltrResult.css + ), + writeFile( + path.join( buildStyleDir, 'style-rtl.css' ), + rtlResult.css + ), + ] ); + + return ''; + }, + } ), + ], + } ); + + return Date.now() - startTime; +} + /** * Determine if a file is a source file in a v2 package. * diff --git a/bin/packages/v2-packages.js b/bin/packages/v2-packages.js index 347ba377a57fd4..f9258df4a0db85 100644 --- a/bin/packages/v2-packages.js +++ b/bin/packages/v2-packages.js @@ -13,6 +13,7 @@ const V2_PACKAGES = [ 'blob', 'block-serialization-default-parser', 'blocks', + 'components', 'compose', 'data', 'data-controls', @@ -25,6 +26,7 @@ const V2_PACKAGES = [ 'hooks', 'html-entities', 'i18n', + 'icons', 'interactivity', 'interactivity-router', 'is-shallow-equal', @@ -35,6 +37,7 @@ const V2_PACKAGES = [ 'media-utils', 'notices', 'preferences-persistence', + 'primitives', 'priority-queue', 'private-apis', 'react-i18n', diff --git a/package-lock.json b/package-lock.json index 8df580ae6a3da1..7b3de11572b393 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,6 +70,7 @@ "@types/uuid": "8.3.1", "ajv": "8.7.1", "appium": "2.0.0", + "autoprefixer": "10.4.21", "babel-jest": "29.7.0", "babel-loader": "9.2.1", "babel-plugin-inline-json-import": "0.3.2", @@ -93,6 +94,7 @@ "deep-freeze": "0.0.1", "equivalent-key-map": "0.2.2", "esbuild": "0.25.10", + "esbuild-sass-plugin": "3.3.1", "escape-html": "1.0.3", "eslint-import-resolver-node": "0.3.4", "eslint-plugin-eslint-comments": "3.1.2", @@ -8745,6 +8747,338 @@ "integrity": "sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw==", "license": "MIT" }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@paulirish/trace_engine": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.32.tgz", @@ -18076,6 +18410,51 @@ "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==", "dev": true }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/autoprefixer/node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/autosize": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.2.tgz", @@ -23921,6 +24300,80 @@ "esbuild": ">=0.12 <1" } }, + "node_modules/esbuild-sass-plugin": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-3.3.1.tgz", + "integrity": "sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.22.8", + "safe-identifier": "^0.4.2", + "sass": "^1.71.1" + }, + "peerDependencies": { + "esbuild": ">=0.20.1", + "sass-embedded": "^1.71.1" + } + }, + "node_modules/esbuild-sass-plugin/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/esbuild-sass-plugin/node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild-sass-plugin/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/esbuild-sass-plugin/node_modules/sass": { + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -26188,16 +26641,16 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fragment-cache": { @@ -42077,6 +42530,13 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "dev": true, + "license": "ISC" + }, "node_modules/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -50683,7 +51143,6 @@ "license": "GPL-2.0-or-later", "dependencies": { "@ariakit/react": "^0.4.15", - "@babel/runtime": "7.25.7", "@emotion/cache": "^11.7.1", "@emotion/css": "^11.7.1", "@emotion/react": "^11.7.1", @@ -50695,6 +51154,7 @@ "@types/highlight-words-core": "1.2.1", "@use-gesture/react": "^10.3.1", "@wordpress/a11y": "file:../a11y", + "@wordpress/base-styles": "file:../base-styles", "@wordpress/compose": "file:../compose", "@wordpress/date": "file:../date", "@wordpress/deprecated": "file:../deprecated", @@ -51657,7 +52117,6 @@ "version": "10.32.0", "license": "GPL-2.0-or-later", "dependencies": { - "@babel/runtime": "7.25.7", "@wordpress/element": "file:../element", "@wordpress/primitives": "file:../primitives" }, @@ -52023,18 +52482,6 @@ "postcss": "^8.1.0" } }, - "packages/postcss-plugins-preset/node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, "packages/postcss-plugins-preset/node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -52107,7 +52554,6 @@ "version": "4.32.0", "license": "GPL-2.0-or-later", "dependencies": { - "@babel/runtime": "7.25.7", "@wordpress/element": "file:../element", "clsx": "^2.1.1" }, diff --git a/package.json b/package.json index 06f6be4feabc6c..6a61c0fb63896a 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "@types/uuid": "8.3.1", "ajv": "8.7.1", "appium": "2.0.0", + "autoprefixer": "10.4.21", "babel-jest": "29.7.0", "babel-loader": "9.2.1", "babel-plugin-inline-json-import": "0.3.2", @@ -102,6 +103,7 @@ "deep-freeze": "0.0.1", "equivalent-key-map": "0.2.2", "esbuild": "0.25.10", + "esbuild-sass-plugin": "3.3.1", "escape-html": "1.0.3", "eslint-import-resolver-node": "0.3.4", "eslint-plugin-eslint-comments": "3.1.2", diff --git a/packages/annotations/package.json b/packages/annotations/package.json index 43f5a6793ef73f..9303c87f62ede5 100644 --- a/packages/annotations/package.json +++ b/packages/annotations/package.json @@ -26,7 +26,6 @@ "module": "build-module/index.js", "exports": { ".": { - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/blocks/package.json b/packages/blocks/package.json index cca97cafbe07c3..cb2c175fd3678d 100644 --- a/packages/blocks/package.json +++ b/packages/blocks/package.json @@ -26,7 +26,6 @@ "module": "build-module/index.js", "exports": { ".": { - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 02defdca7133cf..35815549e280b8 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -16,6 +16,7 @@ ### Internal - Replace usage of extinct icons `edit` and `warning` with `pencil` and `cautionFilled`, respectively ([#72105](https://github.com/WordPress/gutenberg/pull/72105)). +- Move the package to v2 build pipeline. Rewrite styles to be dart-sass compatible ([#72242](https://github.com/WordPress/gutenberg/pull/72242)). ## 30.5.0 (2025-10-01) diff --git a/packages/components/package.json b/packages/components/package.json index e47671b09e2af8..7e18a947ecad9f 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -24,6 +24,16 @@ }, "main": "build/index.js", "module": "build-module/index.js", + "exports": { + ".": { + "types": "./build-types/index.d.ts", + "import": "./build-module/index.js", + "default": "./build/index.js" + }, + "./README.md": "./README.md", + "./CONTRIBUTING.md": "./CONTRIBUTING.md", + "./package.json": "./package.json" + }, "react-native": "src/index", "wpScript": true, "types": "build-types", @@ -33,7 +43,6 @@ ], "dependencies": { "@ariakit/react": "^0.4.15", - "@babel/runtime": "7.25.7", "@emotion/cache": "^11.7.1", "@emotion/css": "^11.7.1", "@emotion/react": "^11.7.1", @@ -45,6 +54,7 @@ "@types/highlight-words-core": "1.2.1", "@use-gesture/react": "^10.3.1", "@wordpress/a11y": "file:../a11y", + "@wordpress/base-styles": "file:../base-styles", "@wordpress/compose": "file:../compose", "@wordpress/date": "file:../date", "@wordpress/deprecated": "file:../deprecated", diff --git a/packages/components/src/autocomplete/style.scss b/packages/components/src/autocomplete/style.scss index 75b219210f42e2..f5c1cacda1351d 100644 --- a/packages/components/src/autocomplete/style.scss +++ b/packages/components/src/autocomplete/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; + .components-autocomplete__popover .components-popover__content { padding: $grid-unit-10; min-width: 200px; diff --git a/packages/components/src/badge/styles.scss b/packages/components/src/badge/styles.scss index d3f82482cf7743..dca148dbdb30a8 100644 --- a/packages/components/src/badge/styles.scss +++ b/packages/components/src/badge/styles.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; + $badge-colors: ( "info": #3858e9, "warning": $alert-yellow, diff --git a/packages/components/src/button-group/style.scss b/packages/components/src/button-group/style.scss index 96a9e8f458c84c..d80b6961a8f113 100644 --- a/packages/components/src/button-group/style.scss +++ b/packages/components/src/button-group/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; + .components-button-group { display: inline-block; diff --git a/packages/components/src/button/style.scss b/packages/components/src/button/style.scss index 5d734cc17442e7..6c9257f8eaaff3 100644 --- a/packages/components/src/button/style.scss +++ b/packages/components/src/button/style.scss @@ -1,3 +1,8 @@ +@use "sass:color"; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + /** * For easier testing of potential regressions, you can use a Button variant matrix * available in a special Storybook instance by running `npm run storybook:e2e:dev`. @@ -196,15 +201,15 @@ */ &.is-destructive { --wp-components-color-accent: #{$alert-red}; - --wp-components-color-accent-darker-10: #{darken($alert-red, 10%)}; - --wp-components-color-accent-darker-20: #{darken($alert-red, 20%)}; + --wp-components-color-accent-darker-10: #{color.scale($alert-red, $lightness: -10%)}; + --wp-components-color-accent-darker-20: #{color.scale($alert-red, $lightness: -20%)}; // Only the default variant is styled differently from the non-destructive counterparts. &:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link) { color: $alert-red; &:hover:not(:disabled, [aria-disabled="true"]) { - color: darken($alert-red, 20%); + color: color.scale($alert-red, $lightness: -20%); } &:focus { @@ -289,10 +294,10 @@ background-image: linear-gradient( -45deg, // TODO: Prepare for theming (https://github.com/WordPress/gutenberg/pull/45466/files#r1030872724) - darken($white, 2%) 33%, - darken($white, 12%) 33%, - darken($white, 12%) 70%, - darken($white, 2%) 70% + color.scale($white, $lightness: -2%) 33%, + color.scale($white, $lightness: -12%) 33%, + color.scale($white, $lightness: -12%) 70%, + color.scale($white, $lightness: -2%) 70% ); /* stylelint-enable */ } diff --git a/packages/components/src/calendar/style.scss b/packages/components/src/calendar/style.scss index dabaa5613c59c5..033a2f537fafd1 100644 --- a/packages/components/src/calendar/style.scss +++ b/packages/components/src/calendar/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + /* Root of the component. */ // Internal variables $wp-components-calendar-outline-focus: var(--wp-admin-border-width-focus) solid $components-color-accent; diff --git a/packages/components/src/checkbox-control/style.scss b/packages/components/src/checkbox-control/style.scss index 63cd023302bcb1..ec71857e5d4161 100644 --- a/packages/components/src/checkbox-control/style.scss +++ b/packages/components/src/checkbox-control/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-checkbox-control { // Careful, these CSS vars have experimental overrides in Data Views (packages/dataviews/src/style.scss). --checkbox-input-size: 24px; // Width & height for small viewports. diff --git a/packages/components/src/circular-option-picker/style.scss b/packages/components/src/circular-option-picker/style.scss index 5cbedb4f89053a..d52619aa45e16b 100644 --- a/packages/components/src/circular-option-picker/style.scss +++ b/packages/components/src/circular-option-picker/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; + $color-palette-circle-size: 28px; $color-palette-circle-spacing: 12px; diff --git a/packages/components/src/color-indicator/style.scss b/packages/components/src/color-indicator/style.scss index 4029b50340e62a..441b6377422e7a 100644 --- a/packages/components/src/color-indicator/style.scss +++ b/packages/components/src/color-indicator/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + .component-color-indicator { width: $grid-unit-50 * 0.5; height: $grid-unit-50 * 0.5; diff --git a/packages/components/src/color-palette/style.scss b/packages/components/src/color-palette/style.scss index 278aacb22914bb..d55d24df8f5b21 100644 --- a/packages/components/src/color-palette/style.scss +++ b/packages/components/src/color-palette/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + $border-as-box-shadow: inset 0 0 0 $border-width rgba(0, 0, 0, 0.2); .components-color-palette__custom-color-wrapper { diff --git a/packages/components/src/combobox-control/style.scss b/packages/components/src/combobox-control/style.scss index b7cc9b8b59863b..a84204e54d939c 100644 --- a/packages/components/src/combobox-control/style.scss +++ b/packages/components/src/combobox-control/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/breakpoints" as *; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "../utils/theme-variables" as *; + .components-combobox-control { width: 100%; } diff --git a/packages/components/src/custom-gradient-picker/style.scss b/packages/components/src/custom-gradient-picker/style.scss index b9f2bee9dbe4eb..11ca9e421eb83e 100644 --- a/packages/components/src/custom-gradient-picker/style.scss +++ b/packages/components/src/custom-gradient-picker/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + $components-custom-gradient-picker__padding: $grid-unit-20; // 48px container, 16px handles inside, that leaves 32px padding, half of which is 1å6. .components-custom-gradient-picker__gradient-bar { diff --git a/packages/components/src/draggable/style.scss b/packages/components/src/draggable/style.scss index af2531863a3fd6..07e1f36973ff2f 100644 --- a/packages/components/src/draggable/style.scss +++ b/packages/components/src/draggable/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/z-index" as *; + body.is-dragging-components-draggable { cursor: move;/* Fallback for IE/Edge < 14 */ cursor: grabbing !important; diff --git a/packages/components/src/drop-zone/style.scss b/packages/components/src/drop-zone/style.scss index 4c2da2df0b4a52..40ab7b87516e0d 100644 --- a/packages/components/src/drop-zone/style.scss +++ b/packages/components/src/drop-zone/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; +@use "../utils/theme-variables" as *; + .components-drop-zone { position: absolute; top: 0; diff --git a/packages/components/src/dropdown-menu/style.scss b/packages/components/src/dropdown-menu/style.scss index 29fd6db18ba283..94acb8caf65b2a 100644 --- a/packages/components/src/dropdown-menu/style.scss +++ b/packages/components/src/dropdown-menu/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + .components-dropdown-menu__toggle { vertical-align: top; } diff --git a/packages/components/src/dropdown/style.scss b/packages/components/src/dropdown/style.scss index d7ae7963f7ed8c..3e98a6be81fae1 100644 --- a/packages/components/src/dropdown/style.scss +++ b/packages/components/src/dropdown/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + .components-dropdown { display: inline-block; } diff --git a/packages/components/src/duotone-picker/color-list-picker/style.scss b/packages/components/src/duotone-picker/color-list-picker/style.scss index 56f2546158329a..89fe98c0b6bdf1 100644 --- a/packages/components/src/duotone-picker/color-list-picker/style.scss +++ b/packages/components/src/duotone-picker/color-list-picker/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/variables" as *; + .components-color-list-picker, .components-color-list-picker__swatch-button { width: 100%; diff --git a/packages/components/src/duotone-picker/style.scss b/packages/components/src/duotone-picker/style.scss index cebeb157cd5efb..d1a99feed24de1 100644 --- a/packages/components/src/duotone-picker/style.scss +++ b/packages/components/src/duotone-picker/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/colors" as *; + .components-duotone-picker__color-indicator::before { background: transparent; } diff --git a/packages/components/src/focal-point-picker/style.scss b/packages/components/src/focal-point-picker/style.scss index 826f1f88d82d92..f9f75f092d81b9 100644 --- a/packages/components/src/focal-point-picker/style.scss +++ b/packages/components/src/focal-point-picker/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/colors" as *; + .container { padding: 0 16px; } diff --git a/packages/components/src/form-toggle/style.scss b/packages/components/src/form-toggle/style.scss index 8ae46d23558276..f1aacc74484be5 100644 --- a/packages/components/src/form-toggle/style.scss +++ b/packages/components/src/form-toggle/style.scss @@ -1,4 +1,9 @@ @use "sass:math"; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; +@use "../utils/theme-variables" as *; $toggle-width: $grid-unit-40; $toggle-height: $grid-unit-20; diff --git a/packages/components/src/form-token-field/style.scss b/packages/components/src/form-token-field/style.scss index 416673138484eb..319407445812db 100644 --- a/packages/components/src/form-token-field/style.scss +++ b/packages/components/src/form-token-field/style.scss @@ -1,3 +1,9 @@ +@use "@wordpress/base-styles/breakpoints" as *; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-form-token-field__input-container { @include input-control($components-color-accent); width: 100%; diff --git a/packages/components/src/guide/style.scss b/packages/components/src/guide/style.scss index df52d5325f3fbf..06813db8da2a01 100644 --- a/packages/components/src/guide/style.scss +++ b/packages/components/src/guide/style.scss @@ -1,3 +1,9 @@ +@use "@wordpress/base-styles/breakpoints" as *; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-guide { $image-height: 300px; $image-width: 320px; diff --git a/packages/components/src/higher-order/navigate-regions/style.scss b/packages/components/src/higher-order/navigate-regions/style.scss index 1196acf5b93275..ebd201f9e04a1d 100644 --- a/packages/components/src/higher-order/navigate-regions/style.scss +++ b/packages/components/src/higher-order/navigate-regions/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/z-index" as *; + $regionOutlineRatio: 2; @mixin region-selection-focus { diff --git a/packages/components/src/menu-group/style.scss b/packages/components/src/menu-group/style.scss index 744e3f74c5b955..ef8d33e5cf85a1 100644 --- a/packages/components/src/menu-group/style.scss +++ b/packages/components/src/menu-group/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + .components-menu-group + .components-menu-group { padding-top: $grid-unit-10; border-top: $border-width solid $gray-900; diff --git a/packages/components/src/menu-item/style.scss b/packages/components/src/menu-item/style.scss index 43cad98f6391c5..f7d959b7016ee6 100644 --- a/packages/components/src/menu-item/style.scss +++ b/packages/components/src/menu-item/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-menu-item__button, .components-menu-item__button.components-button { width: 100%; @@ -89,4 +94,3 @@ display: inline; } } - diff --git a/packages/components/src/menu-items-choice/style.scss b/packages/components/src/menu-items-choice/style.scss index c33ce43301842b..d25441a03b4490 100644 --- a/packages/components/src/menu-items-choice/style.scss +++ b/packages/components/src/menu-items-choice/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/variables" as *; + .components-menu-items-choice, .components-menu-items-choice.components-button { min-height: $button-size-next-default-40px; diff --git a/packages/components/src/mobile/badge/style.scss b/packages/components/src/mobile/badge/style.scss index 487dfe990b4e84..4b0221fcae7777 100644 --- a/packages/components/src/mobile/badge/style.scss +++ b/packages/components/src/mobile/badge/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/colors" as *; + .badgeContainer { position: absolute; top: 0; diff --git a/packages/components/src/mobile/bottom-sheet-text-control/styles.scss b/packages/components/src/mobile/bottom-sheet-text-control/styles.scss index f50712d403a747..700df74890da67 100644 --- a/packages/components/src/mobile/bottom-sheet-text-control/styles.scss +++ b/packages/components/src/mobile/bottom-sheet-text-control/styles.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + .textEditor { padding: 14px 0; height: 80px; diff --git a/packages/components/src/mobile/html-text-input/style.scss b/packages/components/src/mobile/html-text-input/style.scss index 47102aca755044..0a6e330a1d7fe7 100644 --- a/packages/components/src/mobile/html-text-input/style.scss +++ b/packages/components/src/mobile/html-text-input/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/colors" as *; + $padding: 8; $htmlFont: $default-monospace-font; $textColorDark: $white; diff --git a/packages/components/src/modal/style.scss b/packages/components/src/modal/style.scss index 12e5864fb81cfa..5e456e973d1f06 100644 --- a/packages/components/src/modal/style.scss +++ b/packages/components/src/modal/style.scss @@ -1,3 +1,10 @@ +@use "@wordpress/base-styles/animations" as *; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; +@use "../utils/theme-variables" as *; + // The scrim behind the modal window. .components-modal__screen-overlay { position: fixed; diff --git a/packages/components/src/notice/style.scss b/packages/components/src/notice/style.scss index 9cfc2b983a4918..7c7e3173ff4150 100644 --- a/packages/components/src/notice/style.scss +++ b/packages/components/src/notice/style.scss @@ -1,3 +1,8 @@ +@use "sass:color"; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-notice { display: flex; font-family: $default-font; @@ -14,17 +19,17 @@ &.is-success { border-left-color: $alert-green; - background-color: lighten($alert-green, 45%); + background-color: color.scale($alert-green, $lightness: +45%); } &.is-warning { border-left-color: $alert-yellow; - background-color: lighten($alert-yellow, 35%); + background-color: color.scale($alert-yellow, $lightness: +35%); } &.is-error { border-left-color: $alert-red; - background-color: lighten($alert-red, 35%); + background-color: color.scale($alert-red, $lightness: +35%); } } diff --git a/packages/components/src/palette-edit/style.scss b/packages/components/src/palette-edit/style.scss index d73c7ff46cc3c0..f893f919e449be 100644 --- a/packages/components/src/palette-edit/style.scss +++ b/packages/components/src/palette-edit/style.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/variables" as *; + .components-palette-edit__popover-gradient-picker { width: 260px; padding: $grid-unit-10; diff --git a/packages/components/src/panel/style.scss b/packages/components/src/panel/style.scss index 3aff9d24b079f5..caf38b82b43991 100644 --- a/packages/components/src/panel/style.scss +++ b/packages/components/src/panel/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-panel { background: $white; border: $border-width solid $gray-200; diff --git a/packages/components/src/placeholder/style.scss b/packages/components/src/placeholder/style.scss index fe151eeccf584a..58facdad67d0d3 100644 --- a/packages/components/src/placeholder/style.scss +++ b/packages/components/src/placeholder/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; + // This needs specificity to override individual block styles. .components-placeholder.components-placeholder { font-size: $default-font-size; diff --git a/packages/components/src/popover/style.scss b/packages/components/src/popover/style.scss index 601e9ebb7675f5..50b9788e48e518 100644 --- a/packages/components/src/popover/style.scss +++ b/packages/components/src/popover/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; + $arrow-triangle-base-size: 14px; $shadow-popover-border-default: 0 0 0 $border-width $gray-400; diff --git a/packages/components/src/radio-control/style.scss b/packages/components/src/radio-control/style.scss index e3dcb8d1e58270..d7a2a1f1d9217c 100644 --- a/packages/components/src/radio-control/style.scss +++ b/packages/components/src/radio-control/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-radio-control { border: 0; margin: 0; diff --git a/packages/components/src/resizable-box/style.scss b/packages/components/src/resizable-box/style.scss index a9ff7ea237e5f6..8917c051074876 100644 --- a/packages/components/src/resizable-box/style.scss +++ b/packages/components/src/resizable-box/style.scss @@ -1,3 +1,9 @@ +@use "sass:math"; +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; +@use "../utils/theme-variables" as *; + $resize-handler-size: 15px; $resize-handler-container-size: $resize-handler-size + ($grid-unit-05 * 2); // Make the resize handle container larger so there's a larger grabbable area. @@ -40,8 +46,8 @@ $resize-handler-container-size: $resize-handler-size + ($grid-unit-05 * 2); // M background: $white; cursor: inherit; position: absolute; - top: calc(50% - #{ceil($resize-handler-size * 0.5)}); - right: calc(50% - #{ceil($resize-handler-size * 0.5)}); + top: calc(50% - #{math.ceil($resize-handler-size * 0.5)}); + right: calc(50% - #{math.ceil($resize-handler-size * 0.5)}); box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) $components-color-accent, $elevation-x-small; // Only visible in Windows High Contrast mode. diff --git a/packages/components/src/snackbar/style.scss b/packages/components/src/snackbar/style.scss index d6613d013aba00..df9ec8362ce473 100644 --- a/packages/components/src/snackbar/style.scss +++ b/packages/components/src/snackbar/style.scss @@ -1,3 +1,9 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; +@use "../utils/theme-variables" as *; + .components-snackbar { font-family: $default-font; font-size: $default-font-size; diff --git a/packages/components/src/style.scss b/packages/components/src/style.scss index 74d8ec7554e43c..d316d1716f2e90 100644 --- a/packages/components/src/style.scss +++ b/packages/components/src/style.scss @@ -1,58 +1,55 @@ +@use "@wordpress/base-styles/mixins" as *; +@use "./animate/style.scss" as *; +@use "./autocomplete/style.scss" as *; +@use "./badge/styles.scss" as *; +@use "./button-group/style.scss" as *; +@use "./button/style.scss" as *; +@use "./calendar/style.scss" as *; +@use "./checkbox-control/style.scss" as *; +@use "./circular-option-picker/style.scss" as *; +@use "./palette-edit/style.scss" as *; +@use "./color-indicator/style.scss" as *; +@use "./combobox-control/style.scss" as *; +@use "./color-palette/style.scss" as *; +@use "./custom-gradient-picker/style.scss" as *; +@use "./draggable/style.scss" as *; +@use "./drop-zone/style.scss" as *; +@use "./dropdown/style.scss" as *; +@use "./dropdown-menu/style.scss" as *; +@use "./duotone-picker/style.scss" as *; +@use "./duotone-picker/color-list-picker/style.scss" as *; +@use "./external-link/style.scss" as *; +@use "./form-toggle/style.scss" as *; +@use "./form-token-field/style.scss" as *; +@use "./guide/style.scss" as *; +@use "./higher-order/navigate-regions/style.scss" as *; +@use "./menu-group/style.scss" as *; +@use "./menu-item/style.scss" as *; +@use "./menu-items-choice/style.scss" as *; +@use "./modal/style.scss" as *; +@use "./notice/style.scss" as *; +@use "./panel/style.scss" as *; +@use "./placeholder/style.scss" as *; +@use "./popover/style.scss" as *; +@use "./radio-control/style.scss" as *; +@use "./resizable-box/style.scss" as *; +@use "./responsive-wrapper/style.scss" as *; +@use "./sandbox/style.scss" as *; +@use "./scroll-lock/style.scss" as *; +@use "./select-control/style.scss" as *; +@use "./snackbar/style.scss" as *; +@use "./tab-panel/style.scss" as *; +@use "./text-control/style.scss" as *; +@use "./tip/style.scss" as *; +@use "./toggle-control/style.scss" as *; +@use "./toolbar/toolbar/style.scss" as *; +@use "./toolbar/toolbar-button/style.scss" as *; +@use "./toolbar/toolbar-group/style.scss" as *; +@use "./tooltip/style.scss" as *; +@use "./validated-form-controls/style.scss" as *; + // Include the default WP Components color variables. // TODO: Remove this once all admin-scheme variables are accounted for in the wp-components fallback values. :root { @include admin-scheme( #3858e9 ); } - -// Variables -@import "./utils/theme-variables.scss"; - -// Components -@import "./animate/style.scss"; -@import "./autocomplete/style.scss"; -@import "./badge/styles.scss"; -@import "./button-group/style.scss"; -@import "./button/style.scss"; -@import "./calendar/style.scss"; -@import "./checkbox-control/style.scss"; -@import "./circular-option-picker/style.scss"; -@import "./palette-edit/style.scss"; -@import "./color-indicator/style.scss"; -@import "./combobox-control/style.scss"; -@import "./color-palette/style.scss"; -@import "./custom-gradient-picker/style.scss"; -@import "./draggable/style.scss"; -@import "./drop-zone/style.scss"; -@import "./dropdown/style.scss"; -@import "./dropdown-menu/style.scss"; -@import "./duotone-picker/style.scss"; -@import "./duotone-picker/color-list-picker/style.scss"; -@import "./external-link/style.scss"; -@import "./form-toggle/style.scss"; -@import "./form-token-field/style.scss"; -@import "./guide/style.scss"; -@import "./higher-order/navigate-regions/style.scss"; -@import "./menu-group/style.scss"; -@import "./menu-item/style.scss"; -@import "./menu-items-choice/style.scss"; -@import "./modal/style.scss"; -@import "./notice/style.scss"; -@import "./panel/style.scss"; -@import "./placeholder/style.scss"; -@import "./popover/style.scss"; -@import "./radio-control/style.scss"; -@import "./resizable-box/style.scss"; -@import "./responsive-wrapper/style.scss"; -@import "./sandbox/style.scss"; -@import "./scroll-lock/style.scss"; -@import "./select-control/style.scss"; -@import "./snackbar/style.scss"; -@import "./tab-panel/style.scss"; -@import "./text-control/style.scss"; -@import "./tip/style.scss"; -@import "./toggle-control/style.scss"; -@import "./toolbar/toolbar/style.scss"; -@import "./toolbar/toolbar-button/style.scss"; -@import "./toolbar/toolbar-group/style.scss"; -@import "./tooltip/style.scss"; -@import "./validated-form-controls/style.scss"; diff --git a/packages/components/src/tab-panel/style.scss b/packages/components/src/tab-panel/style.scss index 7e811b21b65b6e..902713531ec6b0 100644 --- a/packages/components/src/tab-panel/style.scss +++ b/packages/components/src/tab-panel/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-tab-panel__tabs { display: flex; align-items: stretch; diff --git a/packages/components/src/text-control/style.scss b/packages/components/src/text-control/style.scss index c3cf54fc003de5..7792f9c13dcafb 100644 --- a/packages/components/src/text-control/style.scss +++ b/packages/components/src/text-control/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-text-control__input, .components-text-control__input[type="text"], .components-text-control__input[type="tel"], diff --git a/packages/components/src/tip/style.scss b/packages/components/src/tip/style.scss index d9a3e820f537aa..53188fc220a543 100644 --- a/packages/components/src/tip/style.scss +++ b/packages/components/src/tip/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + .components-tip { display: flex; color: $gray-700; diff --git a/packages/components/src/toggle-control/style.scss b/packages/components/src/toggle-control/style.scss index 68733b53a9bc94..f9c81973c92e51 100644 --- a/packages/components/src/toggle-control/style.scss +++ b/packages/components/src/toggle-control/style.scss @@ -1,5 +1,8 @@ +@use "@wordpress/base-styles/variables" as *; +@use "../form-toggle/style" as form-toggle; + .components-toggle-control__label { - line-height: $toggle-height; + line-height: form-toggle.$toggle-height; &:not(.is-disabled) { cursor: pointer; @@ -8,5 +11,5 @@ .components-toggle-control__help { display: inline-block; - margin-inline-start: $toggle-width + $grid-unit-10; + margin-inline-start: form-toggle.$toggle-width + $grid-unit-10; } diff --git a/packages/components/src/toolbar/toolbar-button/style.scss b/packages/components/src/toolbar/toolbar-button/style.scss index b90b1bec49dfdb..86e932c2287219 100644 --- a/packages/components/src/toolbar/toolbar-button/style.scss +++ b/packages/components/src/toolbar/toolbar-button/style.scss @@ -1,3 +1,6 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; + .components-toolbar__control.components-button { position: relative; diff --git a/packages/components/src/toolbar/toolbar-group/style.scss b/packages/components/src/toolbar/toolbar-group/style.scss index 5271f8d9225d6e..1a1862747a9549 100644 --- a/packages/components/src/toolbar/toolbar-group/style.scss +++ b/packages/components/src/toolbar/toolbar-group/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../../utils/theme-variables" as *; + .components-toolbar-group { min-height: $block-toolbar-height; border-right: $border-width solid $components-color-foreground; diff --git a/packages/components/src/toolbar/toolbar/style.scss b/packages/components/src/toolbar/toolbar/style.scss index 2da8219146fd5a..988d5f5d12fc13 100644 --- a/packages/components/src/toolbar/toolbar/style.scss +++ b/packages/components/src/toolbar/toolbar/style.scss @@ -1,3 +1,8 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/mixins" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../../utils/theme-variables" as *; + .components-accessible-toolbar { display: inline-flex; border: $border-width solid $components-color-foreground; diff --git a/packages/components/src/tooltip/style.scss b/packages/components/src/tooltip/style.scss index e84946e4a9176c..eff6a71568123e 100644 --- a/packages/components/src/tooltip/style.scss +++ b/packages/components/src/tooltip/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "@wordpress/base-styles/z-index" as *; + .components-tooltip { background: $black; font-family: $default-font; @@ -14,4 +18,3 @@ .components-tooltip__shortcut { margin-left: $grid-unit-10; } - diff --git a/packages/components/src/utils/theme-variables.scss b/packages/components/src/utils/theme-variables.scss index 83379dd88f698c..0590b5698ca266 100644 --- a/packages/components/src/utils/theme-variables.scss +++ b/packages/components/src/utils/theme-variables.scss @@ -1,3 +1,5 @@ +@use "@wordpress/base-styles/colors" as *; + // Accent color // // If the `--wp-components-color-accent` variable is not defined, fallback to diff --git a/packages/components/src/validated-form-controls/style.scss b/packages/components/src/validated-form-controls/style.scss index 9a85923559b1b9..8ba79514fd6a94 100644 --- a/packages/components/src/validated-form-controls/style.scss +++ b/packages/components/src/validated-form-controls/style.scss @@ -1,3 +1,7 @@ +@use "@wordpress/base-styles/colors" as *; +@use "@wordpress/base-styles/variables" as *; +@use "../utils/theme-variables" as *; + .components-validated-control { // For components based on InputBase &:has(:is(input, select):user-invalid) diff --git a/packages/compose/package.json b/packages/compose/package.json index de8a03da35bb5e..a79dce637c6dc9 100644 --- a/packages/compose/package.json +++ b/packages/compose/package.json @@ -29,7 +29,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/data-controls/package.json b/packages/data-controls/package.json index 8c84ed91edfd0e..893c15748bd2c1 100644 --- a/packages/data-controls/package.json +++ b/packages/data-controls/package.json @@ -28,7 +28,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/data/package.json b/packages/data/package.json index b1a0a9db405cd0..6ad79207d929c1 100644 --- a/packages/data/package.json +++ b/packages/data/package.json @@ -28,7 +28,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/element/package.json b/packages/element/package.json index a1e8261a5c565f..86825f556a7ca6 100644 --- a/packages/element/package.json +++ b/packages/element/package.json @@ -28,7 +28,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/icons/package.json b/packages/icons/package.json index 77d2ef5d4e44b4..5824572adc06c9 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -25,12 +25,19 @@ }, "main": "build/index.js", "module": "build-module/index.js", + "exports": { + ".": { + "types": "./build-types/index.d.ts", + "import": "./build-module/index.js", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, "react-native": "src/index", "wpScript": true, "types": "build-types", "sideEffects": false, "dependencies": { - "@babel/runtime": "7.25.7", "@wordpress/element": "file:../element", "@wordpress/primitives": "file:../primitives" }, diff --git a/packages/interactivity-router/package.json b/packages/interactivity-router/package.json index 2bf090795b4d82..53a005338c1a9c 100644 --- a/packages/interactivity-router/package.json +++ b/packages/interactivity-router/package.json @@ -27,7 +27,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/interactivity/package.json b/packages/interactivity/package.json index 679da6fbe0147b..92913b957f79b3 100644 --- a/packages/interactivity/package.json +++ b/packages/interactivity/package.json @@ -27,7 +27,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/keyboard-shortcuts/package.json b/packages/keyboard-shortcuts/package.json index cca1d759f9d903..5f83acaefef735 100644 --- a/packages/keyboard-shortcuts/package.json +++ b/packages/keyboard-shortcuts/package.json @@ -26,7 +26,6 @@ "module": "build-module/index.js", "exports": { ".": { - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/notices/package.json b/packages/notices/package.json index 8305f6560d406b..81f0ae2918e85c 100644 --- a/packages/notices/package.json +++ b/packages/notices/package.json @@ -27,7 +27,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/preferences-persistence/package.json b/packages/preferences-persistence/package.json index 70fdd57fc00516..cc2fe2c6f2fb1c 100644 --- a/packages/preferences-persistence/package.json +++ b/packages/preferences-persistence/package.json @@ -28,7 +28,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/primitives/package.json b/packages/primitives/package.json index f870d7d2dc050b..1243eae3fde0d9 100644 --- a/packages/primitives/package.json +++ b/packages/primitives/package.json @@ -25,6 +25,13 @@ }, "main": "build/index.js", "module": "build-module/index.js", + "exports": { + ".": { + "import": "./build-module/index.js", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, "react-native": "src/index", "wpScript": true, "types": "build-types", @@ -32,7 +39,6 @@ "src/**/*.scss" ], "dependencies": { - "@babel/runtime": "7.25.7", "@wordpress/element": "file:../element", "clsx": "^2.1.1" }, diff --git a/packages/react-i18n/package.json b/packages/react-i18n/package.json index 3718d403e299ac..98d409f2631f98 100644 --- a/packages/react-i18n/package.json +++ b/packages/react-i18n/package.json @@ -27,7 +27,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/rich-text/package.json b/packages/rich-text/package.json index c8a7682f707a05..a5bfd3c5ad6183 100644 --- a/packages/rich-text/package.json +++ b/packages/rich-text/package.json @@ -27,7 +27,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/router/package.json b/packages/router/package.json index 96da63b0b3f7f8..21c96d06c768af 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -27,7 +27,6 @@ "exports": { ".": { "types": "./build-types/index.d.ts", - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/packages/viewport/package.json b/packages/viewport/package.json index 640afa643722c5..e92de19fc5c57f 100644 --- a/packages/viewport/package.json +++ b/packages/viewport/package.json @@ -26,7 +26,6 @@ "module": "build-module/index.js", "exports": { ".": { - "react-native": "./src/index.js", "import": "./build-module/index.js", "default": "./build/index.js" }, diff --git a/storybook/main.js b/storybook/main.js index 81a13e1bc63af1..b1830cc08024e6 100644 --- a/storybook/main.js +++ b/storybook/main.js @@ -75,6 +75,10 @@ module.exports = { ...config.module, rules: [ ...config.module.rules, + { + test: /\.md$/, + type: 'asset/source', + }, { test: /\/stories\/.+\.story\.(j|t)sx?$/, use: [ diff --git a/storybook/stories/docs/components/contributing.mdx b/storybook/stories/docs/components/contributing.mdx index 7593cdd97a810e..2a0bb876c288c8 100644 --- a/storybook/stories/docs/components/contributing.mdx +++ b/storybook/stories/docs/components/contributing.mdx @@ -1,5 +1,5 @@ import { Meta, Markdown } from '@storybook/blocks'; -import Contributing from '@wordpress/components/CONTRIBUTING.md?raw'; +import Contributing from '@wordpress/components/CONTRIBUTING.md'; diff --git a/storybook/stories/docs/components/readme.mdx b/storybook/stories/docs/components/readme.mdx index 61f3c222e9f550..660c9800f7e032 100644 --- a/storybook/stories/docs/components/readme.mdx +++ b/storybook/stories/docs/components/readme.mdx @@ -1,5 +1,5 @@ import { Meta, Markdown } from '@storybook/blocks'; -import Readme from '@wordpress/components/README.md?raw'; +import Readme from '@wordpress/components/README.md';