diff --git a/package-lock.json b/package-lock.json index 2ddb0a8af80..c462d90d494 100644 --- a/package-lock.json +++ b/package-lock.json @@ -78,7 +78,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@primer/react": "38.4.0", + "@primer/react": "38.5.0", "@primer/styled-react": "1.0.2", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", @@ -92,7 +92,7 @@ "name": "example-nextjs", "version": "0.0.0", "dependencies": { - "@primer/react": "38.4.0", + "@primer/react": "38.5.0", "@primer/styled-react": "1.0.2", "next": "^16.0.7", "react": "^19.2.0", @@ -135,7 +135,7 @@ "version": "0.0.0", "dependencies": { "@primer/octicons-react": "^19.14.0", - "@primer/react": "38.4.0", + "@primer/react": "38.5.0", "@primer/styled-react": "1.0.2", "clsx": "^2.1.1", "next": "^16.0.7", @@ -3470,10 +3470,33 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/@emnapi/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/runtime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.6.0.tgz", - "integrity": "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -5948,6 +5971,19 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.0.tgz", + "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + } + }, "node_modules/@next/env": { "version": "16.0.7", "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.7.tgz", @@ -6424,6 +6460,16 @@ "node": "^16.13.0 || >=18.0.0" } }, + "node_modules/@oxc-project/types": { + "version": "0.101.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.101.0.tgz", + "integrity": "sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "dev": true, @@ -7420,6 +7466,234 @@ "dev": true, "license": "MIT" }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.53.tgz", + "integrity": "sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.53.tgz", + "integrity": "sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.53.tgz", + "integrity": "sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.53.tgz", + "integrity": "sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.53.tgz", + "integrity": "sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.53.tgz", + "integrity": "sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.53.tgz", + "integrity": "sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.53.tgz", + "integrity": "sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.53.tgz", + "integrity": "sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.53.tgz", + "integrity": "sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.53.tgz", + "integrity": "sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.53.tgz", + "integrity": "sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.53.tgz", + "integrity": "sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/plugin-babel": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz", @@ -8628,6 +8902,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/acorn": { "version": "4.0.6", "dev": true, @@ -20022,6 +20307,26 @@ "postcss": "^8.2.14" } }, + "node_modules/postcss-modules": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.1.tgz", + "integrity": "sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "generic-names": "^4.0.0", + "icss-utils": "^5.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.3" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", "dev": true, @@ -21589,6 +21894,42 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rolldown": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.53.tgz", + "integrity": "sha512-Qd9c2p0XKZdgT5AYd+KgAMggJ8ZmCs3JnS9PTMWkyUfteKlfmKtxJbWTHkVakxwXs1Ub7jrRYVeFeF7N0sQxyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.101.0", + "@rolldown/pluginutils": "1.0.0-beta.53" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-beta.53", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.53", + "@rolldown/binding-darwin-x64": "1.0.0-beta.53", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.53", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.53", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.53", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.53", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.53", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.53", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.53", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.53", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.53", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.53" + } + }, + "node_modules/rolldown-plugin-import-css": { + "resolved": "packages/rolldown-plugin-import-css", + "link": true + }, "node_modules/rollup": { "version": "4.53.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", @@ -21631,28 +21972,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-esbuild": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "es-module-lexer": "^1.6.0", - "get-tsconfig": "^4.10.0", - "unplugin-utils": "^0.2.4" - }, - "engines": { - "node": ">=14.18.0" - }, - "peerDependencies": { - "esbuild": ">=0.18.0", - "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" - } - }, - "node_modules/rollup-plugin-import-css": { - "resolved": "packages/rollup-plugin-import-css", - "link": true - }, "node_modules/rollup-plugin-typescript2": { "version": "0.36.0", "dev": true, @@ -24916,32 +25235,6 @@ "node": ">=18.12.0" } }, - "node_modules/unplugin-utils": { - "version": "0.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "pathe": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/unplugin-utils/node_modules/picomatch": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/unplugin/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -26263,7 +26556,7 @@ }, "packages/react": { "name": "@primer/react", - "version": "38.4.0", + "version": "38.5.0", "license": "MIT", "dependencies": { "@github/mini-throttle": "^2.1.1", @@ -26362,8 +26655,9 @@ "react-is": "18.3.1", "recast": "0.23.7", "rimraf": "5.0.5", + "rolldown": "^1.0.0-beta.53", + "rolldown-plugin-import-css": "^0.0.0", "rollup": "4.53.3", - "rollup-plugin-import-css": "^0.0.0", "storybook": "^10.1.4", "terser": "5.36.0", "ts-toolbelt": "9.6.0", @@ -26533,8 +26827,22 @@ "typescript": ">=4.0.0" } }, + "packages/rolldown-plugin-import-css": { + "version": "0.0.0", + "devDependencies": { + "postcss": "^8.4.38", + "postcss-modules": "^6.0.0", + "rolldown": "^1.0.0-beta.53", + "typescript": "^5.9.2" + }, + "peerDependencies": { + "postcss": "^8.4.38", + "postcss-modules": "^6.0.0" + } + }, "packages/rollup-plugin-import-css": { "version": "0.0.0", + "extraneous": true, "devDependencies": { "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-node-resolve": "^16.0.3", @@ -26551,95 +26859,6 @@ "postcss-modules": "^6.0.0" } }, - "packages/rollup-plugin-import-css/node_modules/brace-expansion": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "packages/rollup-plugin-import-css/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/rollup-plugin-import-css/node_modules/jackspeak": { - "version": "3.4.3", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "packages/rollup-plugin-import-css/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/rollup-plugin-import-css/node_modules/postcss-modules": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "generic-names": "^4.0.0", - "icss-utils": "^5.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.3" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "packages/rollup-plugin-import-css/node_modules/rimraf": { - "version": "5.0.10", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "packages/styled-react": { "name": "@primer/styled-react", "version": "1.0.2", diff --git a/packages/react/package.json b/packages/react/package.json index 6e393cb317b..322467911fc 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -107,7 +107,6 @@ "@figma/code-connect": "1.3.2", "@primer/css": "^21.5.1", "@primer/doc-gen": "^0.0.1", - "@tanstack/react-virtual": "^3.13.12", "@rollup/plugin-babel": "6.1.0", "@rollup/plugin-commonjs": "29.0.0", "@rollup/plugin-json": "6.1.0", @@ -119,6 +118,7 @@ "@storybook/addon-links": "^10.1.4", "@storybook/icons": "^2.0.1", "@storybook/react-vite": "^10.1.4", + "@tanstack/react-virtual": "^3.13.12", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.4.5", "@testing-library/react": "^16.3.0", @@ -170,8 +170,9 @@ "react-is": "18.3.1", "recast": "0.23.7", "rimraf": "5.0.5", + "rolldown": "^1.0.0-beta.53", + "rolldown-plugin-import-css": "^0.0.0", "rollup": "4.53.3", - "rollup-plugin-import-css": "^0.0.0", "storybook": "^10.1.4", "terser": "5.36.0", "ts-toolbelt": "9.6.0", diff --git a/packages/react/rollup.config.mjs b/packages/react/rolldown.config.mjs similarity index 50% rename from packages/react/rollup.config.mjs rename to packages/react/rolldown.config.mjs index 81cf54a2938..c9713ae93be 100644 --- a/packages/react/rollup.config.mjs +++ b/packages/react/rolldown.config.mjs @@ -1,10 +1,8 @@ import path from 'node:path' -import commonjs from '@rollup/plugin-commonjs' -import resolve from '@rollup/plugin-node-resolve' import babel from '@rollup/plugin-babel' -import {importCSS} from 'rollup-plugin-import-css' +import {defineConfig} from 'rolldown' +import {importCSS} from 'rolldown-plugin-import-css' import postcssPresetPrimer from 'postcss-preset-primer' -import MagicString from 'magic-string' import {isSupported} from './script/react-compiler.mjs' import packageJson from './package.json' with {type: 'json'} @@ -94,106 +92,11 @@ const baseConfig = { ], ], }), - resolve({ - extensions, - }), - commonjs({ - extensions, - }), importCSS({ modulesRoot: 'src', postcssPlugins: [postcssPresetPrimer()], postcssModulesOptions, }), - - /** - * This custom rollup plugin allows us to preserve directives in source - * code, such as "use client", in order to support React Server Components. - * - * The source for this plugin is inspired by: - * https://github.com/Ephem/rollup-plugin-preserve-directives - */ - { - name: 'preserve-directives', - transform(code) { - const ast = this.parse(code) - if (ast.type !== 'Program' || !ast.body) { - return { - code, - ast, - map: null, - } - } - - let hasClientDirective = false - - for (const node of ast.body) { - if (!node) { - continue - } - - if (node.type !== 'ExpressionStatement') { - continue - } - - if (node.directive === 'use client') { - hasClientDirective = true - break - } - } - - if (hasClientDirective) { - return { - code, - ast, - map: null, - meta: { - hasClientDirective: true, - }, - } - } - - return { - code, - ast, - map: null, - } - }, - renderChunk: { - order: 'post', - handler(code, chunk, options) { - // If `preserveModules` is not set to true, we can't be sure if the client - // directive corresponds to the whole chunk or just a part of it. - if (!options.preserveModules) { - return undefined - } - - let chunkHasClientDirective = false - - for (const moduleId of Object.keys(chunk.modules)) { - const hasClientDirective = this.getModuleInfo(moduleId)?.meta?.hasClientDirective - if (hasClientDirective) { - chunkHasClientDirective = true - break - } - } - - if (chunkHasClientDirective) { - const transformed = new MagicString(code) - transformed.prepend(`"use client";\n`) - const sourcemap = transformed.generateMap({ - includeContent: true, - }) - return { - code: transformed.toString(), - map: sourcemap, - } - } - - return null - }, - }, - }, ], onwarn(warning, defaultHandler) { // Dependencies or modules may use "use client" as an indicator for React @@ -210,17 +113,13 @@ const baseConfig = { }, } -export default [ - // ESM - { - ...baseConfig, - external: dependencies.map(createPackageRegex), - output: { - interop: 'auto', - dir: 'dist', - format: 'esm', - preserveModules: true, - preserveModulesRoot: 'src', - }, +export default defineConfig({ + ...baseConfig, + external: dependencies.map(createPackageRegex), + output: { + dir: 'dist', + format: 'esm', + preserveModules: true, + preserveModulesRoot: 'src', }, -] +}) diff --git a/packages/react/script/build b/packages/react/script/build index 4dab4524738..d525a2ef048 100755 --- a/packages/react/script/build +++ b/packages/react/script/build @@ -12,7 +12,7 @@ npm run build:precompile-color-schemes npm run type-css-modules # Bundle -npx rollup -c +npx rolldown -c # Type check npx tsc --project tsconfig.build.json diff --git a/packages/rollup-plugin-import-css/README.md b/packages/rolldown-plugin-import-css/README.md similarity index 84% rename from packages/rollup-plugin-import-css/README.md rename to packages/rolldown-plugin-import-css/README.md index e89da8734c5..53111a2d05a 100644 --- a/packages/rollup-plugin-import-css/README.md +++ b/packages/rolldown-plugin-import-css/README.md @@ -1,13 +1,13 @@ -# rollup-plugin-import-css +# rolldown-plugin-import-css -> A Rollup plugin to include generated CSS alongside transformed CSS Modules so +> A Rolldown plugin to include generated CSS alongside transformed CSS Modules so > that importing a component from a library includes its CSS. ## Usage ```ts -// rollup.config.js -import {importCSS} from 'rollup-plugin-import-css' +// rolldown.config.js +import {importCSS} from 'rolldown-plugin-import-css' export default { input: ['src/index.ts'], diff --git a/packages/rolldown-plugin-import-css/package.json b/packages/rolldown-plugin-import-css/package.json new file mode 100644 index 00000000000..a65b6d6dfcf --- /dev/null +++ b/packages/rolldown-plugin-import-css/package.json @@ -0,0 +1,21 @@ +{ + "name": "rolldown-plugin-import-css", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": "./src/index.ts", + "scripts": { + "type-check": "tsc --noEmit" + }, + "peerDependencies": { + "postcss": "^8.4.38", + "postcss-modules": "^6.0.0" + }, + "devDependencies": { + "postcss": "^8.4.38", + "postcss-modules": "^6.0.0", + "rolldown": "^1.0.0-beta.53", + "typescript": "^5.9.2" + }, + "sideEffects": false +} diff --git a/packages/rolldown-plugin-import-css/src/index.ts b/packages/rolldown-plugin-import-css/src/index.ts new file mode 100644 index 00000000000..8f6725340bb --- /dev/null +++ b/packages/rolldown-plugin-import-css/src/index.ts @@ -0,0 +1,149 @@ +import type {Plugin} from 'rolldown' +import fs from 'node:fs/promises' +import path from 'node:path' +import {createHash} from 'node:crypto' +import postcss from 'postcss' +import postcssModules from 'postcss-modules' + +interface ImportCSSOptions { + /** + * Provide the root directory for your package. This is used to calculate the + * relative path for generated CSS files + */ + modulesRoot: string + + /** + * Optionally provide an array of postcss plugins to use during CSS + * compilation. + */ + postcssPlugins?: Array + + /** + * Optionally provide options to pass forward to `postcss-modules` when + * compiling CSS + */ + postcssModulesOptions?: Parameters[0] +} + +export function importCSS(options: ImportCSSOptions): Plugin { + const {modulesRoot, postcssPlugins = [], postcssModulesOptions = {}} = options + const rootDirectory = path.isAbsolute(modulesRoot) ? modulesRoot : path.resolve(process.cwd(), modulesRoot) + + return { + name: 'import-css', + resolveId: { + filter: { + id: /\.css$/, + }, + handler(source, importer) { + if (!importer) { + return + } + + const moduleInfo = this.getModuleInfo(importer) + if (moduleInfo?.meta['import-css']?.source === source) { + return { + id: source, + external: true, + moduleSideEffects: true, + } + } + + const id = path.resolve(path.dirname(importer), source) + return path.format({ + dir: path.dirname(id), + base: `${path.basename(id)}.js`, + }) + }, + }, + load: { + filter: { + id: /\.css\.js$/, + }, + handler() { + return '' + }, + }, + transform: { + filter: { + id: /\.module\.css\.js$/, + }, + async handler(_code, id) { + const sourceId = path.join(path.dirname(id), path.basename(id, '.js')) + const code = await fs.readFile(sourceId, 'utf8') + const hash = getSourceHash(code) + const relativePath = path.relative(rootDirectory, sourceId) + const name = path.basename(relativePath, relativePath.endsWith('.module.css') ? '.module.css' : '.css') + const fileName = path.join( + path.dirname(relativePath), + path.format({ + name: `${name}-${hash}`, + ext: '.css', + }), + ) + + // When transforming CSS modules, we want to emit the generated CSS as an + // asset and include the generated file in our generated CSS Modules file + // which contains the classes. This makes sure that if the file containing + // the classes is used, then the associated styles for those classes is + // also included + + let cssModuleClasses: {[name: string]: string} | null = null + const result = await postcss([ + ...postcssPlugins, + postcssModules({ + ...postcssModulesOptions, + getJSON(filename, json) { + if (postcssModulesOptions.getJSON) { + postcssModulesOptions.getJSON(filename, json) + } + cssModuleClasses = json + }, + }), + ]).process(code, { + from: id, + to: fileName, + map: { + inline: false, + }, + }) + + this.emitFile({ + type: 'asset', + source: result.css, + fileName, + }) + this.emitFile({ + type: 'asset', + source: result.map.toString(), + fileName: `${fileName}.map`, + }) + + const moduleInfo = this.getModuleInfo(id) + const cssSource = `./${path.basename(fileName)}` + if (moduleInfo) { + moduleInfo.meta['import-css'] = { + source: cssSource, + } + } + + return { + code: ` +import '${cssSource}'; +${ + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + cssModuleClasses !== null ? `export default ${JSON.stringify(cssModuleClasses)}` : '' +} +`, + moduleSideEffects: 'no-treeshake', + } + }, + }, + } +} + +const DEFAULT_HASH_SIZE = 8 + +function getSourceHash(source: string) { + return createHash('sha256').update(source).digest('hex').slice(0, DEFAULT_HASH_SIZE) +} diff --git a/packages/rollup-plugin-import-css/tsconfig.json b/packages/rolldown-plugin-import-css/tsconfig.json similarity index 100% rename from packages/rollup-plugin-import-css/tsconfig.json rename to packages/rolldown-plugin-import-css/tsconfig.json diff --git a/packages/rollup-plugin-import-css/package.json b/packages/rollup-plugin-import-css/package.json deleted file mode 100644 index 4ac0e4ccd65..00000000000 --- a/packages/rollup-plugin-import-css/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "rollup-plugin-import-css", - "version": "0.0.0", - "private": true, - "type": "module", - "exports": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - }, - "scripts": { - "build": "rollup -c", - "clean": "rimraf dist", - "type-check": "tsc --noEmit", - "watch": "rollup -c -w" - }, - "peerDependencies": { - "postcss": "^8.4.38", - "postcss-modules": "^6.0.0" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^29.0.0", - "@rollup/plugin-node-resolve": "^16.0.3", - "esbuild": "^0.25.0", - "postcss": "^8.4.38", - "postcss-modules": "^6.0.0", - "rimraf": "^5.0.7", - "rollup-plugin-esbuild": "^6.2.1", - "rollup-plugin-typescript2": "^0.36.0", - "typescript": "^5.9.2" - }, - "sideEffects": false -} diff --git a/packages/rollup-plugin-import-css/rollup.config.js b/packages/rollup-plugin-import-css/rollup.config.js deleted file mode 100644 index da639769421..00000000000 --- a/packages/rollup-plugin-import-css/rollup.config.js +++ /dev/null @@ -1,43 +0,0 @@ -import {nodeResolve} from '@rollup/plugin-node-resolve' -import commonjs from '@rollup/plugin-commonjs' -import typescript from 'rollup-plugin-typescript2' -import esbuild from 'rollup-plugin-esbuild' -import packageJson from './package.json' with {type: 'json'} - -const dependencyTypes = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] -const dependencies = new Set( - dependencyTypes.flatMap(type => { - if (packageJson[type]) { - return Object.keys(packageJson[type]) - } - return [] - }), -) -const external = Array.from(dependencies).map(name => { - return new RegExp(`^${name}(/.*)?`) -}) - -export default [ - { - input: ['./src/index.ts'], - external, - plugins: [ - nodeResolve({ - include: /node_modules/, - }), - commonjs({ - include: /node_modules/, - }), - typescript({ - tsconfig: 'tsconfig.build.json', - }), - esbuild(), - ], - output: { - dir: 'dist', - format: 'esm', - preserveModules: true, - preserveModulesRoot: 'src', - }, - }, -] diff --git a/packages/rollup-plugin-import-css/src/index.ts b/packages/rollup-plugin-import-css/src/index.ts deleted file mode 100644 index 8cf30240df7..00000000000 --- a/packages/rollup-plugin-import-css/src/index.ts +++ /dev/null @@ -1,142 +0,0 @@ -import type {Plugin} from 'rollup' -import fs from 'node:fs/promises' -import path from 'node:path' -import {createHash} from 'node:crypto' -import postcss from 'postcss' -import postcssModules from 'postcss-modules' - -interface ImportCSSOptions { - /** - * Provide the root directory for your package. This is used to calculate the - * relative path for generated CSS files - */ - modulesRoot: string - - /** - * Optionally provide an array of postcss plugins to use during CSS - * compilation. - */ - postcssPlugins?: Array - - /** - * Optionally provide options to pass forward to `postcss-modules` when - * compiling CSS - */ - postcssModulesOptions?: Parameters[0] -} - -export function importCSS(options: ImportCSSOptions): Plugin { - const {modulesRoot, postcssPlugins = [], postcssModulesOptions = {}} = options - const rootDirectory = path.isAbsolute(modulesRoot) ? modulesRoot : path.resolve(process.cwd(), modulesRoot) - - return { - name: 'import-css', - resolveId(source, importer) { - if (!importer) { - return - } - - const moduleInfo = this.getModuleInfo(importer) - if (moduleInfo?.meta['import-css']?.source === source) { - return { - id: source, - external: true, - moduleSideEffects: true, - } - } - - if (source.endsWith('.css')) { - const id = path.resolve(path.dirname(importer), source) - return path.format({ - dir: path.dirname(id), - base: `${path.basename(id)}.js`, - }) - } - }, - async load(id) { - if (id.endsWith('.css.js')) { - return '' - } - }, - async transform(_code, id) { - if (!id.endsWith('.css.js')) { - return - } - - const sourceId = path.join(path.dirname(id), path.basename(id, '.js')) - const code = await fs.readFile(sourceId, 'utf8') - const hash = getSourceHash(code) - const relativePath = path.relative(rootDirectory, sourceId) - const name = path.basename(relativePath, relativePath.endsWith('.module.css') ? '.module.css' : '.css') - const fileName = path.join( - path.dirname(relativePath), - path.format({ - name: `${name}-${hash}`, - ext: '.css', - }), - ) - - // When transforming CSS modules, we want to emit the generated CSS as an - // asset and include the generated file in our generated CSS Modules file - // which contains the classes. This makes sure that if the file containing - // the classes is used, then the associated styles for those classes is - // also included - - let cssModuleClasses: {[name: string]: string} | null = null - const result = await postcss([ - ...postcssPlugins, - postcssModules({ - ...postcssModulesOptions, - getJSON(filename, json) { - if (postcssModulesOptions.getJSON) { - postcssModulesOptions.getJSON(filename, json) - } - cssModuleClasses = json - }, - }), - ]).process(code, { - from: id, - to: fileName, - map: { - inline: false, - }, - }) - - this.emitFile({ - type: 'asset', - source: result.css, - fileName, - }) - this.emitFile({ - type: 'asset', - source: result.map.toString(), - fileName: `${fileName}.map`, - }) - - const moduleInfo = this.getModuleInfo(id) - const cssSource = `./${path.basename(fileName)}` - if (moduleInfo) { - moduleInfo.meta['import-css'] = { - source: cssSource, - } - } - - return { - code: ` - import '${cssSource}'; - ${ - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - cssModuleClasses !== null ? `export default ${JSON.stringify(cssModuleClasses)}` : '' - } - `, - moduleSideEffects: 'no-treeshake', - } - }, - } -} - -const DEFAULT_HASH_SIZE = 8 - -function getSourceHash(source: string) { - return createHash('sha256').update(source).digest('hex').slice(0, DEFAULT_HASH_SIZE) -} diff --git a/packages/rollup-plugin-import-css/tsconfig.build.json b/packages/rollup-plugin-import-css/tsconfig.build.json deleted file mode 100644 index 046051e1c66..00000000000 --- a/packages/rollup-plugin-import-css/tsconfig.build.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "emitDeclarationOnly": true, - "rootDir": "src" - }, - "exclude": [] -}