diff --git a/demo/vanilla/public/javascripts/canvas.js b/demo/vanilla/public/javascripts/canvas.js index 3e57008a80f..614195eaa9c 100644 --- a/demo/vanilla/public/javascripts/canvas.js +++ b/demo/vanilla/public/javascripts/canvas.js @@ -2,7 +2,7 @@ document.addEventListener("DOMContentLoaded", async () => { const end = performance.now() + 15 * 1000, colors = ["#bb0000", "#ffffff"], canvas = document.getElementById("canvas"), - fetti = async options => await confetti.create(canvas, options), + fetti = await confetti.create(canvas), fworks = async options => await fireworks.create(canvas, options), prtcls = async options => await particles.create(canvas, options), standard = async options => diff --git a/nx.json b/nx.json index 5ebe2df5b15..9ffa4f6bd6d 100644 --- a/nx.json +++ b/nx.json @@ -83,6 +83,7 @@ ], "production": [ "{projectRoot}/src/**/*", + "{projectRoot}/index.*", "{projectRoot}/package.json", "{projectRoot}/tsconfig*.json", "sharedGlobals" diff --git a/websites/confetti/src/main.js b/websites/confetti/src/main.js index 7bd7e5b6575..2c2e5b78da0 100644 --- a/websites/confetti/src/main.js +++ b/websites/confetti/src/main.js @@ -683,7 +683,7 @@ const modes = [ }, ], fn: function () { - var defaults = { + const defaults = { scalar: 2, spread: 270, particleCount: 25, @@ -738,11 +738,11 @@ const modes = [ (async () => { const canvas = document.getElementById('my-canvas'); - canvas.confetti = canvas.confetti || (await confetti.create(canvas, { resize: true })); + canvas.confetti = canvas.confetti || (await confetti.create(canvas, {})); canvas.confetti({ spread: 70, - origin: { y: 1.2 }, + origin: { y: 0.5 }, }); })(); }, @@ -805,10 +805,13 @@ function getCode(name) { return pretty(code); } -document.addEventListener('DOMContentLoaded', () => { +document.addEventListener('DOMContentLoaded', async () => { + await confetti.init(); + updateShareLinks(); updateShareOrder(); setupShareActions(); + window.addEventListener('resize', updateShareOrder); Array.from(document.querySelectorAll('.html-group')).forEach(function (group) { diff --git a/websites/website/.gitignore b/websites/website/.gitignore index 087e83120cc..6826793b830 100644 --- a/websites/website/.gitignore +++ b/websites/website/.gitignore @@ -21,6 +21,7 @@ mono_crash.* [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ +!docs/releases/ x64/ x86/ [Aa][Rr][Mm]/ diff --git a/websites/website/docs/public/tsParticles-64.png b/websites/website/docs/public/tsParticles-64.png new file mode 100644 index 00000000000..538ba26378b Binary files /dev/null and b/websites/website/docs/public/tsParticles-64.png differ diff --git a/websites/website/docs/releases/index.md b/websites/website/docs/releases/index.md new file mode 100644 index 00000000000..ae8044f3a20 --- /dev/null +++ b/websites/website/docs/releases/index.md @@ -0,0 +1,26 @@ +# Releases and Versioning + +This project now ships from a single repository: `tsparticles/tsparticles`. + + + +## Where release work happens + +- Monorepo root: +- Bundles: +- Engine: +- Wrappers: +- Presets: +- Palettes: + +## Version alignment rule + +- Keep all `@tsparticles/*` packages aligned to the same release line. +- Avoid mixing different beta lines or major versions in one app. + +## Practical release checklist + +1. Verify target package versions in workspace `package.json` files. +2. Build and test affected projects. +3. Validate docs links and playground behavior. +4. Publish from the monorepo release flow. diff --git a/websites/website/package.json b/websites/website/package.json index 19ea02245e8..fb145464ffb 100644 --- a/websites/website/package.json +++ b/websites/website/package.json @@ -254,7 +254,8 @@ "nx": { "targets": { "build": { - "outputs": ["{projectRoot}/docs/.vitepress/dist"] + "outputs": ["{projectRoot}/docs/.vitepress/dist"], + "inputs": ["production", "^production", "{projectRoot}/docs/**/*"] } } } diff --git a/websites/website/scripts/sync-public-assets.mjs b/websites/website/scripts/sync-public-assets.mjs index 7c917f0f2a6..6d780bb9ebb 100644 --- a/websites/website/scripts/sync-public-assets.mjs +++ b/websites/website/scripts/sync-public-assets.mjs @@ -7,6 +7,8 @@ const rootDir = resolve(__dirname, ".."); const docsPublicDir = resolve(rootDir, "docs", "public"); const rootCname = resolve(rootDir, "CNAME"); const docsCname = resolve(docsPublicDir, "CNAME"); +const iconName = resolve(rootDir, "tsParticles-64.png"); +const docsIconName = resolve(docsPublicDir, "tsParticles-64.png"); const assetsToSync = ["audio", "images", "videos"]; @@ -28,5 +30,8 @@ if (existsSync(rootCname)) { cpSync(rootCname, docsCname); } -console.log(`[assets] synced ${assetsToSync.join(", ")} to docs/public`); +if (existsSync(iconName)) { + cpSync(iconName, docsIconName); +} +console.log(`[assets] synced ${assetsToSync.join(", ")} to docs/public`); diff --git a/wrappers/angular-confetti/package.json b/wrappers/angular-confetti/package.json index dfe8416f023..046658e1d91 100644 --- a/wrappers/angular-confetti/package.json +++ b/wrappers/angular-confetti/package.json @@ -137,6 +137,13 @@ "prettier": "^3.8.3", "typescript": "~5.9.3" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/projects/**/src/**/*"] + } + } + }, "module": "dist/ng-confetti/fesm2015/ng-confetti.mjs", "es2020": "dist/ng-confetti/fesm2020/ng-confetti.mjs", "esm2020": "dist/ng-confetti/esm2020/ng-confetti.mjs", diff --git a/wrappers/angular-fireworks/package.json b/wrappers/angular-fireworks/package.json index 7167d9d11ae..4828752e90f 100644 --- a/wrappers/angular-fireworks/package.json +++ b/wrappers/angular-fireworks/package.json @@ -130,6 +130,13 @@ "prettier": "^3.8.3", "typescript": "~5.9.3" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/projects/**/src/**/*"] + } + } + }, "module": "dist/ng-fireworks/fesm2015/ng-fireworks.mjs", "es2020": "dist/ng-fireworks/fesm2020/ng-fireworks.mjs", "esm2020": "dist/ng-fireworks/esm2020/ng-fireworks.mjs", diff --git a/wrappers/angular/package.json b/wrappers/angular/package.json index 391206e2bce..1cc2a51230c 100644 --- a/wrappers/angular/package.json +++ b/wrappers/angular/package.json @@ -110,6 +110,13 @@ "prettier": "^3.8.3", "typescript": "~5.9.3" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/projects/**/src/**/*"] + } + } + }, "module": "dist/ng-particles/fesm2015/ng-particles.mjs", "es2020": "dist/ng-particles/fesm2020/ng-particles.mjs", "esm2020": "dist/ng-particles/esm2020/ng-particles.mjs", diff --git a/wrappers/astro/package.json b/wrappers/astro/package.json index 977786a18f2..00c02864f0d 100644 --- a/wrappers/astro/package.json +++ b/wrappers/astro/package.json @@ -118,6 +118,13 @@ "prettier-plugin-astro": "^0.14.1", "typescript": "^5.9.3" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/index.ts"] + } + } + }, "publishConfig": { "access": "public" } diff --git a/wrappers/ember/package.json b/wrappers/ember/package.json index 3314a24cbe6..f80671b3ce0 100644 --- a/wrappers/ember/package.json +++ b/wrappers/ember/package.json @@ -111,6 +111,13 @@ "ember": { "edition": "octane" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/addon/**/*", "{projectRoot}/app/**/*", "{projectRoot}/config/**/*", "{projectRoot}/index.js"] + } + } + }, "ember-addon": { "configPath": "tests/dummy/config" }, diff --git a/wrappers/nextjs/package.json b/wrappers/nextjs/package.json index d5748c72079..1cb5fce96fa 100644 --- a/wrappers/nextjs/package.json +++ b/wrappers/nextjs/package.json @@ -53,6 +53,13 @@ "vite": "^8.0.8", "vite-plugin-dts": "^4.5.4" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/lib/**/*"] + } + } + }, "publishConfig": { "access": "public" } diff --git a/wrappers/nuxt2/package.json b/wrappers/nuxt2/package.json index d159caada68..67da4ce2535 100644 --- a/wrappers/nuxt2/package.json +++ b/wrappers/nuxt2/package.json @@ -37,6 +37,13 @@ "globals": "^17.5.0", "typescript": "^6.0.2" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/lib/**/*"] + } + } + }, "publishConfig": { "access": "public" } diff --git a/wrappers/nuxt3/package.json b/wrappers/nuxt3/package.json index c6fcb565341..23cadeaa79c 100644 --- a/wrappers/nuxt3/package.json +++ b/wrappers/nuxt3/package.json @@ -44,6 +44,13 @@ "globals": "^17.5.0", "typescript": "^6.0.2" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/lib/**/*"] + } + } + }, "publishConfig": { "access": "public" } diff --git a/wrappers/nuxt4/package.json b/wrappers/nuxt4/package.json index 3548e52cc05..3e3deb5f6a2 100644 --- a/wrappers/nuxt4/package.json +++ b/wrappers/nuxt4/package.json @@ -45,6 +45,13 @@ "nuxt": "^4.4.2", "typescript": "^6.0.2" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/lib/**/*"] + } + } + }, "publishConfig": { "access": "public" } diff --git a/wrappers/preact/package.json b/wrappers/preact/package.json index d33fadeb085..5ee0e296ecf 100644 --- a/wrappers/preact/package.json +++ b/wrappers/preact/package.json @@ -83,6 +83,13 @@ "license": "MIT", "homepage": "https://particles.js.org", "prettier": "@tsparticles/prettier-config", + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/src/**/*", "{projectRoot}/index.*"] + } + } + }, "publishConfig": { "access": "public" }, diff --git a/wrappers/react/package.json b/wrappers/react/package.json index 882c083028a..b01f986c049 100644 --- a/wrappers/react/package.json +++ b/wrappers/react/package.json @@ -52,6 +52,13 @@ "vite-plugin-dts": "^4.5.4", "vite-plugin-lib-inject-css": "^2.2.2" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/lib/**/*"] + } + } + }, "publishConfig": { "access": "public" } diff --git a/wrappers/svelte/CHANGELOG.md b/wrappers/svelte/CHANGELOG.md index 29e161c2a85..eb0c627d8ba 100644 --- a/wrappers/svelte/CHANGELOG.md +++ b/wrappers/svelte/CHANGELOG.md @@ -7,10 +7,6 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline **Note:** Version bump only for package @tsparticles/svelte - - - - # [4.0.0-beta.15](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.14...v4.0.0-beta.15) (2026-05-09) **Note:** Version bump only for package @tsparticles/svelte diff --git a/wrappers/webcomponents/package.json b/wrappers/webcomponents/package.json index 59945e9439d..a5cdfa0b30e 100644 --- a/wrappers/webcomponents/package.json +++ b/wrappers/webcomponents/package.json @@ -94,6 +94,13 @@ "prepack": "pnpm run build" }, "prettier": "@tsparticles/prettier-config", + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/src/**/*", "{projectRoot}/build.ts"] + } + } + }, "dependencies": { "@tsparticles/engine": "workspace:^" }, diff --git a/wrappers/wordpress/package.json b/wrappers/wordpress/package.json index b44f440cb0b..76370b1ec48 100644 --- a/wrappers/wordpress/package.json +++ b/wrappers/wordpress/package.json @@ -32,6 +32,13 @@ "publishConfig": { "access": "public" }, + "nx": { + "targets": { + "build": { + "inputs": ["production", "^production", "{projectRoot}/src/**/*", "{projectRoot}/wordpress-particles.php", "{projectRoot}/readme.txt"] + } + } + }, "dependencies": { "@tsparticles/all": "workspace:^", "@tsparticles/basic": "workspace:^",